diff --git a/Makefile.include b/Makefile.include index e5fa87fd18b8250ed769a0481db986929a2543b9..94dd0a3e58f4a80827734db4863b807fd9477318 100644 --- a/Makefile.include +++ b/Makefile.include @@ -4,26 +4,43 @@ all: # set undefined variables -RIOTBASE ?= $(shell dirname "$(lastword $(MAKEFILE_LIST))") -RIOTBASE := $(abspath $(RIOTBASE)) - +RIOTBASE ?= $(shell dirname "$(lastword $(MAKEFILE_LIST))") CCACHE_BASEDIR ?= $(RIOTBASE) -CCACHE_BASEDIR := $(abspath $(CCACHE_BASEDIR)) - -RIOTCPU ?= $(RIOTBASE)/cpu -RIOTCPU := $(abspath $(RIOTCPU)) - -RIOTBOARD ?= $(RIOTBASE)/boards -RIOTBOARD := $(abspath $(RIOTBOARD)) - -RIOTPKG ?= $(RIOTBASE)/pkg -RIOTPKG := $(abspath $(RIOTPKG)) +RIOTCPU ?= $(RIOTBASE)/cpu +RIOTBOARD ?= $(RIOTBASE)/boards +RIOTPKG ?= $(RIOTBASE)/pkg +RIOTPROJECT ?= $(shell git rev-parse --show-toplevel 2>/dev/null || pwd) +GITCACHE ?= $(RIOTBASE)/dist/tools/git/git-cache +APPDIR ?= $(CURDIR) +BINDIRBASE ?= $(APPDIR)/bin +BINDIR ?= $(BINDIRBASE)/$(BOARD) + +__DIRECTORY_VARIABLES := RIOTBASE CCACHE_BASEDIR RIOTCPU RIOTBOARD RIOTPKG GITCACHE RIOTPROJECT APPDIR BINDIRBASE BINDIR + +# Make all paths absolute. +override RIOTBASE := $(abspath $(RIOTBASE)) +override CCACHE_BASEDIR := $(abspath $(CCACHE_BASEDIR)) +override RIOTCPU := $(abspath $(RIOTCPU)) +override RIOTBOARD := $(abspath $(RIOTBOARD)) +override RIOTPKG := $(abspath $(RIOTPKG)) +override RIOTPROJECT := $(abspath $(RIOTPROJECT)) +override GITCACHE := $(abspath $(GITCACHE)) +override APPDIR := $(abspath $(APPDIR))/ +override BINDIRBASE := $(abspath $(BINDIRBASE)) +override BINDIR := $(abspath $(BINDIR))/ + +# Ensure that all directories are set and don't contain spaces. +ifneq (, $(filter-out 1, $(foreach v,${__DIRECTORY_VARIABLES},$(words ${${v}})))) + $(info Aborting compilation for your safety.) + $(info Related variables = ${__DIRECTORY_VARIABLES}) + $(error Make sure no path override is empty or contains spaces!) +endif -RIOTPROJECT ?= $(shell git rev-parse --show-toplevel 2>/dev/null || pwd) -RIOTPROJECT := $(abspath $(RIOTPROJECT)) +# Use absolute paths in recusive "make" even if overriden on command line. +MAKEOVERRIDES += $(foreach v,${__DIRECTORY_VARIABLES},${v}=${${v}}) -GITCACHE ?= $(RIOTBASE)/dist/tools/git/git-cache -GITCACHE := $(abspath $(GITCACHE)) +# Path to the current directory relative to the git root +BUILDRELPATH ?= $(shell git rev-parse --show-prefix) # 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 @@ -33,18 +50,6 @@ include $(RIOTBASE)/Makefile.docker # Static code analysis tools provided by LLVM include $(RIOTBASE)/Makefile.scan-build -# Path to the current directory relative to the git root -BUILDRELPATH ?= $(shell git rev-parse --show-prefix) - -APPDIR ?= $(CURDIR) -APPDIR := $(abspath $(APPDIR))/ - -BINDIRBASE ?= $(APPDIR)/bin -BINDIRBASE := $(abspath $(BINDIRBASE)) - -BINDIR ?= $(BINDIRBASE)/$(BOARD) -BINDIR := $(abspath $(BINDIR))/ - COLOR_GREEN := COLOR_RED := COLOR_PURPLE :=