10 # Directory common source filess exist
13 TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
14 LIB_PATH = $(TOP_DIR)/lib
17 QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
25 KEYBOARD_PATH := keyboards/$(KEYBOARD)
26 KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
28 ifneq ("$(wildcard $(KEYBOARD_C))","")
29 include $(KEYBOARD_PATH)/rules.mk
31 $(error "$(KEYBOARD_C)" does not exist)
35 ifneq ($(SUBPROJECT),)
36 SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
37 SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
38 ifneq ("$(wildcard $(SUBPROJECT_C))","")
39 OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
40 include $(SUBPROJECT_PATH)/rules.mk
42 $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
46 # Save the defs here, so we don't include any keymap specific ones
47 PROJECT_DEFS := $(OPT_DEFS)
49 MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
50 MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c
51 SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
52 SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c
53 ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","")
54 -include $(SUBPROJ_KEYMAP_PATH)/Makefile
55 KEYMAP_C := $(SUBPROJ_KEYMAP_C)
56 KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH)
57 else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","")
58 -include $(MAIN_KEYMAP_PATH)/Makefile
59 KEYMAP_C := $(MAIN_KEYMAP_C)
60 KEYMAP_PATH := $(MAIN_KEYMAP_PATH)
62 $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist)
65 BUILD_DIR = $(TOP_DIR)/.build
67 ifneq ($(SUBPROJECT),)
68 TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
69 KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT)
71 TARGET ?= $(KEYBOARD)_$(KEYMAP)
72 KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)
75 # We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
82 ifeq ($(PLATFORM),CHIBIOS)
83 include $(TMK_PATH)/protocol/chibios.mk
84 include $(TMK_PATH)/chibios.mk
88 # Object files directory
89 # To put object files in current directory, use a dot (.), do NOT make
90 # this an empty or blank macro!
91 KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
94 ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
95 CONFIG_H = $(KEYMAP_PATH)/config.h
97 CONFIG_H = $(KEYBOARD_PATH)/config.h
98 ifneq ($(SUBPROJECT),)
99 ifneq ("$(wildcard $(SUBPROJECT_C))","")
100 CONFIG_H = $(SUBPROJECT_PATH)/config.h
105 # # project specific files
106 SRC += $(KEYBOARD_C) \
108 $(QUANTUM_DIR)/quantum.c \
109 $(QUANTUM_DIR)/keymap_common.c \
110 $(QUANTUM_DIR)/keycode_config.c \
111 $(QUANTUM_DIR)/process_keycode/process_leader.c
113 ifneq ($(SUBPROJECT),)
114 SRC += $(SUBPROJECT_C)
118 SRC += $(QUANTUM_DIR)/matrix.c
121 ifeq ($(strip $(MIDI_ENABLE)), yes)
122 OPT_DEFS += -DMIDI_ENABLE
123 SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
126 ifeq ($(strip $(AUDIO_ENABLE)), yes)
127 OPT_DEFS += -DAUDIO_ENABLE
128 SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
129 SRC += $(QUANTUM_DIR)/audio/audio.c
130 SRC += $(QUANTUM_DIR)/audio/voices.c
131 SRC += $(QUANTUM_DIR)/audio/luts.c
134 ifeq ($(strip $(UNICODE_ENABLE)), yes)
135 OPT_DEFS += -DUNICODE_ENABLE
136 SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
139 ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
140 OPT_DEFS += -DRGBLIGHT_ENABLE
141 SRC += $(QUANTUM_DIR)/light_ws2812.c
142 SRC += $(QUANTUM_DIR)/rgblight.c
145 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
146 OPT_DEFS += -DTAP_DANCE_ENABLE
147 SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
150 ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
151 SERIAL_DIR = $(QUANTUM_DIR)/serial_link
152 SERIAL_PATH = $(QUANTUM_PATH)/serial_link
153 SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
154 SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
155 SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
156 OPT_DEFS += -DSERIAL_LINK_ENABLE
157 VAPTH += $(SERIAL_PATH)
160 # Optimize size but this may cause error "relocation truncated to fit"
161 #EXTRALDFLAGS = -Wl,--relax
164 VPATH += $(KEYMAP_PATH)
165 ifneq ($(SUBPROJECT),)
166 VPATH += $(SUBPROJECT_PATH)
168 VPATH += $(KEYBOARD_PATH)
171 VPATH += $(QUANTUM_PATH)
172 VPATH += $(QUANTUM_PATH)/keymap_extras
173 VPATH += $(QUANTUM_PATH)/audio
174 VPATH += $(QUANTUM_PATH)/process_keycode
177 include $(TMK_PATH)/common.mk
178 ifeq ($(PLATFORM),AVR)
179 include $(TMK_PATH)/protocol/lufa.mk
180 include $(TMK_PATH)/avr.mk
183 ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
184 VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
185 VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
186 include $(VISUALIZER_PATH)/visualizer.mk
190 OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
191 $(KEYMAP_OUTPUT)_SRC := $(SRC)
192 $(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
193 $(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC)
194 $(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
197 include $(TMK_PATH)/rules.mk