Commit | Line | Data |
---|---|---|
4d4f7684 | 1 | # Hey Emacs, this is a -*- makefile -*- |
2 | ############################################################################## | |
3 | # Architecture or project specific options | |
4 | # | |
5 | ||
6 | # Stack size to be allocated to the Cortex-M process stack. This stack is | |
7 | # the stack used by the main() thread. | |
8 | ifeq ($(USE_PROCESS_STACKSIZE),) | |
63c16f4b | 9 | USE_PROCESS_STACKSIZE = 0x800 |
4d4f7684 | 10 | endif |
11 | ||
12 | # Stack size to the allocated to the Cortex-M main/exceptions stack. This | |
13 | # stack is used for processing interrupts and exceptions. | |
14 | ifeq ($(USE_EXCEPTIONS_STACKSIZE),) | |
15 | USE_EXCEPTIONS_STACKSIZE = 0x400 | |
16 | endif | |
17 | ||
18 | # | |
19 | # Architecture or project specific options | |
20 | ############################################################################## | |
21 | ||
22 | ############################################################################## | |
23 | # Project, sources and paths | |
24 | # | |
25 | ||
26 | # Imported source files and paths | |
27 | CHIBIOS = $(TOP_DIR)/lib/chibios | |
28 | CHIBIOS_CONTRIB = $(TOP_DIR)/lib/chibios-contrib | |
510a8d33 | 29 | # Startup files. Try a few different locations, for compability with old versions and |
4d4f7684 | 30 | # for things hardware in the contrib repository |
31 | STARTUP_MK = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/startup_$(MCU_STARTUP).mk | |
32 | ifeq ("$(wildcard $(STARTUP_MK))","") | |
33 | STARTUP_MK = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_$(MCU_STARTUP).mk | |
34 | ifeq ("$(wildcard $(STARTUP_MK))","") | |
35 | STARTUP_MK = $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/mk/startup_$(MCU_STARTUP).mk | |
36 | endif | |
37 | endif | |
38 | include $(STARTUP_MK) | |
39 | # HAL-OSAL files (optional). | |
40 | include $(CHIBIOS)/os/hal/hal.mk | |
41 | ||
42 | PLATFORM_MK = $(CHIBIOS)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/platform.mk | |
43 | ifeq ("$(wildcard $(PLATFORM_MK))","") | |
44 | PLATFORM_MK = $(CHIBIOS_CONTRIB)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/platform.mk | |
45 | endif | |
46 | include $(PLATFORM_MK) | |
47 | ||
48 | ||
510a8d33 | 49 | BOARD_MK := |
800ec55d JH |
50 | |
51 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/boards/$(BOARD)/board.mk)","") | |
52 | BOARD_PATH = $(KEYBOARD_PATH_5) | |
53 | BOARD_MK += $(KEYBOARD_PATH_5)/boards/$(BOARD)/board.mk | |
54 | else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/boards/$(BOARD)/board.mk)","") | |
55 | BOARD_PATH = $(KEYBOARD_PATH_4) | |
56 | BOARD_MK += $(KEYBOARD_PATH_4)/boards/$(BOARD)/board.mk | |
57 | else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/boards/$(BOARD)/board.mk)","") | |
58 | BOARD_PATH = $(KEYBOARD_PATH_3) | |
59 | BOARD_MK += $(KEYBOARD_PATH_3)/boards/$(BOARD)/board.mk | |
60 | else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/boards/$(BOARD)/board.mk)","") | |
61 | BOARD_PATH = $(KEYBOARD_PATH_2) | |
62 | BOARD_MK += $(KEYBOARD_PATH_2)/boards/$(BOARD)/board.mk | |
63 | else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/boards/$(BOARD)/board.mk)","") | |
64 | BOARD_PATH = $(KEYBOARD_PATH_1) | |
65 | BOARD_MK += $(KEYBOARD_PATH_1)/boards/$(BOARD)/board.mk | |
f6b3c676 KE |
66 | else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/$(BOARD)/board.mk)","") |
67 | BOARD_PATH = $(TOP_DIR)/drivers | |
68 | BOARD_MK += $(TOP_DIR)/drivers/boards/$(BOARD)/board.mk | |
800ec55d JH |
69 | endif |
70 | ||
4d4f7684 | 71 | ifeq ("$(wildcard $(BOARD_MK))","") |
72 | BOARD_MK = $(CHIBIOS)/os/hal/boards/$(BOARD)/board.mk | |
73 | ifeq ("$(wildcard $(BOARD_MK))","") | |
74 | BOARD_MK = $(CHIBIOS_CONTRIB)/os/hal/boards/$(BOARD)/board.mk | |
75 | endif | |
76 | endif | |
800ec55d | 77 | |
4d4f7684 | 78 | include $(BOARD_MK) |
79 | include $(CHIBIOS)/os/hal/osal/rt/osal.mk | |
80 | # RTOS files (optional). | |
81 | include $(CHIBIOS)/os/rt/rt.mk | |
82 | # Compability with old version | |
83 | PORT_V = $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk | |
84 | ifeq ("$(wildcard $(PORT_V))","") | |
85 | PORT_V = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk | |
86 | endif | |
87 | include $(PORT_V) | |
88 | # Other files (optional). | |
89 | include $(CHIBIOS)/os/hal/lib/streams/streams.mk | |
90 | ||
91 | RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC | |
92 | ifeq ("$(wildcard $(RULESPATH)/rules.mk)","") | |
93 | RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC | |
94 | endif | |
95 | ||
96 | # Define linker script file here | |
800ec55d JH |
97 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld)","") |
98 | LDSCRIPT = $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld | |
99 | else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld)","") | |
100 | LDSCRIPT = $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld | |
101 | else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld)","") | |
102 | LDSCRIPT = $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld | |
103 | else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld)","") | |
104 | LDSCRIPT = $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld | |
105 | else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld)","") | |
106 | LDSCRIPT = $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld | |
4d4f7684 | 107 | else |
800ec55d | 108 | LDSCRIPT = $(STARTUPLD)/$(MCU_LDSCRIPT).ld |
4d4f7684 | 109 | endif |
110 | ||
111 | CHIBISRC = $(STARTUPSRC) \ | |
112 | $(KERNSRC) \ | |
113 | $(PORTSRC) \ | |
114 | $(OSALSRC) \ | |
115 | $(HALSRC) \ | |
116 | $(PLATFORMSRC) \ | |
117 | $(BOARDSRC) \ | |
118 | $(STREAMSSRC) \ | |
119 | $(STARTUPASM) \ | |
120 | $(PORTASM) \ | |
510a8d33 | 121 | $(OSALASM) |
4d4f7684 | 122 | |
3aac4e95 | 123 | CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC)) |
510a8d33 | 124 | |
4d4f7684 | 125 | EXTRAINCDIRS += $(CHIBIOS)/os/license \ |
126 | $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ | |
127 | $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \ | |
ade22f8e | 128 | $(STREAMSINC) $(CHIBIOS)/os/various $(COMMON_VPATH) |
4d4f7684 | 129 | |
130 | # | |
131 | # Project, sources and paths | |
132 | ############################################################################## | |
133 | ||
134 | ||
135 | ############################################################################## | |
136 | # Compiler settings | |
137 | # | |
138 | CC = arm-none-eabi-gcc | |
139 | OBJCOPY = arm-none-eabi-objcopy | |
140 | OBJDUMP = arm-none-eabi-objdump | |
141 | SIZE = arm-none-eabi-size | |
142 | AR = arm-none-eabi-ar | |
143 | NM = arm-none-eabi-nm | |
144 | HEX = $(OBJCOPY) -O $(FORMAT) | |
510a8d33 | 145 | EEP = |
f9a6e34c | 146 | BIN = $(OBJCOPY) -O binary |
4d4f7684 | 147 | |
ade22f8e JH |
148 | COMMON_VPATH += $(DRIVER_PATH)/arm |
149 | ||
510a8d33 | 150 | THUMBFLAGS = -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB |
4d4f7684 | 151 | |
510a8d33 | 152 | COMPILEFLAGS += -fomit-frame-pointer |
4d4f7684 | 153 | COMPILEFLAGS += -falign-functions=16 |
154 | COMPILEFLAGS += -ffunction-sections | |
155 | COMPILEFLAGS += -fdata-sections | |
156 | COMPILEFLAGS += -fno-common | |
53ff8a31 | 157 | COMPILEFLAGS += -fshort-wchar |
510a8d33 | 158 | COMPILEFLAGS += $(THUMBFLAGS) |
4d4f7684 | 159 | |
160 | CFLAGS += $(COMPILEFLAGS) | |
161 | ||
162 | ASFLAGS += $(THUMBFLAGS) | |
163 | ||
164 | CPPFLAGS += $(COMPILEFLAGS) | |
165 | CPPFLAGS += -fno-rtti | |
166 | ||
167 | LDFLAGS +=-Wl,--gc-sections | |
53ff8a31 | 168 | LDFLAGS +=-Wl,--no-wchar-size-warning |
4d4f7684 | 169 | LDFLAGS += -mno-thumb-interwork -mthumb |
170 | LDSYMBOLS =,--defsym=__process_stack_size__=$(USE_PROCESS_STACKSIZE) | |
171 | LDSYMBOLS :=$(LDSYMBOLS),--defsym=__main_stack_size__=$(USE_EXCEPTIONS_STACKSIZE) | |
172 | LDFLAGS += -Wl,--script=$(LDSCRIPT)$(LDSYMBOLS) | |
173 | ||
174 | OPT_DEFS += -DPROTOCOL_CHIBIOS | |
175 | ||
176 | MCUFLAGS = -mcpu=$(MCU) | |
177 | ||
510a8d33 FS |
178 | # FPU options default (Cortex-M4 and Cortex-M7 single precision). |
179 | ifeq ($(USE_FPU_OPT),) | |
180 | USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 -fsingle-precision-constant | |
181 | endif | |
182 | ||
183 | # FPU-related options | |
184 | ifeq ($(USE_FPU),) | |
185 | USE_FPU = no | |
186 | endif | |
187 | ifneq ($(USE_FPU),no) | |
188 | OPT += $(USE_FPU_OPT) | |
189 | OPT_DEFS += -DCORTEX_USE_FPU=TRUE | |
190 | else | |
191 | OPT_DEFS += -DCORTEX_USE_FPU=FALSE | |
192 | endif | |
193 | ||
4d4f7684 | 194 | DEBUG = gdb |
195 | ||
5fd68266 | 196 | DFU_ARGS ?= |
515b4dd1 TJ |
197 | ifneq ("$(SERIAL)","") |
198 | DFU_ARGS += -S $(SERIAL) | |
199 | endif | |
200 | ||
e2dee054 TU |
201 | ST_LINK_ARGS ?= |
202 | ||
4d4f7684 | 203 | # List any extra directories to look for libraries here. |
f9a6e34c FS |
204 | EXTRALIBDIRS = $(RULESPATH)/ld |
205 | ||
18b4d24c | 206 | DFU_UTIL ?= dfu-util |
e2dee054 | 207 | ST_LINK_CLI ?= st-link_cli |
18b4d24c | 208 | |
fe56fffe JH |
209 | # Generate a .qmk for the QMK-FF |
210 | qmk: $(BUILD_DIR)/$(TARGET).bin | |
211 | zip $(TARGET).qmk -FSrj $(KEYMAP_PATH)/* | |
212 | zip $(TARGET).qmk -u $< | |
213 | printf "@ $<\n@=firmware.bin\n" | zipnote -w $(TARGET).qmk | |
214 | printf "{\n \"generated\": \"%s\"\n}" "$$(date)" > $(BUILD_DIR)/$(TARGET).json | |
215 | if [ -f $(KEYBOARD_PATH_5)/info.json ]; then \ | |
216 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_5)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
217 | fi | |
218 | if [ -f $(KEYBOARD_PATH_4)/info.json ]; then \ | |
219 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_4)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
220 | fi | |
221 | if [ -f $(KEYBOARD_PATH_3)/info.json ]; then \ | |
222 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_3)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
223 | fi | |
224 | if [ -f $(KEYBOARD_PATH_2)/info.json ]; then \ | |
225 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_2)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
226 | fi | |
227 | if [ -f $(KEYBOARD_PATH_1)/info.json ]; then \ | |
228 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_1)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
229 | fi | |
230 | zip $(TARGET).qmk -urj $(BUILD_DIR)/$(TARGET).json | |
231 | printf "@ $(TARGET).json\n@=info.json\n" | zipnote -w $(TARGET).qmk | |
232 | ||
9bfaf667 | 233 | dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter |
18b4d24c | 234 | $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin |
677b8976 | 235 | |
f16b5cc9 DJ |
236 | |
237 | ifneq ($(strip $(TIME_DELAY)),) | |
238 | TIME_DELAY = $(strip $(TIME_DELAY)) | |
239 | else | |
240 | TIME_DELAY = 10 | |
241 | endif | |
242 | dfu-util-wait: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter | |
243 | echo "Preparing to flash firmware. Please enter bootloader now..." ;\ | |
244 | COUNTDOWN=$(TIME_DELAY) ;\ | |
245 | while [[ $$COUNTDOWN -ge 1 ]] ; do \ | |
246 | echo "Flashing in $$COUNTDOWN ..."; \ | |
247 | sleep 1 ;\ | |
248 | ((COUNTDOWN = COUNTDOWN - 1)) ; \ | |
249 | done; \ | |
250 | echo "Flashing $(TARGET).bin" ;\ | |
251 | sleep 1 ;\ | |
252 | $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin | |
253 | ||
e2dee054 TU |
254 | st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter |
255 | $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst | |
256 | ||
677b8976 | 257 | bin: $(BUILD_DIR)/$(TARGET).bin sizeafter |
5fd68266 | 258 | $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; |