]> git.donarmstrong.com Git - qmk_firmware.git/blob - Makefile
add my keymap
[qmk_firmware.git] / Makefile
1 ifndef VERBOSE
2 .SILENT:
3 endif
4
5 .DEFAULT_GOAL := all
6
7 space := $(subst ,, )
8 ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1))
9 starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST)))
10 mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST))))
11 abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
12
13 ifneq (,$(findstring /keyboards/,$(starting_makefile)))
14         possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile))))
15         ifneq (,$(findstring /keymaps/,$(possible_keyboard)))
16                 KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard)))
17                 KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard)))
18                 ifneq (,$(findstring /,$(KEYBOARD_DIR)))
19                         # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
20                         # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
21                         tmk_root = ../../..
22                 else
23                         tmk_root = ../../../..
24                 endif
25         else
26                 KEYMAP_DIR:=default
27                 KEYBOARD_DIR:=$(possible_keyboard)
28                 ifneq (,$(findstring /,$(KEYBOARD_DIR)))
29                         # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
30                         # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
31                         tmk_root = ../../..
32                 else
33                         tmk_root = ../..
34                 endif
35         endif
36 else
37         tmk_root = .
38 endif
39 # $(info $(KEYBOARD_DIR))
40 # $(info $(KEYMAP_DIR))
41 # $(info $(SUBPROJECT_DIR))
42
43 # Directory common source filess exist
44 TOP_DIR = $(tmk_root)
45 TMK_DIR = tmk_core
46 TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
47 LIB_PATH = $(TOP_DIR)/lib
48
49 QUANTUM_DIR = quantum
50 QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
51
52
53 ifdef keyboard
54         KEYBOARD ?= $(keyboard)
55 endif
56 ifdef KEYBOARD_DIR
57         KEYBOARD ?= $(KEYBOARD_DIR)
58 endif
59 ifndef KEYBOARD
60         KEYBOARD=planck
61 endif
62
63 MASTER ?= left
64 ifdef master
65         MASTER = $(master)
66 endif
67
68
69 # converts things to keyboards/subproject
70 ifneq (,$(findstring /,$(KEYBOARD)))
71         TEMP:=$(KEYBOARD)
72         KEYBOARD:=$(firstword $(subst /, ,$(TEMP)))
73         SUBPROJECT:=$(lastword $(subst /, ,$(TEMP)))
74 endif
75
76 KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)
77
78 ifdef sub
79         SUBPROJECT=$(sub)
80 endif
81 ifdef subproject
82         SUBPROJECT=$(subproject)
83 endif
84
85 ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
86         KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
87         ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile))
88                 -include $(KEYBOARD_PATH)/Makefile
89         endif
90 else 
91 $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
92 endif
93
94 ifdef SUBPROJECT_DEFAULT
95         SUBPROJECT?=$(SUBPROJECT_DEFAULT)
96 endif
97
98 ifdef SUBPROJECT
99         SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)
100         ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
101                 OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
102                 SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
103                 ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile))
104                         -include $(SUBPROJECT_PATH)/Makefile
105                 endif
106         else 
107 $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
108         endif
109 endif
110
111 ifdef keymap
112         KEYMAP ?= $(keymap)
113 endif
114 ifdef KEYMAP_DIR
115         KEYMAP ?= $(KEYMAP_DIR)
116 endif
117 ifndef KEYMAP
118         KEYMAP = default
119 endif
120 KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
121 ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
122         KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
123         ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile))
124                 -include $(KEYMAP_PATH)/Makefile
125         endif
126 else 
127         ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
128 $(error "$(KEYMAP_PATH)/keymap.c" does not exist)
129         else
130                 KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
131                 KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c
132                 ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile))
133                         -include $(KEYMAP_PATH)/Makefile
134                 endif
135         endif
136 endif
137
138 ifdef SUBPROJECT
139         TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
140 else
141         TARGET ?= $(KEYBOARD)_$(KEYMAP)
142 endif
143
144 BUILD_DIR = $(TOP_DIR)/.build
145
146 # Object files directory
147 #     To put object files in current directory, use a dot (.), do NOT make
148 #     this an empty or blank macro!
149 OBJDIR = $(BUILD_DIR)/obj_$(TARGET)
150
151
152
153 ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
154         CONFIG_H = $(KEYMAP_PATH)/config.h
155 else
156         CONFIG_H = $(KEYBOARD_PATH)/config.h
157         ifdef SUBPROJECT
158                 ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
159                         CONFIG_H = $(SUBPROJECT_PATH)/config.h
160                 endif
161         endif
162 endif
163
164 # # project specific files
165 SRC += $(KEYBOARD_FILE) \
166         $(KEYMAP_FILE) \
167         $(QUANTUM_DIR)/quantum.c \
168         $(QUANTUM_DIR)/keymap_common.c \
169         $(QUANTUM_DIR)/keycode_config.c \
170         $(QUANTUM_DIR)/process_keycode/process_leader.c
171
172 ifdef SUBPROJECT
173         SRC += $(SUBPROJECT_FILE)
174 endif
175
176 ifdef SUBPROJECT
177         SRC += $(SUBPROJECT_FILE)
178 endif
179
180 ifdef SUBPROJECT
181         SRC += $(SUBPROJECT_FILE)
182 endif
183
184 ifndef CUSTOM_MATRIX
185         SRC += $(QUANTUM_DIR)/matrix.c
186 endif
187
188 ifeq ($(strip $(MIDI_ENABLE)), yes)
189     OPT_DEFS += -DMIDI_ENABLE
190         SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
191 endif
192
193 ifeq ($(strip $(AUDIO_ENABLE)), yes)
194     OPT_DEFS += -DAUDIO_ENABLE
195         SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
196         SRC += $(QUANTUM_DIR)/audio/audio.c
197         SRC += $(QUANTUM_DIR)/audio/voices.c
198         SRC += $(QUANTUM_DIR)/audio/luts.c
199 endif
200
201 ifeq ($(strip $(UNICODE_ENABLE)), yes)
202     OPT_DEFS += -DUNICODE_ENABLE
203         SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
204 endif
205
206 ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
207         OPT_DEFS += -DRGBLIGHT_ENABLE
208         SRC += $(QUANTUM_DIR)/light_ws2812.c
209         SRC += $(QUANTUM_DIR)/rgblight.c
210 endif
211
212 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
213         OPT_DEFS += -DTAP_DANCE_ENABLE
214         SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
215 endif
216
217 ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
218         SERIAL_DIR = $(QUANTUM_DIR)/serial_link
219         SERIAL_PATH = $(QUANTUM_PATH)/serial_link
220         SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
221         SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
222         SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
223         OPT_DEFS += -DSERIAL_LINK_ENABLE
224         VAPTH += $(SERIAL_PATH)
225 endif
226
227 # Optimize size but this may cause error "relocation truncated to fit"
228 #EXTRALDFLAGS = -Wl,--relax
229
230 # Search Path
231 VPATH += $(KEYMAP_PATH)
232 ifdef SUBPROJECT
233         VPATH += $(SUBPROJECT_PATH)
234 endif
235 VPATH += $(KEYBOARD_PATH)
236 VPATH += $(TOP_DIR)
237 VPATH += $(TMK_PATH)
238 VPATH += $(QUANTUM_PATH)
239 VPATH += $(QUANTUM_PATH)/keymap_extras
240 VPATH += $(QUANTUM_PATH)/audio
241 VPATH += $(QUANTUM_PATH)/process_keycode
242
243
244 # We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
245 ifdef MCU_FAMILY
246         PLATFORM=CHIBIOS
247 else
248         PLATFORM=AVR
249 endif
250
251 include $(TMK_PATH)/common.mk
252 ifeq ($(PLATFORM),AVR)
253         include $(TMK_PATH)/protocol/lufa.mk
254         include $(TMK_PATH)/avr.mk
255 else ifeq ($(PLATFORM),CHIBIOS)
256         include $(TMK_PATH)/protocol/chibios.mk
257         include $(TMK_PATH)/chibios.mk
258         OPT_OS = chibios
259 else
260         $(error Unknown platform)
261 endif
262
263 ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
264         VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
265         VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
266         include $(VISUALIZER_PATH)/visualizer.mk
267 endif
268
269 include $(TMK_PATH)/rules.mk
270
271 GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
272 BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
273 OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
274
275 $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h)
276 $(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h)