8 starting_makefile
:= $(subst $(space
),_SPACE_
,$(abspath
$(firstword $(MAKEFILE_LIST
))))
9 mkfile_path
:= $(subst $(space
),_SPACE_
,$(abspath
$(lastword
$(MAKEFILE_LIST
))))
10 abs_tmk_root
:= $(patsubst %/,%,$(dir $(mkfile_path
)))
12 ifneq (,$(findstring /keyboards
/,$(starting_makefile
)))
13 possible_keyboard
:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root
)/keyboards
/%,%,$(starting_makefile
))))
14 ifneq (,$(findstring /keymaps
/,$(possible_keyboard
)))
15 KEYMAP_DIR
:=$(lastword
$(subst /keymaps
/, ,$(possible_keyboard
)))
16 KEYBOARD_DIR
:=$(firstword $(subst /keymaps
/, ,$(possible_keyboard
)))
17 ifneq (,$(findstring /,$(KEYBOARD_DIR
)))
18 # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
19 # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
22 tmk_root
= ..
/..
/..
/..
26 KEYBOARD_DIR
:=$(possible_keyboard
)
27 ifneq (,$(findstring /,$(KEYBOARD_DIR
)))
28 # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
29 # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
38 # $(info $(KEYBOARD_DIR))
39 # $(info $(KEYMAP_DIR))
40 # $(info $(SUBPROJECT_DIR))
42 # Directory common source filess exist
45 TMK_PATH
= $(TOP_DIR
)/$(TMK_DIR
)
46 LIB_PATH
= $(TOP_DIR
)/lib
49 QUANTUM_PATH
= $(TOP_DIR
)/$(QUANTUM_DIR
)
53 KEYBOARD ?
= $(keyboard
)
56 KEYBOARD ?
= $(KEYBOARD_DIR
)
68 # converts things to keyboards/subproject
69 ifneq (,$(findstring /,$(KEYBOARD
)))
71 KEYBOARD
:=$(firstword $(subst /, ,$(TEMP
)))
72 SUBPROJECT
:=$(lastword
$(subst /, ,$(TEMP
)))
75 KEYBOARD_PATH
= $(TOP_DIR
)/keyboards
/$(KEYBOARD
)
81 SUBPROJECT
=$(subproject
)
84 ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
85 KEYBOARD_FILE
= keyboards
/$(KEYBOARD
)/$(KEYBOARD
).c
87 ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","")
88 include $(KEYBOARD_PATH
)/Makefile
92 $(error
"$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist
)
95 ifdef SUBPROJECT_DEFAULT
96 SUBPROJECT?
=$(SUBPROJECT_DEFAULT
)
100 SUBPROJECT_PATH
= $(TOP_DIR
)/keyboards
/$(KEYBOARD
)/$(SUBPROJECT
)
101 ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
102 OPT_DEFS
+= -DSUBPROJECT_
$(SUBPROJECT
)
103 SUBPROJECT_FILE
= keyboards
/$(KEYBOARD
)/$(SUBPROJECT
)/$(SUBPROJECT
).c
104 -include $(SUBPROJECT_PATH
)/Makefile
106 $(error
"$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist
)
114 KEYMAP ?
= $(KEYMAP_DIR
)
119 KEYMAP_PATH
= $(KEYBOARD_PATH
)/keymaps
/$(KEYMAP
)
120 ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
121 KEYMAP_FILE
= keyboards
/$(KEYBOARD
)/keymaps
/$(KEYMAP
)/keymap.c
122 -include $(KEYMAP_PATH
)/Makefile
124 ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
125 $(error
"$(KEYMAP_PATH)/keymap.c" does not exist
)
127 KEYMAP_PATH
= $(SUBPROJECT_PATH
)/keymaps
/$(KEYMAP
)
128 KEYMAP_FILE
= keyboards
/$(KEYBOARD
)/$(SUBPROJECT
)/keymaps
/$(KEYMAP
)/keymap.c
129 -include $(KEYMAP_PATH
)/Makefile
134 TARGET ?
= $(KEYBOARD
)_
$(SUBPROJECT
)_
$(KEYMAP
)
136 TARGET ?
= $(KEYBOARD
)_
$(KEYMAP
)
140 # Object files directory
141 # To put object files in current directory, use a dot (.), do NOT make
142 # this an empty or blank macro!
143 OBJDIR
= $(BUILD_DIR
)/obj_
$(TARGET
)
147 ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
148 CONFIG_H
= $(KEYMAP_PATH
)/config.h
150 CONFIG_H
= $(KEYBOARD_PATH
)/config.h
152 ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
153 CONFIG_H
= $(SUBPROJECT_PATH
)/config.h
158 # # project specific files
159 SRC
+= $(KEYBOARD_FILE
) \
161 $(QUANTUM_DIR
)/quantum.c \
162 $(QUANTUM_DIR
)/keymap_common.c \
163 $(QUANTUM_DIR
)/keycode_config.c \
164 $(QUANTUM_DIR
)/process_keycode
/process_leader.c
167 SRC
+= $(SUBPROJECT_FILE
)
171 SRC
+= $(SUBPROJECT_FILE
)
175 SRC
+= $(SUBPROJECT_FILE
)
179 SRC
+= $(QUANTUM_DIR
)/matrix.c
182 ifeq ($(strip $(MIDI_ENABLE
)), yes
)
183 OPT_DEFS
+= -DMIDI_ENABLE
184 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_midi.c
187 ifeq ($(strip $(AUDIO_ENABLE
)), yes
)
188 OPT_DEFS
+= -DAUDIO_ENABLE
189 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_music.c
190 SRC
+= $(QUANTUM_DIR
)/audio
/audio.c
191 SRC
+= $(QUANTUM_DIR
)/audio
/voices.c
192 SRC
+= $(QUANTUM_DIR
)/audio
/luts.c
195 ifeq ($(strip $(UNICODE_ENABLE
)), yes
)
196 OPT_DEFS
+= -DUNICODE_ENABLE
197 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_unicode.c
200 ifeq ($(strip $(RGBLIGHT_ENABLE
)), yes
)
201 OPT_DEFS
+= -DRGBLIGHT_ENABLE
202 SRC
+= $(QUANTUM_DIR
)/light_ws2812.c
203 SRC
+= $(QUANTUM_DIR
)/rgblight.c
206 ifeq ($(strip $(TAP_DANCE_ENABLE
)), yes
)
207 OPT_DEFS
+= -DTAP_DANCE_ENABLE
208 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_tap_dance.c
211 ifeq ($(strip $(SERIAL_LINK_ENABLE
)), yes
)
212 SERIAL_DIR
= $(QUANTUM_DIR
)/serial_link
213 SERIAL_PATH
= $(QUANTUM_PATH
)/serial_link
214 SERIAL_SRC
= $(wildcard $(SERIAL_PATH
)/protocol
/*.c
)
215 SERIAL_SRC
+= $(wildcard $(SERIAL_PATH
)/system
/*.c
)
216 SRC
+= $(patsubst $(QUANTUM_PATH
)/%,%,$(SERIAL_SRC
))
217 OPT_DEFS
+= -DSERIAL_LINK_ENABLE
218 VAPTH
+= $(SERIAL_PATH
)
221 # Optimize size but this may cause error "relocation truncated to fit"
222 #EXTRALDFLAGS = -Wl,--relax
225 VPATH
+= $(KEYMAP_PATH
)
227 VPATH
+= $(SUBPROJECT_PATH
)
229 VPATH
+= $(KEYBOARD_PATH
)
232 VPATH
+= $(QUANTUM_PATH
)
233 VPATH
+= $(QUANTUM_PATH
)/keymap_extras
234 VPATH
+= $(QUANTUM_PATH
)/audio
235 VPATH
+= $(QUANTUM_PATH
)/process_keycode
238 # We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
245 include $(TMK_PATH
)/common.mk
246 ifeq ($(PLATFORM
),AVR
)
247 include $(TMK_PATH
)/protocol
/lufa.mk
248 include $(TMK_PATH
)/avr.mk
249 else ifeq ($(PLATFORM
),CHIBIOS
)
250 include $(TMK_PATH
)/protocol
/chibios.mk
251 include $(TMK_PATH
)/chibios.mk
254 $(error Unknown platform
)
257 ifeq ($(strip $(VISUALIZER_ENABLE
)), yes
)
258 VISUALIZER_DIR
= $(QUANTUM_DIR
)/visualizer
259 VISUALIZER_PATH
= $(QUANTUM_PATH
)/visualizer
260 include $(VISUALIZER_PATH
)/visualizer.mk
263 include $(TMK_PATH
)/rules.mk
265 GIT_VERSION
:= $(shell git describe
--abbrev
=6 --dirty
--always
--tags 2>/dev
/null || date
+"%Y-%m-%d-%H:%M:%S")
266 BUILD_DATE
:= $(shell date
+"%Y-%m-%d-%H:%M:%S")
267 OPT_DEFS
+= -DQMK_KEYBOARD
=\"$(KEYBOARD
)\" -DQMK_KEYMAP
=\"$(KEYMAP
)\"
268 OPT_DEFS
+= -DQMK_VERSION
=\"$(GIT_VERSION
)\" -DQMK_BUILDDATE
=\"$(BUILD_DATE
)\"