mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-17 05:32:45 +01:00
make: refactor info- and buildtest targets
This commit is contained in:
parent
02e055fc81
commit
daa277b36e
@ -1,8 +1,6 @@
|
|||||||
# include Makefile.local if it exists
|
# include Makefile.local if it exists
|
||||||
-include Makefile.local
|
-include Makefile.local
|
||||||
|
|
||||||
all: link
|
|
||||||
|
|
||||||
# set undefined variables
|
# set undefined variables
|
||||||
RIOTBASE ?= $(dir $(lastword $(MAKEFILE_LIST)))
|
RIOTBASE ?= $(dir $(lastword $(MAKEFILE_LIST)))
|
||||||
CCACHE_BASEDIR ?= $(RIOTBASE)
|
CCACHE_BASEDIR ?= $(RIOTBASE)
|
||||||
@ -63,38 +61,36 @@ MAKEOVERRIDES += $(foreach v,${__DIRECTORY_VARIABLES},${v}=${${v}})
|
|||||||
# Path to the current directory relative to RIOTPROJECT
|
# Path to the current directory relative to RIOTPROJECT
|
||||||
BUILDRELPATH ?= ${PWD:${RIOTPROJECT}/%=%}/
|
BUILDRELPATH ?= ${PWD:${RIOTPROJECT}/%=%}/
|
||||||
|
|
||||||
|
# get host operating system
|
||||||
|
OS := $(shell uname)
|
||||||
|
|
||||||
# Include Docker settings near the top because we need to build the environment
|
# Include Docker settings near the top because we need to build the environment
|
||||||
# command line before some of the variable origins are overwritten below when
|
# command line before some of the variable origins are overwritten below when
|
||||||
# using abspath, strip etc.
|
# using abspath, strip etc.
|
||||||
include $(RIOTMAKE)/docker.inc.mk
|
include $(RIOTMAKE)/docker.inc.mk
|
||||||
|
|
||||||
|
# include color echo macros
|
||||||
|
include $(RIOTMAKE)/color.inc.mk
|
||||||
|
|
||||||
|
GLOBAL_GOALS := buildtest info-boards-supported info-boards-features-missing info-buildsizes info-buildsizes-diff
|
||||||
|
ifneq (, $(filter $(GLOBAL_GOALS), $(MAKECMDGOALS)))
|
||||||
|
BOARD=none
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq (none,$(BOARD))
|
||||||
|
include $(RIOTMAKE)/info-global.inc.mk
|
||||||
|
include $(RIOTMAKE)/buildtests.inc.mk
|
||||||
|
else
|
||||||
|
|
||||||
|
all: link
|
||||||
|
|
||||||
|
include $(RIOTMAKE)/info.inc.mk
|
||||||
|
|
||||||
# Static code analysis tools provided by LLVM
|
# Static code analysis tools provided by LLVM
|
||||||
include $(RIOTMAKE)/scan-build.inc.mk
|
include $(RIOTMAKE)/scan-build.inc.mk
|
||||||
|
|
||||||
export RIOTBUILD_CONFIG_HEADER_C = $(BINDIR)/riotbuild/riotbuild.h
|
export RIOTBUILD_CONFIG_HEADER_C = $(BINDIR)/riotbuild/riotbuild.h
|
||||||
|
|
||||||
COLOR_GREEN :=
|
|
||||||
COLOR_RED :=
|
|
||||||
COLOR_PURPLE :=
|
|
||||||
COLOR_RESET :=
|
|
||||||
COLOR_ECHO := /bin/echo
|
|
||||||
|
|
||||||
OS := $(shell uname)
|
|
||||||
|
|
||||||
ifeq (0, $(shell tput colors 2>&1 > /dev/null; echo $$?))
|
|
||||||
COLOR_GREEN := \033[1;32m
|
|
||||||
COLOR_RED := \033[1;31m
|
|
||||||
COLOR_YELLOW := \033[1;33m
|
|
||||||
COLOR_PURPLE := \033[1;35m
|
|
||||||
COLOR_RESET := \033[0m
|
|
||||||
ifeq ($(OS),Darwin)
|
|
||||||
COLOR_ECHO := echo -e
|
|
||||||
SHELL=bash
|
|
||||||
else
|
|
||||||
COLOR_ECHO := /bin/echo -e
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(OS),Darwin)
|
ifeq ($(OS),Darwin)
|
||||||
OPEN := open
|
OPEN := open
|
||||||
else
|
else
|
||||||
@ -224,6 +220,10 @@ ifneq ($(GNRC_NETIF_NUMOF),1)
|
|||||||
CFLAGS += -DGNRC_NETIF_NUMOF=$(GNRC_NETIF_NUMOF)
|
CFLAGS += -DGNRC_NETIF_NUMOF=$(GNRC_NETIF_NUMOF)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# process provided features
|
||||||
|
include $(RIOTMAKE)/features.inc.mk
|
||||||
|
|
||||||
|
# process dependencies
|
||||||
include $(RIOTBASE)/Makefile.dep
|
include $(RIOTBASE)/Makefile.dep
|
||||||
|
|
||||||
USEMODULE += $(filter-out $(DISABLE_MODULE), $(DEFAULT_MODULE))
|
USEMODULE += $(filter-out $(DISABLE_MODULE), $(DEFAULT_MODULE))
|
||||||
@ -433,12 +433,6 @@ $(CURDIR)/eclipsesym.xml:
|
|||||||
$(Q)printf "%s\n" $(CC) $(CFLAGS_WITH_MACROS) $(INCLUDES) | \
|
$(Q)printf "%s\n" $(CC) $(CFLAGS_WITH_MACROS) $(INCLUDES) | \
|
||||||
$(RIOTBASE)/dist/tools/eclipsesym/cmdline2xml.sh > $@
|
$(RIOTBASE)/dist/tools/eclipsesym/cmdline2xml.sh > $@
|
||||||
|
|
||||||
# Extra make goals for testing and comparing changes.
|
|
||||||
include $(RIOTMAKE)/buildtests.inc.mk
|
|
||||||
|
|
||||||
# process provided features
|
|
||||||
include $(RIOTMAKE)/features.inc.mk
|
|
||||||
|
|
||||||
# Export variables used throughout the whole make system:
|
# Export variables used throughout the whole make system:
|
||||||
include $(RIOTMAKE)/vars.inc.mk
|
include $(RIOTMAKE)/vars.inc.mk
|
||||||
|
|
||||||
@ -535,9 +529,6 @@ endif
|
|||||||
help:
|
help:
|
||||||
@$(MAKE) -qp | sed -ne 's/\(^[a-z][a-z_-]*\):.*/\1/p' | sort | uniq
|
@$(MAKE) -qp | sed -ne 's/\(^[a-z][a-z_-]*\):.*/\1/p' | sort | uniq
|
||||||
|
|
||||||
info-modules:
|
|
||||||
@for i in $(sort $(USEMODULE)); do echo $$i; done
|
|
||||||
|
|
||||||
ifneq (,$(filter iotlab-m3 wsn430-v1_3b wsn430-v1_4,$(BOARD)))
|
ifneq (,$(filter iotlab-m3 wsn430-v1_3b wsn430-v1_4,$(BOARD)))
|
||||||
ifneq (,$(filter iotlab-%,$(MAKECMDGOALS)))
|
ifneq (,$(filter iotlab-%,$(MAKECMDGOALS)))
|
||||||
include $(RIOTBASE)/dist/testbed-support/Makefile.iotlab
|
include $(RIOTBASE)/dist/testbed-support/Makefile.iotlab
|
||||||
@ -575,3 +566,4 @@ CFLAGS += -include '$(RIOTBUILD_CONFIG_HEADER_C)'
|
|||||||
|
|
||||||
# include multislot support
|
# include multislot support
|
||||||
include $(RIOTMAKE)/multislot.mk
|
include $(RIOTMAKE)/multislot.mk
|
||||||
|
endif # BOARD=none
|
||||||
|
@ -1,311 +1,23 @@
|
|||||||
ifneq (, $(filter buildtest info-concurrency, $(MAKECMDGOALS)))
|
.PHONY: buildtest
|
||||||
ifeq (, $(strip $(NPROC)))
|
|
||||||
# Linux (utility program)
|
|
||||||
NPROC := $(shell nproc 2>/dev/null)
|
|
||||||
|
|
||||||
ifeq (, $(strip $(NPROC)))
|
|
||||||
# Linux (generic)
|
|
||||||
NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null)
|
|
||||||
endif
|
|
||||||
ifeq (, $(strip $(NPROC)))
|
|
||||||
# BSD (at least FreeBSD and Mac OSX)
|
|
||||||
NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null)
|
|
||||||
endif
|
|
||||||
ifeq (, $(strip $(NPROC)))
|
|
||||||
# Fallback
|
|
||||||
NPROC := 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
NPROC := $(shell echo $$(($(NPROC) + 1)))
|
|
||||||
|
|
||||||
ifneq (, $(NPROC_MAX))
|
|
||||||
NPROC := $(shell if [ ${NPROC} -gt $(NPROC_MAX) ]; then echo $(NPROC_MAX); else echo ${NPROC}; fi)
|
|
||||||
endif
|
|
||||||
ifneq (, $(NPROC_MIN))
|
|
||||||
NPROC := $(shell if [ ${NPROC} -lt $(NPROC_MIN) ]; then echo $(NPROC_MIN); else echo ${NPROC}; fi)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: buildtest info-objsize info-buildsize info-buildsizes \
|
|
||||||
info-buildsizes-diff info-build info-boards-supported \
|
|
||||||
info-features-missing info-boards-features-missing
|
|
||||||
|
|
||||||
ifeq ($(BUILD_IN_DOCKER),1)
|
ifeq ($(BUILD_IN_DOCKER),1)
|
||||||
buildtest: ..in-docker-container
|
buildtest: ..in-docker-container
|
||||||
else
|
else
|
||||||
buildtest:
|
buildtest:
|
||||||
@ \
|
@ \
|
||||||
BUILDTESTOK=true; \
|
RESULT=true ; \
|
||||||
APP_RETRY=0; \
|
for board in $(BOARDS); do \
|
||||||
for BOARD in ${BOARDS}; do \
|
${COLOR_ECHO} -n "Building for $$board ... " ; \
|
||||||
RIOTNOLINK=$$(echo $(BOARD_INSUFFICIENT_MEMORY) | grep "\<$${BOARD}\>" 2>&1 >/dev/null && echo 1); \
|
BOARD=$${board} RIOT_CI_BUILD=1 RIOT_VERSION_OVERRIDE=buildtest \
|
||||||
${COLOR_ECHO} -n "Building for $${BOARD} "; \
|
$(MAKE) clean all -j $(NPROC) >/dev/null 2>&1; \
|
||||||
[ -n "$${RIOTNOLINK}" ] && ${COLOR_ECHO} -n "(no linking) "; \
|
RES=$$? ; \
|
||||||
for NTH_TRY in 1 2 3; do \
|
if [ $$RES -eq 0 ]; then \
|
||||||
${COLOR_ECHO} -n ".. "; \
|
${COLOR_ECHO} "$(COLOR_GREEN)success.${COLOR_RESET}" ; \
|
||||||
if [ "$$NTH_TRY" != "3" ]; then export _CCACHE=$$CCACHE; else export _CCACHE=""; fi ; \
|
else \
|
||||||
LOG=$$(env -i \
|
${COLOR_ECHO} "$(COLOR_RED)failed!${COLOR_RESET}" ; \
|
||||||
HOME=$${HOME} \
|
RESULT=false ; \
|
||||||
PATH=$${PATH} \
|
fi ; \
|
||||||
BOARD=$${BOARD} \
|
$(MAKE) clean-intermediates >/dev/null 2>&1 || true; \
|
||||||
CCACHE=$${_CCACHE} \
|
done ; \
|
||||||
$${CCACHE_DIR:+CCACHE_DIR=$${CCACHE_DIR}} \
|
$${RESULT}
|
||||||
$${GIT_CACHE_DIR:+GIT_CACHE_DIR=$${GIT_CACHE_DIR}} \
|
|
||||||
CCACHE_BASEDIR=$${CCACHE_BASEDIR} \
|
|
||||||
RIOTBASE=$${RIOTBASE} \
|
|
||||||
RIOTBOARD=$${RIOTBOARD} \
|
|
||||||
RIOTCPU=$${RIOTCPU} \
|
|
||||||
RIOTPKG=$${RIOTPKG} \
|
|
||||||
BINDIRBASE=$${BINDIRBASE} \
|
|
||||||
RIOTNOLINK=$${RIOTNOLINK} \
|
|
||||||
RIOT_VERSION=$${RIOT_VERSION} \
|
|
||||||
WERROR=$${WERROR} \
|
|
||||||
LTO=$${LTO} \
|
|
||||||
TOOLCHAIN=$${TOOLCHAIN} \
|
|
||||||
MIPS_ELF_ROOT=$${MIPS_ELF_ROOT} \
|
|
||||||
$(MAKE) -j$(NPROC) clean all 2>&1) ; \
|
|
||||||
if [ "$${?}" = "0" ]; then \
|
|
||||||
${COLOR_ECHO} "${COLOR_GREEN}success${COLOR_RESET}"; \
|
|
||||||
if [ -n "$${BUILDTEST_VERBOSE}" ]; then \
|
|
||||||
echo "$${LOG}" | tail -n +2 | head -n -2 | grep -v -E '^Building application|^\"make|^patching' | awk 'NF'; \
|
|
||||||
fi; \
|
|
||||||
elif [ -n "$${RIOT_DO_RETRY}" ] && [ "$${APP_RETRY}" -lt "3" ] && [ $${NTH_TRY} != 3 ]; then \
|
|
||||||
${COLOR_ECHO} -n "${COLOR_PURPLE}retrying${COLOR_RESET} "; \
|
|
||||||
continue; \
|
|
||||||
else \
|
|
||||||
${COLOR_ECHO} "${COLOR_RED}failed${COLOR_RESET}"; \
|
|
||||||
if [ -n "$${BUILDTEST_VERBOSE}" ]; then \
|
|
||||||
echo "$${LOG}" | grep -v -E '^\"make'; \
|
|
||||||
fi; \
|
|
||||||
APP_RETRY=`expr $${APP_RETRY} + 1`; \
|
|
||||||
BUILDTESTOK=false; \
|
|
||||||
fi; \
|
|
||||||
break; \
|
|
||||||
done; \
|
|
||||||
env -i \
|
|
||||||
HOME=$${HOME} \
|
|
||||||
PATH=$${PATH} \
|
|
||||||
BOARD=$${BOARD} \
|
|
||||||
CCACHE=$${CCACHE} \
|
|
||||||
$${CCACHE_DIR:+CCACHE_DIR=$${CCACHE_DIR}} \
|
|
||||||
CCACHE_BASEDIR=$${CCACHE_BASEDIR} \
|
|
||||||
$${GIT_CACHE_DIR:+GIT_CACHE_DIR=$${GIT_CACHE_DIR}} \
|
|
||||||
RIOTBASE=$${RIOTBASE} \
|
|
||||||
RIOTBOARD=$${RIOTBOARD} \
|
|
||||||
RIOTCPU=$${RIOTCPU} \
|
|
||||||
RIOTPKG=$${RIOTPKG} \
|
|
||||||
BINDIRBASE=$${BINDIRBASE} \
|
|
||||||
RIOTNOLINK=$${RIOTNOLINK} \
|
|
||||||
RIOT_VERSION=$${RIOT_VERSION} \
|
|
||||||
MIPS_ELF_ROOT=$${MIPS_ELF_ROOT} \
|
|
||||||
$(MAKE) clean-intermediates 2>&1 >/dev/null || true; \
|
|
||||||
done; \
|
|
||||||
$${BUILDTESTOK}
|
|
||||||
endif # BUILD_IN_DOCKER
|
endif # BUILD_IN_DOCKER
|
||||||
|
|
||||||
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; \
|
|
||||||
echo -e ' text\t data\t bss\t dec\t hex\tfilename'; \
|
|
||||||
$(SIZE) -d -B $(BASELIBS) | \
|
|
||||||
tail -n+2 | \
|
|
||||||
sed -e 's#$(BINDIR)##' | \
|
|
||||||
sort -rnk$${SORTROW}
|
|
||||||
|
|
||||||
info-buildsize:
|
|
||||||
@$(SIZE) -d -B $(BINDIR)/$(APPLICATION).elf || echo ''
|
|
||||||
|
|
||||||
info-buildsizes: SHELL=bash
|
|
||||||
info-buildsizes:
|
|
||||||
@echo -e " text\t data\t bss\t dec\tboard"; \
|
|
||||||
for BOARD in ${BOARDS}; do \
|
|
||||||
echo "$$(env -i \
|
|
||||||
HOME=$${HOME} \
|
|
||||||
PATH=$${PATH} \
|
|
||||||
BOARD=$${BOARD} \
|
|
||||||
RIOTBASE=$${RIOTBASE} \
|
|
||||||
RIOTBOARD=$${RIOTBOARD} \
|
|
||||||
RIOTCPU=$${RIOTCPU} \
|
|
||||||
RIOTPKG=$${RIOTPKG} \
|
|
||||||
BINDIRBASE=$${BINDIRBASE} \
|
|
||||||
MIPS_ELF_ROOT=$${MIPS_ELF_ROOT} \
|
|
||||||
$(MAKE) info-buildsize 2>/dev/null | tail -n-1 | cut -f-4)" "$${BOARD}"; \
|
|
||||||
done;
|
|
||||||
|
|
||||||
info-buildsizes-diff: SHELL=bash
|
|
||||||
info-buildsizes-diff:
|
|
||||||
@echo -e "text\tdata\tbss\tdec\tBOARD/BINDIRBASE\n"; \
|
|
||||||
for BOARD in ${BOARDS}; do \
|
|
||||||
for BINDIRBASE in $${OLDBIN} $${NEWBIN}; do \
|
|
||||||
env -i \
|
|
||||||
HOME=$${HOME} \
|
|
||||||
PATH=$${PATH} \
|
|
||||||
BOARD=$${BOARD} \
|
|
||||||
RIOTBASE=$${RIOTBASE} \
|
|
||||||
RIOTBOARD=$${RIOTBOARD} \
|
|
||||||
RIOTCPU=$${RIOTCPU} \
|
|
||||||
RIOTPKG=$${RIOTPKG} \
|
|
||||||
BINDIRBASE=$${BINDIRBASE} \
|
|
||||||
MIPS_ELF_ROOT=$${MIPS_ELF_ROOT} \
|
|
||||||
$(MAKE) info-buildsize 2>/dev/null | tail -n-1 | cut -f-4; \
|
|
||||||
done | \
|
|
||||||
while read -a OLD && read -a NEW; do \
|
|
||||||
for I in 0 1 2 3; do \
|
|
||||||
if [[ -n "$${NEW[I]}" && -n "$${OLD[I]}" ]]; then \
|
|
||||||
DIFF=$$(($${NEW[I]} - $${OLD[I]})); \
|
|
||||||
if [[ "$${DIFF}" -gt 0 ]]; then $(COLOR_ECHO) -n "${COLOR_RED}"; fi; \
|
|
||||||
if [[ "$${DIFF}" -lt 0 ]]; then $(COLOR_ECHO) -n "${COLOR_GREEN}"; fi; \
|
|
||||||
else \
|
|
||||||
DIFF="${COLOR_RED}ERR"; \
|
|
||||||
fi; \
|
|
||||||
echo -ne "$${DIFF}\t${COLOR_RESET}"; \
|
|
||||||
done; \
|
|
||||||
echo "$${BOARD}"; \
|
|
||||||
for I in 0 1 2 3; do echo -ne "$${OLD[I]-${COLOR_RED}ERR${COLOR_RESET}}\t"; done; echo -e "$${OLDBIN}"; \
|
|
||||||
for I in 0 1 2 3; do echo -ne "$${NEW[I]-${COLOR_RED}ERR${COLOR_RESET}}\t"; done; echo -e "$${NEWBIN}\n"; \
|
|
||||||
done; \
|
|
||||||
done;
|
|
||||||
|
|
||||||
info-build:
|
|
||||||
@echo 'APPLICATION: $(APPLICATION)'
|
|
||||||
@echo ''
|
|
||||||
@echo 'supported boards:'
|
|
||||||
@$(foreach board,$(BOARDS),echo ' * $(board)';)
|
|
||||||
@echo ''
|
|
||||||
@echo 'BOARD: $(BOARD)'
|
|
||||||
@echo 'CPU: $(CPU)'
|
|
||||||
@echo 'MCU: $(MCU)'
|
|
||||||
@echo ''
|
|
||||||
@echo 'RIOTBASE: $(RIOTBASE)'
|
|
||||||
@echo 'RIOTBOARD: $(RIOTBOARD)'
|
|
||||||
@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 ''
|
|
||||||
@echo 'FEATURES_REQUIRED (excl. optional features):'
|
|
||||||
@echo ' $(or $(sort $(filter-out $(FEATURES_OPTIONAL), $(FEATURES_REQUIRED))), -none-)'
|
|
||||||
@echo 'FEATURES_OPTIONAL (strictly "nice to have"):'
|
|
||||||
@echo ' $(or $(sort $(FEATURES_OPTIONAL)), -none-)'
|
|
||||||
@echo 'FEATURES_PROVIDED (by the board or USEMODULE'"'"'d drivers):'
|
|
||||||
@echo ' $(or $(sort $(FEATURES_PROVIDED)), -none-)'
|
|
||||||
@echo 'FEATURES_MISSING (incl. optional features):'
|
|
||||||
@echo ' $(or $(sort $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))), -none-)'
|
|
||||||
@echo 'FEATURES_MISSING (only non-optional features):'
|
|
||||||
@echo ' $(or $(sort $(filter-out $(FEATURES_OPTIONAL) $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))), -none-)'
|
|
||||||
@echo ''
|
|
||||||
@echo 'FEATURES_CONFLICT: $(FEATURES_CONFLICT)'
|
|
||||||
@echo 'FEATURES_CONFLICT_MSG: $(FEATURES_CONFLICT_MSG)'
|
|
||||||
@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 '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 'PORT: $(PORT)'
|
|
||||||
@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)))'
|
|
||||||
|
|
||||||
info-boards-supported:
|
|
||||||
@echo $(BOARDS)
|
|
||||||
|
|
||||||
info-features-missing:
|
|
||||||
@echo $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))
|
|
||||||
|
|
||||||
info-boards-features-missing:
|
|
||||||
@for f in $(BOARDS_FEATURES_MISSING); do echo $${f}; done | column -t
|
|
||||||
|
|
||||||
FEATURES_REQUIRED += $(FEATURES_OPTIONAL)
|
|
||||||
|
|
||||||
ifneq (, $(filter buildtest info-boards-supported info-boards-features-missing info-build info-buildsizes info-buildsizes-diff, $(MAKECMDGOALS)))
|
|
||||||
FEATURES_PROVIDED_BAK := $(FEATURES_PROVIDED)
|
|
||||||
|
|
||||||
define board_missing_features
|
|
||||||
FEATURES_PROVIDED := $(FEATURES_PROVIDED_BAK)
|
|
||||||
-include $${RIOTBOARD}/${1}/Makefile.features
|
|
||||||
ifdef BUILDTEST_MCU_GROUP
|
|
||||||
ifneq ($(BUILDTEST_MCU_GROUP), $$(FEATURES_MCU_GROUP))
|
|
||||||
BOARDS_FEATURES_MISSING += "${1} $${BUILDTEST_MCU_GROUP}"
|
|
||||||
BOARDS_WITH_MISSING_FEATURES += ${1}
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
FEATURES_MISSING := $$(filter-out $$(FEATURES_PROVIDED), $$(FEATURES_REQUIRED))
|
|
||||||
ifneq (, $${FEATURES_MISSING})
|
|
||||||
BOARDS_FEATURES_MISSING += "${1} $${FEATURES_MISSING}"
|
|
||||||
ifneq (, $$(filter-out $$(FEATURES_OPTIONAL), $$(FEATURES_MISSING)))
|
|
||||||
BOARDS_WITH_MISSING_FEATURES += ${1}
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endef
|
|
||||||
|
|
||||||
BOARDS ?= $(shell find $(RIOTBOARD)/* -maxdepth 0 -type d \! -name "*-common" -exec basename {} \;)
|
|
||||||
BOARDS := $(filter $(if $(BOARD_WHITELIST), $(BOARD_WHITELIST), %), $(BOARDS))
|
|
||||||
BOARDS := $(filter-out $(BOARD_BLACKLIST), $(BOARDS))
|
|
||||||
|
|
||||||
BOARDS_WITH_MISSING_FEATURES :=
|
|
||||||
BOARDS_FEATURES_MISSING :=
|
|
||||||
$(foreach BOARD, $(BOARDS), $(eval $(call board_missing_features,$(BOARD))))
|
|
||||||
BOARDS := $(filter-out $(BOARDS_WITH_MISSING_FEATURES), $(BOARDS))
|
|
||||||
|
|
||||||
FEATURES_PROVIDED := $(FEATURES_PROVIDED_BAK)
|
|
||||||
endif
|
|
||||||
|
|
||||||
info-concurrency:
|
|
||||||
@echo "$(NPROC)"
|
|
||||||
|
|
||||||
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)/##'
|
|
||||||
|
19
makefiles/color.inc.mk
Normal file
19
makefiles/color.inc.mk
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
COLOR_GREEN :=
|
||||||
|
COLOR_RED :=
|
||||||
|
COLOR_PURPLE :=
|
||||||
|
COLOR_RESET :=
|
||||||
|
COLOR_ECHO := /bin/echo
|
||||||
|
|
||||||
|
ifeq (0, $(shell tput colors 2>&1 > /dev/null; echo $$?))
|
||||||
|
COLOR_GREEN := \033[1;32m
|
||||||
|
COLOR_RED := \033[1;31m
|
||||||
|
COLOR_YELLOW := \033[1;33m
|
||||||
|
COLOR_PURPLE := \033[1;35m
|
||||||
|
COLOR_RESET := \033[0m
|
||||||
|
ifeq ($(OS),Darwin)
|
||||||
|
COLOR_ECHO := echo -e
|
||||||
|
SHELL=bash
|
||||||
|
else
|
||||||
|
COLOR_ECHO := /bin/echo -e
|
||||||
|
endif
|
||||||
|
endif
|
82
makefiles/info-global.inc.mk
Normal file
82
makefiles/info-global.inc.mk
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
.PHONY: info-buildsizes info-buildsizes-diff info-features-missing \
|
||||||
|
info-boards-features-missing
|
||||||
|
|
||||||
|
USEMODULE_GLOBAL := $(USEMODULE)
|
||||||
|
USEPKG_GLOBAL := $(USEPKG)
|
||||||
|
FEATURES_REQUIRED_GLOBAL := $(FEATURES_REQUIRED)
|
||||||
|
FEATURES_OPTIONAL_GLOBAL := $(FEATURES_OPTIONAL)
|
||||||
|
DISABLE_MODULE_GLOBAL := $(DISABLE_MODULE_GLOBAL)
|
||||||
|
|
||||||
|
define board_missing_features
|
||||||
|
BOARD := ${1}
|
||||||
|
USEMODULE := $(USEMODULE_GLOBAL)
|
||||||
|
USEPKG := $(USEPKG_GLOBAL)
|
||||||
|
DISABLE_MODULE := $(DISABLE_MODULE_GLOBAL)
|
||||||
|
FEATURES_REQUIRED := $(FEATURES_REQUIRED_GLOBAL)
|
||||||
|
FEATURES_OPTIONAL := $(FEATURES_OPTIONAL_GLOBAL)
|
||||||
|
FEATURES_MISSING :=
|
||||||
|
FEATURES_PROVIDED :=
|
||||||
|
include $${RIOTBOARD}/${1}/Makefile.features
|
||||||
|
ifdef BUILDTEST_MCU_GROUP
|
||||||
|
ifneq ($(BUILDTEST_MCU_GROUP), $$(FEATURES_MCU_GROUP))
|
||||||
|
BOARDS_FEATURES_MISSING += "${1} ${BUILDTEST_MCU_GROUP}"
|
||||||
|
BOARDS_WITH_MISSING_FEATURES += ${1}
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
include $(RIOTBASE)/Makefile.dep
|
||||||
|
|
||||||
|
FEATURES_MISSING := $$(filter-out $$(FEATURES_PROVIDED), $$(FEATURES_REQUIRED))
|
||||||
|
ifneq (, $${FEATURES_MISSING})
|
||||||
|
BOARDS_FEATURES_MISSING += "${1} $${FEATURES_MISSING}"
|
||||||
|
ifneq (, $$(filter-out $$(FEATURES_OPTIONAL), $$(FEATURES_MISSING)))
|
||||||
|
BOARDS_WITH_MISSING_FEATURES += ${1}
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endef
|
||||||
|
|
||||||
|
BOARDS ?= $(shell find $(RIOTBOARD)/* -maxdepth 0 -type d \! -name "*-common" -exec basename {} \;)
|
||||||
|
BOARDS := $(filter $(if $(BOARD_WHITELIST), $(BOARD_WHITELIST), %), $(BOARDS))
|
||||||
|
BOARDS := $(filter-out $(BOARD_BLACKLIST), $(BOARDS))
|
||||||
|
|
||||||
|
BOARDS_WITH_MISSING_FEATURES :=
|
||||||
|
BOARDS_FEATURES_MISSING :=
|
||||||
|
$(foreach BOARD, $(BOARDS), $(eval $(call board_missing_features,$(BOARD))))
|
||||||
|
BOARDS := $(filter-out $(BOARDS_WITH_MISSING_FEATURES), $(BOARDS))
|
||||||
|
|
||||||
|
info-buildsizes: SHELL=bash
|
||||||
|
info-buildsizes:
|
||||||
|
@echo -e " text\t data\t bss\t dec\tboard"; \
|
||||||
|
for board in ${BOARDS}; do \
|
||||||
|
echo "$$(BOARD=$${board} $(MAKE) --no-print-directory info-buildsize 2>/dev/null | tail -n-1 | cut -f-4)" "$${board}"; \
|
||||||
|
done;
|
||||||
|
|
||||||
|
info-buildsizes-diff: SHELL=bash
|
||||||
|
info-buildsizes-diff:
|
||||||
|
@echo -e "text\tdata\tbss\tdec\tBOARD/BINDIRBASE\n"; \
|
||||||
|
for board in ${BOARDS}; do \
|
||||||
|
for BINDIRBASE in $${OLDBIN} $${NEWBIN}; do \
|
||||||
|
BOARD=$${board} $(MAKE) info-buildsize --no-print-directory 2>/dev/null | tail -n-1 | cut -f-4; \
|
||||||
|
done | \
|
||||||
|
while read -a OLD && read -a NEW; do \
|
||||||
|
for I in 0 1 2 3; do \
|
||||||
|
if [[ -n "$${NEW[I]}" && -n "$${OLD[I]}" ]]; then \
|
||||||
|
DIFF=$$(($${NEW[I]} - $${OLD[I]})); \
|
||||||
|
if [[ "$${DIFF}" -gt 0 ]]; then $(COLOR_ECHO) -n "${COLOR_RED}"; fi; \
|
||||||
|
if [[ "$${DIFF}" -lt 0 ]]; then $(COLOR_ECHO) -n "${COLOR_GREEN}"; fi; \
|
||||||
|
else \
|
||||||
|
DIFF="${COLOR_RED}ERR"; \
|
||||||
|
fi; \
|
||||||
|
echo -ne "$${DIFF}\t${COLOR_RESET}"; \
|
||||||
|
done; \
|
||||||
|
echo "$${board}"; \
|
||||||
|
for I in 0 1 2 3; do echo -ne "$${OLD[I]-${COLOR_RED}ERR${COLOR_RESET}}\t"; done; echo -e "$${OLDBIN}"; \
|
||||||
|
for I in 0 1 2 3; do echo -ne "$${NEW[I]-${COLOR_RED}ERR${COLOR_RESET}}\t"; done; echo -e "$${NEWBIN}\n"; \
|
||||||
|
done; \
|
||||||
|
done;
|
||||||
|
|
||||||
|
info-boards-supported:
|
||||||
|
@echo $(BOARDS)
|
||||||
|
|
||||||
|
info-boards-features-missing:
|
||||||
|
@for f in $(BOARDS_FEATURES_MISSING); do echo $${f}; done | column -t
|
150
makefiles/info.inc.mk
Normal file
150
makefiles/info.inc.mk
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
.PHONY: info-objsize info-buildsizes info-build info-boards-supported \
|
||||||
|
info-features-missing info-modules info-cpu
|
||||||
|
|
||||||
|
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; \
|
||||||
|
echo -e ' text\t data\t bss\t dec\t hex\tfilename'; \
|
||||||
|
$(SIZE) -d -B $(BASELIBS) | \
|
||||||
|
tail -n+2 | \
|
||||||
|
sed -e 's#$(BINDIR)##' | \
|
||||||
|
sort -rnk$${SORTROW}
|
||||||
|
|
||||||
|
info-buildsize:
|
||||||
|
@$(SIZE) -d -B $(BINDIR)/$(APPLICATION).elf || echo ''
|
||||||
|
|
||||||
|
info-build:
|
||||||
|
@echo 'APPLICATION: $(APPLICATION)'
|
||||||
|
@echo ''
|
||||||
|
@echo 'supported boards:'
|
||||||
|
@echo $$($(MAKE) info-boards-supported)
|
||||||
|
@echo ''
|
||||||
|
@echo 'BOARD: $(BOARD)'
|
||||||
|
@echo 'CPU: $(CPU)'
|
||||||
|
@echo 'MCU: $(MCU)'
|
||||||
|
@echo ''
|
||||||
|
@echo 'RIOTBASE: $(RIOTBASE)'
|
||||||
|
@echo 'RIOTBOARD: $(RIOTBOARD)'
|
||||||
|
@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 ''
|
||||||
|
@echo 'FEATURES_REQUIRED (excl. optional features):'
|
||||||
|
@echo ' $(or $(sort $(filter-out $(FEATURES_OPTIONAL), $(FEATURES_REQUIRED))), -none-)'
|
||||||
|
@echo 'FEATURES_OPTIONAL (strictly "nice to have"):'
|
||||||
|
@echo ' $(or $(sort $(FEATURES_OPTIONAL)), -none-)'
|
||||||
|
@echo 'FEATURES_PROVIDED (by the board or USEMODULE'"'"'d drivers):'
|
||||||
|
@echo ' $(or $(sort $(FEATURES_PROVIDED)), -none-)'
|
||||||
|
@echo 'FEATURES_MISSING (incl. optional features):'
|
||||||
|
@echo ' $(or $(sort $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))), -none-)'
|
||||||
|
@echo 'FEATURES_MISSING (only non-optional features):'
|
||||||
|
@echo ' $(or $(sort $(filter-out $(FEATURES_OPTIONAL) $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))), -none-)'
|
||||||
|
@echo ''
|
||||||
|
@echo 'FEATURES_CONFLICT: $(FEATURES_CONFLICT)'
|
||||||
|
@echo 'FEATURES_CONFLICT_MSG: $(FEATURES_CONFLICT_MSG)'
|
||||||
|
@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 '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 'PORT: $(PORT)'
|
||||||
|
@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)))'
|
||||||
|
|
||||||
|
ifneq (, $(filter buildtest info-concurrency, $(MAKECMDGOALS)))
|
||||||
|
ifeq (, $(strip $(NPROC)))
|
||||||
|
# Linux (utility program)
|
||||||
|
NPROC := $(shell nproc 2>/dev/null)
|
||||||
|
|
||||||
|
ifeq (, $(strip $(NPROC)))
|
||||||
|
# Linux (generic)
|
||||||
|
NPROC := $(shell grep -c ^processor /proc/cpuinfo 2>/dev/null)
|
||||||
|
endif
|
||||||
|
ifeq (, $(strip $(NPROC)))
|
||||||
|
# BSD (at least FreeBSD and Mac OSX)
|
||||||
|
NPROC := $(shell sysctl -n hw.ncpu 2>/dev/null)
|
||||||
|
endif
|
||||||
|
ifeq (, $(strip $(NPROC)))
|
||||||
|
# Fallback
|
||||||
|
NPROC := 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
NPROC := $(shell echo $$(($(NPROC) + 1)))
|
||||||
|
|
||||||
|
ifneq (, $(NPROC_MAX))
|
||||||
|
NPROC := $(shell if [ ${NPROC} -gt $(NPROC_MAX) ]; then echo $(NPROC_MAX); else echo ${NPROC}; fi)
|
||||||
|
endif
|
||||||
|
ifneq (, $(NPROC_MIN))
|
||||||
|
NPROC := $(shell if [ ${NPROC} -lt $(NPROC_MIN) ]; then echo $(NPROC_MIN); else echo ${NPROC}; fi)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
info-concurrency:
|
||||||
|
@echo "$(NPROC)"
|
||||||
|
|
||||||
|
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-cpu:
|
||||||
|
@echo $(CPU)
|
||||||
|
|
||||||
|
info-features-missing:
|
||||||
|
@echo $(filter-out $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))
|
Loading…
Reference in New Issue
Block a user