88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
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 = 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 = /usr/local/opt/llvm/bin/clang++
 | 
						|
HOSTLDFLAGS = -lgmock -lgtest -lgtest_main -L/usr/local/opt/llvm/lib -L/usr/local/lib
 | 
						|
HOSTCFLAGS = -std=c++20 -g\
 | 
						|
			 -I/usr/local/opt/llvm/include \
 | 
						|
			 -I/usr/local/include \
 | 
						|
			 -I/usr/local/include \
 | 
						|
			 -MP -MD
 | 
						|
 | 
						|
TSAN_CFLAGS = $(HOSTCFLAGS) -fsanitize=thread
 | 
						|
ASAN_CFLAGS = $(HOSTCFLAGS) -fsanitize=address -fsanitize=leak
 | 
						|
 | 
						|
tests = ring_buffer_test async_test_asan async_test_tsan
 | 
						|
 | 
						|
.PRECIOUS: $(tests)
 | 
						|
 | 
						|
test: $(tests)
 | 
						|
 | 
						|
ring_buffer_test: ring_buffer_test.cc
 | 
						|
	mkdir test
 | 
						|
	$(HOSTCXX) $(HOSTCFLAGS) -o test/$@ $< $(HOSTLDFLAGS)
 | 
						|
	./test/$@
 | 
						|
 | 
						|
%.host.o: %.cc
 | 
						|
	$(HOSTCXX) $(HOSTCFLAGS) -c -o $@ $<
 | 
						|
 | 
						|
async_test_tsan: async_test.cc async.host.o
 | 
						|
	mkdir -p test
 | 
						|
	$(HOSTCXX) $(TSAN_CFLAGS) -o test/$@ $^ $(HOSTLDFLAGS)
 | 
						|
	TSAN_OPTIONS='suppressions=tsan.suppressions' ./test/$@
 | 
						|
 | 
						|
async_test_asan: async_test.cc async.host.o
 | 
						|
	mkdir -p test
 | 
						|
	$(HOSTCXX) $(ASAN_CFLAGS) -o test/$@ $^ $(HOSTLDFLAGS)
 | 
						|
	ASAN_OPTIONS=detect_leaks=1 ./test/$@
 | 
						|
 | 
						|
test_deps = async.host.d
 | 
						|
 | 
						|
-include $(deps)
 | 
						|
-include $(test_deps)
 |