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
)
62 # converts things to keyboards/subproject
63 ifneq (,$(findstring /,$(KEYBOARD
)))
65 KEYBOARD
:=$(firstword $(subst /, ,$(TEMP
)))
66 SUBPROJECT
:=$(lastword
$(subst /, ,$(TEMP
)))
69 KEYBOARD_PATH
= $(TOP_DIR
)/keyboards
/$(KEYBOARD
)
75 SUBPROJECT
=$(subproject
)
78 ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
79 KEYBOARD_FILE
= keyboards
/$(KEYBOARD
)/$(KEYBOARD
).c
81 ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","")
82 include $(KEYBOARD_PATH
)/Makefile
86 $(error
"$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist
)
89 ifdef SUBPROJECT_DEFAULT
90 SUBPROJECT?
=$(SUBPROJECT_DEFAULT
)
94 SUBPROJECT_PATH
= $(TOP_DIR
)/keyboards
/$(KEYBOARD
)/$(SUBPROJECT
)
95 ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
96 OPT_DEFS
+= -DSUBPROJECT_
$(SUBPROJECT
)
97 SUBPROJECT_FILE
= keyboards
/$(KEYBOARD
)/$(SUBPROJECT
)/$(SUBPROJECT
).c
98 -include $(SUBPROJECT_PATH
)/Makefile
100 $(error
"$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist
)
108 KEYMAP ?
= $(KEYMAP_DIR
)
113 KEYMAP_PATH
= $(KEYBOARD_PATH
)/keymaps
/$(KEYMAP
)
114 ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
115 KEYMAP_FILE
= keyboards
/$(KEYBOARD
)/keymaps
/$(KEYMAP
)/keymap.c
116 -include $(KEYMAP_PATH
)/Makefile
118 ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
119 $(error
"$(KEYMAP_PATH)/keymap.c" does not exist
)
121 KEYMAP_PATH
= $(SUBPROJECT_PATH
)/keymaps
/$(KEYMAP
)
122 KEYMAP_FILE
= keyboards
/$(KEYBOARD
)/$(SUBPROJECT
)/keymaps
/$(KEYMAP
)/keymap.c
123 -include $(KEYMAP_PATH
)/Makefile
128 TARGET ?
= $(KEYBOARD
)_
$(SUBPROJECT
)_
$(KEYMAP
)
130 TARGET ?
= $(KEYBOARD
)_
$(KEYMAP
)
134 # Object files directory
135 # To put object files in current directory, use a dot (.), do NOT make
136 # this an empty or blank macro!
137 OBJDIR
= $(BUILD_DIR
)/obj_
$(TARGET
)
141 ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
142 CONFIG_H
= $(KEYMAP_PATH
)/config.h
144 CONFIG_H
= $(KEYBOARD_PATH
)/config.h
146 ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
147 CONFIG_H
= $(SUBPROJECT_PATH
)/config.h
152 # # project specific files
153 SRC
+= $(KEYBOARD_FILE
) \
155 $(QUANTUM_DIR
)/quantum.c \
156 $(QUANTUM_DIR
)/keymap_common.c \
157 $(QUANTUM_DIR
)/keycode_config.c \
158 $(QUANTUM_DIR
)/process_keycode
/process_leader.c
161 SRC
+= $(SUBPROJECT_FILE
)
165 SRC
+= $(SUBPROJECT_FILE
)
169 SRC
+= $(SUBPROJECT_FILE
)
173 SRC
+= $(QUANTUM_DIR
)/matrix.c
176 ifeq ($(strip $(MIDI_ENABLE
)), yes
)
177 OPT_DEFS
+= -DMIDI_ENABLE
178 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_audio.c
181 ifeq ($(strip $(AUDIO_ENABLE
)), yes
)
182 OPT_DEFS
+= -DAUDIO_ENABLE
183 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_music.c
184 SRC
+= $(QUANTUM_DIR
)/audio
/audio.c
185 SRC
+= $(QUANTUM_DIR
)/audio
/voices.c
186 SRC
+= $(QUANTUM_DIR
)/audio
/luts.c
189 ifeq ($(strip $(UNICODE_ENABLE
)), yes
)
190 OPT_DEFS
+= -DUNICODE_ENABLE
191 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_unicode.c
194 ifeq ($(strip $(RGBLIGHT_ENABLE
)), yes
)
195 OPT_DEFS
+= -DRGBLIGHT_ENABLE
196 SRC
+= $(QUANTUM_DIR
)/light_ws2812.c
197 SRC
+= $(QUANTUM_DIR
)/rgblight.c
200 ifeq ($(strip $(TAP_DANCE_ENABLE
)), yes
)
201 OPT_DEFS
+= -DTAP_DANCE_ENABLE
202 SRC
+= $(QUANTUM_DIR
)/process_keycode
/process_tap_dance.c
205 ifeq ($(strip $(SERIAL_LINK_ENABLE
)), yes
)
206 SERIAL_DIR
= $(QUANTUM_DIR
)/serial_link
207 SERIAL_PATH
= $(QUANTUM_PATH
)/serial_link
208 SERIAL_SRC
= $(wildcard $(SERIAL_PATH
)/protocol
/*.c
)
209 SERIAL_SRC
+= $(wildcard $(SERIAL_PATH
)/system
/*.c
)
210 SRC
+= $(patsubst $(QUANTUM_PATH
)/%,%,$(SERIAL_SRC
))
211 OPT_DEFS
+= -DSERIAL_LINK_ENABLE
212 VAPTH
+= $(SERIAL_PATH
)
215 # Optimize size but this may cause error "relocation truncated to fit"
216 #EXTRALDFLAGS = -Wl,--relax
219 VPATH
+= $(KEYMAP_PATH
)
221 VPATH
+= $(SUBPROJECT_PATH
)
223 VPATH
+= $(KEYBOARD_PATH
)
226 VPATH
+= $(QUANTUM_PATH
)
227 VPATH
+= $(QUANTUM_PATH
)/keymap_extras
228 VPATH
+= $(QUANTUM_PATH
)/audio
229 VPATH
+= $(QUANTUM_PATH
)/process_keycode
232 # We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
239 include $(TMK_PATH
)/common.mk
240 ifeq ($(PLATFORM
),AVR
)
241 include $(TMK_PATH
)/protocol
/lufa.mk
242 include $(TMK_PATH
)/avr.mk
243 else ifeq ($(PLATFORM
),CHIBIOS
)
244 include $(TMK_PATH
)/protocol
/chibios.mk
245 include $(TMK_PATH
)/chibios.mk
247 $(error Unknown platform
)
250 include $(TMK_PATH
)/rules.mk
252 GIT_VERSION
:= $(shell git describe
--abbrev
=6 --dirty
--always
--tags 2>/dev
/null || date
+"%Y-%m-%d-%H:%M:%S")
253 BUILD_DATE
:= $(shell date
+"%Y-%m-%d-%H:%M:%S")
254 OPT_DEFS
+= -DQMK_KEYBOARD
=\"$(KEYBOARD
)\" -DQMK_KEYMAP
=\"$(KEYMAP
)\"
255 OPT_DEFS
+= -DQMK_VERSION
=\"$(GIT_VERSION
)\" -DQMK_BUILDDATE
=\"$(BUILD_DATE
)\"