diff options
| author | Fred Sundvik <fsundvik@gmail.com> | 2016-08-01 09:23:37 +0300 |
|---|---|---|
| committer | Fred Sundvik <fsundvik@gmail.com> | 2016-08-20 03:24:40 +0300 |
| commit | 86706de036cf7ad52b679b259ca8f980057d0da5 (patch) | |
| tree | 1db785404e7dc389357de1885bf6e73a825b50e4 /build_keyboard.mk | |
| parent | a3a312f8f4f4d836de494fe3502ea3175ba2a22c (diff) | |
| download | qmk_firmware-86706de036cf7ad52b679b259ca8f980057d0da5.tar.gz qmk_firmware-86706de036cf7ad52b679b259ca8f980057d0da5.zip | |
Parsing of makefile variables from starting dir
Diffstat (limited to 'build_keyboard.mk')
| -rw-r--r-- | build_keyboard.mk | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk new file mode 100644 index 000000000..053c8532a --- /dev/null +++ b/build_keyboard.mk | |||
| @@ -0,0 +1,276 @@ | |||
| 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) \ No newline at end of file | ||
