1 | ########################################
|
2 | ## bare bones makefile for ARM Cortex ##
|
3 | ########################################
|
4 |
|
5 | NAME = testanwendung
|
6 |
|
7 | #MKDIR = mkdir -p
|
8 | MKDIR = c:/bin/mkdir.exe -p
|
9 |
|
10 | SRCS = $(wildcard src/*.c)
|
11 | SRCS += $(wildcard cmsis/MKL05Z4/*.c)
|
12 | SRCS += $(wildcard cmsis/MKL05Z4/*.s)
|
13 |
|
14 | INCDIRS = src/
|
15 | INCDIRS += cmsis/
|
16 | INCDIRS += cmsis/MKL05Z4/
|
17 |
|
18 | DEFINES =
|
19 |
|
20 | LSCRIPT = cmsis/MKL05Z4/MKL05Z4.ld
|
21 | #LSCRIPT = cmsis/MKL05Z4/MKL05Z4_offs4k.ld
|
22 |
|
23 | BUILDDIR = build/
|
24 |
|
25 | CFLAGS = -ffunction-sections
|
26 | CFLAGS += -mlittle-endian
|
27 | CFLAGS += -mthumb
|
28 | CFLAGS += -mcpu=cortex-m0plus
|
29 | CFLAGS += -std=gnu99
|
30 | CFLAGS += -ggdb
|
31 | #CFLAGS += -Os -flto
|
32 | CFLAGS += -Og
|
33 |
|
34 | LFLAGS = --specs=nano.specs
|
35 | LFLAGS += --specs=nosys.specs
|
36 | LFLAGS += -nostartfiles
|
37 | LFLAGS += -Wl,--gc-sections
|
38 | LFLAGS += -T$(LSCRIPT)
|
39 | LFLAGS += -lm
|
40 |
|
41 | WFLAGS = -Wall
|
42 | WFLAGS += -Wextra
|
43 | WFLAGS += -Werror -Wno-error=unused-function -Wno-error=unused-variable
|
44 | WFLAGS += -Wfatal-errors
|
45 | WFLAGS += -Warray-bounds
|
46 | WFLAGS += -Wno-unused-parameter
|
47 |
|
48 | GCCPREFIX = arm-none-eabi-
|
49 | CC = $(GCCPREFIX)gcc
|
50 | OBJCOPY = $(GCCPREFIX)objcopy
|
51 | OBJDUMP = $(GCCPREFIX)objdump
|
52 | SIZE = $(GCCPREFIX)size
|
53 |
|
54 | INCLUDE = $(addprefix -I,$(INCDIRS))
|
55 | OBJS = $(addprefix $(BUILDDIR),$(addsuffix .o,$(basename $(SRCS))))
|
56 |
|
57 |
|
58 | ###########
|
59 | ## rules ##
|
60 | ###########
|
61 |
|
62 | .PHONY: all
|
63 | all: $(OBJS)
|
64 | all: $(BUILDDIR)$(NAME).elf
|
65 | all: $(BUILDDIR)$(NAME).bin
|
66 | all: $(BUILDDIR)$(NAME).s19
|
67 | all: $(BUILDDIR)$(NAME).lst
|
68 | all: print_size
|
69 |
|
70 |
|
71 | .PHONY: clean
|
72 | clean:
|
73 | $(RM) -rf $(wildcard $(BUILDDIR)*)
|
74 |
|
75 | # compiler
|
76 | $(BUILDDIR)%.o: %.c
|
77 | $(MKDIR) $(dir $@)
|
78 | $(CC) -MMD -c -o $@ $(INCLUDE) $(DEFINES) $(CFLAGS) $(WFLAGS) $<
|
79 |
|
80 | # assembler
|
81 | $(BUILDDIR)%.o: %.s
|
82 | $(MKDIR) $(dir $@)
|
83 | $(CC) -c -x assembler-with-cpp -o $@ $(INCLUDE) $(DEFINES) $(CFLAGS) $(WFLAGS) $<
|
84 |
|
85 | # linker
|
86 | $(BUILDDIR)%.elf: $(OBJS)
|
87 | $(CC) -o $@ $^ $(CFLAGS) $(LFLAGS)
|
88 |
|
89 | %.bin: %.elf
|
90 | $(OBJCOPY) -O binary -S $< $@
|
91 |
|
92 | %.s19: %.elf
|
93 | $(OBJCOPY) -O srec -S $< $@
|
94 |
|
95 | %.lst: %.elf
|
96 | $(OBJDUMP) -D $< > $@
|
97 |
|
98 | .PHONY: print_size
|
99 | print_size: $(BUILDDIR)$(NAME).elf
|
100 | $(SIZE) $(BUILDDIR)$(NAME).elf
|
101 |
|
102 |
|
103 | #####################
|
104 | ## Advanced Voodoo ##
|
105 | #####################
|
106 |
|
107 | # try to include any compiler generated dependency makefile snippet *.d
|
108 | # that might exist in BUILDDIR (but don't complain if it doesn't yet).
|
109 | DEPS = $(addprefix $(BUILDDIR),$(patsubst %.c,%.d,$(filter %.c,$(SRCS))))
|
110 | -include $(DEPS)
|
111 |
|
112 | # make the object files also depend on the makefile itself
|
113 | $(OBJS): Makefile
|