]> git.donarmstrong.com Git - qmk_firmware.git/blob - Makefile
f9b865b9f8f4778b527b2bced8e93a20638ea018
[qmk_firmware.git] / Makefile
1 ifndef VERBOSE
2 .SILENT:
3 endif
4
5 space := $(subst ,, )
6 starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST))))
7 mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST))))
8 abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
9
10 ifneq (,$(findstring /keyboards/,$(starting_makefile)))
11         possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile))))
12         ifneq (,$(findstring /keymaps/,$(possible_keyboard)))
13                 KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard)))
14                 KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard)))
15                 ifneq (,$(findstring /,$(KEYBOARD_DIR)))
16                         # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
17                         # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
18                         tmk_root = ../../..
19                 else
20                         tmk_root = ../../../..
21                 endif
22         else
23                 KEYMAP_DIR:=default
24                 KEYBOARD_DIR:=$(possible_keyboard)
25                 ifneq (,$(findstring /,$(KEYBOARD_DIR)))
26                         # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
27                         # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
28                         tmk_root = ../../..
29                 else
30                         tmk_root = ../..
31                 endif
32         endif
33 else
34         tmk_root = .
35 endif
36 # $(info $(KEYBOARD_DIR))
37 # $(info $(KEYMAP_DIR))
38 # $(info $(SUBPROJECT_DIR))
39
40 # Directory common source filess exist
41 TOP_DIR = $(tmk_root)
42 TMK_DIR = tmk_core
43 TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
44
45 QUANTUM_DIR = quantum
46 QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
47
48
49 ifdef keyboard
50         KEYBOARD ?= $(keyboard)
51 endif
52 ifdef KEYBOARD_DIR
53         KEYBOARD ?= $(KEYBOARD_DIR)
54 endif
55 ifndef KEYBOARD
56         KEYBOARD=planck
57 endif
58
59 # converts things to keyboards/subproject
60 ifneq (,$(findstring /,$(KEYBOARD)))
61         TEMP:=$(KEYBOARD)
62         KEYBOARD:=$(firstword $(subst /, ,$(TEMP)))
63         SUBPROJECT:=$(lastword $(subst /, ,$(TEMP)))
64 endif
65
66 KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)
67
68 ifdef sub
69         SUBPROJECT=$(sub)
70 endif
71 ifdef subproject
72         SUBPROJECT=$(subproject)
73 endif
74
75 ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
76         KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
77         ifndef ARCH
78                 ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","")
79                         include $(KEYBOARD_PATH)/Makefile
80                 endif
81         endif
82 else 
83 $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
84 endif
85
86 ifdef SUBPROJECT_DEFAULT
87         SUBPROJECT?=$(SUBPROJECT_DEFAULT)
88 endif
89
90 ifdef SUBPROJECT
91         SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)
92         ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
93                 OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
94                 SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
95                 -include $(SUBPROJECT_PATH)/Makefile
96         else 
97 $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
98         endif
99 endif
100
101 ifdef keymap
102         KEYMAP ?= $(keymap)
103 endif
104 ifdef KEYMAP_DIR
105         KEYMAP ?= $(KEYMAP_DIR)
106 endif
107 ifndef KEYMAP
108         KEYMAP = default
109 endif
110 KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
111 ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
112         KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
113         -include $(KEYMAP_PATH)/Makefile
114 else 
115         ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
116 $(error "$(KEYMAP_PATH)/keymap.c" does not exist)
117         else
118                 KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
119                 KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c
120                 -include $(KEYMAP_PATH)/Makefile
121         endif
122 endif
123
124 ifdef SUBPROJECT
125         TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
126 else
127         TARGET ?= $(KEYBOARD)_$(KEYMAP)
128 endif
129
130
131 ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
132         CONFIG_H = $(KEYMAP_PATH)/config.h
133 else
134         CONFIG_H = $(KEYBOARD_PATH)/config.h
135         ifdef SUBPROJECT
136                 ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
137                         CONFIG_H = $(SUBPROJECT_PATH)/config.h
138                 endif
139         endif
140 endif
141
142 # # project specific files
143 SRC += $(KEYBOARD_FILE) \
144         $(KEYMAP_FILE) \
145         $(QUANTUM_DIR)/quantum.c \
146         $(QUANTUM_DIR)/keymap.c \
147         $(QUANTUM_DIR)/keycode_config.c \
148         $(QUANTUM_DIR)/process_keycode/process_leader.c
149
150 ifdef SUBPROJECT
151         SRC += $(SUBPROJECT_FILE)
152 endif
153
154 ifdef SUBPROJECT
155         SRC += $(SUBPROJECT_FILE)
156 endif
157
158 ifdef SUBPROJECT
159         SRC += $(SUBPROJECT_FILE)
160 endif
161
162 ifndef CUSTOM_MATRIX
163         SRC += $(QUANTUM_DIR)/matrix.c
164 endif
165
166 ifeq ($(strip $(MIDI_ENABLE)), yes)
167     OPT_DEFS += -DMIDI_ENABLE
168         SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
169 endif
170
171 ifeq ($(strip $(AUDIO_ENABLE)), yes)
172     OPT_DEFS += -DAUDIO_ENABLE
173         SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
174         SRC += $(QUANTUM_DIR)/audio/audio.c
175         SRC += $(QUANTUM_DIR)/audio/voices.c
176         SRC += $(QUANTUM_DIR)/audio/luts.c
177 endif
178
179 ifeq ($(strip $(UNICODE_ENABLE)), yes)
180     OPT_DEFS += -DUNICODE_ENABLE
181         SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
182 endif
183
184 ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
185         OPT_DEFS += -DRGBLIGHT_ENABLE
186         SRC += $(QUANTUM_DIR)/light_ws2812.c
187         SRC += $(QUANTUM_DIR)/rgblight.c
188 endif
189
190 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
191   OPT_DEFS += -DTAP_DANCE_ENABLE
192         SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
193 endif
194
195 # Optimize size but this may cause error "relocation truncated to fit"
196 #EXTRALDFLAGS = -Wl,--relax
197
198 # Search Path
199 VPATH += $(KEYMAP_PATH)
200 ifdef SUBPROJECT
201         VPATH += $(SUBPROJECT_PATH)
202 endif
203 VPATH += $(KEYBOARD_PATH)
204 VPATH += $(TOP_DIR)
205 VPATH += $(TMK_PATH)
206 VPATH += $(QUANTUM_PATH)
207 VPATH += $(QUANTUM_PATH)/keymap_extras
208 VPATH += $(QUANTUM_PATH)/audio
209 VPATH += $(QUANTUM_PATH)/process_keycode
210
211 include $(TMK_PATH)/protocol/lufa.mk
212 include $(TMK_PATH)/common.mk
213 include $(TMK_PATH)/rules.mk
214
215 GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
216 BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
217 OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
218 OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\"