[PATCH] Makefile: Separate libsbi objects for each platform
Samuel Holland
samuel.holland at sifive.com
Tue Sep 3 13:53:10 PDT 2024
Since commit 22f38ee6c658 ("lib: sbi_ecall: Add Kconfig option for each
extension"), the libsbi object file contents depend on the Kconfig
configuration, so these files may be different across platforms. As a
result, each platform should get a separate copy of these object files,
corresponding to that platform's configuration.
This change also allows building for multiple platforms in parallel.
Fixes: 22f38ee6c658 ("lib: sbi_ecall: Add Kconfig option for each extension")
Signed-off-by: Samuel Holland <samuel.holland at sifive.com>
---
Note that Kconfig is not used for the generic (no PLATFORM set) libsbi
build. But this is actually equivalent to all Kconfig options being
disabled. As a result, since the referenced commit, the generic libsbi
only supports the base SBI extension and none of the others. I don't
know how we want to fix this -- does anyone even use libsbi anymore?
Makefile | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index e5a0f19e..ccb2e138 100644
--- a/Makefile
+++ b/Makefile
@@ -264,11 +264,13 @@ include $(libsbiutils-object-mks)
include $(firmware-object-mks)
# Setup list of objects
-libsbi-objs-path-y=$(foreach obj,$(libsbi-objs-y),$(build_dir)/lib/sbi/$(obj))
ifdef PLATFORM
+libsbi-objs-path-y=$(foreach obj,$(libsbi-objs-y),$(platform_build_dir)/lib/sbi/$(obj))
libsbiutils-objs-path-y=$(foreach obj,$(libsbiutils-objs-y),$(platform_build_dir)/lib/utils/$(obj))
platform-objs-path-y=$(foreach obj,$(platform-objs-y),$(platform_build_dir)/$(obj))
firmware-bins-path-y=$(foreach bin,$(firmware-bins-y),$(platform_build_dir)/firmware/$(bin))
+else
+libsbi-objs-path-y=$(foreach obj,$(libsbi-objs-y),$(build_dir)/lib/sbi/$(obj))
endif
firmware-elfs-path-y=$(firmware-bins-path-y:.bin=.elf)
firmware-objs-path-y=$(firmware-bins-path-y:.bin=.o)
@@ -504,9 +506,10 @@ compile_gen_dep = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
echo " GEN-DEP $(subst $(build_dir)/,,$(1))"; \
echo "$(1:.dep=$(2)): $(3)" >> $(1)
-targets-y = $(build_dir)/lib/libsbi.a
ifdef PLATFORM
targets-y += $(platform_build_dir)/lib/libplatsbi.a
+else
+targets-y = $(build_dir)/lib/libsbi.a
endif
targets-y += $(firmware-bins-path-y)
@@ -565,6 +568,11 @@ $(platform_build_dir)/%.dep: $(platform_src_dir)/%.c $(KCONFIG_AUTOHEADER)
$(platform_build_dir)/%.o: $(platform_src_dir)/%.c $(KCONFIG_AUTOHEADER)
$(call compile_cc,$@,$<)
+ifeq ($(BUILD_INFO),y)
+$(platform_build_dir)/lib/sbi/sbi_init.o: $(libsbi_dir)/sbi_init.c FORCE
+ $(call compile_cc,$@,$<)
+endif
+
$(platform_build_dir)/%.dep: $(platform_src_dir)/%.S
$(call compile_as_dep,$@,$<)
--
2.45.1
More information about the opensbi
mailing list