2014-05-14 14:05:22 +02:00
|
|
|
ifneq (, $(filter buildtest, $(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)))
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2014-08-13 20:39:48 +02:00
|
|
|
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))
|
|
|
|
|
2014-05-14 13:46:27 +02:00
|
|
|
buildtest:
|
|
|
|
@if [ -z "$${JENKINS_URL}" ] && tput colors 2>&1 > /dev/null; then \
|
2014-08-05 17:42:32 +02:00
|
|
|
GREEN='\033[1;32m'; RED='\033[1;31m'; PURPLE='\033[1;35m'; RESET='\033[0m'; \
|
2014-05-14 13:46:27 +02:00
|
|
|
ECHO='/bin/echo -e'; \
|
|
|
|
else \
|
2014-08-05 17:42:32 +02:00
|
|
|
GREEN=''; RED=''; PURPLE=''; RESET=''; \
|
2014-05-14 13:46:27 +02:00
|
|
|
ECHO='/bin/echo'; \
|
|
|
|
fi; \
|
|
|
|
\
|
2014-08-05 17:42:32 +02:00
|
|
|
BUILDTESTOK=true; \
|
2014-05-14 13:48:22 +02:00
|
|
|
rm -rf "$$BINDIRBASE"; \
|
2014-08-13 20:39:48 +02:00
|
|
|
for BOARD in $(BOARDS); do \
|
2014-04-22 16:53:16 +02:00
|
|
|
RIOTNOLINK=$$(case ' $(BOARD_INSUFFICIENT_RAM) ' in *" $${BOARD} "*) echo 1; esac); \
|
|
|
|
$${ECHO} -n "Building for $${BOARD} "; \
|
|
|
|
[ -n "$${RIOTNOLINK}" ] && $${ECHO} -n "(no linking) "; \
|
2014-08-05 17:42:32 +02:00
|
|
|
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; \
|
2014-05-14 13:46:27 +02:00
|
|
|
done; \
|
2014-08-05 17:42:32 +02:00
|
|
|
$${BUILDTESTOK}
|
2014-05-14 13:46:27 +02:00
|
|
|
|
2014-08-11 11:29:13 +02:00
|
|
|
info-objsize:
|
2014-05-14 13:46:27 +02:00
|
|
|
@case "${SORTROW}" in \
|
|
|
|
text) SORTROW=1 ;; \
|
|
|
|
data) SORTROW=2 ;; \
|
|
|
|
bss) SORTROW=3 ;; \
|
|
|
|
dec) SORTROW=4 ;; \
|
|
|
|
"") SORTROW=4 ;; \
|
2014-08-11 11:33:18 +02:00
|
|
|
*) echo "Usage: $(MAKE) info-objsize SORTROW=[text|data|bss|dec]" ; return ;; \
|
2014-05-14 13:46:27 +02:00
|
|
|
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}
|
|
|
|
|
2014-08-11 11:33:18 +02:00
|
|
|
info-buildsize:
|
2014-05-23 10:33:02 +02:00
|
|
|
@$(SIZE) -dB $(BINDIR)$(APPLICATION).elf
|
2014-05-14 13:46:27 +02:00
|
|
|
|
2014-08-11 11:33:18 +02:00
|
|
|
info-buildsizes: SHELL=bash
|
|
|
|
info-buildsizes:
|
2014-05-14 13:46:27 +02:00
|
|
|
echo -e " text\t data\t bss\t dec\tboard"; \
|
2014-08-13 20:39:48 +02:00
|
|
|
for BOARD in $(BOARDS); do \
|
2014-05-14 13:46:27 +02:00
|
|
|
echo "$$(env -i \
|
|
|
|
HOME=$${HOME} \
|
|
|
|
PATH=$${PATH} \
|
|
|
|
BOARD=$${BOARD} \
|
|
|
|
RIOTBASE=$${RIOTBASE} \
|
|
|
|
RIOTBOARD=$${RIOTBOARD} \
|
|
|
|
RIOTCPU=$${RIOTCPU} \
|
|
|
|
BINDIRBASE=$${BINDIRBASE} \
|
2014-08-11 11:33:18 +02:00
|
|
|
$(MAKE) info-buildsize 2>/dev/null | tail -n-1 | cut -f-4)" "$${BOARD}"; \
|
2014-05-14 13:46:27 +02:00
|
|
|
done;
|
|
|
|
|
2014-08-11 11:33:18 +02:00
|
|
|
info-buildsizes-diff: SHELL=bash
|
|
|
|
info-buildsizes-diff:
|
2014-08-13 20:39:48 +02:00
|
|
|
@GREEN='\033[1;32m'; RED='\033[1;31m'; RESET='\033[0m'; \
|
2014-05-14 13:46:27 +02:00
|
|
|
\
|
|
|
|
echo -e "text\tdata\tbss\tdec\tBOARD/BINDIRBASE\n"; \
|
2014-08-13 20:39:48 +02:00
|
|
|
for BOARD in $(BOARDS); do \
|
2014-05-14 13:46:27 +02:00
|
|
|
for BINDIRBASE in $${OLDBIN} $${NEWBIN}; do \
|
|
|
|
env -i \
|
|
|
|
HOME=$${HOME} \
|
|
|
|
PATH=$${PATH} \
|
|
|
|
BOARD=$${BOARD} \
|
|
|
|
RIOTBASE=$${RIOTBASE} \
|
|
|
|
RIOTBOARD=$${RIOTBOARD} \
|
|
|
|
RIOTCPU=$${RIOTCPU} \
|
|
|
|
BINDIRBASE=$${BINDIRBASE} \
|
2014-08-11 11:33:18 +02:00
|
|
|
$(MAKE) info-buildsize 2>/dev/null | tail -n-1 | cut -f-4; \
|
2014-05-14 13:46:27 +02:00
|
|
|
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;
|
2014-05-18 18:54:11 +02:00
|
|
|
|
2014-08-11 11:29:13 +02:00
|
|
|
info-build:
|
2014-06-18 15:24:14 +02:00
|
|
|
@echo 'APPLICATION: $(APPLICATION)'
|
2014-08-13 20:44:16 +02:00
|
|
|
@echo ''
|
|
|
|
@echo 'supported boards:'
|
|
|
|
@$(foreach board,$(BOARDS),echo ' * $(board)';)
|
|
|
|
@echo ''
|
2014-05-18 18:54:11 +02:00
|
|
|
@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 ''
|
2014-05-05 21:53:37 +02:00
|
|
|
@echo 'CC: $(CC)'
|
|
|
|
@echo -e 'CFLAGS:$(patsubst %, \n\t%, $(CFLAGS))'
|
2014-05-18 18:54:11 +02:00
|
|
|
@echo ''
|
2014-05-05 21:53:37 +02:00
|
|
|
@echo 'CXX: $(CXX)'
|
|
|
|
@echo -e 'CXXUWFLAGS:$(patsubst %, \n\t%, $(CXXUWFLAGS))'
|
|
|
|
@echo -e 'CXXEXFLAGS:$(patsubst %, \n\t%, $(CXXEXFLAGS))'
|
|
|
|
@echo ''
|
|
|
|
@echo 'LINK: $(LINK)'
|
2014-05-18 18:54:11 +02:00
|
|
|
@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 ''
|
2014-08-05 00:49:59 +02:00
|
|
|
@echo 'DEBUGSERVER: $(DEBUGSERVER)'
|
|
|
|
@echo 'DEBUGSERVER_FLAGS: $(DEBUGSERVER_FLAGS)'
|
|
|
|
@echo ''
|
|
|
|
@echo 'RESET: $(RESET)'
|
|
|
|
@echo 'RESET_FLAGS: $(RESET_FLAGS)'
|
|
|
|
@echo ''
|
2014-05-18 18:54:11 +02:00
|
|
|
@echo -e 'MAKEFILE_LIST:$(patsubst %, \n\t%, $(abspath $(MAKEFILE_LIST)))'
|
2014-08-05 00:49:59 +02:00
|
|
|
|
2014-08-11 11:28:17 +02:00
|
|
|
info-boards-supported:
|
2014-08-13 20:43:42 +02:00
|
|
|
@echo "$(BOARDS)"
|