forked from RIOT-OS/RIOT
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdependencies_debug.inc.mk
79 lines (70 loc) · 3.64 KB
/
dependencies_debug.inc.mk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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 the normal resolution with executing
# 'dependency-debug' for each board
#
# BOARD=board_name make dependency-debug
#
# And the 'quick' version that is used by murdock with `info-boards-supported`.
# This one currently uses only a subset of the files/values required for
# dependency resolution.
#
# DEPENDENCY_DEBUG=1 make info-boards-supported
#
#
# 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-features-provided-kconfig
# Only generate the dependencies when the board is not disabled
# This will allow comparing with the output of `info-boards-supported` more easily
dependency-debug:
ifneq (,$(filter-out $(BOARD_BLACKLIST),$(filter $(if $(BOARD_WHITELIST),$(BOARD_WHITELIST), %),$(BOARD))))
$(call file_save_dependencies_variables,dependencies_info)
@:
else
@echo Skipping $(BOARD) is not whitelisted or blacklisted
endif
# Generate a list of features for an specific board from Kconfig symbols. Make
# sure that SHOULD_RUN_KCONFIG variable is set
dependency-debug-features-provided-kconfig: $(KCONFIG_OUT_CONFIG)
@for i in $(sort $(FEATURES_PROVIDED_KCONFIG)); do echo $$i; done
# Variable to debug modeled features in Kconfig files. As a convention features
# are represented by symbols with the `HAS_` prefix (so
# FEATURES_PROVIDED += periph_gpio would be HAS_PERIPH_GPIO). This filters
# all the generated symbols beginning with that prefix.
FEATURES_PROVIDED_KCONFIG = $(call lowercase,$(patsubst CONFIG_HAS_%,%,$(filter CONFIG_HAS_%, $(.VARIABLES))))
DEPENDENCY_DEBUG_OUTPUT_DIR ?= $(CURDIR)
# Save variables that are used for parsing dependencies
_DEPS_DEBUG_VARS += TOOLCHAIN
_DEPS_DEBUG_VARS += BOARD CPU CPU_MODEL CPU_FAM CPU_CORE CPU_ARCH
_DEPS_DEBUG_VARS += FEATURES_PROVIDED _FEATURES_PROVIDED_SORTED
_DEPS_DEBUG_VARS += FEATURES_REQUIRED _FEATURES_REQUIRED_SORTED
_DEPS_DEBUG_VARS += FEATURES_REQUIRED_ANY _FEATURES_REQUIRED_ANY_SORTED
_DEPS_DEBUG_VARS += FEATURES_OPTIONAL FEATURES_USED FEATURES_MISSING
_DEPS_DEBUG_VARS += FEATURES_CONFLICT FEATURES_CONFLICTING
_DEPS_DEBUG_VARS += USEMODULE DEFAULT_MODULE DISABLE_MODULE
DEPS_DEBUG_VARS ?= $(_DEPS_DEBUG_VARS)
_FEATURES_PROVIDED_SORTED = $(sort $(FEATURES_PROVIDED))
_FEATURES_REQUIRED_SORTED = $(sort $(FEATURES_REQUIRED))
_FEATURES_REQUIRED_ANY_SORTED = $(sort $(FEATURES_REQUIRED_ANY))
file_save_dependencies_variables = $(call file_save_variable,$(DEPENDENCY_DEBUG_OUTPUT_DIR)/$1_$(BOARD),$(DEPS_DEBUG_VARS))
# Remove file before to be sure appending is started with an empty file
file_save_variable = $(shell mkdir -p $(dir $1); rm -f $1)$(foreach v,$2,$(file >>$1,$(call _print_var,$v)))
# print variables sorted, this can eliminate false positives but will not allow
# to tell in what order the variables where updated.
DEPENDENCY_DEBUG_SORT_VARS ?= 0
# Remove spaces in case of empty value
# Remove spaces around value as it happens
ifneq (1,$(DEPENDENCY_DEBUG_SORT_VARS))
_print_var = $(strip $1 = $(strip $($1)))
else
_print_var = $(sort $(strip $1 = $(strip $($1))))
endif