
# Задаем имя проекта, в результате получатся файлы .hex,.bin
TARGET = ATMega8_PWM_LCD_E
# Микроконтроллер (atmega8a)
MCU = atmega8a
# Частота, на которой будет работать контроллер
F_CPU = 16000000UL
START_ADDRESS = 0

# Задаем из каких файлов собирать проект, можно указать несколько файлов
# SRCS = main.c
SRCS = main.c \
	lcd_lib_uni1.c
	
#ASRCS = xitoa.S # assembler.S testa.s

#-------------------------------------------------------------------------------
# Building EEPROM hex
EEP_FILE = +
# Generate listing files
LSS_FILE = +
# Generate bin files
BIN_FILE = -
# Generate map files
MAP_FILE = +

#-------------------------------------------------------------------------------
# Имена объектных файлов
OBJS = $(SRCS:.c=.o)

#-------------------------------------------------------------------------------
# GNU Binutils
Path = 
#Path = C:/Program Files/Atmel/AVR Tools/avr8-gnu-toolchain-win32_x86/bin/
CC = "$(Path)avr-gcc"
OBJCOPY = "$(Path)avr-objcopy"
OBJDUMP = "$(Path)avr-objdump"
SIZE = "$(Path)avr-size"

#------------------------------------------------------------------------------- 
# Флаги компилятора avr-gcc

# Optimization level
OPT = s
  # 0, 1, 2, 3, s

# Стандарт языка C
STD = gnu99
  # c89   - "ANSI" C
  # gnu89 - c89 plus GCC extensions
  # c99   - ISO C99 standard (Поддерживает: __asm__)
  # gnu99 - c99 plus GCC extensions (Поддерживает: __asm__, asm)
  # c11

FLAGS_COMPILER = -mmcu=$(MCU) -O$(OPT) -std=$(STD) -DF_CPU=$(F_CPU)UL
FLAGS_COMPILER += -Wall
#FLAGS_COMPILER += -gstabs
FLAGS_COMPILER += -funsigned-char
FLAGS_COMPILER += -funsigned-bitfields
FLAGS_COMPILER += -fpack-struct
FLAGS_COMPILER += -fshort-enums
FLAGS_COMPILER += -ffunction-sections
FLAGS_COMPILER += -fdata-sections
FLAGS_COMPILER += -DNDEBUG
	

# Флаги линкера avr-ld
FLAGS_LINKER = -mmcu=$(MCU) -Wall -O$(OPT) $(MAP_LFLAG)
FLAGS_LINKER += -Wl,--start-group -Wl,-lm  -Wl,--end-group -Wl,--gc-sections
#FLAGS_LINKER += -Wl,--start-group -Wl,-lm  -Wl,--end-group -Wl,--gc-sections,--section-start=.text=$(strip $(START_ADDRESS))
#FLAGS_LINKER += -lm

# -lm - ссылка на libm.a (math.h)

#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
## Additionally
ifeq ($(strip $(BIN_FILE)), +)
define generate_bin
	$(OBJCOPY) -O binary -R .eeprom -R .nwram \
                                     $@.elf $@.bin
endef
endif

ifeq ($(strip $(LSS_FILE)), +)
LSS_AFLAG = -Wa,-adhlns=$(basename $<).lss,-gstabs,--listing-cont-lines=100
define generate_lss
	$(OBJDUMP) -h -S $@.elf > $@.lss
endef
endif

ifeq ($(strip $(EEP_FILE)), +)
define generate_eeprom
	$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma \
                                     .eeprom=0 --no-change-warnings -O ihex $@.elf $@.eep
endef
endif

#--cref
# Вывести таблицу перекрестных ссылок (cross reference table) в файл карты линковки map file
ifeq ($(strip $(MAP_FILE)), +)
MAP_LFLAG = -Wl,-Map=$@.map,--cref
#MAP_LFLAG = -Wl,-Map=$@.map
endif

#-------------------------------------------------------------------------------
PHONY := all
all: $(TARGET)

# Compiling
%.o: %.c
	$(CC) --version
	$(CC) $(FLAGS_COMPILER) -c $< -o $@

# Linking
$(TARGET): $(OBJS)
	$(CC) $(FLAGS_LINKER) -o $@.elf  $(OBJS)
# generate hex
	$(OBJCOPY) -O ihex -R .eeprom -R .nwram  $@.elf $@.hex
	$(generate_bin)
	$(generate_lss)
	$(generate_eeprom)
# Выводим размер hex:
	$(SIZE) --format=avr --mcu=$(MCU) $@.elf

#-------------------------------------------------------------------------------
CLEAN_LIST = *.hex  \
			 *.bin  \
			 *_eep.hex  \
			 *.eep  \
			 *.map  \
			 *.lss  \
			 *.o  \
			 *.a  \
			 *.srec  \
			 *.usersignatures  \
			 *.elf

PHONY += clean
clean:
	rm -f $(CLEAN_LIST)

#-------------------------------------------------------------------------------

PHONY += flash
flash:
	avrdude -patmega168 -cstk500 -PCOM9 -e -Uflash:w:$(TARGET).hex:i
