]> git.donarmstrong.com Git - qmk_firmware.git/blob - Makefile
Makefile redo & other features (#395)
[qmk_firmware.git] / Makefile
1 ifndef VERBOSE
2 .SILENT:
3 endif
4
5 starting_makefile := $(abspath $(firstword $(MAKEFILE_LIST)))
6 mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
7 tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
8
9 ifneq (,$(findstring /keyboard/,$(starting_makefile)))
10         possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(tmk_root)/keyboard/%,%,$(starting_makefile))))
11         ifneq (,$(findstring /keymaps/,$(possible_keyboard)))
12                 KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard)))
13                 KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard)))
14         else
15                 KEYBOARD_DIR:=$(possible_keyboard)
16                 KEYMAP_DIR:=default
17         endif
18 endif
19
20 # $(info $(KEYBOARD_DIR))
21 # $(info $(KEYMAP_DIR))
22
23 # Directory common source filess exist
24 TOP_DIR = $(tmk_root)
25 TMK_DIR = tmk_core
26 TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
27
28 QUANTUM_DIR = quantum
29 QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
30
31 ifdef keyboard
32         KEYBOARD ?= $(keyboard)
33 endif
34 ifdef KEYBOARD_DIR
35         KEYBOARD ?= $(KEYBOARD_DIR)
36 endif
37 ifndef KEYBOARD
38         KEYBOARD=planck
39 endif
40 KEYBOARD_PATH = $(TOP_DIR)/keyboard/$(KEYBOARD)
41 ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
42         KEYBOARD_FILE = keyboard/$(KEYBOARD)/$(KEYBOARD).c
43         ifndef ARCH
44                 include $(KEYBOARD_PATH)/Makefile
45         endif
46 else 
47 $(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
48 endif
49
50 ifdef keymap
51         KEYMAP ?= $(keymap)
52 endif
53 ifdef KEYMAP_DIR
54         KEYMAP ?= $(KEYMAP_DIR)
55 endif
56 ifndef KEYMAP
57         KEYMAP = default
58 endif
59 KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
60 ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
61         KEYMAP_FILE = keyboard/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
62         -include $(KEYMAP_PATH)/Makefile
63 else 
64 $(error "$(KEYMAP_PATH)/keymap.c" does not exist)
65 endif
66
67 TARGET = $(KEYBOARD)_$(KEYMAP)
68
69 ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
70         CONFIG_H = $(KEYMAP_PATH)/config.h
71 else
72         CONFIG_H = $(KEYBOARD_PATH)/config.h
73 endif
74
75 # # project specific files
76 SRC += $(KEYBOARD_FILE) \
77         $(KEYMAP_FILE) \
78         $(QUANTUM_DIR)/quantum.c \
79         $(QUANTUM_DIR)/keymap_common.c \
80         $(QUANTUM_DIR)/led.c
81
82 ifndef CUSTOM_MATRIX
83         SRC += $(QUANTUM_DIR)/matrix.c
84 endif
85
86 ifeq ($(strip $(AUDIO_ENABLE)), yes)
87         SRC += $(QUANTUM_DIR)/audio/audio.c
88         SRC += $(QUANTUM_DIR)/audio/voices.c
89         SRC += $(QUANTUM_DIR)/audio/luts.c
90 endif
91
92 ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
93         SRC += $(QUANTUM_DIR)/light_ws2812.c
94         SRC += $(QUANTUM_DIR)/rgblight.c
95         OPT_DEFS += -DRGBLIGHT_ENABLE
96 endif
97
98 # Optimize size but this may cause error "relocation truncated to fit"
99 #EXTRALDFLAGS = -Wl,--relax
100
101 # Search Path
102 VPATH += $(KEYMAP_PATH)
103 VPATH += $(KEYBOARD_PATH)
104 VPATH += $(TOP_DIR)
105 VPATH += $(TMK_PATH)
106 VPATH += $(QUANTUM_PATH)
107 VPATH += $(QUANTUM_PATH)/keymap_extras
108 VPATH += $(QUANTUM_PATH)/audio
109
110 include $(TMK_PATH)/protocol/lufa.mk
111 include $(TMK_PATH)/common.mk
112 include $(TMK_PATH)/rules.mk