summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2015-05-29 11:33:27 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-07-17 03:17:50 +0000
commitce063e08297b6578abf6f301f7046302625a781c (patch)
tree1f3cfa5a87c391c30939cc6e522ea251decec461 /Makefile
parent0450571a46724c702363d2706142121f9b61e212 (diff)
downloadchrome-ec-ce063e08297b6578abf6f301f7046302625a781c.tar.gz
build-infr: Add support for shared RO library.
This commit introduces the build infrastructure changes needed for creating a shared RO library. (libsharedobjs). The end goal is for the library to contain various objects that can be shared with both the RO and RW EC images. Now, there are 3 make goals: ro, rw, and libsharedobjs. In order for changes that are only specific to a single image (ie: RW only) to be applied correctly, the object files are now built separately for the RO, RW, shared objects library targets. NOTE: Certain EC targets are incompatible with this model due to the fact that only one image is present within flash at a time. BRANCH=none BUG=None TEST=make -j buildall tests TEST=make -j BOARD=cr50 xrefs TEST=make BOARD=samus dis TEST=Built samus EC image and compared that the final EC image was identical to the upstream version (except for the git SHAs & version strings). CQ-DEPEND=CL:285934 Change-Id: I8e67f089710be9c6d7017718109262394bdad2f5 Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://chromium-review.googlesource.com/274079 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Tested-by: Aseda Aboagye <aaboagye@chromium.org> Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile63
1 files changed, 49 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 6b3915faf8..8d680f7bb0 100644
--- a/Makefile
+++ b/Makefile
@@ -124,27 +124,62 @@ include util/lock/build.mk
includes+=$(includes-y)
-objs_from_dir=$(sort $(foreach obj, $($(2)-y), \
- $(out)/$(1)/$(firstword $($(2)-mock-$(PROJECT)-$(obj)) $(obj))))
+ro-objs_from_dir=$(sort $(foreach obj, $($(2)-y), \
+ $(out)/RO/$(1)/$(firstword $($(2)-mock-$(PROJECT)-$(obj)) $(obj))))
# Get all sources to build
-all-y=$(call objs_from_dir,core/$(CORE),core)
-all-y+=$(call objs_from_dir,chip/$(CHIP),chip)
-all-y+=$(call objs_from_dir,board/$(BOARD),board)
-all-y+=$(call objs_from_dir,private,private)
-all-y+=$(call objs_from_dir,private-cr51,private-cr51)
-all-y+=$(call objs_from_dir,common,common)
-all-y+=$(call objs_from_dir,driver,driver)
-all-y+=$(call objs_from_dir,power,power)
-all-y+=$(call objs_from_dir,test,$(PROJECT))
-dirs=core/$(CORE) chip/$(CHIP) board/$(BOARD) common power test util
-dirs+=private private-cr51
+all-ro-y=$(call ro-objs_from_dir,core/$(CORE),core)
+all-ro-y+=$(call ro-objs_from_dir,chip/$(CHIP),chip)
+all-ro-y+=$(call ro-objs_from_dir,board/$(BOARD),board)
+all-ro-y+=$(call ro-objs_from_dir,private,private)
+all-ro-y+=$(call ro-objs_from_dir,private-cr51,private-cr51)
+all-ro-y+=$(call ro-objs_from_dir,common,common)
+all-ro-y+=$(call ro-objs_from_dir,driver,driver)
+all-ro-y+=$(call ro-objs_from_dir,power,power)
+all-ro-y+=$(call ro-objs_from_dir,test,$(PROJECT))
+dirs=core/$(CORE) chip/$(CHIP) board/$(BOARD) common power test
+dirs+= private private-cr51
dirs+=$(shell find driver -type d)
+common_dirs=util
+ro-objs := $(all-ro-y)
+# Don't include the shared objects in the RO/RW image if we're enabling
+# the shared objects library.
+ifeq ($(CONFIG_SHAREDLIB),y)
+ro-objs := $(filter-out %_sharedlib.o, $(ro-objs))
+endif
+rw-objs := $(ro-objs:$(out)/RO/%=$(out)/RW/%)
+ro-deps := $(ro-objs:%.o=%.o.d)
+rw-deps := $(rw-objs:%.o=%.o.d)
+deps := $(ro-deps) $(rw-deps)
+
+.PHONY: ro rw
$(config): $(out)/$(PROJECT).bin
@printf '%s=y\n' $(_tsk_cfg) $(_flag_cfg) > $@
-all: $(config) utils ${PROJECT_EXTRA}
+def_all_deps:=utils ro rw $(config) $(PROJECT_EXTRA)
+all_deps?=$(def_all_deps)
+all: $(all_deps)
+
+ro: override BLD:=RO
+ro: $(libsharedobjs_elf-y) $(out)/RO/$(PROJECT).RO.flat
+
+rw: override BLD:=RW
+rw: $(libsharedobjs_elf-y) $(out)/RW/$(PROJECT).RW.flat
+
+# Shared objects library
+SHOBJLIB := libsharedobjs
+sharedlib-objs := $(filter %_sharedlib.o, $(all-ro-y))
+sharedlib-objs := $(sharedlib-objs:$(out)/RO/%=$(out)/$(SHOBJLIB)/%)
+sharedlib-deps := $(sharedlib-objs:%.o=%.o.d)
+deps += $(sharedlib-deps)
+def_libsharedobjs_deps := $(sharedlib-objs)
+libsharedobjs_deps ?= $(def_libsharedobjs_deps)
+
+libsharedobjs-$(CONFIG_SHAREDLIB) := $(out)/$(SHOBJLIB)/$(SHOBJLIB).flat
+libsharedobjs_elf-$(CONFIG_SHAREDLIB) := \
+ $(libsharedobjs-$(CONFIG_SHAREDLIB):%.flat=%.elf)
+libsharedobjs: $(libsharedobjs-y)
include Makefile.rules