mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 00:29:46 +01:00
127 lines
5.6 KiB
Makefile
127 lines
5.6 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
|
|
|
|
# Locate used modules in $(EXTERNAL_MODULE_DIRS).
|
|
EXTERNAL_MODULE_PATHS := $(sort $(foreach dir,$(EXTERNAL_MODULE_DIRS),\
|
|
$(foreach mod,$(USEMODULE),$(dir $(wildcard $(dir)/$(mod)/Makefile)))))
|
|
|
|
# Locate used packages in $(RIOTPKG) or $(EXTERNAL_PKG_DIRS).
|
|
PKGDIRS := $(RIOTPKG) $(EXTERNAL_PKG_DIRS)
|
|
PKG_PATHS := $(sort $(foreach dir,$(PKGDIRS),\
|
|
$(foreach pkg,$(USEPKG),$(dir $(wildcard $(dir)/$(pkg)/Makefile)))))
|
|
|
|
# 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
|
|
include $(RIOTMAKE)/defaultmodules_no_recursive_deps.inc.mk
|
|
|
|
# Add auto_init and periph_init so that if not used all periph_init% and
|
|
# auto_init_% modules can be silently disabled
|
|
USEMODULE += $(filter-out $(DISABLE_MODULE),auto_init periph_init)
|
|
# If module auto_init is not used, silently disable all of its submodules
|
|
ifeq (,$(filter auto_init,$(USEMODULE)))
|
|
DISABLE_MODULE += auto_init_%
|
|
endif
|
|
# If module periph_init is not used, silently disable all of its submodules
|
|
ifeq (,$(filter periph_init,$(USEMODULE)))
|
|
DISABLE_MODULE += periph_init_%
|
|
endif
|
|
|
|
# Add default modules again, as $(DEFAULT_MODULE) might have been extended
|
|
# during dependency resolution
|
|
USEMODULE += $(filter-out $(DISABLE_MODULE),$(DEFAULT_MODULE))
|
|
|
|
# Include eventual dependencies for default modules
|
|
include $(RIOTMAKE)/defaultmodules_deps.inc.mk
|
|
|
|
# Sort and de-duplicate used modules and default modules for readability
|
|
USEMODULE := $(sort $(USEMODULE))
|
|
DEFAULT_MODULE := $(sort $(DEFAULT_MODULE))
|
|
|
|
# Warn about used deprecated modules
|
|
include $(RIOTMAKE)/deprecated_modules.inc.mk
|
|
DEPRECATED_MODULES_USED := $(sort $(filter $(DEPRECATED_MODULES),$(USEMODULE)))
|
|
ifneq (,$(DEPRECATED_MODULES_USED))
|
|
$(shell $(COLOR_ECHO) "$(COLOR_RED)Deprecated modules are in use:$(COLOR_RESET)"\
|
|
"$(DEPRECATED_MODULES_USED)" 1>&2)
|
|
endif
|
|
|
|
# Detect provided / used / optional features that do not exist
|
|
include $(RIOTMAKE)/features_existing.inc.mk
|
|
FEATURES_NONEXISTING := $(sort $(filter-out $(FEATURES_EXISTING),$(FEATURES_PROVIDED)))
|
|
ifneq (,$(FEATURES_NONEXISTING))
|
|
$(error "The following non-existing features are provided by the board $(BOARD): $(FEATURES_NONEXISTING)")
|
|
endif
|
|
|
|
FEATURES_NONEXISTING := $(sort $(filter-out $(FEATURES_EXISTING),$(FEATURES_REQUIRED)))
|
|
ifneq (,$(FEATURES_NONEXISTING))
|
|
$(error "The following non-existing features are listed in FEATURES_REQUIRED: $(FEATURES_NONEXISTING)")
|
|
endif
|
|
|
|
FEATURES_NONEXISTING := $(sort $(filter-out $(FEATURES_EXISTING),$(subst |, ,$(FEATURES_REQUIRED_ANY))))
|
|
ifneq (,$(FEATURES_NONEXISTING))
|
|
$(error "The following non-existing features are listed in FEATURES_REQUIRED_ANY: $(FEATURES_NONEXISTING)")
|
|
endif
|
|
|
|
FEATURES_NONEXISTING := $(sort $(filter-out $(FEATURES_EXISTING),$(FEATURES_OPTIONAL)))
|
|
ifneq (,$(FEATURES_NONEXISTING))
|
|
$(error "The following non-existing features are listed in FEATURES_OPTIONAL: $(FEATURES_NONEXISTING)")
|
|
endif
|
|
|
|
# Warn about telnet
|
|
ifneq (,$(filter auto_init_telnet,$(USEMODULE)))
|
|
ifneq (1,$(I_UNDERSTAND_THAT_TELNET_IS_INSECURE))
|
|
$(shell $(COLOR_ECHO) "$(COLOR_RED)Telnet will be started automatically, "\
|
|
"make sure you understand why this almost certainly "\
|
|
"is a REALLY BAD idea before proceeding!$(COLOR_RESET)" 1>&2)
|
|
$(error I_UNDERSTAND_THAT_TELNET_IS_INSECURE must be set to 1 to proceed)
|
|
else
|
|
$(shell $(COLOR_ECHO) "$(COLOR_YELLOW)Telnet will be started automatically,"\
|
|
"don't run this on public networks!$(COLOR_RESET)" 1>&2)
|
|
endif
|
|
endif
|
|
|
|
# Warn about STDIO UDP
|
|
ifneq (,$(filter stdio_udp,$(USEMODULE)))
|
|
ifneq (1,$(I_UNDERSTAND_THAT_STDIO_UDP_IS_INSECURE))
|
|
$(shell $(COLOR_ECHO) "$(COLOR_RED)stdio via UDP will be started automatically,"\
|
|
"make sure you understand why this almost certainly"\
|
|
"is a REALLY BAD idea before proceeding!$(COLOR_RESET)" 1>&2)
|
|
$(error I_UNDERSTAND_THAT_STDIO_UDP_IS_INSECURE must be set to 1 to proceed)
|
|
else
|
|
$(shell $(COLOR_ECHO) "$(COLOR_YELLOW)stdio via UDP will be started automatically,"\
|
|
"don't run this on public networks!$(COLOR_RESET)" 1>&2)
|
|
endif
|
|
endif
|
|
|
|
# Warn about PSA Crypto
|
|
ifneq (,$(filter psa_crypto,$(USEMODULE)))
|
|
$(shell $(COLOR_ECHO) "$(COLOR_YELLOW) You are going to use the PSA Crypto module,"\
|
|
"which is only partly implemented and not yet thouroughly tested.\n"\
|
|
"Please do not use this module in production, as it may introduce"\
|
|
"security issues!$(COLOR_RESET)" 1>&2)
|
|
endif
|
|
endif
|