Remove unnecessary import of rgblight.h in tmk_core/protocol/*/*.c (#8432)
[jackhill/qmk/firmware.git] / tmk_core / chibios.mk
CommitLineData
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.
8ifeq ($(USE_PROCESS_STACKSIZE),)
63c16f4b 9 USE_PROCESS_STACKSIZE = 0x800
4d4f7684 10endif
11
12# Stack size to the allocated to the Cortex-M main/exceptions stack. This
13# stack is used for processing interrupts and exceptions.
14ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
15 USE_EXCEPTIONS_STACKSIZE = 0x400
16endif
17
18#
19# Architecture or project specific options
20##############################################################################
21
22##############################################################################
23# Project, sources and paths
24#
25
26# Imported source files and paths
27CHIBIOS = $(TOP_DIR)/lib/chibios
28CHIBIOS_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
31STARTUP_MK = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/startup_$(MCU_STARTUP).mk
32ifeq ("$(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
37endif
38include $(STARTUP_MK)
39# HAL-OSAL files (optional).
40include $(CHIBIOS)/os/hal/hal.mk
41
68fad7b7
ST
42ifeq ("$(PLATFORM_NAME)","")
43 PLATFORM_NAME = platform
44endif
45
46PLATFORM_MK = $(CHIBIOS)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/$(PLATFORM_NAME).mk
4d4f7684 47ifeq ("$(wildcard $(PLATFORM_MK))","")
68fad7b7 48PLATFORM_MK = $(CHIBIOS_CONTRIB)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/$(PLATFORM_NAME).mk
4d4f7684 49endif
50include $(PLATFORM_MK)
51
52
510a8d33 53BOARD_MK :=
800ec55d
JH
54
55ifneq ("$(wildcard $(KEYBOARD_PATH_5)/boards/$(BOARD)/board.mk)","")
56 BOARD_PATH = $(KEYBOARD_PATH_5)
57 BOARD_MK += $(KEYBOARD_PATH_5)/boards/$(BOARD)/board.mk
58else 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
61else 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
64else 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
67else 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
70else 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
73endif
74
4d4f7684 75ifeq ("$(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
80endif
800ec55d 81
4d4f7684 82include $(BOARD_MK)
d0c3acbe
NB
83-include $(CHIBIOS)/os/hal/osal/rt/osal.mk # ChibiOS <= 19.x
84-include $(CHIBIOS)/os/hal/osal/rt-nil/osal.mk # ChibiOS >= 20.x
4d4f7684 85# RTOS files (optional).
86include $(CHIBIOS)/os/rt/rt.mk
87# Compability with old version
88PORT_V = $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk
89ifeq ("$(wildcard $(PORT_V))","")
90PORT_V = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk
91endif
92include $(PORT_V)
93# Other files (optional).
94include $(CHIBIOS)/os/hal/lib/streams/streams.mk
95
96RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
97ifeq ("$(wildcard $(RULESPATH)/rules.mk)","")
98RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC
99endif
100
101# Define linker script file here
800ec55d
JH
102ifneq ("$(wildcard $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld)","")
103 LDSCRIPT = $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld
104else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld)","")
105 LDSCRIPT = $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld
106else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld)","")
107 LDSCRIPT = $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld
108else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld)","")
109 LDSCRIPT = $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld
110else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld)","")
111 LDSCRIPT = $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld
50855593
JC
112else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld)","")
113 LDSCRIPT = $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld
26eef35f
JY
114else ifneq ("$(wildcard $(STARTUPLD_CONTRIB)/$(MCU_LDSCRIPT).ld)","")
115 LDSCRIPT = $(STARTUPLD_CONTRIB)/$(MCU_LDSCRIPT).ld
d0c3acbe 116 USE_CHIBIOS_CONTRIB = yes
4d4f7684 117else
800ec55d 118 LDSCRIPT = $(STARTUPLD)/$(MCU_LDSCRIPT).ld
4d4f7684 119endif
120
121CHIBISRC = $(STARTUPSRC) \
122 $(KERNSRC) \
123 $(PORTSRC) \
124 $(OSALSRC) \
125 $(HALSRC) \
126 $(PLATFORMSRC) \
127 $(BOARDSRC) \
8d9c800d
JC
128 $(STREAMSSRC) \
129 $(CHIBIOS)/os/various/syscalls.c
26eef35f
JY
130
131# Ensure the ASM files are not subjected to LTO -- it'll strip out interrupt handlers otherwise.
132QUANTUM_LIB_SRC += $(STARTUPASM) $(PORTASM) $(OSALASM)
4d4f7684 133
3aac4e95 134CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
510a8d33 135
26eef35f 136EXTRAINCDIRS += $(CHIBIOS)/os/license $(CHIBIOS)/os/oslib/include \
4d4f7684 137 $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
d0c3acbe 138 $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
ade22f8e 139 $(STREAMSINC) $(CHIBIOS)/os/various $(COMMON_VPATH)
4d4f7684 140
d0c3acbe
NB
141#
142# ChibiOS-Contrib
143##############################################################################
144
145# Work out if we're using ChibiOS-Contrib by checking if halconf_community.h exists
146ifneq ("$(wildcard $(KEYBOARD_PATH_5)/halconf_community.h)","")
147 USE_CHIBIOS_CONTRIB = yes
148else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/halconf_community.h)","")
149 USE_CHIBIOS_CONTRIB = yes
150else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/halconf_community.h)","")
151 USE_CHIBIOS_CONTRIB = yes
152else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/halconf_community.h)","")
153 USE_CHIBIOS_CONTRIB = yes
154else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/halconf_community.h)","")
155 USE_CHIBIOS_CONTRIB = yes
156endif
157
158ifeq ($(strip $(USE_CHIBIOS_CONTRIB)),yes)
159 include $(CHIBIOS_CONTRIB)/os/hal/hal.mk
160 CHIBISRC += $(PLATFORMSRC_CONTRIB) $(HALSRC_CONTRIB)
161 EXTRAINCDIRS += $(PLATFORMINC_CONTRIB) $(HALINC_CONTRIB) $(CHIBIOS_CONTRIB)/os/various
162endif
163
4d4f7684 164#
165# Project, sources and paths
166##############################################################################
167
168
169##############################################################################
170# Compiler settings
171#
172CC = arm-none-eabi-gcc
173OBJCOPY = arm-none-eabi-objcopy
174OBJDUMP = arm-none-eabi-objdump
175SIZE = arm-none-eabi-size
176AR = arm-none-eabi-ar
177NM = arm-none-eabi-nm
178HEX = $(OBJCOPY) -O $(FORMAT)
510a8d33 179EEP =
f9a6e34c 180BIN = $(OBJCOPY) -O binary
4d4f7684 181
ade22f8e
JH
182COMMON_VPATH += $(DRIVER_PATH)/arm
183
510a8d33 184THUMBFLAGS = -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB
4d4f7684 185
510a8d33 186COMPILEFLAGS += -fomit-frame-pointer
4d4f7684 187COMPILEFLAGS += -falign-functions=16
188COMPILEFLAGS += -ffunction-sections
189COMPILEFLAGS += -fdata-sections
190COMPILEFLAGS += -fno-common
53ff8a31 191COMPILEFLAGS += -fshort-wchar
510a8d33 192COMPILEFLAGS += $(THUMBFLAGS)
4d4f7684 193
194CFLAGS += $(COMPILEFLAGS)
195
196ASFLAGS += $(THUMBFLAGS)
197
b28ee6b0
NB
198CXXFLAGS += $(COMPILEFLAGS)
199CXXFLAGS += -fno-rtti
4d4f7684 200
201LDFLAGS +=-Wl,--gc-sections
53ff8a31 202LDFLAGS +=-Wl,--no-wchar-size-warning
4d4f7684 203LDFLAGS += -mno-thumb-interwork -mthumb
204LDSYMBOLS =,--defsym=__process_stack_size__=$(USE_PROCESS_STACKSIZE)
205LDSYMBOLS :=$(LDSYMBOLS),--defsym=__main_stack_size__=$(USE_EXCEPTIONS_STACKSIZE)
206LDFLAGS += -Wl,--script=$(LDSCRIPT)$(LDSYMBOLS)
c775104b 207LDFLAGS += --specs=nano.specs
4d4f7684 208
209OPT_DEFS += -DPROTOCOL_CHIBIOS
210
26eef35f
JY
211# Workaround to stop ChibiOS from complaining about new GCC -- it's been fixed for 7/8/9 already
212OPT_DEFS += -DPORT_IGNORE_GCC_VERSION_CHECK=1
213
4d4f7684 214MCUFLAGS = -mcpu=$(MCU)
215
510a8d33
FS
216# FPU options default (Cortex-M4 and Cortex-M7 single precision).
217ifeq ($(USE_FPU_OPT),)
218 USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 -fsingle-precision-constant
219endif
220
221# FPU-related options
222ifeq ($(USE_FPU),)
223 USE_FPU = no
224endif
225ifneq ($(USE_FPU),no)
226 OPT += $(USE_FPU_OPT)
227 OPT_DEFS += -DCORTEX_USE_FPU=TRUE
228else
229 OPT_DEFS += -DCORTEX_USE_FPU=FALSE
230endif
231
4d4f7684 232DEBUG = gdb
233
5fd68266 234DFU_ARGS ?=
515b4dd1
TJ
235ifneq ("$(SERIAL)","")
236 DFU_ARGS += -S $(SERIAL)
237endif
238
e2dee054
TU
239ST_LINK_ARGS ?=
240
4d4f7684 241# List any extra directories to look for libraries here.
f9a6e34c
FS
242EXTRALIBDIRS = $(RULESPATH)/ld
243
18b4d24c 244DFU_UTIL ?= dfu-util
e2dee054 245ST_LINK_CLI ?= st-link_cli
18b4d24c 246
fe56fffe
JH
247# Generate a .qmk for the QMK-FF
248qmk: $(BUILD_DIR)/$(TARGET).bin
249 zip $(TARGET).qmk -FSrj $(KEYMAP_PATH)/*
250 zip $(TARGET).qmk -u $<
251 printf "@ $<\n@=firmware.bin\n" | zipnote -w $(TARGET).qmk
252 printf "{\n \"generated\": \"%s\"\n}" "$$(date)" > $(BUILD_DIR)/$(TARGET).json
253 if [ -f $(KEYBOARD_PATH_5)/info.json ]; then \
254 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_5)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
255 fi
256 if [ -f $(KEYBOARD_PATH_4)/info.json ]; then \
257 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_4)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
258 fi
259 if [ -f $(KEYBOARD_PATH_3)/info.json ]; then \
260 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_3)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
261 fi
262 if [ -f $(KEYBOARD_PATH_2)/info.json ]; then \
263 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_2)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
264 fi
265 if [ -f $(KEYBOARD_PATH_1)/info.json ]; then \
266 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_1)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
267 fi
268 zip $(TARGET).qmk -urj $(BUILD_DIR)/$(TARGET).json
269 printf "@ $(TARGET).json\n@=info.json\n" | zipnote -w $(TARGET).qmk
270
4003d077 271define EXEC_DFU_UTIL
ae44ec98 272 until $(DFU_UTIL) -l | grep -q "Found DFU"; do\
02f77e72 273 printf "$(MSG_BOOTLOADER_NOT_FOUND)" ;\
ae44ec98
JC
274 sleep 5 ;\
275 done
18b4d24c 276 $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
4003d077 277endef
677b8976 278
4003d077
DJ
279dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
280 $(call EXEC_DFU_UTIL)
f16b5cc9 281
ae44ec98
JC
282# Legacy alias
283dfu-util-wait: dfu-util
f16b5cc9 284
17794e0b
JC
285# TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
286# within the emulated eeprom via dfu-util or another tool
287ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-left))
288 OPT_DEFS += -DINIT_EE_HANDS_LEFT
289endif
290
291ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-right))
292 OPT_DEFS += -DINIT_EE_HANDS_RIGHT
293endif
294
295dfu-util-split-left: dfu-util
296
297dfu-util-split-right: dfu-util
298
299
e2dee054
TU
300st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter
301 $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst
302
2f7a57a6 303
304# Autodetect teensy loader
305ifndef TEENSY_LOADER_CLI
306 ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
307 TEENSY_LOADER_CLI ?= teensy-loader-cli
308 else
309 TEENSY_LOADER_CLI ?= teensy_loader_cli
310 endif
311endif
312
4003d077 313define EXEC_TEENSY
2f7a57a6 314 $(TEENSY_LOADER_CLI) -mmcu=$(MCU_LDSCRIPT) -w -v $(BUILD_DIR)/$(TARGET).hex
4003d077
DJ
315endef
316
317teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
318 $(call EXEC_TEENSY)
2f7a57a6 319
677b8976 320bin: $(BUILD_DIR)/$(TARGET).bin sizeafter
4003d077
DJ
321 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
322
323
324flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
325ifeq ($(strip $(BOOTLOADER)),dfu)
326 $(call EXEC_DFU_UTIL)
327else ifeq ($(strip $(MCU_FAMILY)),KINETIS)
328 $(call EXEC_TEENSY)
329else ifeq ($(strip $(MCU_FAMILY)),STM32)
330 $(call EXEC_DFU_UTIL)
331else
332 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
333endif