mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 01:09:47 +01:00
4beff4e9d4
This simplifies the explanation of what might need adjustments depending on which cargo command is invoked.
260 lines
10 KiB
Makefile
260 lines
10 KiB
Makefile
.PHONY: info-objsize info-buildsizes info-build info-boards-supported \
|
|
info-features-missing info-modules info-cpu \
|
|
info-features-provided info-features-required \
|
|
info-features-used info-kconfig-variables \
|
|
info-debug-variable-% info-toolchains-supported \
|
|
check-toolchain-supported \
|
|
info-programmers-supported \
|
|
info-rust \
|
|
generate-Makefile.ci \
|
|
#
|
|
|
|
info-objsize:
|
|
@case "$(SORTROW)" in \
|
|
text) SORTROW=1 ;; \
|
|
data) SORTROW=2 ;; \
|
|
bss) SORTROW=3 ;; \
|
|
dec) SORTROW=4 ;; \
|
|
"") SORTROW=4 ;; \
|
|
*) echo "Usage: $(MAKE) info-objsize SORTROW=[text|data|bss|dec]" ; return ;; \
|
|
esac; \
|
|
printf ' text\t data\t bss\t dec\t hex\tmodule\n'; \
|
|
for i in $(sort $(BASELIBS:%.module=%)); \
|
|
do \
|
|
$(SIZE) -t -d -B $(BINDIR)/$$i/*.o 2> /dev/null | \
|
|
tail -n1 | \
|
|
sed -e "s#(TOTALS)#$$i#" | \
|
|
sed -e 's#$(BINDIR)##'; \
|
|
done | sort -n -r -k $${SORTROW}
|
|
|
|
info-buildsize:
|
|
@$(SIZE) -d -B $(ELFFILE) || echo ''
|
|
|
|
info-build:
|
|
@echo 'APPLICATION: $(APPLICATION)'
|
|
@echo 'APPDIR: $(APPDIR)'
|
|
@echo ''
|
|
@echo 'supported boards:'
|
|
@echo $$($(MAKE) info-boards-supported)
|
|
@echo ''
|
|
@echo 'BOARD: $(BOARD)'
|
|
@echo 'CPU: $(CPU)'
|
|
@echo ''
|
|
@echo 'RIOTBASE: $(RIOTBASE)'
|
|
@echo 'BOARDDIR: $(BOARDDIR)'
|
|
@echo 'EXTERNAL_BOARD_DIRS:$(EXTERNAL_BOARD_DIRS)'
|
|
@echo 'RIOTCPU: $(RIOTCPU)'
|
|
@echo 'RIOTPKG: $(RIOTPKG)'
|
|
@echo ''
|
|
@echo 'DEFAULT_MODULE: $(sort $(filter-out $(DISABLE_MODULE), $(DEFAULT_MODULE)))'
|
|
@echo 'DISABLE_MODULE: $(sort $(DISABLE_MODULE))'
|
|
@echo 'USEMODULE: $(sort $(filter-out $(DEFAULT_MODULE), $(USEMODULE)))'
|
|
@echo ''
|
|
@echo 'ELFFILE: $(ELFFILE)'
|
|
@echo 'HEXFILE: $(HEXFILE)'
|
|
@echo 'BINFILE: $(BINFILE)'
|
|
@echo 'FLASHFILE: $(FLASHFILE)'
|
|
@echo ''
|
|
@echo 'FEATURES_USED:'
|
|
@echo ' $(or $(FEATURES_USED), -none-)'
|
|
@echo 'FEATURES_REQUIRED:'
|
|
@echo ' $(or $(sort $(FEATURES_REQUIRED)), -none-)'
|
|
@echo 'FEATURES_REQUIRED_ANY:'
|
|
@echo ' $(or $(sort $(FEATURES_REQUIRED_ANY)), -none-)'
|
|
@echo 'FEATURES_OPTIONAL_ONLY (optional that are not required, strictly "nice to have"):'
|
|
@echo ' $(or $(FEATURES_OPTIONAL_ONLY), -none-)'
|
|
@echo 'FEATURES_OPTIONAL_MISSING (missing optional features):'
|
|
@echo ' $(or $(FEATURES_OPTIONAL_MISSING), -none-)'
|
|
@echo 'FEATURES_PROVIDED (by the board or USEMODULE'"'"'d drivers):'
|
|
@echo ' $(or $(sort $(FEATURES_PROVIDED)), -none-)'
|
|
@echo 'FEATURES_MISSING (only non optional features):'
|
|
@echo ' $(or $(FEATURES_MISSING), -none-)'
|
|
@echo 'FEATURES_BLACKLIST (blacklisted features):'
|
|
@echo ' $(or $(sort $(FEATURES_BLACKLIST)), -none-)'
|
|
@echo 'FEATURES_USED_BLACKLISTED (used but blacklisted features):'
|
|
@echo ' $(or $(sort $(FEATURES_USED_BLACKLISTED)), -none-)'
|
|
@echo ''
|
|
@echo 'FEATURES_CONFLICT: $(FEATURES_CONFLICT)'
|
|
@echo 'FEATURES_CONFLICT_MSG: $(FEATURES_CONFLICT_MSG)'
|
|
@echo 'FEATURES_CONFLICTING:'
|
|
@echo ' $(or $(FEATURES_CONFLICTING), -none-)'
|
|
@echo ''
|
|
@echo -e 'INCLUDES:$(patsubst %, \n\t%, $(INCLUDES))'
|
|
@echo ''
|
|
@echo 'CC: $(CC)'
|
|
@echo 'CFLAGS:$(patsubst %, \n\t%, $(subst ','"'"',$(CFLAGS)))'
|
|
@echo ''
|
|
@echo 'CXX: $(CXX)'
|
|
@echo -e 'CXXUWFLAGS:$(patsubst %, \n\t%, $(CXXUWFLAGS))'
|
|
@echo -e 'CXXEXFLAGS:$(patsubst %, \n\t%, $(CXXEXFLAGS))'
|
|
@echo ''
|
|
@echo 'RUST_TARGET: $(RUST_TARGET)'
|
|
@echo 'CARGO_PROFILE: $(CARGO_PROFILE)'
|
|
@echo 'CARGO_OPTIONS: $(CARGO_OPTIONS)'
|
|
@echo ''
|
|
@echo 'LINK: $(LINK)'
|
|
@echo -e 'LINKFLAGS:$(patsubst %, \n\t%, $(LINKFLAGS))'
|
|
@echo ''
|
|
@echo 'OBJCOPY: $(OBJCOPY)'
|
|
@echo 'OFLAGS: $(OFLAGS)'
|
|
@echo ''
|
|
@echo 'FLASHER: $(FLASHER)'
|
|
@echo 'FFLAGS: $(FFLAGS)'
|
|
@echo ''
|
|
@echo 'TERMPROG: $(TERMPROG)'
|
|
@echo 'TERMFLAGS: $(TERMFLAGS)'
|
|
@echo 'TERMENV: $(TERMENV)'
|
|
@echo 'PORT: $(PORT)'
|
|
@echo 'PROG_DEV: $(PROG_DEV)'
|
|
@echo ''
|
|
@echo 'DEBUGGER: $(DEBUGGER)'
|
|
@echo 'DEBUGGER_FLAGS: $(DEBUGGER_FLAGS)'
|
|
@echo
|
|
@echo 'DOWNLOAD_TO_FILE: $(DOWNLOAD_TO_FILE)'
|
|
@echo 'DOWNLOAD_TO_STDOUT: $(DOWNLOAD_TO_STDOUT)'
|
|
@echo 'UNZIP_HERE: $(UNZIP_HERE)'
|
|
@echo ''
|
|
@echo 'DEBUGSERVER: $(DEBUGSERVER)'
|
|
@echo 'DEBUGSERVER_FLAGS: $(DEBUGSERVER_FLAGS)'
|
|
@echo ''
|
|
@echo 'DEBUGCLIENT: $(DEBUGCLIENT)'
|
|
@echo 'DEBUGCLIENT_FLAGS: $(DEBUGCLIENT_FLAGS)'
|
|
@echo ''
|
|
@echo 'RESET: $(RESET)'
|
|
@echo 'RESET_FLAGS: $(RESET_FLAGS)'
|
|
@echo ''
|
|
@echo -e 'MAKEFILE_LIST:$(patsubst %, \n\t%, $(abspath $(MAKEFILE_LIST)))'
|
|
|
|
define json_string_or_null
|
|
$(or $(1:%="%"), null)
|
|
endef
|
|
|
|
# Convert a space separated list to a JSON array
|
|
define _to_json_string_list
|
|
[$(filter-out "","$(subst $(space),"$(comma)$(space)",$(1))")]
|
|
endef
|
|
|
|
# Strips out any existing quotes so that the generated JSON is valid, not necessary sensible
|
|
define to_json_string_list
|
|
$(call _to_json_string_list,$(strip $(subst ",,$(subst \",,$(1)))))
|
|
endef
|
|
|
|
# Crude json encoded build info.
|
|
# The output generated here is a best-effort JSON encoding, it is not perfect,
|
|
# converting the space separated lists in Make to a JSON array is flawed, it
|
|
# doesn't consider quoted parts as a single list item. This mainly shows up in
|
|
# cflags such as: -DNIMBLE_HOST_PRIO="(NIMBLE_CONTROLLER_PRIO + 1)", this is
|
|
# splitted into 3 array elements. To ensure that the generated JSON is valid,
|
|
# double quotes are currently stripped before generating the array.
|
|
info-build-json:
|
|
@echo '{ '
|
|
@echo '"APPLICATION": "$(APPLICATION)",'
|
|
@echo '"APPDIR": "$(APPDIR)",'
|
|
@echo '"BOARD": "$(BOARD)",'
|
|
@echo '"CPU": "$(CPU)",'
|
|
@echo '"RIOTBASE": "$(RIOTBASE)",'
|
|
@echo '"BOARDDIR": "$(BOARDDIR)",'
|
|
@echo '"RIOTCPU": "$(RIOTCPU)",'
|
|
@echo '"RIOTPKG": "$(RIOTPKG)",'
|
|
@echo '"EXTERNAL_BOARD_DIRS": $(call json_string_or_null,$(EXTERNAL_BOARD_DIRS)),'
|
|
@echo '"BINDIR": "$(BINDIR)",'
|
|
@echo '"ELFFILE": "$(ELFFILE)",'
|
|
@echo '"HEXFILE": "$(HEXFILE)",'
|
|
@echo '"BINFILE": "$(BINFILE)",'
|
|
@echo '"FLASHFILE": "$(FLASHFILE)",'
|
|
@echo '"DEFAULT_MODULE": $(call to_json_string_list,$(sort $(filter-out $(DISABLE_MODULE), $(DEFAULT_MODULE)))),'
|
|
@echo '"DISABLE_MODULE": $(call to_json_string_list,$(sort $(DISABLE_MODULE))),'
|
|
@echo '"USEMODULE": $(call to_json_string_list,$(sort $(filter-out $(DEFAULT_MODULE), $(USEMODULE)))),'
|
|
@echo '"FEATURES_USED": $(call to_json_string_list,$(FEATURES_USED)),'
|
|
@echo '"FEATURES_REQUIRED": $(call to_json_string_list,$(sort $(FEATURES_REQUIRED))),'
|
|
@echo '"FEATURES_REQUIRED_ANY": $(call to_json_string_list,$(sort $(FEATURES_REQUIRED_ANY))),'
|
|
@echo '"FEATURES_OPTIONAL_ONLY": $(call to_json_string_list,$(FEATURES_OPTIONAL_ONLY)),'
|
|
@echo '"FEATURES_OPTIONAL_MISSING": $(call to_json_string_list,$(FEATURES_OPTIONAL_MISSING)),'
|
|
@echo '"FEATURES_PROVIDED": $(call to_json_string_list,$(sort $(FEATURES_PROVIDED))),'
|
|
@echo '"FEATURES_MISSING": $(call to_json_string_list,$(FEATURES_MISSING)),'
|
|
@echo '"FEATURES_BLACKLIST": $(call to_json_string_list,$(sort $(FEATURES_BLACKLIST))),'
|
|
@echo '"FEATURES_USED_BLACKLISTED": $(call to_json_string_list,$(sort $(FEATURES_USED_BLACKLISTED))),'
|
|
@echo '"FEATURES_CONFLICT": $(call to_json_string_list,$(FEATURES_CONFLICT)),'
|
|
@echo '"FEATURES_CONFLICTING": $(call to_json_string_list,$(FEATURES_CONFLICTING)),'
|
|
@echo '"PREFIX": $(call json_string_or_null,$(PREFIX)),'
|
|
@echo '"CC": "$(CC)",'
|
|
@echo '"CXX": "$(CXX)",'
|
|
@echo '"LINK": "$(LINK)",'
|
|
@echo '"OBJCOPY": "$(OBJCOPY)",'
|
|
@echo '"INCLUDES": $(call to_json_string_list,$(strip $(INCLUDES))),'
|
|
@echo '"OFLAGS": $(call to_json_string_list,$(OFLAGS)),'
|
|
@echo '"CFLAGS": $(call to_json_string_list,$(CFLAGS)),'
|
|
@echo '"CXXUWFLAGS": $(call to_json_string_list,$(CXXUWFLAGS)),'
|
|
@echo '"CXXEXFLAGS": $(call to_json_string_list,$(CXXEXFLAGS)),'
|
|
@echo '"LINKFLAGS": $(call to_json_string_list,$(LINKFLAGS))'
|
|
@echo '}'
|
|
|
|
|
|
info-files: QUIET := 0
|
|
info-files:
|
|
@( \
|
|
echo "$(abspath $(shell echo "$(MAKEFILE_LIST)"))" | tr ' ' '\n'; \
|
|
CSRC="$$($(MAKE) USEPKG="" -Bn | grep -o -e "[^ ]\+\.[csS]$$" -e "[^ ]\+\.[csS][ \']" | grep -v -e "^\s*-D")"; \
|
|
echo "$$CSRC"; \
|
|
echo "$(RIOTBASE)/Makefile.base"; \
|
|
echo "$$CSRC" | xargs dirname -- | sort | uniq | xargs -I{} find {} -name "Makefile*"; \
|
|
echo "$$CSRC" | xargs $(CC) $(CFLAGS) $(INCLUDES) -MM 2> /dev/null | grep -o "[^ ]\+\.h"; \
|
|
if [ -n "$$SRCXX" ]; then \
|
|
CPPSRC="$$($(MAKE) -Bn USEPKG="" | grep -o -e "[^ ]\+\.cpp" | grep -v -e "^\s*-D")"; \
|
|
echo "$$CPPSRC"; \
|
|
echo "$$CPPSRC" | xargs dirname -- | sort | uniq | xargs -I{} find {} -name "Makefile*"; \
|
|
echo "$$CPPSRC" | xargs $(CXX) $(CXXFLAGS) $(INCLUDES) -MM 2> /dev/null | grep -o "[^ ]\+\.h"; \
|
|
fi; \
|
|
$(foreach pkg,$(USEPKG),find $(RIOTPKG)/$(pkg) -type f;) \
|
|
) | sort | uniq | sed 's#$(RIOTBASE)/##'
|
|
|
|
info-modules:
|
|
@for i in $(sort $(USEMODULE)); do echo $$i; done
|
|
|
|
info-packages:
|
|
@for i in $(sort $(USEPKG)); do echo $$i; done
|
|
|
|
info-cpu:
|
|
@echo $(CPU)
|
|
|
|
info-features-provided:
|
|
@for i in $(sort $(FEATURES_PROVIDED)); do echo $$i; done
|
|
|
|
info-features-required:
|
|
@for i in $(sort $(FEATURES_REQUIRED)); do echo $$i; done
|
|
|
|
info-features-missing:
|
|
@for i in $(FEATURES_MISSING); do echo $$i; done
|
|
|
|
info-features-used:
|
|
@for i in $(FEATURES_USED); do echo $$i; done
|
|
|
|
# This target prints all variables set via KConfig sorted alphabetically for
|
|
# debugging.
|
|
info-kconfig-variables:
|
|
@for i in $(sort $(filter CONFIG_%,$(.VARIABLES))); do echo $$i; done
|
|
|
|
info-debug-variable-%:
|
|
@echo $($*)
|
|
|
|
info-toolchains-supported:
|
|
@echo $(filter-out $(TOOLCHAINS_BLACKLIST),$(TOOLCHAINS_SUPPORTED))
|
|
|
|
check-toolchain-supported:
|
|
@exit $(if $(filter $(TOOLCHAIN),$(filter-out $(TOOLCHAINS_BLACKLIST),$(TOOLCHAINS_SUPPORTED))),0,1)
|
|
|
|
info-programmers-supported:
|
|
@echo $(sort $(PROGRAMMERS_SUPPORTED))
|
|
|
|
info-rust:
|
|
cargo version
|
|
c2rust --version
|
|
@echo "To use this setup of Rust in an IDE, add these command line arguments to the \`cargo check\` or \`rust-analyzer\`:"
|
|
@echo " --profile $(CARGO_PROFILE) $(CARGO_OPTIONS)"
|
|
@echo "and export these environment variables:"
|
|
@echo " CARGO_BUILD_TARGET=\"$(RUST_TARGET)\""
|
|
@echo " RIOT_COMPILE_COMMANDS_JSON=\"$(CARGO_COMPILE_COMMANDS)\""
|
|
@echo " RIOTBUILD_CONFIG_HEADER_C=\"$(RIOTBUILD_CONFIG_HEADER_C)\""
|
|
@echo "You can also call cargo related commands with \`make cargo-command CARGO_COMMAND=\"cargo check\"\`."
|
|
@echo "Beware that the way command line arguments are passed in is not consistent across cargo commands, so adding \`--profile $(CARGO_PROFILE)\` or other flags from above as part of CARGO_COMMAND may be necessary."
|