make: support absolute and relative obj= specifications

There has been a problem with out of tree build directories specified
using relative paths, as in

$ make obj=../build/peppy

while specifying full path to obj works fine. This patch fixes the
problem, making sure that make's path manipulation string substitute
command is applied to both source and build roots.

To test this ran the following script

echo > /tmp/build.log
for build_root in ./ ../ ''; do
  build_dirs="${build_root}build/peppy"
  if [ -n "${build_root}" ]; then
    build_dirs+=" $(realpath ${build_root})/build/peppy"
  fi
  for build_dir in ${build_dirs}; do
    rm -rf $build_dir .config* build* ../build*
    make obj=${build_dir} menuconfig # configure for google peppy board
    echo "building in ${build_dir}" >> /tmp/build.log
    if ! make obj=${build_dir}; then
      exit
    fi
  done
done

and then checked the generated file:

$ cat /tmp/build.log

building in ./build/peppy
building in /home/vbendeb/old_projects/coreboot/source_code/build/peppy
building in ../build/peppy
building in /home/vbendeb/old_projects/coreboot/build/peppy
building in build/peppy

Change-Id: If46b046108e906796fe84716e93bf341b3785f14
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: http://review.coreboot.org/10127
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Vadim Bendebury 2015-05-06 21:00:10 -07:00
parent fa7a45524f
commit 5f7e4f019e
1 changed files with 6 additions and 2 deletions

View File

@ -43,9 +43,12 @@ include .xcompile
export top := $(CURDIR)
export src := src
export srck := $(top)/util/kconfig
export obj ?= build
obj ?= build
override obj := $(subst $(top)/,,$(abspath $(obj)))
export obj
export objutil ?= $(obj)/util
export objk := $(objutil)/kconfig
absobj := $(abspath $(obj))
export KCONFIG_AUTOHEADER := $(obj)/config.h
@ -184,8 +187,9 @@ includemakefiles= \
$(foreach class,$(classes-y), $(call add-class,$(class))) \
$(foreach class,$(classes), \
$(eval $(class)-srcs+= \
$$(subst $(absobj)/,$(obj)/, \
$$(subst $(top)/,, \
$$(abspath $$(subst $(dir $(1))/,/,$$(addprefix $(dir $(1)),$$($(class)-y))))))) \
$$(abspath $$(subst $(dir $(1))/,/,$$(addprefix $(dir $(1)),$$($(class)-y)))))))) \
$(foreach special,$(special-classes), \
$(foreach item,$($(special)-y), $(call $(special)-handler,$(dir $(1)),$(item)))) \
$(eval subdirs+=$$(subst $(CURDIR)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))