diff --git a/Kconfig.projbuild b/Kconfig.projbuild index 444bfe33..d97876d2 100644 --- a/Kconfig.projbuild +++ b/Kconfig.projbuild @@ -90,6 +90,8 @@ config ARDUHAL_PARTITION_SCHEME_MINIMAL bool "Minimal (for 2MB FLASH)" config ARDUHAL_PARTITION_SCHEME_NO_OTA bool "No OTA (for large apps)" +config ARDUHAL_PARTITION_SCHEME_HUGE_APP + bool "Huge App (for very large apps)" config ARDUHAL_PARTITION_SCHEME_MIN_SPIFFS bool "Minimal SPIFFS (for large apps with OTA)" endchoice @@ -99,6 +101,7 @@ config ARDUHAL_PARTITION_SCHEME default "default" if ARDUHAL_PARTITION_SCHEME_DEFAULT default "minimal" if ARDUHAL_PARTITION_SCHEME_MINIMAL default "no_ota" if ARDUHAL_PARTITION_SCHEME_NO_OTA + default "huge_app" if ARDUHAL_PARTITION_SCHEME_HUGE_APP default "min_spiffs" if ARDUHAL_PARTITION_SCHEME_MIN_SPIFFS diff --git a/component.mk b/component.mk index 2f6af96c..4b85ee4f 100644 --- a/component.mk +++ b/component.mk @@ -1,8 +1,36 @@ -ARDUINO_LIBRARIES_LIST := $(patsubst $(COMPONENT_PATH)/libraries/%,%,$(wildcard $(COMPONENT_PATH)/libraries/*)) -ARDUINO_SINGLE_LIBRARY_FILES = $(patsubst $(COMPONENT_PATH)/%,%,$(sort $(dir $(wildcard $(COMPONENT_PATH)/libraries/$(MODULE)/*/)) $(dir $(wildcard $(COMPONENT_PATH)/libraries/$(MODULE)/*/*/)) $(dir $(wildcard $(COMPONENT_PATH)/libraries/$(MODULE)/*/*/*/)) $(dir $(wildcard $(COMPONENT_PATH)/libraries/$(MODULE)/*/*/*/*/)) $(dir $(wildcard $(COMPONENT_PATH)/libraries/$(MODULE)/*/*/*/*/*/)))) -ARDUINO_CORE_LIBS := $(foreach MODULE,$(ARDUINO_LIBRARIES_LIST),$(if $(CONFIG_ARDUINO_SELECTIVE_COMPILATION),$(if $(CONFIG_ARDUINO_SELECTIVE_$(MODULE)),$(ARDUINO_SINGLE_LIBRARY_FILES)),$(ARDUINO_SINGLE_LIBRARY_FILES))) +ARDUINO_ALL_LIBRARIES := $(patsubst $(COMPONENT_PATH)/libraries/%,%,$(wildcard $(COMPONENT_PATH)/libraries/*)) -COMPONENT_ADD_INCLUDEDIRS := cores/esp32 variants/esp32 $(ARDUINO_CORE_LIBS) +# Macro returns non-empty if Arduino library $(1) should be included in the build +# (either because selective compilation is of, or this library is enabled +define ARDUINO_LIBRARY_ENABLED +$(if $(CONFIG_ARDUINO_SELECTIVE_COMPILATION),$(CONFIG_ARDUINO_SELECTIVE_$(1)),y) +endef + +ARDUINO_ENABLED_LIBRARIES := $(foreach LIBRARY,$(sort $(ARDUINO_ALL_LIBRARIES)),$(if $(call ARDUINO_LIBRARY_ENABLED,$(LIBRARY)),$(LIBRARY))) + +$(info Arduino libraries in build: $(ARDUINO_ENABLED_LIBRARIES)) + +# Expand all subdirs under $(1) +define EXPAND_SUBDIRS +$(sort $(dir $(wildcard $(1)/* $(1)/*/* $(1)/*/*/* $(1)/*/*/*/* $(1)/*/*/*/*/*))) +endef + +# Macro returns SRCDIRS for library +define ARDUINO_LIBRARY_GET_SRCDIRS + $(if $(wildcard $(COMPONENT_PATH)/libraries/$(1)/src/.), \ + $(call EXPAND_SUBDIRS,$(COMPONENT_PATH)/libraries/$(1)/src), \ + $(filter-out $(call EXPAND_SUBDIRS,$(COMPONENT_PATH)/libraries/$(1)/examples), \ + $(call EXPAND_SUBDIRS,$(COMPONENT_PATH)/libraries/$(1)) \ + ) \ + ) +endef + +# Make a list of all srcdirs in enabled libraries +ARDUINO_LIBRARY_SRCDIRS := $(patsubst $(COMPONENT_PATH)/%,%,$(foreach LIBRARY,$(ARDUINO_ENABLED_LIBRARIES),$(call ARDUINO_LIBRARY_GET_SRCDIRS,$(LIBRARY)))) + +#$(info Arduino libraries src dirs: $(ARDUINO_LIBRARY_SRCDIRS)) + +COMPONENT_ADD_INCLUDEDIRS := cores/esp32 variants/esp32 $(ARDUINO_LIBRARY_SRCDIRS) COMPONENT_PRIV_INCLUDEDIRS := cores/esp32/libb64 -COMPONENT_SRCDIRS := cores/esp32/libb64 cores/esp32 variants/esp32 $(ARDUINO_CORE_LIBS) +COMPONENT_SRCDIRS := cores/esp32/libb64 cores/esp32 variants/esp32 $(ARDUINO_LIBRARY_SRCDIRS) CXXFLAGS += -fno-rtti