From 79067662c8c71129a84a41b0147edc63b33db709 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:22:18 +0300 Subject: Better "include guards" for the makefiles Checking for ARCH is not good enough, since some subprojects define it. Ergodox Ez for example. The leads to running the make from keyboards/ergodox/ez failing. The keyboard makefile will not be included in that case, and therefore not the CUSTOM_MATRIX either. Furthermore the output files are read from many different .build directories, so it doesn't fail deterministically. For example on the Travis CI the compilation passes, since there's no outdated objects that needs recompilation. --- Makefile | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 980ab26b22..31826f14ac 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,9 @@ endif .DEFAULT_GOAL := all space := $(subst ,, ) -starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST)))) -mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST)))) +ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1)) +starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST))) +mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST)))) abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) ifneq (,$(findstring /keyboards/,$(starting_makefile))) @@ -83,10 +84,8 @@ endif ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","") KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c - ifndef ARCH - ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","") - include $(KEYBOARD_PATH)/Makefile - endif + ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile)) + -include $(KEYBOARD_PATH)/Makefile endif else $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist) @@ -101,7 +100,9 @@ ifdef SUBPROJECT ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","") OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT) SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c - -include $(SUBPROJECT_PATH)/Makefile + ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile)) + -include $(SUBPROJECT_PATH)/Makefile + endif else $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) endif @@ -119,14 +120,18 @@ endif KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c - -include $(KEYMAP_PATH)/Makefile + ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) + -include $(KEYMAP_PATH)/Makefile + endif 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 + ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) + -include $(KEYMAP_PATH)/Makefile + endif endif endif -- cgit v1.2.3 From abdf42573ac6e01432fdf69847f4259540c1a38d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 31 Jul 2016 13:25:49 +0300 Subject: Put the build output inside the root/.build directory --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 31826f14ac..60c7a6ef6f 100644 --- a/Makefile +++ b/Makefile @@ -140,7 +140,8 @@ ifdef SUBPROJECT else TARGET ?= $(KEYBOARD)_$(KEYMAP) endif -BUILD_DIR = .build + +BUILD_DIR = $(TOP_DIR)/.build # Object files directory # To put object files in current directory, use a dot (.), do NOT make -- cgit v1.2.3 From 97817a773eb667045144ac820df673ed8d3471a0 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sat, 30 Jul 2016 23:41:26 +0300 Subject: Generate version information to version.h So that only the files that really needs a version are recompiled. --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 60c7a6ef6f..053c8532af 100644 --- a/Makefile +++ b/Makefile @@ -271,4 +271,6 @@ 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") BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" -OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\" + +$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) \ No newline at end of file -- cgit v1.2.3 From fa06a163607e8c6c4bd0968c2de96a9a298b777c Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sat, 13 Aug 2016 10:46:38 +0200 Subject: process_unicode: Add a way to enter unicode symbols by name The purpose of this change is to allow keymaps to specify a dictionary of unicode symbol name to code mappings, and let the person at the keyboard enter unicode symbols by name. This is done by having a way to trigger unicode symbol input mode, when all keys are cached until Esc, Enter or Space are pressed. Once that happens, we try to look up the symbol from our lookup table. If found, we erase back, and type the unicode magic in to get that symbol. If not found, we still erase back, start unicode input mode, and replay what the user typed in. Signed-off-by: Gergely Nagy --- Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 053c8532af..693edc9f06 100644 --- a/Makefile +++ b/Makefile @@ -198,6 +198,11 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes) SRC += $(QUANTUM_DIR)/audio/luts.c endif +ifeq ($(strip $(UCIS_ENABLE)), yes) + OPT_DEFS += -DUCIS_ENABLE + UNICODE_ENABLE = yes +endif + ifeq ($(strip $(UNICODE_ENABLE)), yes) OPT_DEFS += -DUNICODE_ENABLE SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c @@ -273,4 +278,4 @@ BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" $(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) -$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) \ No newline at end of file +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) -- cgit v1.2.3 From 86706de036cf7ad52b679b259ca8f980057d0da5 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 1 Aug 2016 09:23:37 +0300 Subject: Parsing of makefile variables from starting dir --- Makefile | 322 ++++++++------------------------------------------------------- 1 file changed, 41 insertions(+), 281 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 693edc9f06..fcd57754b5 100644 --- a/Makefile +++ b/Makefile @@ -1,281 +1,41 @@ -ifndef VERBOSE -.SILENT: -endif - -.DEFAULT_GOAL := all - -space := $(subst ,, ) -ESCAPED_ABS_PATH = $(subst $(space),_SPACE_,$(abspath $1)) -starting_makefile := $(call ESCAPED_ABS_PATH,$(firstword $(MAKEFILE_LIST))) -mkfile_path := $(call ESCAPED_ABS_PATH,$(lastword $(MAKEFILE_LIST)))) -abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path))) - -ifneq (,$(findstring /keyboards/,$(starting_makefile))) - possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile)))) - ifneq (,$(findstring /keymaps/,$(possible_keyboard))) - KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard))) - 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 - KEYMAP_DIR:=default - 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 -ifdef KEYBOARD_DIR - KEYBOARD ?= $(KEYBOARD_DIR) -endif -ifndef KEYBOARD - KEYBOARD=planck -endif - -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 = keyboards/$(KEYBOARD)/$(KEYBOARD).c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYBOARD_PATH)/Makefile),$(starting_makefile)) - -include $(KEYBOARD_PATH)/Makefile - 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 - ifneq ($(call ESCAPED_ABS_PATH,$(SUBPROJECT_PATH)/Makefile),$(starting_makefile)) - -include $(SUBPROJECT_PATH)/Makefile - endif - else -$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist) - endif -endif - -ifdef keymap - KEYMAP ?= $(keymap) -endif -ifdef KEYMAP_DIR - KEYMAP ?= $(KEYMAP_DIR) -endif -ifndef KEYMAP - KEYMAP = default -endif -KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP) -ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","") - KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c - ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) - -include $(KEYMAP_PATH)/Makefile - endif -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 - ifneq ($(call ESCAPED_ABS_PATH,$(KEYMAP_PATH)/Makefile),$(starting_makefile)) - -include $(KEYMAP_PATH)/Makefile - endif - endif -endif - -ifdef SUBPROJECT - TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP) -else - TARGET ?= $(KEYBOARD)_$(KEYMAP) -endif - -BUILD_DIR = $(TOP_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_common.c \ - $(QUANTUM_DIR)/keycode_config.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_midi.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 $(UCIS_ENABLE)), yes) - OPT_DEFS += -DUCIS_ENABLE - UNICODE_ENABLE = yes -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 -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" -#EXTRALDFLAGS = -Wl,--relax - -# 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)/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") -BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") -OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\" - -$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(QUANTUM_PATH)/version.h) -$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(QUANTUM_PATH)/version.h) +STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) +ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) +ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE)) +ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE)) +ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE)) +ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE)) +STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) + +PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) + +define NEXT_PATH_ELEMENT + $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS))) + $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS))) +endef + +$(eval $(call NEXT_PATH_ELEMENT)) + +ifeq ($(CURRENT_PATH_ELEMENT),keyboards) + $(eval $(call NEXT_PATH_ELEMENT)) + KEYBOARD := $(CURRENT_PATH_ELEMENT) + $(eval $(call NEXT_PATH_ELEMENT)) + ifeq ($(CURRENT_PATH_ELEMENT),keymaps) + $(eval $(call NEXT_PATH_ELEMENT)) + KEYMAP := $(CURRENT_PATH_ELEMENT) + else ifneq ($(CURRENT_PATH_ELEMENT),) + SUBPROJECT := $(CURRENT_PATH_ELEMENT) + $(eval $(call NEXT_PATH_ELEMENT)) + ifeq ($(CURRENT_PATH_ELEMENT),keymaps) + $(eval $(call NEXT_PATH_ELEMENT)) + KEYMAP := $(CURRENT_PATH_ELEMENT) + endif + endif +endif + +$(info Keyboard: $(KEYBOARD)) +$(info Keymap: $(KEYMAP)) +$(info Subproject: $(SUBPROJECT)) + + +all: + echo "Compiling" \ No newline at end of file -- cgit v1.2.3 From e6e675335dbaa6bd175be7aaee829c717e572488 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 3 Aug 2016 08:44:11 +0300 Subject: First version of rule parsing Only handles allkb at the moment. --- Makefile | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index fcd57754b5..f0d5c05ccc 100644 --- a/Makefile +++ b/Makefile @@ -36,6 +36,54 @@ $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) +# Compare the start of the RULE_VARIABLE with the first argument($1) +# If the rules equals $1 or starts with $1-, RULE_FOUND is set to true +# and $1 is removed from the RULE variable +# Otherwise the RULE_FOUND variable is set to false +# The function is a bit tricky, since there's no built in $(startswith) function +define COMPARE_AND_REMOVE_FROM_RULE + ifeq ($1,$$(RULE)) + RULE:= + RULE_FOUND := true + else + STARTDASH_REMOVED=$$(subst START$1-,,START$$(RULE)) + ifneq ($$(STARTDASH_REMOVED),START$$(RULE)) + RULE_FOUND := true + RULE := $$(STARTDASH_REMOVED) + else + RULE_FOUND := false + endif + endif +endef + +define PARSE_ALL_KEYBOARDS + COMMANDS += allkb + #$$(info $$(RULE)) + COMMAND_allkb := "All keyboards with $$(RULE)" +endef + +define PARSE_RULE + RULE := $1 + COMMANDS := + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkb)) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_ALL_KEYBOARDS)) + endif +endef + +RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); + +.PHONY: % +%: + $(eval $(call PARSE_RULE,$@)) + $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + +.PHONY: all-keyboards +all-keyboards: allkb + +.PHONY: all-keyboards-defaults +all-keyboards-defaults: allkb-default-default +.PHONY: all all: echo "Compiling" \ No newline at end of file -- cgit v1.2.3 From f97ae2b199df087f4b48c7019c2d887089d81614 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Wed, 3 Aug 2016 09:28:47 +0300 Subject: Rule parsing to match kebyoards --- Makefile | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index f0d5c05ccc..b24270ad1b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,9 @@ STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) +ROOT_DIR := $(dir, $(ROOT_MAKEFILE)) +ifeq ($(ROOT_DIR),) + ROOT_DIR := . +endif ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE)) ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE)) ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE)) @@ -32,9 +36,14 @@ ifeq ($(CURRENT_PATH_ELEMENT),keyboards) endif endif +$(info $(ROOT_DIR)/keyboards) +KEYBOARDS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/*/.))) + $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) +$(info Keyboards: $(KEYBOARDS)) + # Compare the start of the RULE_VARIABLE with the first argument($1) # If the rules equals $1 or starts with $1-, RULE_FOUND is set to true @@ -62,12 +71,34 @@ define PARSE_ALL_KEYBOARDS COMMAND_allkb := "All keyboards with $$(RULE)" endef +define PARSE_KEYBOARD + COMMANDS += $1 + #$$(info $$(RULE)) + COMMAND_$1 := "Keyboard $1 with $$(RULE)" +endef + + +# Recursively try to find a matching keyboard +# During the first call $1 contains a list of all keyboards +# One keyboard is checked and removed at a time +define TRY_PARSE_KEYBOARD + CURRENT_KB := $$(firstword $1) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KB))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYBOARD,$$(CURRENT_KB))) + else ifneq ($1,) + $$(eval $$(call TRY_PARSE_KEYBOARD,$$(wordlist 2,9999,$1))) + endif +endef + define PARSE_RULE RULE := $1 COMMANDS := $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkb)) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) + else + $$(eval $$(call TRY_PARSE_KEYBOARD,$(KEYBOARDS))) endif endef -- cgit v1.2.3 From 9b02e66ce0f703480e42038a5084174a45b54b1d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 4 Aug 2016 08:49:44 +0300 Subject: Add keymap parsing --- Makefile | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index b24270ad1b..b4204478e1 100644 --- a/Makefile +++ b/Makefile @@ -71,12 +71,28 @@ define PARSE_ALL_KEYBOARDS COMMAND_allkb := "All keyboards with $$(RULE)" endef +# $1 = Keyboard define PARSE_KEYBOARD - COMMANDS += $1 - #$$(info $$(RULE)) - COMMAND_$1 := "Keyboard $1 with $$(RULE)" + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_ALL_KEYMAPS, $1)) + else + KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) + $$(eval $$(call TRY_PARSE_KEYMAP,$$(KEYMAPS),$1)) + endif +endef + +define PARSE_ALL_KEYMAPS + COMMANDS += ALL_KEYMAPS + COMMAND_ALL_KEYMAPS := All keymaps in $1 endef +# $1 Keyboard +# $2 Keymap +define PARSE_KEYMAP + COMMANDS += KEYBOARD_$1_KEYMAP_$2 + COMMAND_KEYBOARD_$1_KEYMAP_$2 := Keyboard $1, Keymap $2 +endef # Recursively try to find a matching keyboard # During the first call $1 contains a list of all keyboards @@ -91,6 +107,18 @@ define TRY_PARSE_KEYBOARD endif endef +# $1 list of keymaps +# $2 keyboard +define TRY_PARSE_KEYMAP + CURRENT_KM := $$(firstword $1) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KM))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYMAP,$2,$$(CURRENT_KM))) + else ifneq ($1,) + $$(eval $$(call TRY_PARSE_KEYMAP,$$(wordlist 2,9999,$1),$2)) + endif +endef + define PARSE_RULE RULE := $1 COMMANDS := -- cgit v1.2.3 From dfe510d5b8f83c9977b507ed204632c2f22c5d24 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 4 Aug 2016 09:17:02 +0300 Subject: Refactor common rule list parsing into own function --- Makefile | 61 +++++++++++++++++++++++++++++-------------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index b4204478e1..e88eeefee4 100644 --- a/Makefile +++ b/Makefile @@ -65,6 +65,20 @@ define COMPARE_AND_REMOVE_FROM_RULE endif endef +# Recursively try to find a match +# $1 The list to be checked +# If a match is found, then RULE_FOUND is set to true +# and MATCHED_ITEM to the item that was matched +define TRY_TO_MATCH_RULE_FROM_LIST + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) + ifeq ($$(RULE_FOUND),true) + MATCHED_ITEM := $$(firstword $1) + else ifneq ($1,) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + endif +endef + + define PARSE_ALL_KEYBOARDS COMMANDS += allkb #$$(info $$(RULE)) @@ -73,51 +87,31 @@ endef # $1 = Keyboard define PARSE_KEYBOARD + CURRENT_KB := $1 $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_ALL_KEYMAPS, $1)) + $$(eval $$(call PARSE_ALL_KEYMAPS)) else KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) - $$(eval $$(call TRY_PARSE_KEYMAP,$$(KEYMAPS),$1)) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + endif endif endef define PARSE_ALL_KEYMAPS COMMANDS += ALL_KEYMAPS - COMMAND_ALL_KEYMAPS := All keymaps in $1 + COMMAND_ALL_KEYMAPS := All keymaps in $(CURRENT_KB) endef -# $1 Keyboard -# $2 Keymap +# $1 Keymap define PARSE_KEYMAP - COMMANDS += KEYBOARD_$1_KEYMAP_$2 - COMMAND_KEYBOARD_$1_KEYMAP_$2 := Keyboard $1, Keymap $2 + CURRENT_KM = $1 + COMMANDS += KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) + COMMAND_KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Keymap $$(CURRENT_KM) endef -# Recursively try to find a matching keyboard -# During the first call $1 contains a list of all keyboards -# One keyboard is checked and removed at a time -define TRY_PARSE_KEYBOARD - CURRENT_KB := $$(firstword $1) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KB))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYBOARD,$$(CURRENT_KB))) - else ifneq ($1,) - $$(eval $$(call TRY_PARSE_KEYBOARD,$$(wordlist 2,9999,$1))) - endif -endef - -# $1 list of keymaps -# $2 keyboard -define TRY_PARSE_KEYMAP - CURRENT_KM := $$(firstword $1) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(CURRENT_KM))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYMAP,$2,$$(CURRENT_KM))) - else ifneq ($1,) - $$(eval $$(call TRY_PARSE_KEYMAP,$$(wordlist 2,9999,$1),$2)) - endif -endef define PARSE_RULE RULE := $1 @@ -126,7 +120,10 @@ define PARSE_RULE ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) else - $$(eval $$(call TRY_PARSE_KEYBOARD,$(KEYBOARDS))) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + endif endif endef -- cgit v1.2.3 From 9ee6d4a23d9a1bdc019fc9968a909866ffeda905 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Thu, 4 Aug 2016 09:56:03 +0300 Subject: Proper looping for allkb and allkm --- Makefile | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index e88eeefee4..57cf3f523a 100644 --- a/Makefile +++ b/Makefile @@ -78,21 +78,32 @@ define TRY_TO_MATCH_RULE_FROM_LIST endif endef +define ALL_IN_LIST_LOOP + OLD_RULE$1 := $$(RULE) + $$(eval $$(call $1,$$(ITEM$1))) + RULE := $$(OLD_RULE$1) +endef + +define PARSE_ALL_IN_LIST + $$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1))) +endef define PARSE_ALL_KEYBOARDS - COMMANDS += allkb - #$$(info $$(RULE)) - COMMAND_allkb := "All keyboards with $$(RULE)" + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS))) +endef + +define PARSE_ALL_KEYMAPS + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef # $1 = Keyboard define PARSE_KEYBOARD CURRENT_KB := $1 + KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) else - KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS))) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) @@ -100,11 +111,6 @@ define PARSE_KEYBOARD endif endef -define PARSE_ALL_KEYMAPS - COMMANDS += ALL_KEYMAPS - COMMAND_ALL_KEYMAPS := All keymaps in $(CURRENT_KB) -endef - # $1 Keymap define PARSE_KEYMAP CURRENT_KM = $1 @@ -112,7 +118,6 @@ define PARSE_KEYMAP COMMAND_KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Keymap $$(CURRENT_KM) endef - define PARSE_RULE RULE := $1 COMMANDS := -- cgit v1.2.3 From 1df6498721e989f1b3b10ba4b1b03d0ba54e9204 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 14:33:49 +0300 Subject: Subproject parsing Does not handle keyboards without subprojects correctly yet. --- Makefile | 49 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 11 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 57cf3f523a..e9e95569c4 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,7 @@ $(info Keyboards: $(KEYBOARDS)) # Otherwise the RULE_FOUND variable is set to false # The function is a bit tricky, since there's no built in $(startswith) function define COMPARE_AND_REMOVE_FROM_RULE + RULE_FOUND := false ifeq ($1,$$(RULE)) RULE:= RULE_FOUND := true @@ -70,11 +71,13 @@ endef # If a match is found, then RULE_FOUND is set to true # and MATCHED_ITEM to the item that was matched define TRY_TO_MATCH_RULE_FROM_LIST - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) - ifeq ($$(RULE_FOUND),true) - MATCHED_ITEM := $$(firstword $1) - else ifneq ($1,) - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + ifneq ($1,) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) + ifeq ($$(RULE_FOUND),true) + MATCHED_ITEM := $$(firstword $1) + else + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + endif endif endef @@ -96,10 +99,18 @@ define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef -# $1 = Keyboard -define PARSE_KEYBOARD - CURRENT_KB := $1 - KEYMAPS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/$1/keymaps/*/.))) +define PARSE_ALL_SUBPROJECTS + ifeq ($$(SUBPROJECTS),) + $$(eval $$(call PARSE_SUBPROJECT,)) + else + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) + endif +endef + +# $1 Subproject +define PARSE_SUBPROJECT + CURRENT_SP := $1 + KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) ifeq ($$(RULE_FOUND),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) @@ -111,11 +122,27 @@ define PARSE_KEYBOARD endif endef +# $1 = Keyboard +define PARSE_KEYBOARD + CURRENT_KB := $1 + # A subproject is any keyboard subfolder with a makefile + SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) + $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allsp)) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + else + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS))) + ifeq ($$(RULE_FOUND),true) + $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + endif + endif +endef + # $1 Keymap define PARSE_KEYMAP CURRENT_KM = $1 - COMMANDS += KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) - COMMAND_KEYBOARD_$$(CURRENT_KB)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Keymap $$(CURRENT_KM) + COMMANDS += KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) + COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Subproject $$(CURRENT_SP), Keymap $$(CURRENT_KM) endef define PARSE_RULE -- cgit v1.2.3 From 286b3b8057630bf9ce78d3a0aaa24f4841b37b3e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 15:56:41 +0300 Subject: Slight refactoring to remove some verbosity --- Makefile | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index e9e95569c4..8f7dbb9e6c 100644 --- a/Makefile +++ b/Makefile @@ -50,8 +50,7 @@ $(info Keyboards: $(KEYBOARDS)) # and $1 is removed from the RULE variable # Otherwise the RULE_FOUND variable is set to false # The function is a bit tricky, since there's no built in $(startswith) function -define COMPARE_AND_REMOVE_FROM_RULE - RULE_FOUND := false +define COMPARE_AND_REMOVE_FROM_RULE_HELPER ifeq ($1,$$(RULE)) RULE:= RULE_FOUND := true @@ -66,21 +65,25 @@ define COMPARE_AND_REMOVE_FROM_RULE endif endef +COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND) + + # Recursively try to find a match # $1 The list to be checked # If a match is found, then RULE_FOUND is set to true # and MATCHED_ITEM to the item that was matched -define TRY_TO_MATCH_RULE_FROM_LIST +define TRY_TO_MATCH_RULE_FROM_LIST_HELPER ifneq ($1,) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1))) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true) MATCHED_ITEM := $$(firstword $1) else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(wordlist 2,9999,$1))) + $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$$(wordlist 2,9999,$1))) endif endif endef +TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND) + define ALL_IN_LIST_LOOP OLD_RULE$1 := $$(RULE) $$(eval $$(call $1,$$(ITEM$1))) @@ -111,14 +114,10 @@ endef define PARSE_SUBPROJECT CURRENT_SP := $1 KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkm)) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) - else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) - endif + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) + $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) endif endef @@ -127,14 +126,10 @@ define PARSE_KEYBOARD CURRENT_KB := $1 # A subproject is any keyboard subfolder with a makefile SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allsp)) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) $$(eval $$(call PARSE_ALL_SUBPROJECTS)) - else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) - endif + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) + $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) endif endef @@ -148,14 +143,10 @@ endef define PARSE_RULE RULE := $1 COMMANDS := - $$(eval $$(call COMPARE_AND_REMOVE_FROM_RULE,allkb)) - ifeq ($$(RULE_FOUND),true) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) - else - $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS))) - ifeq ($$(RULE_FOUND),true) - $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) - endif + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) + $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) endif endef -- cgit v1.2.3 From 091fab5103bd896f1b36094a7337dbe2f9d2ad59 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 16:02:14 +0300 Subject: Slight rearrange of the Makefile for easier readability --- Makefile | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 8f7dbb9e6c..a034213653 100644 --- a/Makefile +++ b/Makefile @@ -94,20 +94,30 @@ define PARSE_ALL_IN_LIST $$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1))) endef -define PARSE_ALL_KEYBOARDS - $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS))) +define PARSE_RULE + RULE := $1 + COMMANDS := + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) + $$(eval $$(call PARSE_ALL_KEYBOARDS)) + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) + $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + endif endef -define PARSE_ALL_KEYMAPS - $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) +# $1 = Keyboard +define PARSE_KEYBOARD + CURRENT_KB := $1 + # A subproject is any keyboard subfolder with a makefile + SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) + $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) + $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + endif endef -define PARSE_ALL_SUBPROJECTS - ifeq ($$(SUBPROJECTS),) - $$(eval $$(call PARSE_SUBPROJECT,)) - else - $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) - endif +define PARSE_ALL_KEYBOARDS + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS))) endef # $1 Subproject @@ -121,15 +131,11 @@ define PARSE_SUBPROJECT endif endef -# $1 = Keyboard -define PARSE_KEYBOARD - CURRENT_KB := $1 - # A subproject is any keyboard subfolder with a makefile - SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) - $$(eval $$(call PARSE_ALL_SUBPROJECTS)) - else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) - $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) +define PARSE_ALL_SUBPROJECTS + ifeq ($$(SUBPROJECTS),) + $$(eval $$(call PARSE_SUBPROJECT,)) + else + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) endif endef @@ -140,14 +146,8 @@ define PARSE_KEYMAP COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Subproject $$(CURRENT_SP), Keymap $$(CURRENT_KM) endef -define PARSE_RULE - RULE := $1 - COMMANDS := - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) - $$(eval $$(call PARSE_ALL_KEYBOARDS)) - else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) - $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) - endif +define PARSE_ALL_KEYMAPS + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); -- cgit v1.2.3 From 0d5caead5ad0edc06aedda06814da05815fc177e Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 16:45:33 +0300 Subject: Add default subproject parsing --- Makefile | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index a034213653..1e11dd5ff8 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,8 @@ STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) +QUANTUM_DIR:=$(ROOT_DIR)/quantum + define NEXT_PATH_ELEMENT $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS))) $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS))) @@ -111,8 +113,14 @@ define PARSE_KEYBOARD SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile))) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true) $$(eval $$(call PARSE_ALL_SUBPROJECTS)) + else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,defaultsp),true) + $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + else + # If there's no matching subproject, we assume it's the default + # This will allow you to leave the subproject part of the target out + $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) endif endef @@ -122,7 +130,12 @@ endef # $1 Subproject define PARSE_SUBPROJECT - CURRENT_SP := $1 + ifeq ($1,defaultsp) + $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile) + CURRENT_SP := $$(SUBPROJECT_DEFAULT) + else + CURRENT_SP := $1 + endif KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) @@ -133,7 +146,7 @@ endef define PARSE_ALL_SUBPROJECTS ifeq ($$(SUBPROJECTS),) - $$(eval $$(call PARSE_SUBPROJECT,)) + $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) else $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS))) endif -- cgit v1.2.3 From 44441de8cad7255fd0637459ed39b89e34751b78 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 17:04:39 +0300 Subject: Split keyboard makefiles into rules and Makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 1e11dd5ff8..b2a8735320 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR)) PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR)) -QUANTUM_DIR:=$(ROOT_DIR)/quantum +MAKEFILE_INCLUDED=yes define NEXT_PATH_ELEMENT $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS))) -- cgit v1.2.3 From 2dd9c1edcdcc3fc579e6109daf9012f9a82b7435 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 17:48:59 +0300 Subject: Proper parsing of keymaps inside subprojects --- Makefile | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index b2a8735320..028d143930 100644 --- a/Makefile +++ b/Makefile @@ -131,16 +131,32 @@ endef # $1 Subproject define PARSE_SUBPROJECT ifeq ($1,defaultsp) + SUBPROJECT_DEFAULT= $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile) CURRENT_SP := $$(SUBPROJECT_DEFAULT) else CURRENT_SP := $1 endif - KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) - $$(eval $$(call PARSE_ALL_KEYMAPS)) - else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) - $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + # If current subproject is empty (the default was not defined), and we have a list of subproject + # then make all + ifeq ($$(CURRENT_SP),) + ifneq ($$(SUBPROJECTS),) + CURRENT_SP := allsp + endif + endif + ifneq ($$(CURRENT_SP),allsp) + KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.))) + ifneq ($$(CURRENT_SP),) + SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.))) + KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS)) + endif + ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) + $$(eval $$(call PARSE_ALL_KEYMAPS)) + else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) + $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + endif + else + $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS))) endif endef -- cgit v1.2.3 From a6d35000241e20df32b34498a3a9622bde6f0062 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:12:45 +0300 Subject: Print error message when trying to build non-existing keymap --- Makefile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 028d143930..a9a2d98fcb 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,8 @@ ifeq ($(CURRENT_PATH_ELEMENT),keyboards) endif $(info $(ROOT_DIR)/keyboards) -KEYBOARDS := $(notdir $(patsubst %/.,%,$(wildcard $(ROOT_DIR)/keyboards/*/.))) +# Only consider folders with makefiles, to prevent errors in case there are extra folders +KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile))) $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) @@ -154,6 +155,13 @@ define PARSE_SUBPROJECT $$(eval $$(call PARSE_ALL_KEYMAPS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + else + ifeq ($$(CURRENT_SP),) + $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(RULE)'. Stop.) + else + $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(CURRENT_SP)-$$(RULE)'. Stop.) + endif + exit 1 endif else $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS))) -- cgit v1.2.3 From 1ad5578d11b0b4a7288c3fd0748de3a57f4180f2 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:15:45 +0300 Subject: Print error when building non-existing keyboard --- Makefile | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index a9a2d98fcb..623e4b064d 100644 --- a/Makefile +++ b/Makefile @@ -104,6 +104,9 @@ define PARSE_RULE $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + else + $$(info make: *** No rule to make target '$1'. Stop.) + exit 1 endif endef -- cgit v1.2.3 From c83af5451349e6160a2ee220e7b45bb974be5c64 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:30:58 +0300 Subject: Support for running from keyboard directory --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 623e4b064d..7180b41476 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) -ROOT_DIR := $(dir, $(ROOT_MAKEFILE)) +ROOT_DIR := $(dir $(ROOT_MAKEFILE)) ifeq ($(ROOT_DIR),) ROOT_DIR := . endif @@ -104,6 +104,8 @@ define PARSE_RULE $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) + else ifneq ($$(KEYBOARD),) + $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD))) else $$(info make: *** No rule to make target '$1'. Stop.) exit 1 -- cgit v1.2.3 From 4f20061f6619f632c28518979d17a51674a3f2c9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:44:57 +0300 Subject: Proper handling for running make from a subproject or keymap dir --- Makefile | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 7180b41476..a14642af6c 100644 --- a/Makefile +++ b/Makefile @@ -105,6 +105,15 @@ define PARSE_RULE else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) else ifneq ($$(KEYBOARD),) + # If there's no match in the beginning, then use the working directory instead + # First add the keymap to the commandline if we are in a keymap subdirectory + ifneq ($$(KEYMAP),) + RULE := $$(KEYMAP)-$$(RULE) + endif + # If we are in a subproject subdirectory add the subproject + ifneq ($$(SUBPROJECT),) + RULE := $$(SUBPROJECT)-$$(RULE) + endif $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD))) else $$(info make: *** No rule to make target '$1'. Stop.) -- cgit v1.2.3 From 459ddaceda252a7d8614c43f17cd4c8c14712d5f Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 18:54:12 +0300 Subject: Add backwards compability with makefile variables --- Makefile | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index a14642af6c..cf0a12f695 100644 --- a/Makefile +++ b/Makefile @@ -42,6 +42,20 @@ $(info $(ROOT_DIR)/keyboards) # Only consider folders with makefiles, to prevent errors in case there are extra folders KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile))) +#Compability with the old make variables +ifdef keyboard + KEYBOARD := $(keyboard) +endif +ifdef sub + SUBPROJECT := $(sub) +endif +ifdef subproject + SUBPROJECT := $(subproject) +endif +ifdef keymap + KEYMAP := $(keymap) +endif + $(info Keyboard: $(KEYBOARD)) $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) -- cgit v1.2.3 From 3fa6625869b1bc1a2050a7e5edc6228a926536fc Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 19:16:44 +0300 Subject: Proper default goals when inside keyboard fodlers --- Makefile | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index cf0a12f695..38bead90a5 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,18 @@ $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) $(info Keyboards: $(KEYBOARDS)) +ifneq ($(KEYMAP),) + ifeq ($(SUBPROJECT),) + .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) + else + .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-$(KEYMAP) + endif +else ifneq ($(SUBPROJECT),) + .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-allkm +else ifneq ($(KEYBOARD),) + .DEFAULT_GOAL := $(KEYBOARD)-allsp-allkm +endif + # Compare the start of the RULE_VARIABLE with the first argument($1) # If the rules equals $1 or starts with $1-, RULE_FOUND is set to true @@ -114,9 +126,11 @@ endef define PARSE_RULE RULE := $1 COMMANDS := + $$(info $$(RULE)) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) + $$(info $$(MATCHED_ITEM)) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) else ifneq ($$(KEYBOARD),) # If there's no match in the beginning, then use the working directory instead @@ -222,12 +236,13 @@ RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + +.PHONY: all +all: + echo "Compiling" + .PHONY: all-keyboards all-keyboards: allkb .PHONY: all-keyboards-defaults all-keyboards-defaults: allkb-default-default - -.PHONY: all -all: - echo "Compiling" \ No newline at end of file -- cgit v1.2.3 From a04bb3a3bae456a0744cf2f6dde326d9a24ebcee Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 19:22:21 +0300 Subject: Fixed the shortcut targets --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 38bead90a5..d59da0b635 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,7 @@ $(info Keymap: $(KEYMAP)) $(info Subproject: $(SUBPROJECT)) $(info Keyboards: $(KEYBOARDS)) +.DEFAULT_GOAL := all ifneq ($(KEYMAP),) ifeq ($(SUBPROJECT),) .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP) @@ -238,11 +239,10 @@ RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); .PHONY: all -all: - echo "Compiling" +all: all-keyboards .PHONY: all-keyboards -all-keyboards: allkb +all-keyboards: allkb-allsp-allkm .PHONY: all-keyboards-defaults -all-keyboards-defaults: allkb-default-default +all-keyboards-defaults: allkb-allsp-default -- cgit v1.2.3 From 0dd629a990e1546614dfa2b430489571c2550f7a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 7 Aug 2016 21:28:14 +0300 Subject: Fix running make from various subfolders --- Makefile | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index d59da0b635..a02fa24a2b 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,6 @@ ifeq ($(CURRENT_PATH_ELEMENT),keyboards) endif endif -$(info $(ROOT_DIR)/keyboards) # Only consider folders with makefiles, to prevent errors in case there are extra folders KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile))) @@ -127,22 +126,11 @@ endef define PARSE_RULE RULE := $1 COMMANDS := - $$(info $$(RULE)) ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true) $$(eval $$(call PARSE_ALL_KEYBOARDS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true) - $$(info $$(MATCHED_ITEM)) $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM))) else ifneq ($$(KEYBOARD),) - # If there's no match in the beginning, then use the working directory instead - # First add the keymap to the commandline if we are in a keymap subdirectory - ifneq ($$(KEYMAP),) - RULE := $$(KEYMAP)-$$(RULE) - endif - # If we are in a subproject subdirectory add the subproject - ifneq ($$(SUBPROJECT),) - RULE := $$(SUBPROJECT)-$$(RULE) - endif $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD))) else $$(info make: *** No rule to make target '$1'. Stop.) @@ -161,6 +149,8 @@ define PARSE_KEYBOARD $$(eval $$(call PARSE_SUBPROJECT,defaultsp)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true) $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM))) + else ifneq ($$(SUBPROJECT),) + $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT))) else # If there's no matching subproject, we assume it's the default # This will allow you to leave the subproject part of the target out @@ -194,10 +184,14 @@ define PARSE_SUBPROJECT SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.))) KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS)) endif - ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) + ifeq ($$(RULE),) + $$(eval $$(call PARSE_ALL_KEYMAPS)) + else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true) $$(eval $$(call PARSE_ALL_KEYMAPS)) else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true) $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM))) + else ifneq ($$(KEYMAP),) + $$(eval $$(call PARSE_KEYMAP,$$(KEYMAP))) else ifeq ($$(CURRENT_SP),) $$(info make: *** No rule to make target '$$(CURRENT_KB)-$$(RULE)'. Stop.) @@ -232,12 +226,16 @@ endef RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); +# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps +SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) +.PHONY: $(SUBPROJECTS) +$(SUBPROJECTS): %: %-allkm + .PHONY: % %: $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) - .PHONY: all all: all-keyboards -- cgit v1.2.3 From db5c3b74fb6541879bfad9930d2a659b1d89cd83 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 01:16:06 +0300 Subject: Add color output --- Makefile | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index a02fa24a2b..e5becd7ad7 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +ifndef VERBOSE +.SILENT: +endif + STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) ROOT_DIR := $(dir $(ROOT_MAKEFILE)) @@ -216,15 +220,37 @@ endef # $1 Keymap define PARSE_KEYMAP CURRENT_KM = $1 - COMMANDS += KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) - COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) := Keyboard $$(CURRENT_KB), Subproject $$(CURRENT_SP), Keymap $$(CURRENT_KM) + COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM) + COMMANDS += $$(COMMAND) + ifeq ($$(CURRENT_SP),) + KB_SP := $(CURRENT_KB) + else + KB_SP := $(CURRENT_KB)/$$(CURRENT_SP) + endif + KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) + COMMAND_$$(COMMAND) := \ + printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ + $(AWK) '{ printf "%-118s", $$$$0;}'; \ + LOG=$$$$(echo "$$(MAKE) -c $(ROOT_DIR) -f build_keyboard.mk VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true" 2>&1) ; \ + if [ $$$$? -gt 0 ]; \ + then $$(PRINT_ERROR_PLAIN); \ + elif [ "$$$$LOG" != "" ] ; \ + then $$(PRINT_WARNING_PLAIN); \ + else \ + $$(PRINT_OK); \ + fi; endef define PARSE_ALL_KEYMAPS $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS))) endef -RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); +include $(ROOT_DIR)/message.mk + +#RUN_COMMAND = echo "Running": $(COMMAND_$(COMMAND)); +RUN_COMMAND = \ +$(COMMAND_$(COMMAND)) +#LOG=$$(echo $(COMMAND) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \ # Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) @@ -244,3 +270,4 @@ all-keyboards: allkb-allsp-allkm .PHONY: all-keyboards-defaults all-keyboards-defaults: allkb-allsp-default + -- cgit v1.2.3 From 67b294ca66fd9da341ab93019a380d91ac589c96 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 10:26:23 +0300 Subject: Actual compilation --- Makefile | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index e5becd7ad7..fc61572094 100644 --- a/Makefile +++ b/Makefile @@ -228,17 +228,19 @@ define PARSE_KEYMAP KB_SP := $(CURRENT_KB)/$$(CURRENT_SP) endif KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) + MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) + MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=false COMMAND_$$(COMMAND) := \ - printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ - $(AWK) '{ printf "%-118s", $$$$0;}'; \ - LOG=$$$$(echo "$$(MAKE) -c $(ROOT_DIR) -f build_keyboard.mk VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true" 2>&1) ; \ - if [ $$$$? -gt 0 ]; \ - then $$(PRINT_ERROR_PLAIN); \ - elif [ "$$$$LOG" != "" ] ; \ - then $$(PRINT_WARNING_PLAIN); \ - else \ - $$(PRINT_OK); \ - fi; + printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ + $(AWK) '{ printf "%-118s", $$$$0;}'; \ + LOG=$$$$($$(MAKE) -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ + if [ $$$$? -gt 0 ]; \ + then $$(PRINT_ERROR_PLAIN); \ + elif [ "$$$$LOG" != "" ] ; \ + then $$(PRINT_WARNING_PLAIN); \ + else \ + $$(PRINT_OK); \ + fi; endef define PARSE_ALL_KEYMAPS @@ -258,9 +260,11 @@ SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile))) $(SUBPROJECTS): %: %-allkm .PHONY: % -%: +%: + cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + .PHONY: all all: all-keyboards -- cgit v1.2.3 From 60c6e79ecb032e9726809a295ab3e0011e6b2fb4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Mon, 8 Aug 2016 11:19:29 +0300 Subject: Move git submodule check and version generation to main Makefile --- Makefile | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index fc61572094..caa8f2de1c 100644 --- a/Makefile +++ b/Makefile @@ -262,6 +262,13 @@ $(SUBPROJECTS): %: %-allkm .PHONY: % %: cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi; + git submodule status --recursive 2>/dev/null | \ + while IFS= read -r x; do \ + case "$$x" in \ + \ *) ;; \ + *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \ + esac \ + done $(eval $(call PARSE_RULE,$@)) $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) @@ -275,3 +282,8 @@ all-keyboards: allkb-allsp-allkm .PHONY: all-keyboards-defaults all-keyboards-defaults: allkb-allsp-default + +GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S") +BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S") +$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h) +$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h) \ No newline at end of file -- cgit v1.2.3 From 881bde8258e077500a99fd670633e79ecd074832 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 9 Aug 2016 08:30:21 +0300 Subject: Fix running make in parallel --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index caa8f2de1c..b39e9dded1 100644 --- a/Makefile +++ b/Makefile @@ -270,7 +270,7 @@ $(SUBPROJECTS): %: %-allkm esac \ done $(eval $(call PARSE_RULE,$@)) - $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) + +$(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND)) .PHONY: all -- cgit v1.2.3 From e4c842de02d95e98f65c7bb4a8406ec6df4944fe Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 9 Aug 2016 08:31:04 +0300 Subject: Don't run builtin rules for submake To speed up the compilation --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index b39e9dded1..9b534e897b 100644 --- a/Makefile +++ b/Makefile @@ -233,7 +233,7 @@ define PARSE_KEYMAP COMMAND_$$(COMMAND) := \ printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ $(AWK) '{ printf "%-118s", $$$$0;}'; \ - LOG=$$$$($$(MAKE) -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ + LOG=$$$$($$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ if [ $$$$? -gt 0 ]; \ then $$(PRINT_ERROR_PLAIN); \ elif [ "$$$$LOG" != "" ] ; \ -- cgit v1.2.3 From 8732265928818dd0b8797fb271e7c7fa9346d025 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Tue, 9 Aug 2016 09:52:01 +0300 Subject: Options for silent compilation A single keyboard is always by default compiled in verbose mode. While multiple keyboards are compiled in silent mode. This can be overriden by the silent variable from the command line --- Makefile | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 9b534e897b..3d4bd589f3 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,16 @@ ifndef VERBOSE .SILENT: endif +ifdef silent + SILENT = $(silent) +endif + +ifdef SILENT + SUB_IS_SILENT := $(silent) +endif + +override SILENT = false + STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST)) ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST)) ROOT_DIR := $(dir $(ROOT_MAKEFILE)) @@ -59,10 +69,10 @@ ifdef keymap KEYMAP := $(keymap) endif -$(info Keyboard: $(KEYBOARD)) -$(info Keymap: $(KEYMAP)) -$(info Subproject: $(SUBPROJECT)) -$(info Keyboards: $(KEYBOARDS)) +#$(info Keyboard: $(KEYBOARD)) +#$(info Keymap: $(KEYMAP)) +#$(info Subproject: $(SUBPROJECT)) +#$(info Keyboards: $(KEYBOARDS)) .DEFAULT_GOAL := all ifneq ($(KEYMAP),) @@ -229,11 +239,14 @@ define PARSE_KEYMAP endif KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR) MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM) - MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=false - COMMAND_$$(COMMAND) := \ - printf "Compiling $$(KB_SP) with $(BOLD)$$(CURRENT_KM)$(NO_COLOR)" | \ - $(AWK) '{ printf "%-118s", $$$$0;}'; \ - LOG=$$$$($$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_VARS) 2>&1) ; \ + MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR) + MAKE_COMMAND := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk + MAKE_MSG := Compil