CC = arm-none-eabi-gcc LD = arm-none-eabi-g++ CXX = arm-none-eabi-g++ OBJCOPY = arm-none-eabi-objcopy linker_script = bootloader.ld includes = sources = CFLAGS = -march=armv6-m -g -ffunction-sections -fdata-sections -Os -Werror -Wall -flto CXXFLAGS = $(CFLAGS) -std=c++20 -fno-exceptions -fcoroutines CPPFLAGS = -MD -MP LDFLAGS = -march=armv6-m \ -g --specs=nano.specs --specs=nosys.specs \ -Wl,--gc-sections -Os \ -Wl,--print-memory-usage -flto includes += -Ihal/cmsis sources += hal/lib/common/xil_assert.c includes += -Ihal/lib/common sources += hal/uart/xuartlite.c hal/uart/xuartlite_stats.c hal/uart/xuartlite_intr.c includes += -Ihal/uart bootloader_objects = uart.o bootloader.o vector_table.o $(sources:.c=.o) app_objects = app_init.o crash.o main.o uart.o stdlib.o async.o trace.o $(sources:.c=.o) CPPFLAGS += $(includes) all: bootloader.elf app.bin %.bin: %.elf $(OBJCOPY) -O binary $< $@ bootloader.elf: $(bootloader_objects) bootloader.ld $(LD) -Wl,-Tbootloader.ld $(LDFLAGS) -o $@ $(bootloader_objects) app.elf: $(app_objects) app.ld $(LD) -Wl,-Tapp.ld $(LDFLAGS) -o $@ $(app_objects) .PHONY: clean test deps = $(app_objects:.o=.d) $(bootloader_objects:.o=.d) clean: rm -rf *.elf *.bin $(tests) $(app_objects) $(bootloader_objects) $(deps) HOSTCXX = clang++ tests = ring_buffer_test test: $(tests) ring_buffer_test: ring_buffer_test.cc $(HOSTCXX) -std=c++2a -o $@ $< -lgmock -lgtest -lgtest_main ./$@ -include $(deps)