mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
7bc15acee2
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
42 lines
1.5 KiB
Makefile
42 lines
1.5 KiB
Makefile
# Perform a recursive dependency resolution: Include $(RIOTBASE)/Makefile.dep
|
|
# until no new modules, pkgs, or features are pull in order to catch all
|
|
# transient dependencies
|
|
|
|
# Back up current state to detect changes
|
|
OLD_STATE := $(USEMODULE) $(USEPKG) $(FEATURES_USED)
|
|
|
|
# pull in dependencies of the currently used modules and pkgs
|
|
include $(RIOTBASE)/Makefile.dep
|
|
|
|
# check if required features are provided and update $(FEATURES_USED)
|
|
include $(RIOTMAKE)/features_check.inc.mk
|
|
|
|
# translate used features into used module, where needed
|
|
include $(RIOTMAKE)/features_modules.inc.mk
|
|
|
|
# sort and de-duplicate used modules, pkgs, and features for comparison
|
|
USEMODULE := $(sort $(USEMODULE))
|
|
USEPKG := $(sort $(USEPKG))
|
|
FEATURES_USED := $(sort $(FEATURES_USED))
|
|
|
|
NEW_STATE := $(USEMODULE) $(USEPKG) $(FEATURES_USED)
|
|
|
|
# If set of used modules, pkgs, and features has changed during last run, run
|
|
# again to recursively catch transitive dependencies
|
|
ifneq ($(OLD_STATE),$(NEW_STATE))
|
|
include $(RIOTMAKE)/dependency_resolution.inc.mk
|
|
else
|
|
# If module auto_init is not used, silently disable all of its submodules
|
|
ifeq (,$(filter auto_init,$(USEMODULE)))
|
|
DISABLE_MODULE += auto_init_%
|
|
endif
|
|
|
|
# add default modules again, as $(DEFAULT_MODULE) might have been extended
|
|
# during dependency processing
|
|
USEMODULE += $(filter-out $(DISABLE_MODULE),$(DEFAULT_MODULE))
|
|
|
|
# Sort and de-duplicate used modules and default modules for readability
|
|
USEMODULE := $(sort $(USEMODULE))
|
|
DEFAULT_MODULE := $(sort $(DEFAULT_MODULE))
|
|
endif
|