1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/makefiles/info.inc.mk
chrysn 62a6d3c128 makefiles: Add openocd-rtt
JLink presumably has information about the device's RAM available
internally. Not passing the precise symbol area (which would be
available in the ELF file) because a) that'd make the terminal break
when the flashed firmware does not equal the built one, and b) that
would introduce a dependency from `term` to the ELF file that other
terminals don't have.
2022-08-30 09:34:22 +02:00

244 lines
9.3 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 \
create-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 'MCU: $(MCU)'
@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 -e 'CFLAGS:$(patsubst %, \n\t%, $(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 ''
@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 '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 '"MCU": "$(MCU)",'
@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))