2015-05-06 13:54:57 +02:00
|
|
|
export DOCKER_IMAGE ?= riot/riotbuild:latest
|
|
|
|
export DOCKER_BUILD_ROOT ?= /data/riotbuild
|
|
|
|
export DOCKER_FLAGS ?= --rm
|
|
|
|
# List of Docker-enabled make goals
|
|
|
|
export DOCKER_MAKECMDGOALS_POSSIBLE = \
|
|
|
|
all \
|
2015-05-06 13:57:40 +02:00
|
|
|
buildtest \
|
2015-05-06 13:54:57 +02:00
|
|
|
#
|
|
|
|
export DOCKER_MAKECMDGOALS = $(filter $(MAKECMDGOALS),$(DOCKER_MAKECMDGOALS_POSSIBLE))
|
|
|
|
|
|
|
|
# Default target for building inside a Docker container if nothing was given
|
|
|
|
export DOCKER_MAKECMDGOALS ?= all
|
|
|
|
# List of all exported environment variables that shall be passed on to the
|
|
|
|
# Docker container, they will only be passed if they are set from the
|
|
|
|
# environment, not if they are only default Makefile values.
|
|
|
|
export DOCKER_ENV_VARS = \
|
|
|
|
BINDIRBASE \
|
|
|
|
BOARD \
|
|
|
|
QUIET \
|
|
|
|
RIOT_VERSION \
|
|
|
|
APPDIR \
|
|
|
|
BINDIR \
|
|
|
|
BUILDRELPATH \
|
|
|
|
ELFFILE \
|
|
|
|
HEXFILE \
|
|
|
|
LINKFLAGPREFIX \
|
|
|
|
CPPMIX \
|
|
|
|
PREFIX \
|
|
|
|
CC \
|
|
|
|
CXX \
|
|
|
|
CFLAGS \
|
|
|
|
CXXUWFLAGS \
|
|
|
|
CXXEXFLAGS \
|
|
|
|
AR \
|
|
|
|
ARFLAGS \
|
|
|
|
AS \
|
|
|
|
ASFLAGS \
|
|
|
|
LINK \
|
|
|
|
LINKFLAGS \
|
|
|
|
OBJCOPY \
|
|
|
|
OFLAGS \
|
|
|
|
SIZE \
|
|
|
|
UNDEF \
|
2015-07-07 00:49:38 +02:00
|
|
|
BUILDTEST_MCU_GROUP \
|
2015-07-14 19:32:11 +02:00
|
|
|
BUILDTEST_VERBOSE \
|
2015-05-06 13:54:57 +02:00
|
|
|
#
|
|
|
|
|
|
|
|
# Find which variables were set using the command line or the environment and
|
|
|
|
# pass those to Docker.
|
|
|
|
# DOCKER_ENVIRONMENT_CMDLINE must be immediately assigned (:=) or otherwise some
|
|
|
|
# of the environment variables will be overwritten by Makefile.include and their
|
|
|
|
# origin is changed to "file"
|
|
|
|
DOCKER_ENVIRONMENT_CMDLINE := $(foreach varname,$(DOCKER_ENV_VARS), \
|
|
|
|
$(if $(filter environment command,$(origin $(varname))), \
|
|
|
|
-e '$(varname)=$($(varname))', \
|
|
|
|
))
|
|
|
|
DOCKER_ENVIRONMENT_CMDLINE := $(strip $(DOCKER_ENVIRONMENT_CMDLINE))
|
|
|
|
|
|
|
|
# This will execute `make $(DOCKER_MAKECMDGOALS)` inside a Docker container.
|
|
|
|
# We do not push the regular $(MAKECMDGOALS) to the container's make command in
|
|
|
|
# order to only perform building inside the container and defer executing any
|
|
|
|
# extra commands such as flashing or debugging until after leaving the
|
|
|
|
# container.
|
|
|
|
# The `flash`, `term`, `debugserver` etc. targets usually require access to
|
|
|
|
# hardware which may not be reachable from inside the container.
|
|
|
|
..in-docker-container:
|
|
|
|
@$(COLOR_ECHO) '${COLOR_GREEN}Launching build container using image "$(DOCKER_IMAGE)".${COLOR_RESET}'
|
|
|
|
docker run $(DOCKER_FLAGS) -i -t -u "$$(id -u)" \
|
|
|
|
-v '$(RIOTBASE):$(DOCKER_BUILD_ROOT)/riotbase' \
|
|
|
|
-v '$(RIOTCPU):$(DOCKER_BUILD_ROOT)/riotcpu' \
|
|
|
|
-v '$(RIOTBOARD):$(DOCKER_BUILD_ROOT)/riotboard' \
|
|
|
|
-v '$(RIOTPROJECT):$(DOCKER_BUILD_ROOT)/riotproject' \
|
|
|
|
-e 'RIOTBASE=$(DOCKER_BUILD_ROOT)/riotbase' \
|
|
|
|
-e 'RIOTCPU=$(DOCKER_BUILD_ROOT)/riotcpu' \
|
|
|
|
-e 'RIOTBOARD=$(DOCKER_BUILD_ROOT)/riotboard' \
|
|
|
|
-e 'RIOTPROJECT=$(DOCKER_BUILD_ROOT)/riotproject' \
|
|
|
|
$(DOCKER_ENVIRONMENT_CMDLINE) \
|
|
|
|
-w '$(DOCKER_BUILD_ROOT)/riotproject/$(BUILDRELPATH)' \
|
|
|
|
'$(DOCKER_IMAGE)' make $(DOCKER_MAKECMDGOALS)
|