forked from KingQueenWong/esc
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathMakefile
60 lines (46 loc) · 2.16 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
GCC_DIR := /opt/gcc-arm-none-eabi-4_9-2015q3
LIBOPENCM3_DIR := submodules/libopencm3
LIBCANARD_DIR := submodules/libcanard
LDSCRIPT := stm32f3.ld
ARCH_FLAGS := -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16
LDFLAGS := --static -nostartfiles -L$(LIBOPENCM3_DIR)/lib -T$(LDSCRIPT) -Wl,--gc-sections --specs=rdimon.specs -u printf_float
LDLIBS := -lopencm3_stm32f3 -lm -Wl,--start-group -lc -lgcc -lrdimon -Wl,--end-group
CFLAGS += -std=gnu11 -O3 -ffast-math -g -Wdouble-promotion -Wextra -Wshadow -Wimplicit-function-declaration -Wredundant-decls -Wmissing-prototypes -Wstrict-prototypes -fsingle-precision-constant -fno-common -ffunction-sections -fdata-sections -MD -Wall -Wundef -Isrc -I$(LIBOPENCM3_DIR)/include -I$(LIBCANARD_DIR) -DSTM32F3 -D"CANARD_ASSERT(x)"="do {} while(0)" -DGIT_HASH=0x$(shell git rev-parse --short=8 HEAD)
COMMON_OBJS := $(addprefix build/,$(addsuffix .o,$(basename $(shell find src/esc -name "*.c"))))
PROGS := $(addprefix build/bin/,$(addsuffix .elf,$(notdir $(basename $(shell ls src/programs/*.c)))))
.PHONY: all
all: $(LIBOPENCM3_DIR) $(PROGS)
build/bin/%.elf: $(COMMON_OBJS) build/canard.o build/src/programs/%.o
@echo "### BUILDING $@"
@mkdir -p "$(dir $@)"
@arm-none-eabi-gcc $(LDFLAGS) $(ARCH_FLAGS) $^ $(LDLIBS) -o $@
@arm-none-eabi-size $@
build/bin/%.bin: build/bin/%.elf
@echo "### BUILDING $@"
@mkdir -p "$(dir $@)"
@arm-none-eabi-objcopy -O binary $< $@
.PRECIOUS: build/src/%.o
build/src/%.o: src/%.c $(LIBOPENCM3_DIR)
@echo "### BUILDING $@"
@mkdir -p "$(dir $@)"
@arm-none-eabi-gcc $(CFLAGS) $(ARCH_FLAGS) -S $< -o $(patsubst %.o,%.S,$@)
@arm-none-eabi-gcc $(CFLAGS) $(ARCH_FLAGS) -c $< -o $@
build/canard.o: $(LIBCANARD_DIR)/canard.c
@echo "### BUILDING $@"
@mkdir -p "$(dir $@)"
@arm-none-eabi-gcc $(CFLAGS) $(ARCH_FLAGS) -c $< -o $@
.PHONY: $(LIBOPENCM3_DIR)
$(LIBOPENCM3_DIR):
@echo "### BUILDING $@"
@$(MAKE) -C $(LIBOPENCM3_DIR)
.PHONY: %-upload
.PRECIOUS: build/bin/%.bin
%-upload: build/bin/%.elf build/bin/%.bin
@echo "### UPLOADING"
@openocd -f openocd.cfg -c "program $< verify reset exit"
.PHONY: %
%: build/bin/%.elf build/bin/%.bin ;
.PHONY: clean
clean:
@$(MAKE) -C $(LIBOPENCM3_DIR) clean
@rm -rf build