# 28.05.2015 05:22:15
# Файл сборки загрузчика microloader для платы stm32board
# Шаблон % - последовательность любых символов произвольной длины
# $@ - имя цели обрабатываемого правила
# $< - имя первой зависимости обрабатываемого правила
# $^ - список всех зависимостей обрабатываемого правила
# $(MAKE) - имя программы make с путем
# Опции gcc для линкера: -Wl,опции_с_тире
# Для gcc: -nostartfiles: не использовать стандартные стартовые файлы при линковке
#          -ffreestanding
# -fno-common: по умолчанию, если глобальная неинициализированная переменная
#              определена в нескольких файлах без extern, то компилятор
#              помещает ее в common block. Она становится общей для нескольких
#              файлов. С этой опцией при сборке возникнет ошибка.
NAME=microloader
CFLAGS = -Wall -Wno-main -Os -mcpu=cortex-m3 -mthumb -flto -fno-common\
-ffunction-sections -fdata-sections -nostartfiles -ffreestanding -I./mcu
#Флаги для окончательной сборки
LFLAGS = -Wl,--gc-sections,-Map=$(NAME).map --specs=nano.specs
CC := arm-none-eabi-gcc

all: $(NAME).bin $(NAME).srec

$(NAME).bin: $(NAME).elf
	arm-none-eabi-objcopy -Obinary -j.text $< $@

$(NAME).srec: $(NAME).elf
	arm-none-eabi-objcopy -Osrec -j.text $< $@

$(NAME).elf: startup.o $(NAME).o
	$(CC) $(CFLAGS) $(LFLAGS) -o $@ $^ -Tmicroloader.ld

$(NAME).o: $(NAME).c
	$(CC) $(CFLAGS) -c -o $@ $<
	
startup.o: startup.s
	$(CC) $(CFLAGS) -c -o $@ $<

clean:
	rm -f *.o *.elf *.bin *.srec $(NAME).map
