PREFIX ?= arm-none-eabi-
CC := $(PREFIX)gcc
OBJCOPY := $(PREFIX)objcopy
SIZE := $(PREFIX)size
CPU := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard
INC := -I. -I.. -Ivendor/HAL/Inc -Ivendor/CMSIS/Device -Ivendor/CMSIS/Core
CFLAGS := $(CPU) $(INC) -DSTM32G474xx -DUSE_HAL_DRIVER -std=c11 -Os -g3 -Wall -Wextra -Werror -ffunction-sections -fdata-sections
LDFLAGS := $(CPU) -TSTM32G474RE.ld -nostartfiles --specs=nano.specs --specs=nosys.specs -Wl,--gc-sections,-Map=build/TANK-CTRL-A02.map
SOURCES := main.c system_stm32g4xx.c ../control.c ../modbus.c ../settings.c ../service.c settings_flash.c $(wildcard vendor/HAL/Src/*.c)
OBJECTS := $(addprefix build/,$(notdir $(SOURCES:.c=.o))) build/startup_stm32g474xx.o
vpath %.c . .. vendor/HAL/Src
.PHONY: all clean
all: build/TANK-CTRL-A02.elf build/TANK-CTRL-A02.bin build/TANK-CTRL-A02.hex
	$(SIZE) build/TANK-CTRL-A02.elf
build/%.o: %.c
	@mkdir -p build
	$(CC) $(CFLAGS) -c $< -o $@
build/startup_stm32g474xx.o: startup_stm32g474xx.s
	@mkdir -p build
	$(CC) $(CPU) -x assembler-with-cpp -c $< -o $@
build/TANK-CTRL-A02.elf: $(OBJECTS) STM32G474RE.ld
	$(CC) $(LDFLAGS) $(OBJECTS) -lm -lc -lnosys -o $@
build/%.bin: build/%.elf
	$(OBJCOPY) -O binary $< $@
build/%.hex: build/%.elf
	$(OBJCOPY) -O ihex $< $@
clean:
	rm -rf build
