aboutsummaryrefslogtreecommitdiff
path: root/builddefs/common_features.mk
diff options
context:
space:
mode:
Diffstat (limited to 'builddefs/common_features.mk')
-rw-r--r--builddefs/common_features.mk173
1 files changed, 99 insertions, 74 deletions
diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index c88ce36011..0b9840a14e 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -30,6 +30,8 @@ QUANTUM_SRC += \
$(QUANTUM_DIR)/logging/sendchar.c \
$(QUANTUM_DIR)/process_keycode/process_default_layer.c \
+include $(QUANTUM_DIR)/nvm/rules.mk
+
VPATH += $(QUANTUM_DIR)/logging
# Fall back to lib/printf if there is no platform provided print
ifeq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/printf.mk)","")
@@ -169,80 +171,82 @@ endif
VALID_EEPROM_DRIVER_TYPES := vendor custom transient i2c spi wear_leveling legacy_stm32_flash
EEPROM_DRIVER ?= vendor
-ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
+ifneq ($(strip $(EEPROM_DRIVER)),none)
+ ifeq ($(filter $(EEPROM_DRIVER),$(VALID_EEPROM_DRIVER_TYPES)),)
$(call CATASTROPHIC_ERROR,Invalid EEPROM_DRIVER,EEPROM_DRIVER="$(EEPROM_DRIVER)" is not a valid EEPROM driver)
-else
- OPT_DEFS += -DEEPROM_ENABLE
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
- COMMON_VPATH += $(DRIVER_PATH)/eeprom
- COMMON_VPATH += $(PLATFORM_COMMON_DIR)
- ifeq ($(strip $(EEPROM_DRIVER)), custom)
- # Custom EEPROM implementation -- only needs to implement init/erase/read_block/write_block
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
- SRC += eeprom_driver.c
- else ifeq ($(strip $(EEPROM_DRIVER)), wear_leveling)
- # Wear-leveling EEPROM implementation
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
- SRC += eeprom_driver.c eeprom_wear_leveling.c
- else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
- # External I2C EEPROM implementation
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
- I2C_DRIVER_REQUIRED = yes
- SRC += eeprom_driver.c eeprom_i2c.c
- else ifeq ($(strip $(EEPROM_DRIVER)), spi)
- # External SPI EEPROM implementation
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
- SPI_DRIVER_REQUIRED = yes
- SRC += eeprom_driver.c eeprom_spi.c
- else ifeq ($(strip $(EEPROM_DRIVER)), legacy_stm32_flash)
- # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
- COMMON_VPATH += $(DRIVER_PATH)/flash
- SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
- else ifeq ($(strip $(EEPROM_DRIVER)), transient)
- # Transient EEPROM implementation -- no data storage but provides runtime area for it
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
- SRC += eeprom_driver.c eeprom_transient.c
- else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
- # Vendor-implemented EEPROM
- OPT_DEFS += -DEEPROM_VENDOR
- ifeq ($(PLATFORM),AVR)
- # Automatically provided by avr-libc, nothing required
- else ifeq ($(PLATFORM),CHIBIOS)
- ifneq ($(filter %_STM32F072xB %_STM32F042x6, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
- # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
- COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
- COMMON_VPATH += $(DRIVER_PATH)/flash
- SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
- else ifneq ($(filter $(MCU_SERIES),STM32F1xx STM32F3xx STM32F4xx STM32L4xx STM32G4xx WB32F3G71xx WB32FQ95xx AT32F415 GD32VF103),)
- # Wear-leveling EEPROM implementation, backed by MCU flash
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
- SRC += eeprom_driver.c eeprom_wear_leveling.c
- WEAR_LEVELING_DRIVER ?= embedded_flash
- else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
- # True EEPROM on STM32L0xx, L1xx
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1
- SRC += eeprom_driver.c eeprom_stm32_L0_L1.c
- else ifneq ($(filter $(MCU_SERIES),RP2040),)
- # Wear-leveling EEPROM implementation, backed by RP2040 flash
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
- SRC += eeprom_driver.c eeprom_wear_leveling.c
- WEAR_LEVELING_DRIVER ?= rp2040_flash
- else ifneq ($(filter $(MCU_SERIES),KL2x K20x),)
- # Teensy EEPROM implementations
- OPT_DEFS += -DEEPROM_KINETIS_FLEXRAM
- SRC += eeprom_kinetis_flexram.c
- else
- # Fall back to transient, i.e. non-persistent
- OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
- SRC += eeprom_driver.c eeprom_transient.c
+ else
+ OPT_DEFS += -DEEPROM_ENABLE
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom
+ COMMON_VPATH += $(DRIVER_PATH)/eeprom
+ COMMON_VPATH += $(PLATFORM_COMMON_DIR)
+ ifeq ($(strip $(EEPROM_DRIVER)), custom)
+ # Custom EEPROM implementation -- only needs to implement init/erase/read_block/write_block
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_CUSTOM
+ SRC += eeprom_driver.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), wear_leveling)
+ # Wear-leveling EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
+ SRC += eeprom_driver.c eeprom_wear_leveling.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), i2c)
+ # External I2C EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_I2C
+ I2C_DRIVER_REQUIRED = yes
+ SRC += eeprom_driver.c eeprom_i2c.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), spi)
+ # External SPI EEPROM implementation
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_SPI
+ SPI_DRIVER_REQUIRED = yes
+ SRC += eeprom_driver.c eeprom_spi.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), legacy_stm32_flash)
+ # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
+ COMMON_VPATH += $(DRIVER_PATH)/flash
+ SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), transient)
+ # Transient EEPROM implementation -- no data storage but provides runtime area for it
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
+ SRC += eeprom_driver.c eeprom_transient.c
+ else ifeq ($(strip $(EEPROM_DRIVER)), vendor)
+ # Vendor-implemented EEPROM
+ OPT_DEFS += -DEEPROM_VENDOR
+ ifeq ($(PLATFORM),AVR)
+ # Automatically provided by avr-libc, nothing required
+ else ifeq ($(PLATFORM),CHIBIOS)
+ ifneq ($(filter %_STM32F072xB %_STM32F042x6, $(MCU_SERIES)_$(MCU_LDSCRIPT)),)
+ # STM32 Emulated EEPROM, backed by MCU flash (soon to be deprecated)
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_LEGACY_EMULATED_FLASH
+ COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/flash
+ COMMON_VPATH += $(DRIVER_PATH)/flash
+ SRC += eeprom_driver.c eeprom_legacy_emulated_flash.c legacy_flash_ops.c
+ else ifneq ($(filter $(MCU_SERIES),STM32F1xx STM32F3xx STM32F4xx STM32L4xx STM32G4xx WB32F3G71xx WB32FQ95xx AT32F415 GD32VF103),)
+ # Wear-leveling EEPROM implementation, backed by MCU flash
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
+ SRC += eeprom_driver.c eeprom_wear_leveling.c
+ WEAR_LEVELING_DRIVER ?= embedded_flash
+ else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
+ # True EEPROM on STM32L0xx, L1xx
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1
+ SRC += eeprom_driver.c eeprom_stm32_L0_L1.c
+ else ifneq ($(filter $(MCU_SERIES),RP2040),)
+ # Wear-leveling EEPROM implementation, backed by RP2040 flash
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_WEAR_LEVELING
+ SRC += eeprom_driver.c eeprom_wear_leveling.c
+ WEAR_LEVELING_DRIVER ?= rp2040_flash
+ else ifneq ($(filter $(MCU_SERIES),KL2x K20x),)
+ # Teensy EEPROM implementations
+ OPT_DEFS += -DEEPROM_KINETIS_FLEXRAM
+ SRC += eeprom_kinetis_flexram.c
+ else
+ # Fall back to transient, i.e. non-persistent
+ OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_TRANSIENT
+ SRC += eeprom_driver.c eeprom_transient.c
+ endif
+ else ifeq ($(PLATFORM),TEST)
+ # Test harness "EEPROM"
+ OPT_DEFS += -DEEPROM_TEST_HARNESS
+ SRC += eeprom.c
endif
- else ifeq ($(PLATFORM),TEST)
- # Test harness "EEPROM"
- OPT_DEFS += -DEEPROM_TEST_HARNESS
- SRC += eeprom.c
endif
endif
endif
@@ -888,12 +892,11 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
OPT_DEFS += -DBLUETOOTH_ENABLE
OPT_DEFS += -DBLUETOOTH_$(strip $(shell echo $(BLUETOOTH_DRIVER) | tr '[:lower:]' '[:upper:]'))
NO_USB_STARTUP_CHECK := yes
+ CONNECTION_ENABLE := yes
COMMON_VPATH += $(DRIVER_PATH)/bluetooth
- SRC += outputselect.c process_connection.c
ifeq ($(strip $(BLUETOOTH_DRIVER)), bluefruit_le)
SPI_DRIVER_REQUIRED = yes
- ANALOG_DRIVER_REQUIRED = yes
SRC += $(DRIVER_PATH)/bluetooth/bluetooth.c
SRC += $(DRIVER_PATH)/bluetooth/bluefruit_le.cpp
endif
@@ -934,6 +937,28 @@ ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
endif
endif
+VALID_BATTERY_DRIVER_TYPES := adc custom vendor
+
+BATTERY_DRIVER ?= adc
+ifeq ($(strip $(BATTERY_DRIVER_REQUIRED)), yes)
+ ifeq ($(filter $(BATTERY_DRIVER),$(VALID_BATTERY_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid BATTERY_DRIVER,BATTERY_DRIVER="$(BATTERY_DRIVER)" is not a valid battery driver)
+ endif
+
+ OPT_DEFS += -DBATTERY_DRIVER
+ OPT_DEFS += -DBATTERY_$(strip $(shell echo $(BATTERY_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
+ COMMON_VPATH += $(DRIVER_PATH)/battery
+
+ SRC += battery.c
+ SRC += battery_$(strip $(BATTERY_DRIVER)).c
+
+ # add extra deps
+ ifeq ($(strip $(BATTERY_DRIVER)), adc)
+ ANALOG_DRIVER_REQUIRED = yes
+ endif
+endif
+
VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor
WS2812_DRIVER ?= bitbang