]> git.donarmstrong.com Git - qmk_firmware.git/blob - Makefile
Moves features to their own files (process_*), adds tap dance feature (#460)
[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 ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
69         KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
70         ifndef ARCH
71                 include $(KEYBOARD_PATH)/Makefile
72         endif
73 else 
74 $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
75 endif
76
77 ifdef sub
78         SUBPROJECT=$(sub)
79 endif
80 ifdef subproject
81         SUBPROJECT=$(subproject)
82 endif
83
84 ifdef SUBPROJECT_DEFAULT
85         SUBPROJECT?=$(SUBPROJECT_DEFAULT)
86 endif
87
88 ifdef SUBPROJECT
89         SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)
90         ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
91                 OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
92                 SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
93                 -include $(SUBPROJECT_PATH)/Makefile
94         else 
95 $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
96         endif
97 endif
98
99 ifdef keymap
100         KEYMAP ?= $(keymap)
101 endif
102 ifdef KEYMAP_DIR
103         KEYMAP ?= $(KEYMAP_DIR)
104 endif
105 ifndef KEYMAP
106         KEYMAP = default
107 endif
108 KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
109 ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
110         KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
111         -include $(KEYMAP_PATH)/Makefile
112 else 
113 $(error "$(KEYMAP_PATH)/keymap.c" does not exist)
114 endif
115
116 ifdef SUBPROJECT
117         TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
118 else
119         TARGET ?= $(KEYBOARD)_$(KEYMAP)
120 endif
121
122
123 ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
124         CONFIG_H = $(KEYMAP_PATH)/config.h
125 else
126         CONFIG_H = $(KEYBOARD_PATH)/config.h
127         ifdef SUBPROJECT
128                 ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
129                         CONFIG_H = $(SUBPROJECT_PATH)/config.h
130                 endif
131         endif
132 endif
133
134 # # project specific files
135 SRC += $(KEYBOARD_FILE) \
136         $(KEYMAP_FILE) \
137         $(QUANTUM_DIR)/quantum.c \
138         $(QUANTUM_DIR)/keymap.c \
139         $(QUANTUM_DIR)/keycode_config.c \
140         $(QUANTUM_DIR)/process_keycode/process_leader.c
141
142 ifdef SUBPROJECT
143         SRC += $(SUBPROJECT_FILE)
144 endif
145
146 ifdef SUBPROJECT
147         SRC += $(SUBPROJECT_FILE)
148 endif
149
150 ifdef SUBPROJECT
151         SRC += $(SUBPROJECT_FILE)
152 endif
153
154 ifndef CUSTOM_MATRIX
155         SRC += $(QUANTUM_DIR)/matrix.c
156 endif
157
158 ifeq ($(strip $(MIDI_ENABLE)), yes)
159     OPT_DEFS += -DMIDI_ENABLE
160         SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
161 endif
162
163 ifeq ($(strip $(AUDIO_ENABLE)), yes)
164     OPT_DEFS += -DAUDIO_ENABLE
165         SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
166         SRC += $(QUANTUM_DIR)/audio/audio.c
167         SRC += $(QUANTUM_DIR)/audio/voices.c
168         SRC += $(QUANTUM_DIR)/audio/luts.c
169 endif
170
171 ifeq ($(strip $(UNICODE_ENABLE)), yes)
172     OPT_DEFS += -DUNICODE_ENABLE
173         SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
174 endif
175
176 ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
177         OPT_DEFS += -DRGBLIGHT_ENABLE
178         SRC += $(QUANTUM_DIR)/light_ws2812.c
179         SRC += $(QUANTUM_DIR)/rgblight.c
180 endif
181
182 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
183   OPT_DEFS += -DTAP_DANCE_ENABLE
184         SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
185 endif
186
187 # Optimize size but this may cause error "relocation truncated to fit"
188 #EXTRALDFLAGS = -Wl,--relax
189
190 # Search Path
191 VPATH += $(KEYMAP_PATH)
192 ifdef SUBPROJECT
193         VPATH += $(SUBPROJECT_PATH)
194 endif
195 VPATH += $(KEYBOARD_PATH)
196 VPATH += $(TOP_DIR)
197 VPATH += $(TMK_PATH)
198 VPATH += $(QUANTUM_PATH)
199 VPATH += $(QUANTUM_PATH)/keymap_extras
200 VPATH += $(QUANTUM_PATH)/audio
201 VPATH += $(QUANTUM_PATH)/process_keycode
202
203 include $(TMK_PATH)/protocol/lufa.mk
204 include $(TMK_PATH)/common.mk
205 include $(TMK_PATH)/rules.mk
206
207 GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
208 BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
209 OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
210 OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\"