X-Git-Url: https://git.donarmstrong.com/?p=qmk_firmware.git;a=blobdiff_plain;f=build_keyboard.mk;h=b086420653f4e6dbaec7e6f32a1d528a92d7d7be;hp=79d2b6b0f0703108b7e4153131df6b76ef7dfffc;hb=c6442998208a3e06695ac670ad0786100aee7040;hpb=f113f95440f8cd7377930868656caf515dbd609c diff --git a/build_keyboard.mk b/build_keyboard.mk index 79d2b6b0f..b08642065 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk @@ -1,3 +1,9 @@ +# Determine what keyboard we are building and setup the build environment. +# +# We support folders up to 5 levels deep below `keyboards/`. This file is +# responsible for determining which folder is being used and doing the +# corresponding environment setup. + ifndef VERBOSE .SILENT: endif @@ -6,297 +12,393 @@ endif include common.mk -ifneq ($(SUBPROJECT),) - TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) - KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT) -else - TARGET ?= $(KEYBOARD)_$(KEYMAP) - KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD) -endif +# Set the filename for the final firmware binary +KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD)) +TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP) +KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE) +STM32_PATH := quantum/stm32 # Force expansion TARGET := $(TARGET) - +# For split boards we need to set a master half. MASTER ?= left ifdef master - MASTER = $(master) + MASTER = $(master) endif ifeq ($(MASTER),right) - OPT_DEFS += -DMASTER_IS_ON_RIGHT + OPT_DEFS += -DMASTER_IS_ON_RIGHT else - ifneq ($(MASTER),left) + ifneq ($(MASTER),left) $(error MASTER does not have a valid value(left/right)) - endif -endif - - - -KEYBOARD_PATH := keyboards/$(KEYBOARD) -KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c - -ifneq ("$(wildcard $(KEYBOARD_C))","") - include $(KEYBOARD_PATH)/rules.mk -else - $(error "$(KEYBOARD_C)" does not exist) + endif endif - -ifneq ($(SUBPROJECT),) - SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT) - SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c - ifneq ("$(wildcard $(SUBPROJECT_C))","") - OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) - include $(SUBPROJECT_PATH)/rules.mk +ifdef SKIP_VERSION + OPT_DEFS += -DSKIP_VERSION +endif + +# Determine which subfolders exist. +KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD) +KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1))) +KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2))) +KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3))) +KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4))) +KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1)) +KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2)) +KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3)) +KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4)) +KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5)) +KEYBOARD_PATHS := +KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1) +KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2) +KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3) +KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4) +KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5) + +ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","") + KEYBOARD_PATHS += $(KEYBOARD_PATH_5) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","") + KEYBOARD_PATHS += $(KEYBOARD_PATH_4) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","") + KEYBOARD_PATHS += $(KEYBOARD_PATH_3) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","") + KEYBOARD_PATHS += $(KEYBOARD_PATH_2) +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","") + KEYBOARD_PATHS += $(KEYBOARD_PATH_1) +endif + + +# Pull in rules.mk files from all our subfolders +ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","") + include $(KEYBOARD_PATH_5)/rules.mk +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","") + include $(KEYBOARD_PATH_4)/rules.mk +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","") + include $(KEYBOARD_PATH_3)/rules.mk +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","") + include $(KEYBOARD_PATH_2)/rules.mk +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","") + include $(KEYBOARD_PATH_1)/rules.mk +endif + + +MAIN_KEYMAP_PATH_1 := $(KEYBOARD_PATH_1)/keymaps/$(KEYMAP) +MAIN_KEYMAP_PATH_2 := $(KEYBOARD_PATH_2)/keymaps/$(KEYMAP) +MAIN_KEYMAP_PATH_3 := $(KEYBOARD_PATH_3)/keymaps/$(KEYMAP) +MAIN_KEYMAP_PATH_4 := $(KEYBOARD_PATH_4)/keymaps/$(KEYMAP) +MAIN_KEYMAP_PATH_5 := $(KEYBOARD_PATH_5)/keymaps/$(KEYMAP) + +# Check for keymap.json first, so we can regenerate keymap.c +include build_json.mk + +ifeq ("$(wildcard $(KEYMAP_PATH))", "") + # Look through the possible keymap folders until we find a matching keymap.c + ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_5)/keymap.c)","") + -include $(MAIN_KEYMAP_PATH_5)/rules.mk + KEYMAP_C := $(MAIN_KEYMAP_PATH_5)/keymap.c + KEYMAP_PATH := $(MAIN_KEYMAP_PATH_5) + else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_4)/keymap.c)","") + -include $(MAIN_KEYMAP_PATH_4)/rules.mk + KEYMAP_C := $(MAIN_KEYMAP_PATH_4)/keymap.c + KEYMAP_PATH := $(MAIN_KEYMAP_PATH_4) + else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_3)/keymap.c)","") + -include $(MAIN_KEYMAP_PATH_3)/rules.mk + KEYMAP_C := $(MAIN_KEYMAP_PATH_3)/keymap.c + KEYMAP_PATH := $(MAIN_KEYMAP_PATH_3) + else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_2)/keymap.c)","") + -include $(MAIN_KEYMAP_PATH_2)/rules.mk + KEYMAP_C := $(MAIN_KEYMAP_PATH_2)/keymap.c + KEYMAP_PATH := $(MAIN_KEYMAP_PATH_2) + else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.c)","") + -include $(MAIN_KEYMAP_PATH_1)/rules.mk + KEYMAP_C := $(MAIN_KEYMAP_PATH_1)/keymap.c + KEYMAP_PATH := $(MAIN_KEYMAP_PATH_1) + else ifneq ($(LAYOUTS),) + # If we haven't found a keymap yet fall back to community layouts + include build_layout.mk else - $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) + $(error Could not find keymap) + # this state should never be reached endif endif -# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA -ifdef MCU_FAMILY - PLATFORM=CHIBIOS -else - PLATFORM=AVR +ifeq ($(strip $(CTPC)), yes) + CONVERT_TO_PROTON_C=yes endif -ifeq ($(PLATFORM),CHIBIOS) - include $(TMK_PATH)/protocol/chibios.mk - include $(TMK_PATH)/chibios.mk - OPT_OS = chibios - ifneq ("$(wildcard $(SUBPROJECT_PATH)/bootloader_defs.h)","") - OPT_DEFS += -include $(SUBPROJECT_PATH)/bootloader_defs.h - else ifneq ("$(wildcard $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h)","") - OPT_DEFS += -include $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h - else ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","") - OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h - else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","") - OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h - endif -endif - -CONFIG_H = $(KEYBOARD_PATH)/config.h -ifneq ($(SUBPROJECT),) - ifneq ("$(wildcard $(SUBPROJECT_C))","") - CONFIG_H = $(SUBPROJECT_PATH)/config.h - endif +ifeq ($(strip $(CONVERT_TO_PROTON_C)), yes) + TARGET := $(TARGET)_proton_c + include $(STM32_PATH)/proton_c.mk + OPT_DEFS += -DCONVERT_TO_PROTON_C endif -# Save the defines and includes here, so we don't include any keymap specific ones -PROJECT_DEFS := $(OPT_DEFS) -PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH) -PROJECT_CONFIG := $(CONFIG_H) - -MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP) -MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c -SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) -SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c -ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","") - -include $(SUBPROJ_KEYMAP_PATH)/Makefile - KEYMAP_C := $(SUBPROJ_KEYMAP_C) - KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH) -else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","") - -include $(MAIN_KEYMAP_PATH)/Makefile - KEYMAP_C := $(MAIN_KEYMAP_C) - KEYMAP_PATH := $(MAIN_KEYMAP_PATH) -else - $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist) +ifneq ($(FORCE_LAYOUT),) + TARGET := $(TARGET)_$(FORCE_LAYOUT) endif +include quantum/mcu_selection.mk -# Object files directory -# To put object files in current directory, use a dot (.), do NOT make -# this an empty or blank macro! -KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) +ifdef MCU_FAMILY + OPT_DEFS += -DQMK_STM32 + KEYBOARD_PATHS += $(STM32_PATH) +endif -ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") - CONFIG_H = $(KEYMAP_PATH)/config.h -endif +# Find all the C source files to be compiled in subfolders. +KEYBOARD_SRC := -# # project specific files -SRC += $(KEYBOARD_C) \ - $(KEYMAP_C) \ - $(QUANTUM_DIR)/quantum.c \ - $(QUANTUM_DIR)/keymap_common.c \ - $(QUANTUM_DIR)/keycode_config.c \ - $(QUANTUM_DIR)/process_keycode/process_leader.c +KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c +KEYBOARD_C_2 := $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).c +KEYBOARD_C_3 := $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).c +KEYBOARD_C_4 := $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).c +KEYBOARD_C_5 := $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).c -ifneq ($(SUBPROJECT),) - SRC += $(SUBPROJECT_C) +ifneq ("$(wildcard $(KEYBOARD_C_5))","") + KEYBOARD_SRC += $(KEYBOARD_C_5) endif - -ifndef CUSTOM_MATRIX - SRC += $(QUANTUM_DIR)/matrix.c +ifneq ("$(wildcard $(KEYBOARD_C_4))","") + KEYBOARD_SRC += $(KEYBOARD_C_4) endif - -ifeq ($(strip $(API_SYSEX_ENABLE)), yes) - OPT_DEFS += -DAPI_SYSEX_ENABLE - SRC += $(QUANTUM_DIR)/api/api_sysex.c - OPT_DEFS += -DAPI_ENABLE - SRC += $(QUANTUM_DIR)/api.c - MIDI_ENABLE=yes +ifneq ("$(wildcard $(KEYBOARD_C_3))","") + KEYBOARD_SRC += $(KEYBOARD_C_3) +endif +ifneq ("$(wildcard $(KEYBOARD_C_2))","") + KEYBOARD_SRC += $(KEYBOARD_C_2) +endif +ifneq ("$(wildcard $(KEYBOARD_C_1))","") + KEYBOARD_SRC += $(KEYBOARD_C_1) endif -MUSIC_ENABLE := 0 +# Generate KEYBOARD_name_subname for all levels of the keyboard folder +KEYBOARD_FILESAFE_1 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_1))) +KEYBOARD_FILESAFE_2 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_2))) +KEYBOARD_FILESAFE_3 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_3))) +KEYBOARD_FILESAFE_4 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_4))) +KEYBOARD_FILESAFE_5 := $(subst .,,$(subst /,_,$(KEYBOARD_FOLDER_PATH_5))) -ifeq ($(strip $(AUDIO_ENABLE)), yes) - OPT_DEFS += -DAUDIO_ENABLE - MUSIC_ENABLE := 1 - SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c - SRC += $(QUANTUM_DIR)/audio/audio.c - SRC += $(QUANTUM_DIR)/audio/voices.c - SRC += $(QUANTUM_DIR)/audio/luts.c +ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_5) endif - -ifeq ($(strip $(MIDI_ENABLE)), yes) - OPT_DEFS += -DMIDI_ENABLE - MUSIC_ENABLE := 1 - SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c +ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_4) endif - -ifeq ($(MUSIC_ENABLE), 1) - SRC += $(QUANTUM_DIR)/process_keycode/process_music.c +ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_3) endif - -ifeq ($(strip $(COMBO_ENABLE)), yes) - OPT_DEFS += -DCOMBO_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c +ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_2) endif - -ifeq ($(strip $(VIRTSER_ENABLE)), yes) - OPT_DEFS += -DVIRTSER_ENABLE +ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","") + OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE_1) endif -ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes) - OPT_DEFS += -DFAUXCLICKY_ENABLE - SRC += $(QUANTUM_DIR)/fauxclicky.c +# Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so +# that the same keymap may be used on multiple keyboards. +# +# We grab the most top-level include file that we can. That file should +# use #ifdef statements to include all the neccesary subfolder includes, +# as described here: +# +# https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic +# +ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","") + QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h endif - -ifeq ($(strip $(UCIS_ENABLE)), yes) - OPT_DEFS += -DUCIS_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c - SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c +ifneq ("$(wildcard $(KEYBOARD_PATH_2)/$(KEYBOARD_FOLDER_2).h)","") + QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_2).h endif - -ifeq ($(strip $(UNICODEMAP_ENABLE)), yes) - OPT_DEFS += -DUNICODEMAP_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c - SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c +ifneq ("$(wildcard $(KEYBOARD_PATH_3)/$(KEYBOARD_FOLDER_3).h)","") + QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_3).h endif - -ifeq ($(strip $(UNICODE_ENABLE)), yes) - OPT_DEFS += -DUNICODE_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c - SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c +ifneq ("$(wildcard $(KEYBOARD_PATH_4)/$(KEYBOARD_FOLDER_4).h)","") + QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_4).h endif - -ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) - OPT_DEFS += -DRGBLIGHT_ENABLE - SRC += $(QUANTUM_DIR)/light_ws2812.c - SRC += $(QUANTUM_DIR)/rgblight.c - CIE1931_CURVE = yes - LED_BREATHING_TABLE = yes +ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","") + QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h endif -ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) - OPT_DEFS += -DTAP_DANCE_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c +# Determine and set parameters based on the keyboard's processor family. +# We can assume a ChibiOS target When MCU_FAMILY is defined since it's +# not used for LUFA +ifdef MCU_FAMILY + FIRMWARE_FORMAT?=bin + PLATFORM=CHIBIOS +else ifdef ARM_ATSAM + PLATFORM=ARM_ATSAM + FIRMWARE_FORMAT=bin +else + PLATFORM=AVR + FIRMWARE_FORMAT?=hex endif -ifeq ($(strip $(PRINTING_ENABLE)), yes) - OPT_DEFS += -DPRINTING_ENABLE - SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c - SRC += $(TMK_DIR)/protocol/serial_uart.c +ifeq ($(PLATFORM),CHIBIOS) + include $(TMK_PATH)/chibios.mk + OPT_OS = chibios + ifneq ("$(wildcard $(KEYBOARD_PATH_5)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_5)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_5)/boards/$(BOARD)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_4)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_4)/boards/$(BOARD)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_3)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_3)/boards/$(BOARD)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_2)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_2)/boards/$(BOARD)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_1)/bootloader_defs.h + else ifneq ("$(wildcard $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(KEYBOARD_PATH_1)/boards/$(BOARD)/bootloader_defs.h + else ifneq ("$(wildcard $(TOP_DIR)/drivers/boards/$(BOARD)/bootloader_defs.h)","") + OPT_DEFS += -include $(TOP_DIR)/drivers/boards/$(BOARD)/bootloader_defs.h + endif endif -ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) - SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) - OPT_DEFS += $(SERIAL_DEFS) - VAPTH += $(SERIAL_PATH) +# Find all of the config.h files and add them to our CONFIG_H define. +CONFIG_H := +ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","") + CONFIG_H += $(KEYBOARD_PATH_5)/config.h endif - -ifneq ($(strip $(VARIABLE_TRACE)),) - SRC += $(QUANTUM_DIR)/variable_trace.c - OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE)) -ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),) - OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE)) +ifneq ("$(wildcard $(KEYBOARD_PATH_4)/config.h)","") + CONFIG_H += $(KEYBOARD_PATH_4)/config.h endif +ifneq ("$(wildcard $(KEYBOARD_PATH_3)/config.h)","") + CONFIG_H += $(KEYBOARD_PATH_3)/config.h endif - -ifeq ($(strip $(LCD_ENABLE)), yes) -CIE1931_CURVE = yes +ifneq ("$(wildcard $(KEYBOARD_PATH_2)/config.h)","") + CONFIG_H += $(KEYBOARD_PATH_2)/config.h +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_1)/config.h)","") + CONFIG_H += $(KEYBOARD_PATH_1)/config.h endif -ifeq ($(strip $(LED_ENABLE)), yes) -CIE1931_CURVE = yes +POST_CONFIG_H := +ifneq ("$(wildcard $(KEYBOARD_PATH_1)/post_config.h)","") + POST_CONFIG_H += $(KEYBOARD_PATH_1)/post_config.h +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_2)/post_config.h)","") + POST_CONFIG_H += $(KEYBOARD_PATH_2)/post_config.h +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_3)/post_config.h)","") + POST_CONFIG_H += $(KEYBOARD_PATH_3)/post_config.h +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_4)/post_config.h)","") + POST_CONFIG_H += $(KEYBOARD_PATH_4)/post_config.h +endif +ifneq ("$(wildcard $(KEYBOARD_PATH_5)/post_config.h)","") + POST_CONFIG_H += $(KEYBOARD_PATH_5)/post_config.h endif -ifeq ($(strip $(CIE1931_CURVE)), yes) - OPT_DEFS += -DUSE_CIE1931_CURVE - LED_TABLES = yes +# Save the defines and includes here, so we don't include any keymap specific ones +PROJECT_DEFS := $(OPT_DEFS) +PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYBOARD_PATHS) +PROJECT_CONFIG := $(CONFIG_H) + +# Userspace setup and definitions +ifeq ("$(USER_NAME)","") + USER_NAME := $(KEYMAP) endif -ifeq ($(strip $(LED_BREATHING_TABLE)), yes) - OPT_DEFS += -DUSE_LED_BREATHING_TABLE - LED_TABLES = yes +USER_PATH := users/$(USER_NAME) + +-include $(USER_PATH)/rules.mk +ifneq ("$(wildcard $(USER_PATH)/config.h)","") + CONFIG_H += $(USER_PATH)/config.h endif -ifeq ($(strip $(LED_TABLES)), yes) - SRC += $(QUANTUM_DIR)/led_tables.c +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET) + +ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") + CONFIG_H += $(KEYMAP_PATH)/config.h endif +# project specific files +SRC += $(KEYBOARD_SRC) \ + $(KEYMAP_C) \ + $(QUANTUM_SRC) + # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax # Search Path VPATH += $(KEYMAP_PATH) -ifneq ($(SUBPROJECT),) - VPATH += $(SUBPROJECT_PATH) -endif -VPATH += $(KEYBOARD_PATH) +VPATH += $(USER_PATH) +VPATH += $(KEYBOARD_PATHS) VPATH += $(COMMON_VPATH) +include common_features.mk include $(TMK_PATH)/protocol.mk - include $(TMK_PATH)/common.mk +include bootloader.mk + +SRC += $(patsubst %.c,%.clib,$(LIB_SRC)) +SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC)) SRC += $(TMK_COMMON_SRC) OPT_DEFS += $(TMK_COMMON_DEFS) EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS) ifeq ($(PLATFORM),AVR) ifeq ($(strip $(PROTOCOL)), VUSB) - include $(TMK_PATH)/protocol/vusb.mk + include $(TMK_PATH)/protocol/vusb.mk else - include $(TMK_PATH)/protocol/lufa.mk + include $(TMK_PATH)/protocol/lufa.mk endif - include $(TMK_PATH)/avr.mk + include $(TMK_PATH)/avr.mk +endif + +ifeq ($(PLATFORM),ARM_ATSAM) + include $(TMK_PATH)/arm_atsam.mk + include $(TMK_PATH)/protocol/arm_atsam.mk +endif + +ifeq ($(PLATFORM),CHIBIOS) + include $(TMK_PATH)/protocol/chibios.mk endif ifeq ($(strip $(VISUALIZER_ENABLE)), yes) - VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer - VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer - include $(VISUALIZER_PATH)/visualizer.mk + VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer + VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer + include $(VISUALIZER_PATH)/visualizer.mk endif +CONFIG_H += $(POST_CONFIG_H) +ALL_CONFIGS := $(PROJECT_CONFIG) $(CONFIG_H) + OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT) $(KEYMAP_OUTPUT)_SRC := $(SRC) -$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) $(GFXDEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" +$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) $(GFXDEFS) \ +-DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYBOARD_H=\"$(QMK_KEYBOARD_H)\" -DQMK_KEYBOARD_CONFIG_H=\"$(KEYBOARD_PATH_1)/config.h\" \ +-DQMK_KEYMAP=\"$(KEYMAP)\" -DQMK_KEYMAP_H=\"$(KEYMAP).h\" -DQMK_KEYMAP_CONFIG_H=\"$(KEYMAP_PATH)/config.h\" \ +-DQMK_SUBPROJECT -DQMK_SUBPROJECT_H -DQMK_SUBPROJECT_CONFIG_H $(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS) $(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H) $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC) $(GFXSRC) $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS) $(GFXDEFS) $(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC) $(GFXINC) -$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG) +$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG) # Default target. -all: build sizeafter - -# Change the build target to build a HEX file or a library. -build: elf hex -#build: elf hex eep lss sym -#build: lib - +all: build check-size +build: elf cpfirmware +check-size: build +objs-size: build +include show_options.mk include $(TMK_PATH)/rules.mk -