| 1 | ifndef VERBOSE |
| 2 | .SILENT: |
| 3 | endif |
| 4 | |
| 5 | .DEFAULT_GOAL := all |
| 6 | |
| 7 | include common.mk |
| 8 | |
| 9 | # 5/4/3/2/1 |
| 10 | KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD) |
| 11 | KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1))) |
| 12 | KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2))) |
| 13 | KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3))) |
| 14 | KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4))) |
| 15 | KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1)) |
| 16 | KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2)) |
| 17 | KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3)) |
| 18 | KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4)) |
| 19 | KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5)) |
| 20 | |
| 21 | KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD)) |
| 22 | |
| 23 | TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP) |
| 24 | KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE) |
| 25 | |
| 26 | # Force expansion |
| 27 | TARGET := $(TARGET) |
| 28 | |
| 29 | MASTER ?= left |
| 30 | ifdef master |
| 31 | MASTER = $(master) |
| 32 | endif |
| 33 | |
| 34 | ifeq ($(MASTER),right) |
| 35 | OPT_DEFS += -DMASTER_IS_ON_RIGHT |
| 36 | else |
| 37 | ifneq ($(MASTER),left) |
| 38 | $(error MASTER does not have a valid value(left/right)) |
| 39 | endif |
| 40 | endif |
| 41 | |
| 42 | KEYBOARD_PATHS := |
| 43 | |
| 44 | KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1) |
| 45 | KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2) |
| 46 | KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3) |
| 47 | KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4) |
| 48 | KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5) |
| 49 | |
| 50 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","") |
| 51 | KEYBOARD_PATHS += $(KEYBOARD_PATH_5) |
| 52 | include $(KEYBOARD_PATH_5)/rules.mk |
| 53 | endif |
| 54 | ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","") |
| 55 | KEYBOARD_PATHS += $(KEYBOARD_PATH_4) |
| 56 | include $(KEYBOARD_PATH_4)/rules.mk |
| 57 | endif |
| 58 | ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","") |
| 59 | KEYBOARD_PATHS += $(KEYBOARD_PATH_3) |
| 60 | include $(KEYBOARD_PATH_3)/rules.mk |
| 61 | endif |
| 62 | ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","") |
| 63 | KEYBOARD_PATHS += $(KEYBOARD_PATH_2) |
| 64 | include $(KEYBOARD_PATH_2)/rules.mk |
| 65 | endif |
| 66 | ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","") |
| 67 | KEYBOARD_PATHS += $(KEYBOARD_PATH_1) |
| 68 | include $(KEYBOARD_PATH_1)/rules.mk |
| 69 | endif |
| 70 | |
| 71 | KEYBOARD_SRC := |
| 72 | |
| 73 | KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c |
| 74 | KEYBOARD_C_2 := $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).c |
| 75 | KEYBOARD_C_3 := $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).c |
| 76 | KEYBOARD_C_4 := $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).c |
| 77 | KEYBOARD_C_5 := $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).c |
| 78 | |
| 79 | ifneq ("$(wildcard $(KEYBOARD_C_5))","") |
| 80 | KEYBOARD_SRC += $(KEYBOARD_C_5) |
| 81 | endif |
| 82 | ifneq ("$(wildcard $(KEYBOARD_C_4))","") |
| 83 | KEYBOARD_SRC += $(KEYBOARD_C_4) |
| 84 | endif |
| 85 | ifneq ("$(wildcard $(KEYBOARD_C_3))","") |
| 86 | KEYBOARD_SRC += $(KEYBOARD_C_3) |
| 87 | endif |
| 88 | ifneq ("$(wildcard $(KEYBOARD_C_2))","") |
| 89 | KEYBOARD_SRC += $(KEYBOARD_C_2) |
| 90 | endif |
| 91 | ifneq ("$(wildcard $(KEYBOARD_C_1))","") |
| 92 | KEYBOARD_SRC += $(KEYBOARD_C_1) |
| 93 | endif |
| 94 | |
| 95 | OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE) |
| 96 | |
| 97 | |
| 98 | ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","") |
| 99 | QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h |
| 100 | endif |
| 101 | ifneq ("$(wildcard $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).h)","") |
| 102 | QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_2).h |
| 103 | endif |
| 104 | ifneq ("$(wildcard $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).h)","") |
| 105 | QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_3).h |
| 106 | endif |
| 107 | ifneq ("$(wildcard $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).h)","") |
| 108 | QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_4).h |
| 109 | endif |
| 110 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","") |
| 111 | QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h |
| 112 | endif |
| 113 | |
| 114 | # We can assume a ChibiOS target When MCU_FAMILY is defined , since it's not used for LUFA |
| 115 | ifdef MCU_FAMILY |
| 116 | FIRMWARE_FORMAT=bin |
| 117 | PLATFORM=CHIBIOS |
| 118 | else |
| 119 | PLATFORM=AVR |
| 120 | FIRMWARE_FORMAT=hex |
| 121 | endif |
| 122 | |
| 123 | ifeq ($(PLATFORM),CHIBIOS) |
| 124 | include $(TMK_PATH)/chibios.mk |
| 125 | OPT_OS = chibios |
| 126 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/bootloader_defs.h)","") |
| 127 | OPT_DEFS += -include $(KEYBOARD_PATH_5)/bootloader_defs.h |
| 128 | else ifneq ("$(wildcard $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h)","") |
| 129 | OPT_DEFS += -include $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h |
| 130 | else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/bootloader_defs.h)","") |
| 131 | OPT_DEFS += -include $(KEYBOARD_PATH_4)/bootloader_defs.h |
| 132 | else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h)","") |
| 133 | OPT_DEFS += -include $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h |
| 134 | else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/bootloader_defs.h)","") |
| 135 | OPT_DEFS += -include $(KEYBOARD_PATH_3)/bootloader_defs.h |
| 136 | else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h)","") |
| 137 | OPT_DEFS += -include $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h |
| 138 | else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/bootloader_defs.h)","") |
| 139 | OPT_DEFS += -include $(KEYBOARD_PATH_2)/bootloader_defs.h |
| 140 | else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h)","") |
| 141 | OPT_DEFS += -include $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h |
| 142 | else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/bootloader_defs.h)","") |
| 143 | OPT_DEFS += -include $(KEYBOARD_PATH_1)/bootloader_defs.h |
| 144 | else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h)","") |
| 145 | OPT_DEFS += -include $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h |
| 146 | else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/$(BOARD)/bootloader_defs.h)","") |
| 147 | OPT_DEFS += -include $(TOP_DIR)/drivers/boards/$(BOARD)/bootloader_defs.h |
| 148 | endif |
| 149 | endif |
| 150 | |
| 151 | CONFIG_H := |
| 152 | ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","") |
| 153 | CONFIG_H += $(KEYBOARD_PATH_5)/config.h |
| 154 | endif |
| 155 | ifneq ("$(wildcard $(KEYBOARD_PATH_4)/config.h)","") |
| 156 | CONFIG_H += $(KEYBOARD_PATH_4)/config.h |
| 157 | endif |
| 158 | ifneq ("$(wildcard $(KEYBOARD_PATH_3)/config.h)","") |
| 159 | CONFIG_H += $(KEYBOARD_PATH_3)/config.h |
| 160 | endif |
| 161 | ifneq ("$(wildcard $(KEYBOARD_PATH_2)/config.h)","") |
| 162 | CONFIG_H += $(KEYBOARD_PATH_2)/config.h |
| 163 | endif |
| 164 | ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","") |
| 165 | CONFIG_H += $(KEYBOARD_PATH_1)/config.h |
| 166 | endif |
| 167 | |
| 168 | # Save the defines and includes here, so we don't include any keymap specific ones |
| 169 | PROJECT_DEFS := $(OPT_DEFS) |
| 170 | PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS) |
| 171 | PROJECT_CONFIG := $(CONFIG_H) |
| 172 | |
| 173 | MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP) |
| 174 | MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP) |
| 175 | MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP) |
| 176 | MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP) |
| 177 | MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP) |
| 178 | |
| 179 | ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","") |
| 180 | -include $(MAIN_KEYMAP_PATH_5)/rules.mk |
| 181 | KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c |
| 182 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5) |
| 183 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","") |
| 184 | -include $(MAIN_KEYMAP_PATH_4)/rules.mk |
| 185 | KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c |
| 186 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4) |
| 187 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","") |
| 188 | -include $(MAIN_KEYMAP_PATH_3)/rules.mk |
| 189 | KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c |
| 190 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3) |
| 191 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","") |
| 192 | -include $(MAIN_KEYMAP_PATH_2)/rules.mk |
| 193 | KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c |
| 194 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2) |
| 195 | else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","") |
| 196 | -include $(MAIN_KEYMAP_PATH_1)/rules.mk |
| 197 | KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c |
| 198 | KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1) |
| 199 | else ifneq ($(LAYOUTS),) |
| 200 | include build_layout.mk |
| 201 | else |
| 202 | $(error Could not find keymap) |
| 203 | # this state should never be reached |
| 204 | endif |
| 205 | |
| 206 | # User space stuff |
| 207 | ifeq ("$(USER_NAME)","") |
| 208 | USER_NAME := $(KEYMAP) |
| 209 | endif |
| 210 | USER_PATH := users/$(USER_NAME) |
| 211 | |
| 212 | -include $(USER_PATH)/rules.mk |
| 213 | ifneq ("$(wildcard $(USER_PATH)/config.h)","") |
| 214 | CONFIG_H += $(USER_PATH)/config.h |
| 215 | endif |
| 216 | |
| 217 | |
| 218 | # Object files directory |
| 219 | # To put object files in current directory, use a dot (.), do NOT make |
| 220 | # this an empty or blank macro! |
| 221 | KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) |
| 222 | |
| 223 | ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") |
| 224 | CONFIG_H += $(KEYMAP_PATH)/config.h |
| 225 | endif |
| 226 | |
| 227 | # # project specific files |
| 228 | SRC += $(KEYBOARD_SRC) \ |
| 229 | $(KEYMAP_C) \ |
| 230 | $(QUANTUM_SRC) |
| 231 | |
| 232 | # Optimize size but this may cause error "relocation truncated to fit" |
| 233 | #EXTRALDFLAGS = -Wl,--relax |
| 234 | |
| 235 | # Search Path |
| 236 | VPATH += $(KEYMAP_PATH) |
| 237 | VPATH += $(KEYBOARD_PATHS) |
| 238 | VPATH += $(COMMON_VPATH) |
| 239 | VPATH += $(USER_PATH) |
| 240 | |
| 241 | include common_features.mk |
| 242 | include $(TMK_PATH)/protocol.mk |
| 243 | include $(TMK_PATH)/common.mk |
| 244 | include bootloader.mk |
| 245 | |
| 246 | SRC += $(TMK_COMMON_SRC) |
| 247 | OPT_DEFS += $(TMK_COMMON_DEFS) |
| 248 | EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS) |
| 249 | |
| 250 | ifeq ($(PLATFORM),AVR) |
| 251 | ifeq ($(strip $(PROTOCOL)), VUSB) |
| 252 | include $(TMK_PATH)/protocol/vusb.mk |
| 253 | else |
| 254 | include $(TMK_PATH)/protocol/lufa.mk |
| 255 | endif |
| 256 | include $(TMK_PATH)/avr.mk |
| 257 | endif |
| 258 | |
| 259 | ifeq ($(PLATFORM),CHIBIOS) |
| 260 | include $(TMK_PATH)/protocol/chibios.mk |
| 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 | ALL_CONFIGS := $(PROJECT_CONFIG) $(CONFIG_H) |
| 270 | |
| 271 | OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) |
| 272 | $(KEYMAP_OUTPUT)_SRC := $(SRC) |
| 273 | $(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) $(GFXDEFS) \ |
| 274 | -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(QMK_KEYBOARD_H)\" -DQMK_KEYBOARD_CONFIG_H=\"$(KEYBOARD_PATH_1)/config.h\" \ |
| 275 | -DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\" \ |
| 276 | -DQMK_SUBPROJECT -DQMK_SUBPROJECT_H -DQMK_SUBPROJECT_CONFIG_H |
| 277 | $(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS) |
| 278 | $(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H) |
| 279 | $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) $(GFXSRC) |
| 280 | $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) $(GFXDEFS) |
| 281 | $(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) $(GFXINC) |
| 282 | $(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG) |
| 283 | |
| 284 | # Default target. |
| 285 | all: build check-size |
| 286 | |
| 287 | # Change the build target to build a HEX file or a library. |
| 288 | build: elf cpfirmware |
| 289 | #build: elf hex eep lss sym |
| 290 | #build: lib |
| 291 | |
| 292 | |
| 293 | include $(TMK_PATH)/rules.mk |