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 | ||
68fad7b7 ST |
42 | ifeq ("$(PLATFORM_NAME)","") |
43 | PLATFORM_NAME = platform | |
44 | endif | |
45 | ||
46 | PLATFORM_MK = $(CHIBIOS)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/$(PLATFORM_NAME).mk | |
4d4f7684 | 47 | ifeq ("$(wildcard $(PLATFORM_MK))","") |
68fad7b7 | 48 | PLATFORM_MK = $(CHIBIOS_CONTRIB)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/$(PLATFORM_NAME).mk |
4d4f7684 | 49 | endif |
50 | include $(PLATFORM_MK) | |
51 | ||
52 | ||
510a8d33 | 53 | BOARD_MK := |
800ec55d JH |
54 | |
55 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/boards/$(BOARD)/board.mk)","") | |
56 | BOARD_PATH = $(KEYBOARD_PATH_5) | |
57 | BOARD_MK += $(KEYBOARD_PATH_5)/boards/$(BOARD)/board.mk | |
58 | else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/boards/$(BOARD)/board.mk)","") | |
59 | BOARD_PATH = $(KEYBOARD_PATH_4) | |
60 | BOARD_MK += $(KEYBOARD_PATH_4)/boards/$(BOARD)/board.mk | |
61 | else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/boards/$(BOARD)/board.mk)","") | |
62 | BOARD_PATH = $(KEYBOARD_PATH_3) | |
63 | BOARD_MK += $(KEYBOARD_PATH_3)/boards/$(BOARD)/board.mk | |
64 | else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/boards/$(BOARD)/board.mk)","") | |
65 | BOARD_PATH = $(KEYBOARD_PATH_2) | |
66 | BOARD_MK += $(KEYBOARD_PATH_2)/boards/$(BOARD)/board.mk | |
67 | else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/boards/$(BOARD)/board.mk)","") | |
68 | BOARD_PATH = $(KEYBOARD_PATH_1) | |
69 | BOARD_MK += $(KEYBOARD_PATH_1)/boards/$(BOARD)/board.mk | |
f6b3c676 KE |
70 | else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/$(BOARD)/board.mk)","") |
71 | BOARD_PATH = $(TOP_DIR)/drivers | |
72 | BOARD_MK += $(TOP_DIR)/drivers/boards/$(BOARD)/board.mk | |
800ec55d JH |
73 | endif |
74 | ||
4d4f7684 | 75 | ifeq ("$(wildcard $(BOARD_MK))","") |
76 | BOARD_MK = $(CHIBIOS)/os/hal/boards/$(BOARD)/board.mk | |
77 | ifeq ("$(wildcard $(BOARD_MK))","") | |
78 | BOARD_MK = $(CHIBIOS_CONTRIB)/os/hal/boards/$(BOARD)/board.mk | |
79 | endif | |
80 | endif | |
800ec55d | 81 | |
4d4f7684 | 82 | include $(BOARD_MK) |
83 | include $(CHIBIOS)/os/hal/osal/rt/osal.mk | |
84 | # RTOS files (optional). | |
85 | include $(CHIBIOS)/os/rt/rt.mk | |
86 | # Compability with old version | |
87 | PORT_V = $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk | |
88 | ifeq ("$(wildcard $(PORT_V))","") | |
89 | PORT_V = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk | |
90 | endif | |
91 | include $(PORT_V) | |
92 | # Other files (optional). | |
93 | include $(CHIBIOS)/os/hal/lib/streams/streams.mk | |
94 | ||
95 | RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC | |
96 | ifeq ("$(wildcard $(RULESPATH)/rules.mk)","") | |
97 | RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC | |
98 | endif | |
99 | ||
100 | # Define linker script file here | |
800ec55d JH |
101 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld)","") |
102 | LDSCRIPT = $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld | |
103 | else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld)","") | |
104 | LDSCRIPT = $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld | |
105 | else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld)","") | |
106 | LDSCRIPT = $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld | |
107 | else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld)","") | |
108 | LDSCRIPT = $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld | |
109 | else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld)","") | |
110 | LDSCRIPT = $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld | |
50855593 JC |
111 | else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld)","") |
112 | LDSCRIPT = $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld | |
4d4f7684 | 113 | else |
800ec55d | 114 | LDSCRIPT = $(STARTUPLD)/$(MCU_LDSCRIPT).ld |
4d4f7684 | 115 | endif |
116 | ||
117 | CHIBISRC = $(STARTUPSRC) \ | |
118 | $(KERNSRC) \ | |
119 | $(PORTSRC) \ | |
120 | $(OSALSRC) \ | |
121 | $(HALSRC) \ | |
122 | $(PLATFORMSRC) \ | |
123 | $(BOARDSRC) \ | |
124 | $(STREAMSSRC) \ | |
125 | $(STARTUPASM) \ | |
126 | $(PORTASM) \ | |
510a8d33 | 127 | $(OSALASM) |
4d4f7684 | 128 | |
3aac4e95 | 129 | CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC)) |
510a8d33 | 130 | |
4d4f7684 | 131 | EXTRAINCDIRS += $(CHIBIOS)/os/license \ |
132 | $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \ | |
133 | $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \ | |
ade22f8e | 134 | $(STREAMSINC) $(CHIBIOS)/os/various $(COMMON_VPATH) |
4d4f7684 | 135 | |
136 | # | |
137 | # Project, sources and paths | |
138 | ############################################################################## | |
139 | ||
140 | ||
141 | ############################################################################## | |
142 | # Compiler settings | |
143 | # | |
144 | CC = arm-none-eabi-gcc | |
145 | OBJCOPY = arm-none-eabi-objcopy | |
146 | OBJDUMP = arm-none-eabi-objdump | |
147 | SIZE = arm-none-eabi-size | |
148 | AR = arm-none-eabi-ar | |
149 | NM = arm-none-eabi-nm | |
150 | HEX = $(OBJCOPY) -O $(FORMAT) | |
510a8d33 | 151 | EEP = |
f9a6e34c | 152 | BIN = $(OBJCOPY) -O binary |
4d4f7684 | 153 | |
ade22f8e JH |
154 | COMMON_VPATH += $(DRIVER_PATH)/arm |
155 | ||
510a8d33 | 156 | THUMBFLAGS = -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB |
4d4f7684 | 157 | |
510a8d33 | 158 | COMPILEFLAGS += -fomit-frame-pointer |
4d4f7684 | 159 | COMPILEFLAGS += -falign-functions=16 |
160 | COMPILEFLAGS += -ffunction-sections | |
161 | COMPILEFLAGS += -fdata-sections | |
162 | COMPILEFLAGS += -fno-common | |
53ff8a31 | 163 | COMPILEFLAGS += -fshort-wchar |
510a8d33 | 164 | COMPILEFLAGS += $(THUMBFLAGS) |
4d4f7684 | 165 | |
166 | CFLAGS += $(COMPILEFLAGS) | |
167 | ||
168 | ASFLAGS += $(THUMBFLAGS) | |
169 | ||
170 | CPPFLAGS += $(COMPILEFLAGS) | |
171 | CPPFLAGS += -fno-rtti | |
172 | ||
173 | LDFLAGS +=-Wl,--gc-sections | |
53ff8a31 | 174 | LDFLAGS +=-Wl,--no-wchar-size-warning |
4d4f7684 | 175 | LDFLAGS += -mno-thumb-interwork -mthumb |
176 | LDSYMBOLS =,--defsym=__process_stack_size__=$(USE_PROCESS_STACKSIZE) | |
177 | LDSYMBOLS :=$(LDSYMBOLS),--defsym=__main_stack_size__=$(USE_EXCEPTIONS_STACKSIZE) | |
178 | LDFLAGS += -Wl,--script=$(LDSCRIPT)$(LDSYMBOLS) | |
179 | ||
180 | OPT_DEFS += -DPROTOCOL_CHIBIOS | |
181 | ||
182 | MCUFLAGS = -mcpu=$(MCU) | |
183 | ||
510a8d33 FS |
184 | # FPU options default (Cortex-M4 and Cortex-M7 single precision). |
185 | ifeq ($(USE_FPU_OPT),) | |
186 | USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 -fsingle-precision-constant | |
187 | endif | |
188 | ||
189 | # FPU-related options | |
190 | ifeq ($(USE_FPU),) | |
191 | USE_FPU = no | |
192 | endif | |
193 | ifneq ($(USE_FPU),no) | |
194 | OPT += $(USE_FPU_OPT) | |
195 | OPT_DEFS += -DCORTEX_USE_FPU=TRUE | |
196 | else | |
197 | OPT_DEFS += -DCORTEX_USE_FPU=FALSE | |
198 | endif | |
199 | ||
4d4f7684 | 200 | DEBUG = gdb |
201 | ||
5fd68266 | 202 | DFU_ARGS ?= |
515b4dd1 TJ |
203 | ifneq ("$(SERIAL)","") |
204 | DFU_ARGS += -S $(SERIAL) | |
205 | endif | |
206 | ||
e2dee054 TU |
207 | ST_LINK_ARGS ?= |
208 | ||
4d4f7684 | 209 | # List any extra directories to look for libraries here. |
f9a6e34c FS |
210 | EXTRALIBDIRS = $(RULESPATH)/ld |
211 | ||
18b4d24c | 212 | DFU_UTIL ?= dfu-util |
e2dee054 | 213 | ST_LINK_CLI ?= st-link_cli |
18b4d24c | 214 | |
fe56fffe JH |
215 | # Generate a .qmk for the QMK-FF |
216 | qmk: $(BUILD_DIR)/$(TARGET).bin | |
217 | zip $(TARGET).qmk -FSrj $(KEYMAP_PATH)/* | |
218 | zip $(TARGET).qmk -u $< | |
219 | printf "@ $<\n@=firmware.bin\n" | zipnote -w $(TARGET).qmk | |
220 | printf "{\n \"generated\": \"%s\"\n}" "$$(date)" > $(BUILD_DIR)/$(TARGET).json | |
221 | if [ -f $(KEYBOARD_PATH_5)/info.json ]; then \ | |
222 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_5)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
223 | fi | |
224 | if [ -f $(KEYBOARD_PATH_4)/info.json ]; then \ | |
225 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_4)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
226 | fi | |
227 | if [ -f $(KEYBOARD_PATH_3)/info.json ]; then \ | |
228 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_3)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
229 | fi | |
230 | if [ -f $(KEYBOARD_PATH_2)/info.json ]; then \ | |
231 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_2)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
232 | fi | |
233 | if [ -f $(KEYBOARD_PATH_1)/info.json ]; then \ | |
234 | jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_1)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \ | |
235 | fi | |
236 | zip $(TARGET).qmk -urj $(BUILD_DIR)/$(TARGET).json | |
237 | printf "@ $(TARGET).json\n@=info.json\n" | zipnote -w $(TARGET).qmk | |
238 | ||
4003d077 | 239 | define EXEC_DFU_UTIL |
ae44ec98 | 240 | until $(DFU_UTIL) -l | grep -q "Found DFU"; do\ |
02f77e72 | 241 | printf "$(MSG_BOOTLOADER_NOT_FOUND)" ;\ |
ae44ec98 JC |
242 | sleep 5 ;\ |
243 | done | |
18b4d24c | 244 | $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin |
4003d077 | 245 | endef |
677b8976 | 246 | |
4003d077 DJ |
247 | dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter |
248 | $(call EXEC_DFU_UTIL) | |
f16b5cc9 | 249 | |
ae44ec98 JC |
250 | # Legacy alias |
251 | dfu-util-wait: dfu-util | |
f16b5cc9 | 252 | |
17794e0b JC |
253 | # TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS |
254 | # within the emulated eeprom via dfu-util or another tool | |
255 | ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-left)) | |
256 | OPT_DEFS += -DINIT_EE_HANDS_LEFT | |
257 | endif | |
258 | ||
259 | ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-right)) | |
260 | OPT_DEFS += -DINIT_EE_HANDS_RIGHT | |
261 | endif | |
262 | ||
263 | dfu-util-split-left: dfu-util | |
264 | ||
265 | dfu-util-split-right: dfu-util | |
266 | ||
267 | ||
e2dee054 TU |
268 | st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter |
269 | $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst | |
270 | ||
2f7a57a6 | 271 | |
272 | # Autodetect teensy loader | |
273 | ifndef TEENSY_LOADER_CLI | |
274 | ifneq (, $(shell which teensy-loader-cli 2>/dev/null)) | |
275 | TEENSY_LOADER_CLI ?= teensy-loader-cli | |
276 | else | |
277 | TEENSY_LOADER_CLI ?= teensy_loader_cli | |
278 | endif | |
279 | endif | |
280 | ||
4003d077 | 281 | define EXEC_TEENSY |
2f7a57a6 | 282 | $(TEENSY_LOADER_CLI) -mmcu=$(MCU_LDSCRIPT) -w -v $(BUILD_DIR)/$(TARGET).hex |
4003d077 DJ |
283 | endef |
284 | ||
285 | teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter | |
286 | $(call EXEC_TEENSY) | |
2f7a57a6 | 287 | |
677b8976 | 288 | bin: $(BUILD_DIR)/$(TARGET).bin sizeafter |
4003d077 DJ |
289 | $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin; |
290 | ||
291 | ||
292 | flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter | |
293 | ifeq ($(strip $(BOOTLOADER)),dfu) | |
294 | $(call EXEC_DFU_UTIL) | |
295 | else ifeq ($(strip $(MCU_FAMILY)),KINETIS) | |
296 | $(call EXEC_TEENSY) | |
297 | else ifeq ($(strip $(MCU_FAMILY)),STM32) | |
298 | $(call EXEC_DFU_UTIL) | |
299 | else | |
300 | $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)" | |
301 | endif |