Goals:
- Untangle dependency resolution and feature checking for better maintainability
- Improve performance of "make info-boards-supported"
Changes:
- Makefile.dep
- Dropped handling of default modules and recursion
- Now only dependencies of the current set of used modules and pkgs are
added
==> External recursion is needed to catch transient dependencies
- Changed Makefile.features:
- Dropped checking of provided features
- Dropped populating FEATURES_USED with provided features that are required
or optional
- Dropped populating FEATURES_MISSING with required but not provided
features
- Dropped adding modules implementing used features to USE_MODULE
==> This now only populates FEATURES_PROVIDED, nothing more
- Added makefiles/features_check.inc.mk:
- This performs the population of FEATURES_USED and FEATURES_MISSING now
- Added makefiles/features_modules.inc.mk:
- This performs now the addition of modules implementing used features
- Added makefiles/dependency_resolution.inc.mk:
- This now performs the recursion required to catch transient dependencies
- Also the feature check is performed recursively to handle also required
and optional features of the transient dependencies
- DEFAULT_MODULES are added repeatedly to allow it to be extended based on
used features and modules
==> This allows modules to have optional dependencies, as these
dependencies can be blacklisted
- Use simply expanded variables instead of recursively expended variables
(`foo := $(bar)` instead `foo = $(bar)`) for internal variables during feature
resolution. This improves performance significantly for
`make info-boards-supported`.
- Reduce dependency resolution steps in `make info-boards-supported`
- Globally resolve dependencies without any features (including arch)
provided
==> This results in the common subset of feature requirements and modules
used
- But for individual boards additional modules might be used on top due
to architecture specific dependencies or optional features
- Boards not supporting this subset of commonly required features are not
supported, so no additional dependency resolution is needed for them
- For each board supporting the common set of requirements a complete
dependency resolution is still needed to also catch architecture specific
hacks
- But this resolution is seeded with the common set of dependencies to
speed this up
28 lines
1.1 KiB
Makefile
28 lines
1.1 KiB
Makefile
# Add modules implementing used features
|
|
#
|
|
# This is done after the regular dependency resolution in Makefile.dep, as
|
|
# feature resolution depends on the used modules. As these modules however have
|
|
# no dependencies(except for periph_common), no dependency resolution is needed.
|
|
|
|
PERIPH_FEATURES := $(filter periph_%,$(FEATURES_USED))
|
|
# all periph features correspond to a periph submodule
|
|
# FEATURES_USED is defined in Makefile.features
|
|
USEMODULE += $(PERIPH_FEATURES)
|
|
|
|
# Add all USED periph_% init modules unless they are blacklisted
|
|
ifneq (,$(filter periph_init, $(USEMODULE)))
|
|
PERIPH_MODULES := $(filter-out periph_init% periph_common,\
|
|
$(filter periph_%,$(USEMODULE)))
|
|
# Use simple expansion to avoid USEMODULE referencing itself
|
|
PERIPH_INIT_MODULES := $(subst periph_,periph_init_,$(PERIPH_MODULES))
|
|
DEFAULT_MODULE += $(PERIPH_INIT_MODULES)
|
|
endif
|
|
|
|
# select cpu_check_address pseudomodule if the corresponding feature is used
|
|
USEMODULE += $(filter cpu_check_address, $(FEATURES_USED))
|
|
|
|
# include periph_common if any periph_* driver is used
|
|
ifneq (,$(filter periph_%, $(USEMODULE)))
|
|
USEMODULE += periph_common
|
|
endif
|