[Keymap] Customized layouts for the Keebio/Quefrency65 (#7947)
[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)
83include $(CHIBIOS)/os/hal/osal/rt/osal.mk
84# RTOS files (optional).
85include $(CHIBIOS)/os/rt/rt.mk
86# Compability with old version
87PORT_V = $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk
88ifeq ("$(wildcard $(PORT_V))","")
89PORT_V = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC/mk/port_v$(ARMV)m.mk
90endif
91include $(PORT_V)
92# Other files (optional).
93include $(CHIBIOS)/os/hal/lib/streams/streams.mk
94
95RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
96ifeq ("$(wildcard $(RULESPATH)/rules.mk)","")
97RULESPATH = $(CHIBIOS)/os/common/startup/ARMCMx/compilers/GCC
98endif
99
100# Define linker script file here
800ec55d
JH
101ifneq ("$(wildcard $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld)","")
102 LDSCRIPT = $(KEYBOARD_PATH_5)/ld/$(MCU_LDSCRIPT).ld
103else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld)","")
104 LDSCRIPT = $(KEYBOARD_PATH_4)/ld/$(MCU_LDSCRIPT).ld
105else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld)","")
106 LDSCRIPT = $(KEYBOARD_PATH_3)/ld/$(MCU_LDSCRIPT).ld
107else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld)","")
108 LDSCRIPT = $(KEYBOARD_PATH_2)/ld/$(MCU_LDSCRIPT).ld
109else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld)","")
110 LDSCRIPT = $(KEYBOARD_PATH_1)/ld/$(MCU_LDSCRIPT).ld
50855593
JC
111else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld)","")
112 LDSCRIPT = $(TOP_DIR)/drivers/boards/ld/$(MCU_LDSCRIPT).ld
4d4f7684 113else
800ec55d 114 LDSCRIPT = $(STARTUPLD)/$(MCU_LDSCRIPT).ld
4d4f7684 115endif
116
117CHIBISRC = $(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 129CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
510a8d33 130
4d4f7684 131EXTRAINCDIRS += $(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#
144CC = arm-none-eabi-gcc
145OBJCOPY = arm-none-eabi-objcopy
146OBJDUMP = arm-none-eabi-objdump
147SIZE = arm-none-eabi-size
148AR = arm-none-eabi-ar
149NM = arm-none-eabi-nm
150HEX = $(OBJCOPY) -O $(FORMAT)
510a8d33 151EEP =
f9a6e34c 152BIN = $(OBJCOPY) -O binary
4d4f7684 153
ade22f8e
JH
154COMMON_VPATH += $(DRIVER_PATH)/arm
155
510a8d33 156THUMBFLAGS = -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB
4d4f7684 157
510a8d33 158COMPILEFLAGS += -fomit-frame-pointer
4d4f7684 159COMPILEFLAGS += -falign-functions=16
160COMPILEFLAGS += -ffunction-sections
161COMPILEFLAGS += -fdata-sections
162COMPILEFLAGS += -fno-common
53ff8a31 163COMPILEFLAGS += -fshort-wchar
510a8d33 164COMPILEFLAGS += $(THUMBFLAGS)
4d4f7684 165
166CFLAGS += $(COMPILEFLAGS)
167
168ASFLAGS += $(THUMBFLAGS)
169
170CPPFLAGS += $(COMPILEFLAGS)
171CPPFLAGS += -fno-rtti
172
173LDFLAGS +=-Wl,--gc-sections
53ff8a31 174LDFLAGS +=-Wl,--no-wchar-size-warning
4d4f7684 175LDFLAGS += -mno-thumb-interwork -mthumb
176LDSYMBOLS =,--defsym=__process_stack_size__=$(USE_PROCESS_STACKSIZE)
177LDSYMBOLS :=$(LDSYMBOLS),--defsym=__main_stack_size__=$(USE_EXCEPTIONS_STACKSIZE)
178LDFLAGS += -Wl,--script=$(LDSCRIPT)$(LDSYMBOLS)
179
180OPT_DEFS += -DPROTOCOL_CHIBIOS
181
182MCUFLAGS = -mcpu=$(MCU)
183
510a8d33
FS
184# FPU options default (Cortex-M4 and Cortex-M7 single precision).
185ifeq ($(USE_FPU_OPT),)
186 USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 -fsingle-precision-constant
187endif
188
189# FPU-related options
190ifeq ($(USE_FPU),)
191 USE_FPU = no
192endif
193ifneq ($(USE_FPU),no)
194 OPT += $(USE_FPU_OPT)
195 OPT_DEFS += -DCORTEX_USE_FPU=TRUE
196else
197 OPT_DEFS += -DCORTEX_USE_FPU=FALSE
198endif
199
4d4f7684 200DEBUG = gdb
201
5fd68266 202DFU_ARGS ?=
515b4dd1
TJ
203ifneq ("$(SERIAL)","")
204 DFU_ARGS += -S $(SERIAL)
205endif
206
e2dee054
TU
207ST_LINK_ARGS ?=
208
4d4f7684 209# List any extra directories to look for libraries here.
f9a6e34c
FS
210EXTRALIBDIRS = $(RULESPATH)/ld
211
18b4d24c 212DFU_UTIL ?= dfu-util
e2dee054 213ST_LINK_CLI ?= st-link_cli
18b4d24c 214
fe56fffe
JH
215# Generate a .qmk for the QMK-FF
216qmk: $(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 239define 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 245endef
677b8976 246
4003d077
DJ
247dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
248 $(call EXEC_DFU_UTIL)
f16b5cc9 249
ae44ec98
JC
250# Legacy alias
251dfu-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
255ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-left))
256 OPT_DEFS += -DINIT_EE_HANDS_LEFT
257endif
258
259ifneq (,$(filter $(MAKECMDGOALS),dfu-util-split-right))
260 OPT_DEFS += -DINIT_EE_HANDS_RIGHT
261endif
262
263dfu-util-split-left: dfu-util
264
265dfu-util-split-right: dfu-util
266
267
e2dee054
TU
268st-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
273ifndef 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
279endif
280
4003d077 281define EXEC_TEENSY
2f7a57a6 282 $(TEENSY_LOADER_CLI) -mmcu=$(MCU_LDSCRIPT) -w -v $(BUILD_DIR)/$(TARGET).hex
4003d077
DJ
283endef
284
285teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
286 $(call EXEC_TEENSY)
2f7a57a6 287
677b8976 288bin: $(BUILD_DIR)/$(TARGET).bin sizeafter
4003d077
DJ
289 $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
290
291
292flash: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
293ifeq ($(strip $(BOOTLOADER)),dfu)
294 $(call EXEC_DFU_UTIL)
295else ifeq ($(strip $(MCU_FAMILY)),KINETIS)
296 $(call EXEC_TEENSY)
297else ifeq ($(strip $(MCU_FAMILY)),STM32)
298 $(call EXEC_DFU_UTIL)
299else
300 $(PRINT_OK); $(SILENT) || printf "$(MSG_FLASH_BOOTLOADER)"
301endif