aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Czapiga <jacz@semihalf.com>2021-12-02 15:29:18 +0000
committerPatrick Georgi <patrick@coreboot.org>2021-12-08 14:42:25 +0000
commit289e2f6a64c5cce10edd84f391025d4083ee651f (patch)
treed52966526d50a1792492f6b4b2a9babbfdffbfa4
parent0b25e00ab1ea70a3199bf4fff7f35ab9ab8e9acf (diff)
libpayload/Makefile: Improve object files list creation
This patch ports some parts of main coreboot Makefile to the libpayload Makefile in order to improve object files creation. Moreover, the coreboot source files are now accessible an will be correctly compiled under libpayload build directory. Change-Id: If1280c0a3f7e99aad2ecf8a0379a98af31ccefc3 Signed-off-by: Jakub Czapiga <jacz@semihalf.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/59843 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <patrick@coreboot.org>
-rw-r--r--payloads/libpayload/Makefile24
1 files changed, 19 insertions, 5 deletions
diff --git a/payloads/libpayload/Makefile b/payloads/libpayload/Makefile
index 1da8c64c15..3ad313f3af 100644
--- a/payloads/libpayload/Makefile
+++ b/payloads/libpayload/Makefile
@@ -29,6 +29,10 @@
## SUCH DAMAGE.
##
+ifneq ($(words $(CURDIR)),1)
+ $(error ERROR: Path to the main directory cannot contain spaces)
+endif
+
ifeq ($(INNER_SCANBUILD),y)
CC_real:=$(CC)
endif
@@ -40,6 +44,7 @@ export srck := $(abspath $(top)/../../util/kconfig)
export obj ?= build
export objutil ?= $(obj)/util
export objk := $(objutil)/lp_kconfig
+export absobj := $(abspath $(obj))
export KCONFIG_AUTOHEADER := $(obj)/config.h
export KCONFIG_AUTOCONFIG := $(obj)/auto.conf
@@ -290,9 +295,11 @@ includemakefiles= \
$(foreach item,$($(special)-y), $(call $(special)-handler,$(dir $(1)),$(item)))) \
$(foreach class,$(classes), \
$(eval $(class)-srcs+= \
+ $$(subst $(absobj)/,$(obj)/, \
$$(subst $(top)/,, \
- $$(abspath $$(addprefix $(dir $(1)),$$($(class)-y)))))) \
- $(eval subdirs+=$$(subst $(CURDIR)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))
+ $$(abspath $$(subst $(dir $(1))/,/,$$(addprefix $(dir $(1)),$$($(class)-y)))))))) \
+ $(eval subdirs+=$$(subst $(CURDIR)/,,$$(wildcard $$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y))))))
+
# For each path in $(subdirs) call includemakefiles
# Repeat until subdirs is empty
@@ -311,8 +318,15 @@ else
include $(TOPLEVEL)/tests/Makefile.inc
endif
-src-to-obj=$(addsuffix .$(1).o, $(basename $(addprefix $(obj)/, $($(1)-srcs))))
-$(foreach class,$(classes),$(eval $(class)-objs:=$(call src-to-obj,$(class))))
+# Converts one or more source file paths to the corresponding build/ paths.
+# $1 lib name
+# $2 file path (list)
+src-to-obj=\
+ $(addsuffix .$(1).o,\
+ $(basename \
+ $(addprefix $(obj)/,\
+ $(subst $(coreboottop)/,coreboot/,$(2)))))
+$(foreach class,$(classes),$(eval $(class)-objs:=$(call src-to-obj,$(class),$($(class)-srcs))))
allsrcs:=$(foreach var, $(addsuffix -srcs,$(classes)), $($(var)))
allobjs:=$(foreach var, $(addsuffix -objs,$(classes)), $($(var)))
@@ -326,7 +340,7 @@ define create_cc_template
# $4 additional dependencies
ifn$(EMPTY)def $(1)-objs_$(2)_template
de$(EMPTY)fine $(1)-objs_$(2)_template
-$(obj)/$$(1).$(1).o: $$(1).$(2) $(obj)/libpayload-config.h $(4)
+$$(call src-to-obj,$(1), $$(1).$(2)): $$(1).$(2) $(obj)/libpayload-config.h $(4)
@printf " CC $$$$(subst $$$$(obj)/,,$$$$(@))\n"
$(CC) $(3) -MMD $$$$(CFLAGS) $(EXTRA_CFLAGS) -c -o $$$$@ $$$$<
en$(EMPTY)def