diff --git a/.gitignore b/.gitignore index 74aeebbddd4b..c5f6b8d4b61e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ doc/doxygen/*.db doc/doxygen/*.tmp # Built binaries *bin +# Build directory +/build # Backup files *~ *.orig diff --git a/Makefile.include b/Makefile.include index d85ce551da7d..dd31b6b2b045 100644 --- a/Makefile.include +++ b/Makefile.include @@ -23,6 +23,7 @@ RIOTTOOLS ?= $(RIOTBASE)/dist/tools RIOTPROJECT ?= $(shell git rev-parse --show-toplevel 2>/dev/null || pwd) GITCACHE ?= $(RIOTTOOLS)/git/git-cache GIT_CACHE_DIR ?= $(HOME)/.gitcache +BUILD_DIR ?= $(RIOTBASE)/build APPDIR ?= $(CURDIR) BINDIRBASE ?= $(APPDIR)/bin BINDIR ?= $(BINDIRBASE)/$(BOARD) @@ -39,6 +40,7 @@ __DIRECTORY_VARIABLES := \ RIOTTOOLS \ RIOTPROJECT \ APPDIR \ + BUILD_DIR \ BINDIRBASE \ BINDIR \ CCACHE_BASEDIR \ @@ -58,6 +60,7 @@ override RIOTTOOLS := $(abspath $(RIOTTOOLS)) override RIOTPROJECT := $(abspath $(RIOTPROJECT)) override GITCACHE := $(abspath $(GITCACHE)) override APPDIR := $(abspath $(APPDIR)) +override BUILD_DIR := $(abspath $(BUILD_DIR)) override BINDIRBASE := $(abspath $(BINDIRBASE)) override BINDIR := $(abspath $(BINDIR)) override PKGDIRBASE := $(abspath $(PKGDIRBASE)) diff --git a/makefiles/docker.inc.mk b/makefiles/docker.inc.mk index 1f32a87cbf42..775549f63054 100644 --- a/makefiles/docker.inc.mk +++ b/makefiles/docker.inc.mk @@ -108,14 +108,18 @@ ETC_LOCALTIME = $(realpath /etc/localtime) # 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)' + @# HACK: Handle directory creation here until it is provided globally + $(Q)mkdir -p $(BUILD_DIR) $(DOCKER) run $(DOCKER_FLAGS) -t -u "$$(id -u)" \ -v '$(RIOTBASE):$(DOCKER_BUILD_ROOT)/riotbase' \ + -v '$(BUILD_DIR):$(DOCKER_BUILD_ROOT)/build' \ -v '$(RIOTCPU):$(DOCKER_BUILD_ROOT)/riotcpu' \ -v '$(RIOTBOARD):$(DOCKER_BUILD_ROOT)/riotboard' \ -v '$(RIOTMAKE):$(DOCKER_BUILD_ROOT)/riotmake' \ -v '$(RIOTPROJECT):$(DOCKER_BUILD_ROOT)/riotproject' \ -v '$(ETC_LOCALTIME):/etc/localtime:ro' \ -e 'RIOTBASE=$(DOCKER_BUILD_ROOT)/riotbase' \ + -e 'BUILD_DIR=$(DOCKER_BUILD_ROOT)/build' \ -e 'CCACHE_BASEDIR=$(DOCKER_BUILD_ROOT)/riotbase' \ -e 'RIOTCPU=$(DOCKER_BUILD_ROOT)/riotcpu' \ -e 'RIOTBOARD=$(DOCKER_BUILD_ROOT)/riotboard' \ diff --git a/makefiles/scan-build.inc.mk b/makefiles/scan-build.inc.mk index 5160971c7e3c..10fb376f0607 100644 --- a/makefiles/scan-build.inc.mk +++ b/makefiles/scan-build.inc.mk @@ -7,6 +7,7 @@ SCANBUILD_ENV_VARS := \ BINDIR \ BINDIRBASE \ BOARD \ + BUILD_DIR \ BUILDRELPATH \ CC \ CFLAGS \ diff --git a/makefiles/vars.inc.mk b/makefiles/vars.inc.mk index 0dee7327642c..cff66ea75bd8 100644 --- a/makefiles/vars.inc.mk +++ b/makefiles/vars.inc.mk @@ -29,6 +29,7 @@ export RIOTPROJECT # Top level git root of the project being built, or export RIOTMAKE # Location of all supplemental Makefiles (such as this file) export BINDIRBASE # This is the folder where the application should be built in. For each BOARD a different subfolder is used. export BINDIR # This is the folder where the application should be built in. +export BUILD_DIR # This is the base folder to store common build files and artifacts, e.g. test results. export APPDIR # The base folder containing the application export PKGDIRBASE # The base folder for building packages