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 BOARDS ?= $(shell find $(RIOTBOARD)/* -maxdepth 0 -type d \! -name *-common -printf '%f ') BOARDS := $(filter $(if $(BOARD_WHITELIST), $(BOARD_WHITELIST), %), $(BOARDS)) BOARDS := $(filter-out $(BOARD_BLACKLIST), $(BOARDS)) .PHONY: buildtest info-objsize info-buildsize info-buildsizes \ info-buildsizes-diff info-build info-boards-supported buildtest: @if [ -z "$${JENKINS_URL}" ] && tput colors 2>&1 > /dev/null; then \ GREEN='\033[1;32m'; RED='\033[1;31m'; PURPLE='\033[1;35m'; RESET='\033[0m'; \ ECHO='/bin/echo -e'; \ else \ GREEN=''; RED=''; PURPLE=''; RESET=''; \ ECHO='/bin/echo'; \ fi; \ \ BUILDTESTOK=true; \ rm -rf "$$BINDIRBASE"; \ for BOARD in $(BOARDS); do \ RIOTNOLINK=$$(case ' $(BOARD_INSUFFICIENT_RAM) ' in *" $${BOARD} "*) echo 1; esac); \ $${ECHO} -n "Building for $${BOARD} "; \ [ -n "$${RIOTNOLINK}" ] && $${ECHO} -n "(no linking) "; \ for NTH_TRY in 1 2; do \ $${ECHO} -n ".. "; \ LOG=$$(env -i \ HOME=$${HOME} \ PATH=$${PATH} \ BOARD=$${BOARD} \ RIOTBASE=$${RIOTBASE} \ RIOTBOARD=$${RIOTBOARD} \ RIOTCPU=$${RIOTCPU} \ BINDIRBASE=$${BINDIRBASE} \ RIOTNOLINK=$${RIOTNOLINK} \ RIOT_VERSION=$${RIOT_VERSION} \ $(MAKE) -j$(NPROC) 2>&1 >/dev/null) ; \ if [ "$${?}" = "0" ]; then \ $${ECHO} "$${GREEN}success$${RESET}"; \ elif [ -n "$${RIOT_DO_RETRY}" ] && $${BUILDTESTOK} && [ $${NTH_TRY} = 1 ]; then \ $${ECHO} -n "$${PURPLE}retrying$${RESET} "; \ continue; \ else \ $${ECHO} "$${RED}failed$${RESET}"; \ echo "$${LOG}" | grep -v -E '^make(\[[[:digit:]]])?:'; \ BUILDTESTOK=false; \ fi; \ break; \ done; \ done; \ $${BUILDTESTOK} 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 ' text\t data\t bss\t dec\t hex\tfilename'; \ $(SIZE) -dB $(BASELIBS) | \ tail -n+2 | \ sed -e 's#$(BINDIR)##' | \ sort -rnk$${SORTROW} info-buildsize: @$(SIZE) -dB $(BINDIR)$(APPLICATION).elf 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} \ BINDIRBASE=$${BINDIRBASE} \ $(MAKE) info-buildsize 2>/dev/null | tail -n-1 | cut -f-4)" "$${BOARD}"; \ done; info-buildsizes-diff: SHELL=bash info-buildsizes-diff: @GREEN='\033[1;32m'; RED='\033[1;31m'; RESET='\033[0m'; \ \ 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} \ BINDIRBASE=$${BINDIRBASE} \ $(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 echo -ne "$${RED}"; fi; \ if [[ "$${DIFF}" -lt 0 ]]; then echo -ne "$${GREEN}"; fi; \ else \ DIFF="$${RED}ERR"; \ fi; \ echo -ne "$${DIFF}\t$${RESET}"; \ done; \ echo "$${BOARD}"; \ for I in 0 1 2 3; do echo -ne "$${OLD[I]-$${RED}ERR$${RESET}}\t"; done; echo -e "$${OLDBIN}"; \ for I in 0 1 2 3; do echo -ne "$${NEW[I]-$${RED}ERR$${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 '' @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 '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 '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-concurrency: @echo "$(NPROC)"