X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Makefile;h=a7a10bf3264cdc57cc99f9142de02b5ea9f5df4c;hb=4059a16118e3abbc9eab2241693c60a1f19811b5;hp=607636035b143d7359612ba64ecf21c228e69fb3;hpb=db32864ce7029d758f57729cc2f75e051a28d0a2;p=qmk_firmware.git diff --git a/Makefile b/Makefile index 607636035..a7a10bf32 100644 --- a/Makefile +++ b/Makefile @@ -2,36 +2,53 @@ ifndef VERBOSE .SILENT: endif +.DEFAULT_GOAL := all + space := $(subst ,, ) starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST)))) mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST)))) abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) -ifneq (,$(findstring /keyboard/,$(starting_makefile))) - possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboard/%,%,$(starting_makefile)))) +ifneq (,$(findstring /keyboards/,$(starting_makefile))) + possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile)))) ifneq (,$(findstring /keymaps/,$(possible_keyboard))) - KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard))) KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard))) - tmk_root = ../../../.. + KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard))) + ifneq (,$(findstring /,$(KEYBOARD_DIR))) + # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) + # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) + tmk_root = ../../.. + else + tmk_root = ../../../.. + endif else - KEYBOARD_DIR:=$(possible_keyboard) KEYMAP_DIR:=default - tmk_root = ../.. + KEYBOARD_DIR:=$(possible_keyboard) + ifneq (,$(findstring /,$(KEYBOARD_DIR))) + # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR))) + # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR))) + tmk_root = ../../.. + else + tmk_root = ../.. + endif endif else tmk_root = . endif # $(info $(KEYBOARD_DIR)) # $(info $(KEYMAP_DIR)) +# $(info $(SUBPROJECT_DIR)) # Directory common source filess exist TOP_DIR = $(tmk_root) TMK_DIR = tmk_core TMK_PATH = $(TOP_DIR)/$(TMK_DIR) +LIB_PATH = $(TOP_DIR)/lib QUANTUM_DIR = quantum QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR) + ifdef keyboard KEYBOARD ?= $(keyboard) endif @@ -41,16 +58,55 @@ endif ifndef KEYBOARD KEYBOARD=planck endif -KEYBOARD_PATH = $(TOP_DIR)/keyboard/$(KEYBOARD) + +MASTER ?= left +ifdef master + MASTER = $(master) +endif + + +# converts things to keyboards/subproject +ifneq (,$(findstring /,$(KEYBOARD))) + TEMP:=$(KEYBOARD) + KEYBOARD:=$(firstword $(subst /, ,$(TEMP))) + SUBPROJECT:=$(lastword $(subst /, ,$(TEMP))) +endif + +KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD) + +ifdef sub + SUBPROJECT=$(sub) +endif +ifdef subproject + SUBPROJECT=$(subproject) +endif + ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","") - KEYBOARD_FILE = keyboard/$(KEYBOARD)/$(KEYBOARD).c + KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c ifndef ARCH - include $(KEYBOARD_PATH)/Makefile + ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","") + include $(KEYBOARD_PATH)/Makefile + endif endif else $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist) endif +ifdef SUBPROJECT_DEFAULT + SUBPROJECT?=$(SUBPROJECT_DEFAULT) +endif + +ifdef SUBPROJECT + SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT) + ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") + OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) + SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c + -include $(SUBPROJECT_PATH)/Makefile + else +$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) + endif +endif + ifdef keymap KEYMAP ?= $(keymap) endif @@ -62,42 +118,104 @@ ifndef KEYMAP endif KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") - KEYMAP_FILE = keyboard/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c + KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c -include $(KEYMAP_PATH)/Makefile else + ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","") $(error "$(KEYMAP_PATH)/keymap.c" does not exist) + else + KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP) + KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c + -include $(KEYMAP_PATH)/Makefile + endif endif -TARGET ?= $(KEYBOARD)_$(KEYMAP) +ifdef SUBPROJECT + TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) +else + TARGET ?= $(KEYBOARD)_$(KEYMAP) +endif +BUILD_DIR = .build + +# Object files directory +# To put object files in current directory, use a dot (.), do NOT make +# this an empty or blank macro! +OBJDIR = $(BUILD_DIR)/obj_$(TARGET) + + ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","") CONFIG_H = $(KEYMAP_PATH)/config.h else CONFIG_H = $(KEYBOARD_PATH)/config.h + ifdef SUBPROJECT + ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") + CONFIG_H = $(SUBPROJECT_PATH)/config.h + endif + endif endif # # project specific files SRC += $(KEYBOARD_FILE) \ $(KEYMAP_FILE) \ $(QUANTUM_DIR)/quantum.c \ - $(QUANTUM_DIR)/keymap.c \ + $(QUANTUM_DIR)/keymap_common.c \ $(QUANTUM_DIR)/keycode_config.c \ - $(QUANTUM_DIR)/led.c + $(QUANTUM_DIR)/process_keycode/process_leader.c + +ifdef SUBPROJECT + SRC += $(SUBPROJECT_FILE) +endif + +ifdef SUBPROJECT + SRC += $(SUBPROJECT_FILE) +endif + +ifdef SUBPROJECT + SRC += $(SUBPROJECT_FILE) +endif ifndef CUSTOM_MATRIX SRC += $(QUANTUM_DIR)/matrix.c endif +ifeq ($(strip $(MIDI_ENABLE)), yes) + OPT_DEFS += -DMIDI_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c +endif + ifeq ($(strip $(AUDIO_ENABLE)), yes) + OPT_DEFS += -DAUDIO_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_music.c SRC += $(QUANTUM_DIR)/audio/audio.c SRC += $(QUANTUM_DIR)/audio/voices.c SRC += $(QUANTUM_DIR)/audio/luts.c endif +ifeq ($(strip $(UNICODE_ENABLE)), yes) + OPT_DEFS += -DUNICODE_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c +endif + ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) + OPT_DEFS += -DRGBLIGHT_ENABLE SRC += $(QUANTUM_DIR)/light_ws2812.c SRC += $(QUANTUM_DIR)/rgblight.c - OPT_DEFS += -DRGBLIGHT_ENABLE +endif + +ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) + OPT_DEFS += -DTAP_DANCE_ENABLE + SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c +endif + +ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) + SERIAL_DIR = $(QUANTUM_DIR)/serial_link + SERIAL_PATH = $(QUANTUM_PATH)/serial_link + SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c) + SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) + SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) + OPT_DEFS += -DSERIAL_LINK_ENABLE + VAPTH += $(SERIAL_PATH) endif # Optimize size but this may cause error "relocation truncated to fit" @@ -105,15 +223,43 @@ endif # Search Path VPATH += $(KEYMAP_PATH) +ifdef SUBPROJECT + VPATH += $(SUBPROJECT_PATH) +endif VPATH += $(KEYBOARD_PATH) VPATH += $(TOP_DIR) VPATH += $(TMK_PATH) VPATH += $(QUANTUM_PATH) VPATH += $(QUANTUM_PATH)/keymap_extras VPATH += $(QUANTUM_PATH)/audio +VPATH += $(QUANTUM_PATH)/process_keycode + + +# 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 +endif -include $(TMK_PATH)/protocol/lufa.mk include $(TMK_PATH)/common.mk +ifeq ($(PLATFORM),AVR) + include $(TMK_PATH)/protocol/lufa.mk + include $(TMK_PATH)/avr.mk +else ifeq ($(PLATFORM),CHIBIOS) + include $(TMK_PATH)/protocol/chibios.mk + include $(TMK_PATH)/chibios.mk + OPT_OS = chibios +else + $(error Unknown platform) +endif + +ifeq ($(strip $(VISUALIZER_ENABLE)), yes) + VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer + VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer + include $(VISUALIZER_PATH)/visualizer.mk +endif + include $(TMK_PATH)/rules.mk GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")