diff options
Diffstat (limited to 'build_keyboard.mk')
| -rw-r--r-- | build_keyboard.mk | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk new file mode 100644 index 000000000..f843572f6 --- /dev/null +++ b/build_keyboard.mk | |||
| @@ -0,0 +1,221 @@ | |||
| 1 | ifndef VERBOSE | ||
| 2 | .SILENT: | ||
| 3 | endif | ||
| 4 | |||
| 5 | .DEFAULT_GOAL := all | ||
| 6 | |||
| 7 | include message.mk | ||
| 8 | |||
| 9 | |||
| 10 | # Directory common source filess exist | ||
| 11 | TOP_DIR = . | ||
| 12 | TMK_DIR = tmk_core | ||
| 13 | TMK_PATH = $(TOP_DIR)/$(TMK_DIR) | ||
| 14 | LIB_PATH = $(TOP_DIR)/lib | ||
| 15 | |||
| 16 | QUANTUM_DIR = quantum | ||
| 17 | QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) | ||
| 18 | |||
| 19 | BUILD_DIR := $(TOP_DIR)/.build | ||
| 20 | |||
| 21 | ifneq ($(SUBPROJECT),) | ||
| 22 | TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) | ||
| 23 | KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT) | ||
| 24 | else | ||
| 25 | TARGET ?= $(KEYBOARD)_$(KEYMAP) | ||
| 26 | KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD) | ||
| 27 | endif | ||
| 28 | |||
| 29 | # Force expansion | ||
| 30 | TARGET := $(TARGET) | ||
| 31 | |||
| 32 | |||
| 33 | MASTER ?= left | ||
| 34 | ifdef master | ||
| 35 | MASTER = $(master) | ||
| 36 | endif | ||
| 37 | |||
| 38 | KEYBOARD_PATH := keyboards/$(KEYBOARD) | ||
| 39 | KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c | ||
| 40 | |||
| 41 | ifneq ("$(wildcard $(KEYBOARD_C))","") | ||
| 42 | include $(KEYBOARD_PATH)/rules.mk | ||
| 43 | else | ||
| 44 | $(error "$(KEYBOARD_C)" does not exist) | ||
| 45 | endif | ||
| 46 | |||
| 47 | |||
| 48 | ifneq ($(SUBPROJECT),) | ||
| 49 | SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT) | ||
| 50 | SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c | ||
| 51 | ifneq ("$(wildcard $(SUBPROJECT_C))","") | ||
| 52 | OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) | ||
| 53 | include $(SUBPROJECT_PATH)/rules.mk | ||
| 54 | else | ||
| 55 | $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) | ||
| 56 | endif | ||
| 57 | endif | ||
| 58 | |||
| 59 | # We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA | ||
| 60 | ifdef MCU_FAMILY | ||
| 61 | PLATFORM=CHIBIOS | ||
| 62 | else | ||
| 63 | PLATFORM=AVR | ||
| 64 | endif | ||
| 65 | |||
| 66 | ifeq ($(PLATFORM),CHIBIOS) | ||
| 67 | include $(TMK_PATH)/protocol/chibios.mk | ||
| 68 | include $(TMK_PATH)/chibios.mk | ||
| 69 | OPT_OS = chibios | ||
| 70 | ifneq ("$(wildcard $(SUBPROJECT_PATH)/bootloader_defs.h)","") | ||
| 71 | OPT_DEFS += -include $(SUBPROJECT_PATH)/bootloader_defs.h | ||
| 72 | else ifneq ("$(wildcard $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h)","") | ||
| 73 | OPT_DEFS += -include $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h | ||
| 74 | else ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","") | ||
| 75 | OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h | ||
| 76 | else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","") | ||
| 77 | OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h | ||
| 78 | endif | ||
| 79 | endif | ||
| 80 | |||
| 81 | CONFIG_H = $(KEYBOARD_PATH)/config.h | ||
| 82 | ifneq ($(SUBPROJECT),) | ||
| 83 | ifneq ("$(wildcard $(SUBPROJECT_C))","") | ||
| 84 | CONFIG_H = $(SUBPROJECT_PATH)/config.h | ||
| 85 | endif | ||
| 86 | endif | ||
| 87 | |||
| 88 | # Save the defines and includes here, so we don't include any keymap specific ones | ||
| 89 | PROJECT_DEFS := $(OPT_DEFS) | ||
| 90 | PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH) | ||
| 91 | PROJECT_CONFIG := $(CONFIG_H) | ||
| 92 | |||
| 93 | MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP) | ||
| 94 | MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c | ||
| 95 | SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) | ||
| 96 | SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c | ||
| 97 | ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","") | ||
| 98 | -include $(SUBPROJ_KEYMAP_PATH)/Makefile | ||
| 99 | KEYMAP_C := $(SUBPROJ_KEYMAP_C) | ||
| 100 | KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH) | ||
| 101 | else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","") | ||
| 102 | -include $(MAIN_KEYMAP_PATH)/Makefile | ||
| 103 | KEYMAP_C := $(MAIN_KEYMAP_C) | ||
| 104 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH) | ||
| 105 | else | ||
| 106 | $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist) | ||
| 107 | endif | ||
| 108 | |||
| 109 | |||
| 110 | # Object files directory | ||
| 111 | # To put object files in current directory, use a dot (.), do NOT make | ||
| 112 | # this an empty or blank macro! | ||
| 113 | KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) | ||
| 114 | |||
| 115 | |||
| 116 | ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") | ||
| 117 | CONFIG_H = $(KEYMAP_PATH)/config.h | ||
| 118 | endif | ||
| 119 | |||
| 120 | # # project specific files | ||
| 121 | SRC += $(KEYBOARD_C) \ | ||
| 122 | $(KEYMAP_C) \ | ||
| 123 | $(QUANTUM_DIR)/quantum.c \ | ||
| 124 | $(QUANTUM_DIR)/keymap_common.c \ | ||
| 125 | $(QUANTUM_DIR)/keycode_config.c \ | ||
| 126 | $(QUANTUM_DIR)/process_keycode/process_leader.c | ||
| 127 | |||
| 128 | ifneq ($(SUBPROJECT),) | ||
| 129 | SRC += $(SUBPROJECT_C) | ||
| 130 | endif | ||
| 131 | |||
| 132 | ifndef CUSTOM_MATRIX | ||
| 133 | SRC += $(QUANTUM_DIR)/matrix.c | ||
| 134 | endif | ||
| 135 | |||
| 136 | ifeq ($(strip $(MIDI_ENABLE)), yes) | ||
| 137 | OPT_DEFS += -DMIDI_ENABLE | ||
| 138 | SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c | ||
| 139 | endif | ||
| 140 | |||
| 141 | ifeq ($(strip $(VIRTSER_ENABLE)), yes) | ||
| 142 | OPT_DEFS += -DVIRTSER_ENABLE | ||
| 143 | endif | ||
| 144 | |||
| 145 | ifeq ($(strip $(AUDIO_ENABLE)), yes) | ||
| 146 | OPT_DEFS += -DAUDIO_ENABLE | ||
| 147 | SRC += $(QUANTUM_DIR)/process_keycode/process_music.c | ||
| 148 | SRC += $(QUANTUM_DIR)/audio/audio.c | ||
| 149 | SRC += $(QUANTUM_DIR)/audio/voices.c | ||
| 150 | SRC += $(QUANTUM_DIR)/audio/luts.c | ||
| 151 | endif | ||
| 152 | |||
| 153 | ifeq ($(strip $(UNICODE_ENABLE)), yes) | ||
| 154 | OPT_DEFS += -DUNICODE_ENABLE | ||
| 155 | SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c | ||
| 156 | endif | ||
| 157 | |||
| 158 | ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) | ||
| 159 | OPT_DEFS += -DRGBLIGHT_ENABLE | ||
| 160 | SRC += $(QUANTUM_DIR)/light_ws2812.c | ||
| 161 | SRC += $(QUANTUM_DIR)/rgblight.c | ||
| 162 | endif | ||
| 163 | |||
| 164 | ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) | ||
| 165 | OPT_DEFS += -DTAP_DANCE_ENABLE | ||
| 166 | SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c | ||
| 167 | endif | ||
| 168 | |||
| 169 | ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) | ||
| 170 | SERIAL_DIR = $(QUANTUM_DIR)/serial_link | ||
| 171 | SERIAL_PATH = $(QUANTUM_PATH)/serial_link | ||
| 172 | SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) | ||
| 173 | SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) | ||
| 174 | SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) | ||
| 175 | OPT_DEFS += -DSERIAL_LINK_ENABLE | ||
| 176 | VAPTH += $(SERIAL_PATH) | ||
| 177 | endif | ||
| 178 | |||
| 179 | # Optimize size but this may cause error "relocation truncated to fit" | ||
| 180 | #EXTRALDFLAGS = -Wl,--relax | ||
| 181 | |||
| 182 | # Search Path | ||
| 183 | VPATH += $(KEYMAP_PATH) | ||
| 184 | ifneq ($(SUBPROJECT),) | ||
| 185 | VPATH += $(SUBPROJECT_PATH) | ||
| 186 | endif | ||
| 187 | VPATH += $(KEYBOARD_PATH) | ||
| 188 | VPATH += $(TOP_DIR) | ||
| 189 | VPATH += $(TMK_PATH) | ||
| 190 | VPATH += $(QUANTUM_PATH) | ||
| 191 | VPATH += $(QUANTUM_PATH)/keymap_extras | ||
| 192 | VPATH += $(QUANTUM_PATH)/audio | ||
| 193 | VPATH += $(QUANTUM_PATH)/process_keycode | ||
| 194 | |||
| 195 | |||
| 196 | include $(TMK_PATH)/common.mk | ||
| 197 | ifeq ($(PLATFORM),AVR) | ||
| 198 | include $(TMK_PATH)/protocol/lufa.mk | ||
| 199 | include $(TMK_PATH)/avr.mk | ||
| 200 | endif | ||
| 201 | |||
| 202 | ifeq ($(strip $(VISUALIZER_ENABLE)), yes) | ||
| 203 | VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer | ||
| 204 | VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer | ||
| 205 | include $(VISUALIZER_PATH)/visualizer.mk | ||
| 206 | endif | ||
| 207 | |||
| 208 | |||
| 209 | OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) | ||
| 210 | $(KEYMAP_OUTPUT)_SRC := $(SRC) | ||
| 211 | $(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" | ||
| 212 | $(KEYMAP_OUTPUT)_INC := $(EXTRAINCDIRS) $(VPATH) | ||
| 213 | $(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H) | ||
| 214 | $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) | ||
| 215 | $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) | ||
| 216 | $(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) | ||
| 217 | $(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG) | ||
| 218 | |||
| 219 | |||
| 220 | include $(TMK_PATH)/rules.mk | ||
| 221 | |||
