aboutsummaryrefslogtreecommitdiff
path: root/build_keyboard.mk
diff options
context:
space:
mode:
authorskullY <skullydazed@gmail.com>2018-08-11 11:16:21 -0700
committerJack Humbert <jack.humb@gmail.com>2018-08-11 15:19:08 -0400
commit98b16b3294e4b04e6621daba8cff07fbd982f335 (patch)
tree90ad7427a7923e6efb2bf6320539b688017425c9 /build_keyboard.mk
parent85659ae5e1b41af4889f154dcc47d4bc9c1f0a19 (diff)
downloadqmk_firmware-98b16b3294e4b04e6621daba8cff07fbd982f335.tar.gz
qmk_firmware-98b16b3294e4b04e6621daba8cff07fbd982f335.zip
Comment and organize build_keyboard.mk a bit
Diffstat (limited to 'build_keyboard.mk')
-rw-r--r--build_keyboard.mk81
1 files changed, 53 insertions, 28 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk
index b25712385..9f6c42ea1 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -1,3 +1,9 @@
1# Determine what keyboard we are building and setup the build environment.
2#
3# We support folders up to 5 levels deep below `keyboards/`. This file is
4# responsible for determining which folder is being used and doing the
5# corresponding environment setup.
6
1ifndef VERBOSE 7ifndef VERBOSE
2.SILENT: 8.SILENT:
3endif 9endif
@@ -6,26 +12,15 @@ endif
6 12
7include common.mk 13include common.mk
8 14
9# 5/4/3/2/1 15# Set the filename for the final firmware binary
10KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
11KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
12KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
13KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
14KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
15KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
16KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
17KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
18KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
19KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
20
21KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD)) 16KEYBOARD_FILESAFE := $(subst /,_,$(KEYBOARD))
22
23TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP) 17TARGET ?= $(KEYBOARD_FILESAFE)_$(KEYMAP)
24KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE) 18KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD_FILESAFE)
25 19
26# Force expansion 20# Force expansion
27TARGET := $(TARGET) 21TARGET := $(TARGET)
28 22
23# For split boards we need to set a master half.
29MASTER ?= left 24MASTER ?= left
30ifdef master 25ifdef master
31 MASTER = $(master) 26 MASTER = $(master)
@@ -39,35 +34,58 @@ $(error MASTER does not have a valid value(left/right))
39 endif 34 endif
40endif 35endif
41 36
37# Determine which subfolders exist.
38KEYBOARD_FOLDER_PATH_1 := $(KEYBOARD)
39KEYBOARD_FOLDER_PATH_2 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_1)))
40KEYBOARD_FOLDER_PATH_3 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_2)))
41KEYBOARD_FOLDER_PATH_4 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_3)))
42KEYBOARD_FOLDER_PATH_5 := $(patsubst %/,%,$(dir $(KEYBOARD_FOLDER_PATH_4)))
43KEYBOARD_FOLDER_1 := $(notdir $(KEYBOARD_FOLDER_PATH_1))
44KEYBOARD_FOLDER_2 := $(notdir $(KEYBOARD_FOLDER_PATH_2))
45KEYBOARD_FOLDER_3 := $(notdir $(KEYBOARD_FOLDER_PATH_3))
46KEYBOARD_FOLDER_4 := $(notdir $(KEYBOARD_FOLDER_PATH_4))
47KEYBOARD_FOLDER_5 := $(notdir $(KEYBOARD_FOLDER_PATH_5))
42KEYBOARD_PATHS := 48KEYBOARD_PATHS :=
43
44KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1) 49KEYBOARD_PATH_1 := keyboards/$(KEYBOARD_FOLDER_PATH_1)
45KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2) 50KEYBOARD_PATH_2 := keyboards/$(KEYBOARD_FOLDER_PATH_2)
46KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3) 51KEYBOARD_PATH_3 := keyboards/$(KEYBOARD_FOLDER_PATH_3)
47KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4) 52KEYBOARD_PATH_4 := keyboards/$(KEYBOARD_FOLDER_PATH_4)
48KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5) 53KEYBOARD_PATH_5 := keyboards/$(KEYBOARD_FOLDER_PATH_5)
49 54
50ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","") 55ifneq ("$(wildcard $(KEYBOARD_PATH_5)/)","")
51 KEYBOARD_PATHS += $(KEYBOARD_PATH_5) 56 KEYBOARD_PATHS += $(KEYBOARD_PATH_5)
57endif
58ifneq ("$(wildcard $(KEYBOARD_PATH_4)/)","")
59 KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
60endif
61ifneq ("$(wildcard $(KEYBOARD_PATH_3)/)","")
62 KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
63endif
64ifneq ("$(wildcard $(KEYBOARD_PATH_2)/)","")
65 KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
66endif
67ifneq ("$(wildcard $(KEYBOARD_PATH_1)/)","")
68 KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
69endif
70
71# Pull in rules.mk files from all our subfolders
72ifneq ("$(wildcard $(KEYBOARD_PATH_5)/rules.mk)","")
52 include $(KEYBOARD_PATH_5)/rules.mk 73 include $(KEYBOARD_PATH_5)/rules.mk
53endif 74endif
54ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","") 75ifneq ("$(wildcard $(KEYBOARD_PATH_4)/rules.mk)","")
55 KEYBOARD_PATHS += $(KEYBOARD_PATH_4)
56 include $(KEYBOARD_PATH_4)/rules.mk 76 include $(KEYBOARD_PATH_4)/rules.mk
57endif 77endif
58ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","") 78ifneq ("$(wildcard $(KEYBOARD_PATH_3)/rules.mk)","")
59 KEYBOARD_PATHS += $(KEYBOARD_PATH_3)
60 include $(KEYBOARD_PATH_3)/rules.mk 79 include $(KEYBOARD_PATH_3)/rules.mk
61endif 80endif
62ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","") 81ifneq ("$(wildcard $(KEYBOARD_PATH_2)/rules.mk)","")
63 KEYBOARD_PATHS += $(KEYBOARD_PATH_2)
64 include $(KEYBOARD_PATH_2)/rules.mk 82 include $(KEYBOARD_PATH_2)/rules.mk
65endif 83endif
66ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","") 84ifneq ("$(wildcard $(KEYBOARD_PATH_1)/rules.mk)","")
67 KEYBOARD_PATHS += $(KEYBOARD_PATH_1)
68 include $(KEYBOARD_PATH_1)/rules.mk 85 include $(KEYBOARD_PATH_1)/rules.mk
69endif 86endif
70 87
88# Find all the C source files to be compiled in subfolders.
71KEYBOARD_SRC := 89KEYBOARD_SRC :=
72 90
73KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c 91KEYBOARD_C_1 := $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).c
@@ -95,6 +113,15 @@ endif
95OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE) 113OPT_DEFS += -DKEYBOARD_$(KEYBOARD_FILESAFE)
96 114
97 115
116# Setup the define for QMK_KEYBOARD_H. This is used inside of keymaps so
117# that the same keymap may be used on multiple keyboards.
118#
119# We grab the most top-level include file that we can. That file should
120# use #ifdef statements to include all the neccesary subfolder includes,
121# as described here:
122#
123# https://docs.qmk.fm/#/feature_layouts?id=tips-for-making-layouts-keyboard-agnostic
124#
98ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","") 125ifneq ("$(wildcard $(KEYBOARD_PATH_1)/$(KEYBOARD_FOLDER_1).h)","")
99 QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h 126 QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_1).h
100endif 127endif
@@ -111,13 +138,15 @@ ifneq ("$(wildcard $(KEYBOARD_PATH_5)/$(KEYBOARD_FOLDER_5).h)","")
111 QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h 138 QMK_KEYBOARD_H = $(KEYBOARD_FOLDER_5).h
112endif 139endif
113 140
114# We can assume a ChibiOS target When MCU_FAMILY is defined , since it's not used for LUFA 141# Determine and set parameters based on the keyboard's processor family.
142# We can assume a ChibiOS target When MCU_FAMILY is defined since it's
143# not used for LUFA
115ifdef MCU_FAMILY 144ifdef MCU_FAMILY
116 FIRMWARE_FORMAT=bin 145 FIRMWARE_FORMAT?=bin
117 PLATFORM=CHIBIOS 146 PLATFORM=CHIBIOS
118else 147else
119 PLATFORM=AVR 148 PLATFORM=AVR
120 FIRMWARE_FORMAT=hex 149 FIRMWARE_FORMAT?=hex
121endif 150endif
122 151
123ifeq ($(PLATFORM),CHIBIOS) 152ifeq ($(PLATFORM),CHIBIOS)
@@ -148,6 +177,7 @@ ifeq ($(PLATFORM),CHIBIOS)
148 endif 177 endif
149endif 178endif
150 179
180# Find all of the config.h files and add them to our CONFIG_H define.
151CONFIG_H := 181CONFIG_H :=
152ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","") 182ifneq ("$(wildcard $(KEYBOARD_PATH_5)/config.h)","")
153 CONFIG_H += $(KEYBOARD_PATH_5)/config.h 183 CONFIG_H += $(KEYBOARD_PATH_5)/config.h
@@ -203,7 +233,7 @@ else
203 # this state should never be reached 233 # this state should never be reached
204endif 234endif
205 235
206# User space stuff 236# Userspace setup and definitions
207ifeq ("$(USER_NAME)","") 237ifeq ("$(USER_NAME)","")
208 USER_NAME := $(KEYMAP) 238 USER_NAME := $(KEYMAP)
209endif 239endif
@@ -283,11 +313,6 @@ $(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
283 313
284# Default target. 314# Default target.
285all: build check-size 315all: build check-size
286
287# Change the build target to build a HEX file or a library.
288build: elf cpfirmware 316build: elf cpfirmware
289#build: elf hex eep lss sym
290#build: lib
291
292 317
293include $(TMK_PATH)/rules.mk 318include $(TMK_PATH)/rules.mk