]> git.donarmstrong.com Git - qmk_firmware.git/blob - tmk_core/chibios.mk
[Keyboard] leds in default keymap (#6357)
[qmk_firmware.git] / tmk_core / chibios.mk
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),)
9   USE_PROCESS_STACKSIZE = 0x800
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
29 # Startup files. Try a few different locations, for compability with old versions and
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 ifeq ("$(PLATFORM_NAME)","")
43         PLATFORM_NAME = platform
44 endif
45
46 PLATFORM_MK = $(CHIBIOS)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/$(PLATFORM_NAME).mk
47 ifeq ("$(wildcard $(PLATFORM_MK))","")
48 PLATFORM_MK = $(CHIBIOS_CONTRIB)/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)/$(PLATFORM_NAME).mk
49 endif
50 include $(PLATFORM_MK)
51
52
53 BOARD_MK :=
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
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
73 endif
74
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
81
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
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
111 else
112     LDSCRIPT = $(STARTUPLD)/$(MCU_LDSCRIPT).ld
113 endif
114
115 CHIBISRC = $(STARTUPSRC) \
116        $(KERNSRC) \
117        $(PORTSRC) \
118        $(OSALSRC) \
119        $(HALSRC) \
120        $(PLATFORMSRC) \
121        $(BOARDSRC) \
122        $(STREAMSSRC) \
123            $(STARTUPASM) \
124            $(PORTASM) \
125            $(OSALASM)
126
127 CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
128
129 EXTRAINCDIRS += $(CHIBIOS)/os/license \
130          $(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
131          $(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
132          $(STREAMSINC) $(CHIBIOS)/os/various $(COMMON_VPATH)
133
134 #
135 # Project, sources and paths
136 ##############################################################################
137
138
139 ##############################################################################
140 # Compiler settings
141 #
142 CC = arm-none-eabi-gcc
143 OBJCOPY = arm-none-eabi-objcopy
144 OBJDUMP = arm-none-eabi-objdump
145 SIZE = arm-none-eabi-size
146 AR = arm-none-eabi-ar
147 NM = arm-none-eabi-nm
148 HEX = $(OBJCOPY) -O $(FORMAT)
149 EEP =
150 BIN = $(OBJCOPY) -O binary
151
152 COMMON_VPATH += $(DRIVER_PATH)/arm
153
154 THUMBFLAGS = -DTHUMB_PRESENT -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb -DTHUMB
155
156 COMPILEFLAGS += -fomit-frame-pointer
157 COMPILEFLAGS += -falign-functions=16
158 COMPILEFLAGS += -ffunction-sections
159 COMPILEFLAGS += -fdata-sections
160 COMPILEFLAGS += -fno-common
161 COMPILEFLAGS += -fshort-wchar
162 COMPILEFLAGS += $(THUMBFLAGS)
163
164 CFLAGS += $(COMPILEFLAGS)
165
166 ASFLAGS += $(THUMBFLAGS)
167
168 CPPFLAGS += $(COMPILEFLAGS)
169 CPPFLAGS += -fno-rtti
170
171 LDFLAGS +=-Wl,--gc-sections
172 LDFLAGS +=-Wl,--no-wchar-size-warning
173 LDFLAGS += -mno-thumb-interwork -mthumb
174 LDSYMBOLS =,--defsym=__process_stack_size__=$(USE_PROCESS_STACKSIZE)
175 LDSYMBOLS :=$(LDSYMBOLS),--defsym=__main_stack_size__=$(USE_EXCEPTIONS_STACKSIZE)
176 LDFLAGS += -Wl,--script=$(LDSCRIPT)$(LDSYMBOLS)
177
178 OPT_DEFS += -DPROTOCOL_CHIBIOS
179
180 MCUFLAGS = -mcpu=$(MCU)
181
182 # FPU options default (Cortex-M4 and Cortex-M7 single precision).
183 ifeq ($(USE_FPU_OPT),)
184   USE_FPU_OPT = -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 -fsingle-precision-constant
185 endif
186
187 # FPU-related options
188 ifeq ($(USE_FPU),)
189   USE_FPU = no
190 endif
191 ifneq ($(USE_FPU),no)
192   OPT    += $(USE_FPU_OPT)
193   OPT_DEFS  += -DCORTEX_USE_FPU=TRUE
194 else
195   OPT_DEFS  += -DCORTEX_USE_FPU=FALSE
196 endif
197
198 DEBUG = gdb
199
200 DFU_ARGS ?=
201 ifneq ("$(SERIAL)","")
202         DFU_ARGS += -S $(SERIAL)
203 endif
204
205 ST_LINK_ARGS ?=
206
207 # List any extra directories to look for libraries here.
208 EXTRALIBDIRS = $(RULESPATH)/ld
209
210 DFU_UTIL ?= dfu-util
211 ST_LINK_CLI ?= st-link_cli
212
213 # Generate a .qmk for the QMK-FF
214 qmk: $(BUILD_DIR)/$(TARGET).bin
215         zip $(TARGET).qmk -FSrj $(KEYMAP_PATH)/*
216         zip $(TARGET).qmk -u $<
217         printf "@ $<\n@=firmware.bin\n" | zipnote -w $(TARGET).qmk
218         printf "{\n  \"generated\": \"%s\"\n}" "$$(date)" > $(BUILD_DIR)/$(TARGET).json
219         if [ -f $(KEYBOARD_PATH_5)/info.json ]; then \
220                 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_5)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
221         fi
222         if [ -f $(KEYBOARD_PATH_4)/info.json ]; then \
223                 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_4)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
224         fi
225         if [ -f $(KEYBOARD_PATH_3)/info.json ]; then \
226                 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_3)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
227         fi
228         if [ -f $(KEYBOARD_PATH_2)/info.json ]; then \
229                 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_2)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
230         fi
231         if [ -f $(KEYBOARD_PATH_1)/info.json ]; then \
232                 jq -s '.[0] * .[1]' $(BUILD_DIR)/$(TARGET).json $(KEYBOARD_PATH_1)/info.json | ex -sc 'wq!$(BUILD_DIR)/$(TARGET).json' /dev/stdin; \
233         fi
234         zip $(TARGET).qmk -urj $(BUILD_DIR)/$(TARGET).json
235         printf "@ $(TARGET).json\n@=info.json\n" | zipnote -w $(TARGET).qmk
236
237 dfu-util: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
238         $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
239
240
241 ifneq ($(strip $(TIME_DELAY)),)
242   TIME_DELAY = $(strip $(TIME_DELAY))
243 else
244   TIME_DELAY = 10
245 endif
246 dfu-util-wait: $(BUILD_DIR)/$(TARGET).bin cpfirmware sizeafter
247         echo "Preparing to flash firmware. Please enter bootloader now..." ;\
248   COUNTDOWN=$(TIME_DELAY) ;\
249   while [[ $$COUNTDOWN -ge 1 ]] ; do \
250         echo "Flashing in $$COUNTDOWN ..."; \
251         sleep 1 ;\
252         ((COUNTDOWN = COUNTDOWN - 1)) ; \
253   done; \
254   echo "Flashing $(TARGET).bin" ;\
255   sleep 1 ;\
256   $(DFU_UTIL) $(DFU_ARGS) -D $(BUILD_DIR)/$(TARGET).bin
257
258 st-link-cli: $(BUILD_DIR)/$(TARGET).hex sizeafter
259         $(ST_LINK_CLI) $(ST_LINK_ARGS) -q -c SWD -p $(BUILD_DIR)/$(TARGET).hex -Rst
260
261
262 # Autodetect teensy loader
263 ifndef TEENSY_LOADER_CLI
264     ifneq (, $(shell which teensy-loader-cli 2>/dev/null))
265         TEENSY_LOADER_CLI ?= teensy-loader-cli
266     else
267         TEENSY_LOADER_CLI ?= teensy_loader_cli
268     endif
269 endif
270
271 teensy: $(BUILD_DIR)/$(TARGET).hex cpfirmware sizeafter
272         $(TEENSY_LOADER_CLI) -mmcu=$(MCU_LDSCRIPT) -w -v $(BUILD_DIR)/$(TARGET).hex
273
274 bin: $(BUILD_DIR)/$(TARGET).bin sizeafter