Move Infinity Ergodox drivers to subproject, and fix makefile
[jackhill/qmk/firmware.git] / Makefile
CommitLineData
d9e4dad0
JH
1ifndef VERBOSE
2.SILENT:
3endif
4
4d4f7684 5.DEFAULT_GOAL := all
6
c4ea06d2
JH
7space := $(subst ,, )
8starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST))))
9mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST))))
92759be3 10abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
d9e4dad0 11
649b33d7
JH
12ifneq (,$(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
35else
36 tmk_root = .
d9e4dad0 37endif
d9e4dad0
JH
38# $(info $(KEYBOARD_DIR))
39# $(info $(KEYMAP_DIR))
215c2119 40# $(info $(SUBPROJECT_DIR))
d9e4dad0
JH
41
42# Directory common source filess exist
43TOP_DIR = $(tmk_root)
44TMK_DIR = tmk_core
45TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
4d4f7684 46LIB_PATH = $(TOP_DIR)/lib
d9e4dad0
JH
47
48QUANTUM_DIR = quantum
49QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
50
215c2119 51
d9e4dad0
JH
52ifdef keyboard
53 KEYBOARD ?= $(keyboard)
54endif
55ifdef KEYBOARD_DIR
56 KEYBOARD ?= $(KEYBOARD_DIR)
57endif
58ifndef KEYBOARD
59 KEYBOARD=planck
60endif
215c2119 61
e5726b01
FS
62MASTER ?= left
63ifdef master
64 MASTER = $(master)
65endif
66
67
215c2119
JH
68# converts things to keyboards/subproject
69ifneq (,$(findstring /,$(KEYBOARD)))
70 TEMP:=$(KEYBOARD)
71 KEYBOARD:=$(firstword $(subst /, ,$(TEMP)))
72 SUBPROJECT:=$(lastword $(subst /, ,$(TEMP)))
73endif
74
649b33d7 75KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)
215c2119 76
ba6fb23f
JH
77ifdef sub
78 SUBPROJECT=$(sub)
79endif
80ifdef subproject
81 SUBPROJECT=$(subproject)
82endif
83
d9e4dad0 84ifneq ("$(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
91else
92$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
93endif
94
215c2119
JH
95ifdef SUBPROJECT_DEFAULT
96 SUBPROJECT?=$(SUBPROJECT_DEFAULT)
97endif
98
99ifdef 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
108endif
109
d9e4dad0
JH
110ifdef keymap
111 KEYMAP ?= $(keymap)
112endif
113ifdef KEYMAP_DIR
114 KEYMAP ?= $(KEYMAP_DIR)
115endif
116ifndef KEYMAP
117 KEYMAP = default
118endif
119KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
120ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
649b33d7 121 KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
d9e4dad0
JH
122 -include $(KEYMAP_PATH)/Makefile
123else
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
131endif
132
215c2119
JH
133ifdef SUBPROJECT
134 TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
135else
136 TARGET ?= $(KEYBOARD)_$(KEYMAP)
137endif
4d4f7684 138BUILD_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!
143OBJDIR = $(BUILD_DIR)/obj_$(TARGET)
144
215c2119
JH
145
146
d9e4dad0
JH
147ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
148 CONFIG_H = $(KEYMAP_PATH)/config.h
149else
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
156endif
157
158# # project specific files
159SRC += $(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
166ifdef SUBPROJECT
167 SRC += $(SUBPROJECT_FILE)
168endif
169
170ifdef SUBPROJECT
171 SRC += $(SUBPROJECT_FILE)
172endif
d9e4dad0 173
215c2119
JH
174ifdef SUBPROJECT
175 SRC += $(SUBPROJECT_FILE)
176endif
177
d9e4dad0
JH
178ifndef CUSTOM_MATRIX
179 SRC += $(QUANTUM_DIR)/matrix.c
180endif
181
65faab3b
JH
182ifeq ($(strip $(MIDI_ENABLE)), yes)
183 OPT_DEFS += -DMIDI_ENABLE
8b94e26d 184 SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
65faab3b
JH
185endif
186
d9e4dad0 187ifeq ($(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
193endif
194
65faab3b
JH
195ifeq ($(strip $(UNICODE_ENABLE)), yes)
196 OPT_DEFS += -DUNICODE_ENABLE
197 SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
198endif
199
d9e4dad0 200ifeq ($(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
204endif
205
206ifeq ($(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
209endif
210
a7e3e4e6
FS
211ifeq ($(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)
219endif
220
d9e4dad0
JH
221# Optimize size but this may cause error "relocation truncated to fit"
222#EXTRALDFLAGS = -Wl,--relax
223
224# Search Path
225VPATH += $(KEYMAP_PATH)
215c2119
JH
226ifdef SUBPROJECT
227 VPATH += $(SUBPROJECT_PATH)
228endif
d9e4dad0
JH
229VPATH += $(KEYBOARD_PATH)
230VPATH += $(TOP_DIR)
231VPATH += $(TMK_PATH)
232VPATH += $(QUANTUM_PATH)
233VPATH += $(QUANTUM_PATH)/keymap_extras
234VPATH += $(QUANTUM_PATH)/audio
65faab3b 235VPATH += $(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
239ifdef MCU_FAMILY
240 PLATFORM=CHIBIOS
241else
242 PLATFORM=AVR
243endif
244
d9e4dad0 245include $(TMK_PATH)/common.mk
4d4f7684 246ifeq ($(PLATFORM),AVR)
247 include $(TMK_PATH)/protocol/lufa.mk
248 include $(TMK_PATH)/avr.mk
249else ifeq ($(PLATFORM),CHIBIOS)
250 include $(TMK_PATH)/protocol/chibios.mk
251 include $(TMK_PATH)/chibios.mk
70797bb8 252 OPT_OS = chibios
4d4f7684 253else
254 $(error Unknown platform)
255endif
256
70797bb8
FS
257ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
258 VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
259 VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
260 include $(VISUALIZER_PATH)/visualizer.mk
261endif
262
4815b97a
GN
263include $(TMK_PATH)/rules.mk
264
2cf26915
CB
265GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
266BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
4815b97a 267OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
2cf26915 268OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\"