| 1 | # Copyright 2017 Fred Sundvik |
| 2 | # |
| 3 | # This program is free software: you can redistribute it and/or modify |
| 4 | # it under the terms of the GNU General Public License as published by |
| 5 | # the Free Software Foundation, either version 2 of the License, or |
| 6 | # (at your option) any later version. |
| 7 | # |
| 8 | # This program is distributed in the hope that it will be useful, |
| 9 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 | # GNU General Public License for more details. |
| 12 | # |
| 13 | # You should have received a copy of the GNU General Public License |
| 14 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 15 | |
| 16 | SERIAL_DIR := $(QUANTUM_DIR)/serial_link |
| 17 | SERIAL_PATH := $(QUANTUM_PATH)/serial_link |
| 18 | SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c) |
| 19 | SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c) |
| 20 | SERIAL_DEFS += -DSERIAL_LINK_ENABLE |
| 21 | COMMON_VPATH += $(SERIAL_PATH) |
| 22 | |
| 23 | ifeq ($(strip $(API_SYSEX_ENABLE)), yes) |
| 24 | OPT_DEFS += -DAPI_SYSEX_ENABLE |
| 25 | SRC += $(QUANTUM_DIR)/api/api_sysex.c |
| 26 | OPT_DEFS += -DAPI_ENABLE |
| 27 | SRC += $(QUANTUM_DIR)/api.c |
| 28 | MIDI_ENABLE=yes |
| 29 | endif |
| 30 | |
| 31 | MUSIC_ENABLE := 0 |
| 32 | |
| 33 | ifeq ($(strip $(AUDIO_ENABLE)), yes) |
| 34 | OPT_DEFS += -DAUDIO_ENABLE |
| 35 | MUSIC_ENABLE := 1 |
| 36 | SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c |
| 37 | SRC += $(QUANTUM_DIR)/process_keycode/process_clicky.c |
| 38 | ifeq ($(PLATFORM),AVR) |
| 39 | SRC += $(QUANTUM_DIR)/audio/audio.c |
| 40 | else |
| 41 | SRC += $(QUANTUM_DIR)/audio/audio_arm.c |
| 42 | endif |
| 43 | SRC += $(QUANTUM_DIR)/audio/voices.c |
| 44 | SRC += $(QUANTUM_DIR)/audio/luts.c |
| 45 | endif |
| 46 | |
| 47 | ifeq ($(strip $(MIDI_ENABLE)), yes) |
| 48 | OPT_DEFS += -DMIDI_ENABLE |
| 49 | MUSIC_ENABLE := 1 |
| 50 | SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c |
| 51 | endif |
| 52 | |
| 53 | ifeq ($(MUSIC_ENABLE), 1) |
| 54 | SRC += $(QUANTUM_DIR)/process_keycode/process_music.c |
| 55 | endif |
| 56 | |
| 57 | ifeq ($(strip $(COMBO_ENABLE)), yes) |
| 58 | OPT_DEFS += -DCOMBO_ENABLE |
| 59 | SRC += $(QUANTUM_DIR)/process_keycode/process_combo.c |
| 60 | endif |
| 61 | |
| 62 | ifeq ($(strip $(STENO_ENABLE)), yes) |
| 63 | OPT_DEFS += -DSTENO_ENABLE |
| 64 | VIRTSER_ENABLE := yes |
| 65 | SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c |
| 66 | endif |
| 67 | |
| 68 | ifeq ($(strip $(VIRTSER_ENABLE)), yes) |
| 69 | OPT_DEFS += -DVIRTSER_ENABLE |
| 70 | endif |
| 71 | |
| 72 | ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes) |
| 73 | OPT_DEFS += -DFAUXCLICKY_ENABLE |
| 74 | SRC += $(QUANTUM_DIR)/fauxclicky.c |
| 75 | endif |
| 76 | |
| 77 | ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes) |
| 78 | OPT_DEFS += -DPOINTING_DEVICE_ENABLE |
| 79 | OPT_DEFS += -DMOUSE_ENABLE |
| 80 | SRC += $(QUANTUM_DIR)/pointing_device.c |
| 81 | endif |
| 82 | |
| 83 | ifeq ($(strip $(UCIS_ENABLE)), yes) |
| 84 | OPT_DEFS += -DUCIS_ENABLE |
| 85 | UNICODE_COMMON = yes |
| 86 | SRC += $(QUANTUM_DIR)/process_keycode/process_ucis.c |
| 87 | endif |
| 88 | |
| 89 | ifeq ($(strip $(UNICODEMAP_ENABLE)), yes) |
| 90 | OPT_DEFS += -DUNICODEMAP_ENABLE |
| 91 | UNICODE_COMMON = yes |
| 92 | SRC += $(QUANTUM_DIR)/process_keycode/process_unicodemap.c |
| 93 | endif |
| 94 | |
| 95 | ifeq ($(strip $(UNICODE_ENABLE)), yes) |
| 96 | OPT_DEFS += -DUNICODE_ENABLE |
| 97 | UNICODE_COMMON = yes |
| 98 | SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c |
| 99 | endif |
| 100 | |
| 101 | ifeq ($(strip $(UNICODE_COMMON)), yes) |
| 102 | SRC += $(QUANTUM_DIR)/process_keycode/process_unicode_common.c |
| 103 | endif |
| 104 | |
| 105 | ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) |
| 106 | POST_CONFIG_H += $(QUANTUM_DIR)/rgblight_post_config.h |
| 107 | OPT_DEFS += -DRGBLIGHT_ENABLE |
| 108 | SRC += $(QUANTUM_DIR)/color.c |
| 109 | SRC += $(QUANTUM_DIR)/rgblight.c |
| 110 | CIE1931_CURVE = yes |
| 111 | LED_BREATHING_TABLE = yes |
| 112 | ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes) |
| 113 | OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER |
| 114 | else |
| 115 | SRC += ws2812.c |
| 116 | endif |
| 117 | endif |
| 118 | |
| 119 | VALID_MATRIX_TYPES := yes IS31FL3731 IS31FL3733 IS31FL3737 WS2812 custom |
| 120 | |
| 121 | LED_MATRIX_ENABLE ?= no |
| 122 | ifneq ($(strip $(LED_MATRIX_ENABLE)), no) |
| 123 | ifeq ($(filter $(LED_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),) |
| 124 | $(error LED_MATRIX_ENABLE="$(LED_MATRIX_ENABLE)" is not a valid matrix type) |
| 125 | else |
| 126 | OPT_DEFS += -DLED_MATRIX_ENABLE -DBACKLIGHT_ENABLE -DBACKLIGHT_CUSTOM_DRIVER |
| 127 | SRC += $(QUANTUM_DIR)/led_matrix.c |
| 128 | SRC += $(QUANTUM_DIR)/led_matrix_drivers.c |
| 129 | endif |
| 130 | endif |
| 131 | |
| 132 | ifeq ($(strip $(LED_MATRIX_ENABLE)), IS31FL3731) |
| 133 | OPT_DEFS += -DIS31FL3731 |
| 134 | COMMON_VPATH += $(DRIVER_PATH)/issi |
| 135 | SRC += is31fl3731-simple.c |
| 136 | SRC += i2c_master.c |
| 137 | endif |
| 138 | |
| 139 | RGB_MATRIX_ENABLE ?= no |
| 140 | |
| 141 | ifneq ($(strip $(RGB_MATRIX_ENABLE)), no) |
| 142 | ifeq ($(filter $(RGB_MATRIX_ENABLE),$(VALID_MATRIX_TYPES)),) |
| 143 | $(error RGB_MATRIX_ENABLE="$(RGB_MATRIX_ENABLE)" is not a valid matrix type) |
| 144 | endif |
| 145 | OPT_DEFS += -DRGB_MATRIX_ENABLE |
| 146 | SRC += $(QUANTUM_DIR)/color.c |
| 147 | SRC += $(QUANTUM_DIR)/rgb_matrix.c |
| 148 | SRC += $(QUANTUM_DIR)/rgb_matrix_drivers.c |
| 149 | CIE1931_CURVE = yes |
| 150 | endif |
| 151 | |
| 152 | ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) |
| 153 | RGB_MATRIX_ENABLE = IS31FL3731 |
| 154 | endif |
| 155 | |
| 156 | ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731) |
| 157 | OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE |
| 158 | COMMON_VPATH += $(DRIVER_PATH)/issi |
| 159 | SRC += is31fl3731.c |
| 160 | SRC += i2c_master.c |
| 161 | endif |
| 162 | |
| 163 | ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733) |
| 164 | OPT_DEFS += -DIS31FL3733 -DSTM32_I2C -DHAL_USE_I2C=TRUE |
| 165 | COMMON_VPATH += $(DRIVER_PATH)/issi |
| 166 | SRC += is31fl3733.c |
| 167 | SRC += i2c_master.c |
| 168 | endif |
| 169 | |
| 170 | ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3737) |
| 171 | OPT_DEFS += -DIS31FL3737 -DSTM32_I2C -DHAL_USE_I2C=TRUE |
| 172 | COMMON_VPATH += $(DRIVER_PATH)/issi |
| 173 | SRC += is31fl3737.c |
| 174 | SRC += i2c_master.c |
| 175 | endif |
| 176 | |
| 177 | ifeq ($(strip $(RGB_MATRIX_ENABLE)), WS2812) |
| 178 | OPT_DEFS += -DWS2812 |
| 179 | SRC += ws2812.c |
| 180 | endif |
| 181 | |
| 182 | ifeq ($(strip $(RGB_MATRIX_CUSTOM_KB)), yes) |
| 183 | OPT_DEFS += -DRGB_MATRIX_CUSTOM_KB |
| 184 | endif |
| 185 | |
| 186 | ifeq ($(strip $(RGB_MATRIX_CUSTOM_USER)), yes) |
| 187 | OPT_DEFS += -DRGB_MATRIX_CUSTOM_USER |
| 188 | endif |
| 189 | |
| 190 | ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) |
| 191 | OPT_DEFS += -DTAP_DANCE_ENABLE |
| 192 | SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c |
| 193 | endif |
| 194 | |
| 195 | ifeq ($(strip $(KEY_LOCK_ENABLE)), yes) |
| 196 | OPT_DEFS += -DKEY_LOCK_ENABLE |
| 197 | SRC += $(QUANTUM_DIR)/process_keycode/process_key_lock.c |
| 198 | endif |
| 199 | |
| 200 | ifeq ($(strip $(PRINTING_ENABLE)), yes) |
| 201 | OPT_DEFS += -DPRINTING_ENABLE |
| 202 | SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c |
| 203 | SRC += $(TMK_DIR)/protocol/serial_uart.c |
| 204 | endif |
| 205 | |
| 206 | ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes) |
| 207 | OPT_DEFS += -DAUTO_SHIFT_ENABLE |
| 208 | SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c |
| 209 | ifeq ($(strip $(AUTO_SHIFT_MODIFIERS)), yes) |
| 210 | OPT_DEFS += -DAUTO_SHIFT_MODIFIERS |
| 211 | endif |
| 212 | endif |
| 213 | |
| 214 | ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) |
| 215 | SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC)) |
| 216 | OPT_DEFS += $(SERIAL_DEFS) |
| 217 | VAPTH += $(SERIAL_PATH) |
| 218 | endif |
| 219 | |
| 220 | ifneq ($(strip $(VARIABLE_TRACE)),) |
| 221 | SRC += $(QUANTUM_DIR)/variable_trace.c |
| 222 | OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE)) |
| 223 | ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),) |
| 224 | OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE)) |
| 225 | endif |
| 226 | endif |
| 227 | |
| 228 | ifeq ($(strip $(LCD_ENABLE)), yes) |
| 229 | CIE1931_CURVE = yes |
| 230 | endif |
| 231 | |
| 232 | ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) |
| 233 | ifeq ($(strip $(VISUALIZER_ENABLE)), yes) |
| 234 | CIE1931_CURVE = yes |
| 235 | endif |
| 236 | ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes) |
| 237 | OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER |
| 238 | endif |
| 239 | endif |
| 240 | |
| 241 | ifeq ($(strip $(CIE1931_CURVE)), yes) |
| 242 | OPT_DEFS += -DUSE_CIE1931_CURVE |
| 243 | LED_TABLES = yes |
| 244 | endif |
| 245 | |
| 246 | ifeq ($(strip $(LED_BREATHING_TABLE)), yes) |
| 247 | OPT_DEFS += -DUSE_LED_BREATHING_TABLE |
| 248 | LED_TABLES = yes |
| 249 | endif |
| 250 | |
| 251 | ifeq ($(strip $(LED_TABLES)), yes) |
| 252 | SRC += $(QUANTUM_DIR)/led_tables.c |
| 253 | endif |
| 254 | |
| 255 | ifeq ($(strip $(TERMINAL_ENABLE)), yes) |
| 256 | SRC += $(QUANTUM_DIR)/process_keycode/process_terminal.c |
| 257 | OPT_DEFS += -DTERMINAL_ENABLE |
| 258 | OPT_DEFS += -DUSER_PRINT |
| 259 | endif |
| 260 | |
| 261 | ifeq ($(strip $(USB_HID_ENABLE)), yes) |
| 262 | include $(TMK_DIR)/protocol/usb_hid.mk |
| 263 | endif |
| 264 | |
| 265 | ifeq ($(strip $(ENCODER_ENABLE)), yes) |
| 266 | SRC += $(QUANTUM_DIR)/encoder.c |
| 267 | OPT_DEFS += -DENCODER_ENABLE |
| 268 | endif |
| 269 | |
| 270 | ifeq ($(strip $(HAPTIC_ENABLE)), DRV2605L) |
| 271 | COMMON_VPATH += $(DRIVER_PATH)/haptic |
| 272 | SRC += haptic.c |
| 273 | SRC += DRV2605L.c |
| 274 | SRC += i2c_master.c |
| 275 | OPT_DEFS += -DHAPTIC_ENABLE |
| 276 | OPT_DEFS += -DDRV2605L |
| 277 | endif |
| 278 | |
| 279 | ifeq ($(strip $(HAPTIC_ENABLE)), SOLENOID) |
| 280 | COMMON_VPATH += $(DRIVER_PATH)/haptic |
| 281 | SRC += haptic.c |
| 282 | SRC += solenoid.c |
| 283 | OPT_DEFS += -DHAPTIC_ENABLE |
| 284 | OPT_DEFS += -DSOLENOID_ENABLE |
| 285 | endif |
| 286 | |
| 287 | ifeq ($(strip $(HD44780_ENABLE)), yes) |
| 288 | SRC += drivers/avr/hd44780.c |
| 289 | OPT_DEFS += -DHD44780_ENABLE |
| 290 | endif |
| 291 | |
| 292 | ifeq ($(strip $(VELOCIKEY_ENABLE)), yes) |
| 293 | OPT_DEFS += -DVELOCIKEY_ENABLE |
| 294 | SRC += $(QUANTUM_DIR)/velocikey.c |
| 295 | endif |
| 296 | |
| 297 | ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes) |
| 298 | OPT_DEFS += -DDYNAMIC_KEYMAP_ENABLE |
| 299 | SRC += $(QUANTUM_DIR)/dynamic_keymap.c |
| 300 | endif |
| 301 | |
| 302 | ifeq ($(strip $(LEADER_ENABLE)), yes) |
| 303 | SRC += $(QUANTUM_DIR)/process_keycode/process_leader.c |
| 304 | OPT_DEFS += -DLEADER_ENABLE |
| 305 | endif |
| 306 | |
| 307 | include $(DRIVER_PATH)/qwiic/qwiic.mk |
| 308 | |
| 309 | QUANTUM_SRC:= \ |
| 310 | $(QUANTUM_DIR)/quantum.c \ |
| 311 | $(QUANTUM_DIR)/keymap_common.c \ |
| 312 | $(QUANTUM_DIR)/keycode_config.c |
| 313 | |
| 314 | # Include the standard or split matrix code if needed |
| 315 | ifneq ($(strip $(CUSTOM_MATRIX)), yes) |
| 316 | ifeq ($(strip $(SPLIT_KEYBOARD)), yes) |
| 317 | QUANTUM_SRC += $(QUANTUM_DIR)/split_common/matrix.c |
| 318 | else |
| 319 | QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c |
| 320 | endif |
| 321 | endif |
| 322 | |
| 323 | DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce |
| 324 | # Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually. |
| 325 | DEBOUNCE_TYPE?= sym_g |
| 326 | ifneq ($(strip $(DEBOUNCE_TYPE)), custom) |
| 327 | QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c |
| 328 | endif |
| 329 | |
| 330 | ifeq ($(strip $(SPLIT_KEYBOARD)), yes) |
| 331 | POST_CONFIG_H += $(QUANTUM_DIR)/split_common/post_config.h |
| 332 | OPT_DEFS += -DSPLIT_KEYBOARD |
| 333 | |
| 334 | # Include files used by all split keyboards |
| 335 | QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_util.c |
| 336 | |
| 337 | # Determine which (if any) transport files are required |
| 338 | ifneq ($(strip $(SPLIT_TRANSPORT)), custom) |
| 339 | QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c |
| 340 | # Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called. |
| 341 | # Unused functions are pruned away, which is why we can add multiple drivers here without bloat. |
| 342 | QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c \ |
| 343 | i2c_master.c \ |
| 344 | i2c_slave.c |
| 345 | endif |
| 346 | COMMON_VPATH += $(QUANTUM_PATH)/split_common |
| 347 | endif |
| 348 | |
| 349 | ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes) |
| 350 | OPT_DEFS += -DOLED_DRIVER_ENABLE |
| 351 | COMMON_VPATH += $(DRIVER_PATH)/oled |
| 352 | QUANTUM_LIB_SRC += i2c_master.c |
| 353 | SRC += oled_driver.c |
| 354 | endif |
| 355 | |
| 356 | SPACE_CADET_ENABLE ?= yes |
| 357 | ifeq ($(strip $(SPACE_CADET_ENABLE)), yes) |
| 358 | SRC += $(QUANTUM_DIR)/process_keycode/process_space_cadet.c |
| 359 | OPT_DEFS += -DSPACE_CADET_ENABLE |
| 360 | endif |