1 # Hey Emacs, this is a -*- makefile -*-
2 ##############################################################################
3 # Architecture or project specific options
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
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
19 # Architecture or project specific options
20 ##############################################################################
22 ##############################################################################
23 # Project, sources and paths
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
39 # HAL-OSAL files (optional).
40 include $(CHIBIOS
)/os
/hal
/hal.mk
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
46 include $(PLATFORM_MK
)
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
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
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
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
88 # Other files (optional).
89 include $(CHIBIOS
)/os
/hal
/lib
/streams
/streams.mk
91 RULESPATH
= $(CHIBIOS
)/os
/common
/ports
/ARMCMx
/compilers
/GCC
92 ifeq ("$(wildcard $(RULESPATH)/rules.mk)","")
93 RULESPATH
= $(CHIBIOS
)/os
/common
/startup
/ARMCMx
/compilers
/GCC
96 # Define linker script file here
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
108 LDSCRIPT
= $(STARTUPLD
)/$(MCU_LDSCRIPT
).
ld
111 CHIBISRC
= $(STARTUPSRC
) \
123 CHIBISRC
:= $(patsubst $(TOP_DIR
)/%,%,$(CHIBISRC
))
125 EXTRAINCDIRS
+= $(CHIBIOS
)/os
/license \
126 $(STARTUPINC
) $(KERNINC
) $(PORTINC
) $(OSALINC
) \
127 $(HALINC
) $(PLATFORMINC
) $(BOARDINC
) $(TESTINC
) \
128 $(STREAMSINC
) $(CHIBIOS
)/os
/various
$(COMMON_VPATH
)
131 # Project, sources and paths
132 ##############################################################################
135 ##############################################################################
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
)
146 BIN
= $(OBJCOPY
) -O binary
148 COMMON_VPATH
+= $(DRIVER_PATH
)/arm
150 THUMBFLAGS
= -DTHUMB_PRESENT
-mno-thumb-interwork
-DTHUMB_NO_INTERWORKING
-mthumb
-DTHUMB
152 COMPILEFLAGS
+= -fomit-frame-pointer
153 COMPILEFLAGS
+= -falign-functions
=16
154 COMPILEFLAGS
+= -ffunction-sections
155 COMPILEFLAGS
+= -fdata-sections
156 COMPILEFLAGS
+= -fno-common
157 COMPILEFLAGS
+= -fshort-wchar
158 COMPILEFLAGS
+= $(THUMBFLAGS
)
160 CFLAGS
+= $(COMPILEFLAGS
)
162 ASFLAGS
+= $(THUMBFLAGS
)
164 CPPFLAGS
+= $(COMPILEFLAGS
)
165 CPPFLAGS
+= -fno-rtti
167 LDFLAGS
+=-Wl
,--gc-sections
168 LDFLAGS
+=-Wl
,--no-wchar-size-warning
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
)
174 OPT_DEFS
+= -DPROTOCOL_CHIBIOS
176 MCUFLAGS
= -mcpu
=$(MCU
)
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
183 # FPU-related options
187 ifneq ($(USE_FPU
),no
)
188 OPT
+= $(USE_FPU_OPT
)
189 OPT_DEFS
+= -DCORTEX_USE_FPU
=TRUE
191 OPT_DEFS
+= -DCORTEX_USE_FPU
=FALSE
197 ifneq ("$(SERIAL)","")
198 DFU_ARGS
+= -S
$(SERIAL
)
203 # List any extra directories to look for libraries here.
204 EXTRALIBDIRS
= $(RULESPATH
)/ld
207 ST_LINK_CLI ?
= st-link_cli
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
; \
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
; \
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
; \
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
; \
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
; \
230 zip
$(TARGET
).qmk
-urj
$(BUILD_DIR
)/$(TARGET
).json
231 printf
"@ $(TARGET).json\n@=info.json\n" | zipnote
-w
$(TARGET
).qmk
233 dfu-util
: $(BUILD_DIR
)/$(TARGET
).bin cpfirmware sizeafter
234 $(DFU_UTIL
) $(DFU_ARGS
) -D
$(BUILD_DIR
)/$(TARGET
).bin
237 ifneq ($(strip $(TIME_DELAY
)),)
238 TIME_DELAY
= $(strip $(TIME_DELAY
))
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 ..."; \
248 ((COUNTDOWN
= COUNTDOWN
- 1)) ; \
250 echo
"Flashing $(TARGET).bin" ;\
252 $(DFU_UTIL
) $(DFU_ARGS
) -D
$(BUILD_DIR
)/$(TARGET
).bin
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
257 bin
: $(BUILD_DIR
)/$(TARGET
).bin sizeafter
258 $(COPY
) $(BUILD_DIR
)/$(TARGET
).bin
$(TARGET
).bin
;