forked from Mirrors/opensbi
		
	Makefile: Compile lib/utils sources separately for each platform
Currently, if same build directory is used to compile two different platforms then lib/utils objects are shared for these platforms. We will be having platform specific configs to enable/disable drivers in lib/utils and select compile time options for lib/utils sources. This means lib/utils sources will now be compiled in a platform specific way. To tackle above, we update top-level Makefile as follows: 1) Don't create libsbiutils.a anymore because this can't be shared between platforms. 2) Compile lib/utils sources separately for each platform. 3) Add comments showing which make rules are for lib/sbi, lib/utils, firmware, and platform sources. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Tested-by: Andrew Jones <ajones@ventanamicro.com> Acked-by: Atish Patra <atishp@rivosinc.com> Tested-by: Atish Patra <atishp@rivosinc.com>
This commit is contained in:
		
							
								
								
									
										48
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								Makefile
									
									
									
									
									
								
							@@ -243,8 +243,8 @@ include $(firmware-object-mks)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Setup list of objects
 | 
					# Setup list of objects
 | 
				
			||||||
libsbi-objs-path-y=$(foreach obj,$(libsbi-objs-y),$(build_dir)/lib/sbi/$(obj))
 | 
					libsbi-objs-path-y=$(foreach obj,$(libsbi-objs-y),$(build_dir)/lib/sbi/$(obj))
 | 
				
			||||||
libsbiutils-objs-path-y=$(foreach obj,$(libsbiutils-objs-y),$(build_dir)/lib/utils/$(obj))
 | 
					 | 
				
			||||||
ifdef PLATFORM
 | 
					ifdef PLATFORM
 | 
				
			||||||
 | 
					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))
 | 
					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))
 | 
					firmware-bins-path-y=$(foreach bin,$(firmware-bins-y),$(platform_build_dir)/firmware/$(bin))
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
@@ -461,7 +461,6 @@ compile_gen_dep = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
 | 
				
			|||||||
	     echo "$(1:.dep=$(2)): $(3)" >> $(1)
 | 
						     echo "$(1:.dep=$(2)): $(3)" >> $(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
targets-y  = $(build_dir)/lib/libsbi.a
 | 
					targets-y  = $(build_dir)/lib/libsbi.a
 | 
				
			||||||
targets-y  += $(build_dir)/lib/libsbiutils.a
 | 
					 | 
				
			||||||
ifdef PLATFORM
 | 
					ifdef PLATFORM
 | 
				
			||||||
targets-y += $(platform_build_dir)/lib/libplatsbi.a
 | 
					targets-y += $(platform_build_dir)/lib/libplatsbi.a
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
@@ -474,12 +473,10 @@ all: $(targets-y)
 | 
				
			|||||||
# Preserve all intermediate files
 | 
					# Preserve all intermediate files
 | 
				
			||||||
.SECONDARY:
 | 
					.SECONDARY:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Rules for lib/sbi sources
 | 
				
			||||||
$(build_dir)/lib/libsbi.a: $(libsbi-objs-path-y)
 | 
					$(build_dir)/lib/libsbi.a: $(libsbi-objs-path-y)
 | 
				
			||||||
	$(call compile_ar,$@,$^)
 | 
						$(call compile_ar,$@,$^)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(build_dir)/lib/libsbiutils.a: $(libsbi-objs-path-y) $(libsbiutils-objs-path-y)
 | 
					 | 
				
			||||||
	$(call compile_ar,$@,$^)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$(platform_build_dir)/lib/libplatsbi.a: $(libsbi-objs-path-y) $(libsbiutils-objs-path-y) $(platform-objs-path-y)
 | 
					$(platform_build_dir)/lib/libplatsbi.a: $(libsbi-objs-path-y) $(libsbiutils-objs-path-y) $(platform-objs-path-y)
 | 
				
			||||||
	$(call compile_ar,$@,$^)
 | 
						$(call compile_ar,$@,$^)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -503,22 +500,14 @@ $(build_dir)/%.dep: $(src_dir)/%.S $(KCONFIG_CONFIG)
 | 
				
			|||||||
$(build_dir)/%.o: $(src_dir)/%.S
 | 
					$(build_dir)/%.o: $(src_dir)/%.S
 | 
				
			||||||
	$(call compile_as,$@,$<)
 | 
						$(call compile_as,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(build_dir)/%.dep: $(src_dir)/%.carray $(KCONFIG_CONFIG)
 | 
					# Rules for platform sources
 | 
				
			||||||
 | 
					$(platform_build_dir)/%.dep: $(platform_src_dir)/%.carray $(KCONFIG_CONFIG)
 | 
				
			||||||
	$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
 | 
						$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
 | 
				
			||||||
	$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
 | 
						$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(build_dir)/%.c: $(src_dir)/%.carray
 | 
					$(platform_build_dir)/%.c: $(platform_src_dir)/%.carray
 | 
				
			||||||
	$(call compile_carray,$@,$<)
 | 
						$(call compile_carray,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(platform_build_dir)/%.bin: $(platform_build_dir)/%.elf
 | 
					 | 
				
			||||||
	$(call compile_objcopy,$@,$<)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$(platform_build_dir)/%.elf: $(platform_build_dir)/%.o $(platform_build_dir)/%.elf.ld $(platform_build_dir)/lib/libplatsbi.a
 | 
					 | 
				
			||||||
	$(call compile_elf,$@,$@.ld,$< $(platform_build_dir)/lib/libplatsbi.a)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$(platform_build_dir)/%.ld: $(src_dir)/%.ldS
 | 
					 | 
				
			||||||
	$(call compile_cpp,$@,$<)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$(platform_build_dir)/%.dep: $(platform_src_dir)/%.c $(KCONFIG_CONFIG)
 | 
					$(platform_build_dir)/%.dep: $(platform_src_dir)/%.c $(KCONFIG_CONFIG)
 | 
				
			||||||
	$(call compile_cc_dep,$@,$<)
 | 
						$(call compile_cc_dep,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -542,6 +531,23 @@ $(platform_build_dir)/%.c: $(platform_build_dir)/%.dtb
 | 
				
			|||||||
$(platform_build_dir)/%.dtb: $(platform_src_dir)/%.dts
 | 
					$(platform_build_dir)/%.dtb: $(platform_src_dir)/%.dts
 | 
				
			||||||
	$(call compile_dts,$@,$<)
 | 
						$(call compile_dts,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Rules for lib/utils and firmware sources
 | 
				
			||||||
 | 
					$(platform_build_dir)/%.bin: $(platform_build_dir)/%.elf
 | 
				
			||||||
 | 
						$(call compile_objcopy,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(platform_build_dir)/%.elf: $(platform_build_dir)/%.o $(platform_build_dir)/%.elf.ld $(platform_build_dir)/lib/libplatsbi.a
 | 
				
			||||||
 | 
						$(call compile_elf,$@,$@.ld,$< $(platform_build_dir)/lib/libplatsbi.a)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(platform_build_dir)/%.ld: $(src_dir)/%.ldS
 | 
				
			||||||
 | 
						$(call compile_cpp,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(platform_build_dir)/%.dep: $(src_dir)/%.carray $(KCONFIG_CONFIG)
 | 
				
			||||||
 | 
						$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
 | 
				
			||||||
 | 
						$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$(platform_build_dir)/%.c: $(src_dir)/%.carray
 | 
				
			||||||
 | 
						$(call compile_carray,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$(platform_build_dir)/%.dep: $(src_dir)/%.c $(KCONFIG_CONFIG)
 | 
					$(platform_build_dir)/%.dep: $(src_dir)/%.c $(KCONFIG_CONFIG)
 | 
				
			||||||
	$(call compile_cc_dep,$@,$<)
 | 
						$(call compile_cc_dep,$@,$<)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -592,7 +598,6 @@ endif
 | 
				
			|||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install_targets-y  = install_libsbi
 | 
					install_targets-y  = install_libsbi
 | 
				
			||||||
install_targets-y  += install_libsbiutils
 | 
					 | 
				
			||||||
ifdef PLATFORM
 | 
					ifdef PLATFORM
 | 
				
			||||||
install_targets-y += install_libplatsbi
 | 
					install_targets-y += install_libplatsbi
 | 
				
			||||||
install_targets-y += install_firmwares
 | 
					install_targets-y += install_firmwares
 | 
				
			||||||
@@ -607,17 +612,12 @@ install_libsbi: $(build_dir)/lib/libsbi.a
 | 
				
			|||||||
	$(call inst_header_dir,$(install_root_dir)/$(install_include_path),$(include_dir)/sbi)
 | 
						$(call inst_header_dir,$(install_root_dir)/$(install_include_path),$(include_dir)/sbi)
 | 
				
			||||||
	$(call inst_file,$(install_root_dir)/$(install_lib_path)/libsbi.a,$(build_dir)/lib/libsbi.a)
 | 
						$(call inst_file,$(install_root_dir)/$(install_lib_path)/libsbi.a,$(build_dir)/lib/libsbi.a)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.PHONY: install_libsbiutils
 | 
					 | 
				
			||||||
install_libsbiutils: $(build_dir)/lib/libsbiutils.a
 | 
					 | 
				
			||||||
	$(call inst_header_dir,$(install_root_dir)/$(install_include_path),$(include_dir)/sbi_utils)
 | 
					 | 
				
			||||||
	$(call inst_file,$(install_root_dir)/$(install_lib_path)/libsbiutils.a,$(build_dir)/lib/libsbiutils.a)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.PHONY: install_libplatsbi
 | 
					.PHONY: install_libplatsbi
 | 
				
			||||||
install_libplatsbi: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(build_dir)/lib/libsbiutils.a
 | 
					install_libplatsbi: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a
 | 
				
			||||||
	$(call inst_file,$(install_root_dir)/$(install_lib_path)/opensbi/$(platform_subdir)/lib/libplatsbi.a,$(platform_build_dir)/lib/libplatsbi.a)
 | 
						$(call inst_file,$(install_root_dir)/$(install_lib_path)/opensbi/$(platform_subdir)/lib/libplatsbi.a,$(platform_build_dir)/lib/libplatsbi.a)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.PHONY: install_firmwares
 | 
					.PHONY: install_firmwares
 | 
				
			||||||
install_firmwares: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(build_dir)/lib/libsbiutils.a $(firmware-bins-path-y)
 | 
					install_firmwares: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(firmware-bins-path-y)
 | 
				
			||||||
	$(call inst_file_list,$(install_root_dir),$(build_dir),$(install_firmware_path)/$(platform_subdir)/firmware,$(firmware-elfs-path-y))
 | 
						$(call inst_file_list,$(install_root_dir),$(build_dir),$(install_firmware_path)/$(platform_subdir)/firmware,$(firmware-elfs-path-y))
 | 
				
			||||||
	$(call inst_file_list,$(install_root_dir),$(build_dir),$(install_firmware_path)/$(platform_subdir)/firmware,$(firmware-bins-path-y))
 | 
						$(call inst_file_list,$(install_root_dir),$(build_dir),$(install_firmware_path)/$(platform_subdir)/firmware,$(firmware-bins-path-y))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,11 +8,7 @@ OpenSBI provides two types of static libraries:
 | 
				
			|||||||
   hooks for the execution of this interface must be provided by the firmware or
 | 
					   hooks for the execution of this interface must be provided by the firmware or
 | 
				
			||||||
   bootloader linking with this library. This library is installed as
 | 
					   bootloader linking with this library. This library is installed as
 | 
				
			||||||
   *<install_directory>/lib/libsbi.a*
 | 
					   *<install_directory>/lib/libsbi.a*
 | 
				
			||||||
2. *libsbiutils.a* - A static library that will contain all common code required
 | 
					2. *libplatsbi.a* - An example platform-specific static library integrating
 | 
				
			||||||
   by any platform supported in OpenSBI. It will be built by default and included
 | 
					 | 
				
			||||||
   in libplatsbi.a. This library is installed as
 | 
					 | 
				
			||||||
   *<install_directory>/lib/libsbiutils.a*.
 | 
					 | 
				
			||||||
3. *libplatsbi.a* - An example platform-specific static library integrating
 | 
					 | 
				
			||||||
   *libsbi.a* with platform-specific hooks. This library is available only for
 | 
					   *libsbi.a* with platform-specific hooks. This library is available only for
 | 
				
			||||||
   the platforms supported by OpenSBI. This library is installed as
 | 
					   the platforms supported by OpenSBI. This library is installed as
 | 
				
			||||||
   *<install_directory>/platform/<platform_subdir>/lib/libplatsbi.a*
 | 
					   *<install_directory>/platform/<platform_subdir>/lib/libplatsbi.a*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,7 +118,7 @@ build_opensbi() {
 | 
				
			|||||||
	# Build and install generic library
 | 
						# Build and install generic library
 | 
				
			||||||
	echo "Build and install generic library XLEN=${BUILD_RISCV_XLEN}"
 | 
						echo "Build and install generic library XLEN=${BUILD_RISCV_XLEN}"
 | 
				
			||||||
	echo ""
 | 
						echo ""
 | 
				
			||||||
	make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" PLATFORM_RISCV_XLEN="${BUILD_RISCV_XLEN}" install_libsbi install_libsbiutils -j "${BUILD_NUM_THREADS}"
 | 
						make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" PLATFORM_RISCV_XLEN="${BUILD_RISCV_XLEN}" install_libsbi -j "${BUILD_NUM_THREADS}"
 | 
				
			||||||
	echo ""
 | 
						echo ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# Build and install relevant platforms
 | 
						# Build and install relevant platforms
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user