diff --git a/Makefile.include b/Makefile.include index aa68fdddc105e..4811ac2f31dce 100644 --- a/Makefile.include +++ b/Makefile.include @@ -110,6 +110,9 @@ include $(RIOTMAKE)/info-nproc.inc.mk # List of boards variables include $(RIOTMAKE)/boards.inc.mk +# Debug targets for build system migration +include $(RIOTMAKE)/dependencies_debug.inc.mk + GLOBAL_GOALS += buildtest buildtest-indocker info-boards-supported info-boards-features-missing info-buildsizes info-buildsizes-diff ifneq (, $(filter $(GLOBAL_GOALS), $(MAKECMDGOALS))) BOARD=none diff --git a/makefiles/dependencies_debug.inc.mk b/makefiles/dependencies_debug.inc.mk new file mode 100644 index 0000000000000..a3e8cae201171 --- /dev/null +++ b/makefiles/dependencies_debug.inc.mk @@ -0,0 +1,42 @@ +# Debug targets to evaluate dependency migrations +# +# The goal is to get the value of variables used for dependency resolution +# and the impact of refactoring + +# Files output can be generated through `info-boards-supported` evaluation with +# +# DEPENDENCY_DEBUG=1 make info-boards-supported +# +# And for each board in the normal make context with +# +# BOARD=board_name make dependency_debug +# +# To compare in an aggregated file, you can run in an application directory: +# +# for board in $(make info-boards); do DEPENDENCY_DEBUG_OUTPUT_DIR=bin/info BOARD=${board} make dependency_debug; done; cat bin/info/* > bin/deps_info +# DEPENDENCY_DEBUG=1 DEPENDENCY_DEBUG_OUTPUT_DIR=bin/info-global make info-boards-supported; cat bin/info-global/* > bin/deps_info-boards-supported +# # And compare both files +# diff -u bin/deps_info bin/deps_info-boards-supported +# +# And when comparing two revisions, include the revision in the file names + +.PHONY: dependency_debug +dependency_debug: + $(call file_save_dependencies_variables,dependencies_info) + @: + +DEPENDENCY_DEBUG_OUTPUT_DIR ?= $(CURDIR) + +# Save variables that are used for parsing dependencies +_DEPS_DEBUG_VARS += BOARD CPU CPU_MODEL CPU_FAM +_DEPS_DEBUG_VARS += FEATURES_PROVIDED FEATURES_REQUIRED FEATURES_OPTIONAL FEATURES_USED FEATURES_MISSING FEATURES_CONFLICT FEATURES_CONFLICTING +_DEPS_DEBUG_VARS += USEMODULE DEFAULT_MODULE DISABLE_MODULE +DEPS_DEBUG_VARS ?= $(_DEPS_DEBUG_VARS) + +# Put some dummy first line to be sure the file is create from scratch +file_save_dependencies_variables = $(call file_save_variable,$(DEPENDENCY_DEBUG_OUTPUT_DIR)/$1_$(BOARD),$(DEPS_DEBUG_VARS)) +file_save_variable = $(shell mkdir -p $(dir $1); rm -f $1)$(foreach v,$2,$(file >>$1,$(call _print_var,$v))) + +# Remove spaces in case of empty value +# Remove spaces around value as it happens +_print_var = $(strip $1 = $(strip $($1))) diff --git a/makefiles/info-global.inc.mk b/makefiles/info-global.inc.mk index 0160237b15eb0..b3a97394a250a 100644 --- a/makefiles/info-global.inc.mk +++ b/makefiles/info-global.inc.mk @@ -40,6 +40,10 @@ define board_missing_features BOARDS_FEATURES_MISSING += "$(1) $$(FEATURES_MISSING)" BOARDS_WITH_MISSING_FEATURES += $(1) endif + + ifneq (,$$(DEPENDENCY_DEBUG)) + $$(call file_save_dependencies_variables,dependencies_info-boards-supported) + endif endef BOARDS := $(filter $(if $(BOARD_WHITELIST), $(BOARD_WHITELIST), %), $(BOARDS))