Commit | Line | Data |
---|---|---|
d9e4dad0 JH |
1 | ifndef VERBOSE |
2 | .SILENT: | |
3 | endif | |
4 | ||
4d4f7684 | 5 | .DEFAULT_GOAL := all |
6 | ||
c4ea06d2 JH |
7 | space := $(subst ,, ) |
8 | starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST)))) | |
9 | mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST)))) | |
92759be3 | 10 | abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) |
d9e4dad0 | 11 | |
649b33d7 JH |
12 | ifneq (,$(findstring /keyboards/,$(starting_makefile))) |
13 | possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile)))) | |
d9e4dad0 | 14 | ifneq (,$(findstring /keymaps/,$(possible_keyboard))) |
d9e4dad0 | 15 | KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard))) |
215c2119 JH |
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))) | |
20 | tmk_root = ../../.. | |
21 | else | |
22 | tmk_root = ../../../.. | |
23 | endif | |
d9e4dad0 | 24 | else |
d9e4dad0 | 25 | KEYMAP_DIR:=default |
215c2119 JH |
26 | KEYBOARD_DIR:=$(possible_keyboard) |
27 | ifneq (,$(findstring /,$(KEYBOARD_DIR))) | |
28 | # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) | |
29 | # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) | |
30 | tmk_root = ../../.. | |
31 | else | |
32 | tmk_root = ../.. | |
33 | endif | |
d9e4dad0 | 34 | endif |
92759be3 JH |
35 | else |
36 | tmk_root = . | |
d9e4dad0 | 37 | endif |
d9e4dad0 JH |
38 | # $(info $(KEYBOARD_DIR)) |
39 | # $(info $(KEYMAP_DIR)) | |
215c2119 | 40 | # $(info $(SUBPROJECT_DIR)) |
d9e4dad0 JH |
41 | |
42 | # Directory common source filess exist | |
43 | TOP_DIR = $(tmk_root) | |
44 | TMK_DIR = tmk_core | |
45 | TMK_PATH = $(TOP_DIR)/$(TMK_DIR) | |
4d4f7684 | 46 | LIB_PATH = $(TOP_DIR)/lib |
d9e4dad0 JH |
47 | |
48 | QUANTUM_DIR = quantum | |
49 | QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) | |
50 | ||
215c2119 | 51 | |
d9e4dad0 JH |
52 | ifdef keyboard |
53 | KEYBOARD ?= $(keyboard) | |
54 | endif | |
55 | ifdef KEYBOARD_DIR | |
56 | KEYBOARD ?= $(KEYBOARD_DIR) | |
57 | endif | |
58 | ifndef KEYBOARD | |
59 | KEYBOARD=planck | |
60 | endif | |
215c2119 | 61 | |
e5726b01 FS |
62 | MASTER ?= left |
63 | ifdef master | |
64 | MASTER = $(master) | |
65 | endif | |
66 | ||
67 | ||
215c2119 JH |
68 | # converts things to keyboards/subproject |
69 | ifneq (,$(findstring /,$(KEYBOARD))) | |
70 | TEMP:=$(KEYBOARD) | |
71 | KEYBOARD:=$(firstword $(subst /, ,$(TEMP))) | |
72 | SUBPROJECT:=$(lastword $(subst /, ,$(TEMP))) | |
73 | endif | |
74 | ||
649b33d7 | 75 | KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD) |
215c2119 | 76 | |
ba6fb23f JH |
77 | ifdef sub |
78 | SUBPROJECT=$(sub) | |
79 | endif | |
80 | ifdef subproject | |
81 | SUBPROJECT=$(subproject) | |
82 | endif | |
83 | ||
d9e4dad0 | 84 | ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","") |
649b33d7 | 85 | KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c |
d9e4dad0 | 86 | ifndef ARCH |
ba6fb23f JH |
87 | ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","") |
88 | include $(KEYBOARD_PATH)/Makefile | |
89 | endif | |
d9e4dad0 JH |
90 | endif |
91 | else | |
92 | $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist) | |
93 | endif | |
94 | ||
215c2119 JH |
95 | ifdef SUBPROJECT_DEFAULT |
96 | SUBPROJECT?=$(SUBPROJECT_DEFAULT) | |
97 | endif | |
98 | ||
99 | ifdef SUBPROJECT | |
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 | |
105 | else | |
106 | $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) | |
107 | endif | |
108 | endif | |
109 | ||
d9e4dad0 JH |
110 | ifdef keymap |
111 | KEYMAP ?= $(keymap) | |
112 | endif | |
113 | ifdef KEYMAP_DIR | |
114 | KEYMAP ?= $(KEYMAP_DIR) | |
115 | endif | |
116 | ifndef KEYMAP | |
117 | KEYMAP = default | |
118 | endif | |
119 | KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) | |
120 | ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") | |
649b33d7 | 121 | KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c |
d9e4dad0 JH |
122 | -include $(KEYMAP_PATH)/Makefile |
123 | else | |
ba6fb23f | 124 | ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","") |
d9e4dad0 | 125 | $(error "$(KEYMAP_PATH)/keymap.c" does not exist) |
ba6fb23f JH |
126 | else |
127 | KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) | |
128 | KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c | |
129 | -include $(KEYMAP_PATH)/Makefile | |
130 | endif | |
d9e4dad0 JH |
131 | endif |
132 | ||
215c2119 JH |
133 | ifdef SUBPROJECT |
134 | TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) | |
135 | else | |
136 | TARGET ?= $(KEYBOARD)_$(KEYMAP) | |
137 | endif | |
4d4f7684 | 138 | BUILD_DIR = .build |
139 | ||
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) | |
144 | ||
215c2119 JH |
145 | |
146 | ||
d9e4dad0 JH |
147 | ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") |
148 | CONFIG_H = $(KEYMAP_PATH)/config.h | |
149 | else | |
150 | CONFIG_H = $(KEYBOARD_PATH)/config.h | |
65faab3b JH |
151 | ifdef SUBPROJECT |
152 | ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") | |
153 | CONFIG_H = $(SUBPROJECT_PATH)/config.h | |
154 | endif | |
155 | endif | |
d9e4dad0 JH |
156 | endif |
157 | ||
158 | # # project specific files | |
159 | SRC += $(KEYBOARD_FILE) \ | |
160 | $(KEYMAP_FILE) \ | |
161 | $(QUANTUM_DIR)/quantum.c \ | |
4d4f7684 | 162 | $(QUANTUM_DIR)/keymap_common.c \ |
65faab3b JH |
163 | $(QUANTUM_DIR)/keycode_config.c \ |
164 | $(QUANTUM_DIR)/process_keycode/process_leader.c | |
165 | ||
166 | ifdef SUBPROJECT | |
167 | SRC += $(SUBPROJECT_FILE) | |
168 | endif | |
169 | ||
170 | ifdef SUBPROJECT | |
171 | SRC += $(SUBPROJECT_FILE) | |
172 | endif | |
d9e4dad0 | 173 | |
215c2119 JH |
174 | ifdef SUBPROJECT |
175 | SRC += $(SUBPROJECT_FILE) | |
176 | endif | |
177 | ||
d9e4dad0 JH |
178 | ifndef CUSTOM_MATRIX |
179 | SRC += $(QUANTUM_DIR)/matrix.c | |
180 | endif | |
181 | ||
65faab3b JH |
182 | ifeq ($(strip $(MIDI_ENABLE)), yes) |
183 | OPT_DEFS += -DMIDI_ENABLE | |
8b94e26d | 184 | SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c |
65faab3b JH |
185 | endif |
186 | ||
d9e4dad0 | 187 | ifeq ($(strip $(AUDIO_ENABLE)), yes) |
65faab3b JH |
188 | OPT_DEFS += -DAUDIO_ENABLE |
189 | SRC += $(QUANTUM_DIR)/process_keycode/process_music.c | |
d9e4dad0 JH |
190 | SRC += $(QUANTUM_DIR)/audio/audio.c |
191 | SRC += $(QUANTUM_DIR)/audio/voices.c | |
192 | SRC += $(QUANTUM_DIR)/audio/luts.c | |
193 | endif | |
194 | ||
65faab3b JH |
195 | ifeq ($(strip $(UNICODE_ENABLE)), yes) |
196 | OPT_DEFS += -DUNICODE_ENABLE | |
197 | SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c | |
198 | endif | |
199 | ||
d9e4dad0 | 200 | ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) |
65faab3b | 201 | OPT_DEFS += -DRGBLIGHT_ENABLE |
d9e4dad0 JH |
202 | SRC += $(QUANTUM_DIR)/light_ws2812.c |
203 | SRC += $(QUANTUM_DIR)/rgblight.c | |
65faab3b JH |
204 | endif |
205 | ||
206 | ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) | |
a7e3e4e6 | 207 | OPT_DEFS += -DTAP_DANCE_ENABLE |
65faab3b | 208 | SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c |
d9e4dad0 JH |
209 | endif |
210 | ||
a7e3e4e6 FS |
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)) | |
4b45deb6 | 217 | OPT_DEFS += -DSERIAL_LINK_ENABLE |
a7e3e4e6 FS |
218 | VAPTH += $(SERIAL_PATH) |
219 | endif | |
220 | ||
d9e4dad0 JH |
221 | # Optimize size but this may cause error "relocation truncated to fit" |
222 | #EXTRALDFLAGS = -Wl,--relax | |
223 | ||
224 | # Search Path | |
225 | VPATH += $(KEYMAP_PATH) | |
215c2119 JH |
226 | ifdef SUBPROJECT |
227 | VPATH += $(SUBPROJECT_PATH) | |
228 | endif | |
d9e4dad0 JH |
229 | VPATH += $(KEYBOARD_PATH) |
230 | VPATH += $(TOP_DIR) | |
231 | VPATH += $(TMK_PATH) | |
232 | VPATH += $(QUANTUM_PATH) | |
233 | VPATH += $(QUANTUM_PATH)/keymap_extras | |
234 | VPATH += $(QUANTUM_PATH)/audio | |
65faab3b | 235 | VPATH += $(QUANTUM_PATH)/process_keycode |
d9e4dad0 | 236 | |
4d4f7684 | 237 | |
238 | # We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA | |
239 | ifdef MCU_FAMILY | |
240 | PLATFORM=CHIBIOS | |
241 | else | |
242 | PLATFORM=AVR | |
243 | endif | |
244 | ||
d9e4dad0 | 245 | include $(TMK_PATH)/common.mk |
4d4f7684 | 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 | |
70797bb8 | 252 | OPT_OS = chibios |
4d4f7684 | 253 | else |
254 | $(error Unknown platform) | |
255 | endif | |
256 | ||
70797bb8 FS |
257 | ifeq ($(strip $(VISUALIZER_ENABLE)), yes) |
258 | VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer | |
259 | VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer | |
260 | include $(VISUALIZER_PATH)/visualizer.mk | |
261 | endif | |
262 | ||
4815b97a GN |
263 | include $(TMK_PATH)/rules.mk |
264 | ||
2cf26915 CB |
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") | |
4815b97a | 267 | OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" |
2cf26915 | 268 | OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\" |