aboutsummaryrefslogtreecommitdiffstats
path: root/roms/opensbi/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'roms/opensbi/Makefile')
-rw-r--r--roms/opensbi/Makefile493
1 files changed, 493 insertions, 0 deletions
diff --git a/roms/opensbi/Makefile b/roms/opensbi/Makefile
new file mode 100644
index 000000000..d6f097d30
--- /dev/null
+++ b/roms/opensbi/Makefile
@@ -0,0 +1,493 @@
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+# Copyright (c) 2019 Western Digital Corporation or its affiliates.
+#
+# Authors:
+# Anup Patel <anup.patel@wdc.com>
+#
+
+# Select Make Options:
+# o Do not use make's built-in rules
+# o Do not print "Entering directory ...";
+MAKEFLAGS += -r --no-print-directory
+
+# Readlink -f requires GNU readlink
+ifeq ($(shell uname -s),Darwin)
+READLINK ?= greadlink
+else
+READLINK ?= readlink
+endif
+
+# Find out source, build, and install directories
+src_dir=$(CURDIR)
+ifdef O
+ build_dir=$(shell $(READLINK) -f $(O))
+else
+ build_dir=$(CURDIR)/build
+endif
+ifeq ($(build_dir),$(CURDIR))
+$(error Build directory is same as source directory.)
+endif
+install_root_dir_default=$(CURDIR)/install
+ifdef I
+ install_root_dir=$(shell $(READLINK) -f $(I))
+else
+ install_root_dir=$(install_root_dir_default)/usr
+endif
+ifeq ($(install_root_dir),$(CURDIR))
+$(error Install root directory is same as source directory.)
+endif
+ifeq ($(install_root_dir),$(build_dir))
+$(error Install root directory is same as build directory.)
+endif
+ifdef PLATFORM_DIR
+ platform_dir_path=$(shell $(READLINK) -f $(PLATFORM_DIR))
+ ifdef PLATFORM
+ platform_parent_dir=$(platform_dir_path)
+ else
+ PLATFORM=$(shell basename $(platform_dir_path))
+ platform_parent_dir=$(subst $(PLATFORM),,$(platform_dir_path))
+ endif
+else
+ platform_parent_dir=$(src_dir)/platform
+endif
+
+# Check if verbosity is ON for build process
+CMD_PREFIX_DEFAULT := @
+ifeq ($(V), 1)
+ CMD_PREFIX :=
+else
+ CMD_PREFIX := $(CMD_PREFIX_DEFAULT)
+endif
+
+# Setup path of directories
+export platform_subdir=$(PLATFORM)
+export platform_src_dir=$(platform_parent_dir)/$(platform_subdir)
+export platform_build_dir=$(build_dir)/platform/$(platform_subdir)
+export include_dir=$(CURDIR)/include
+export libsbi_dir=$(CURDIR)/lib/sbi
+export libsbiutils_dir=$(CURDIR)/lib/utils
+export firmware_dir=$(CURDIR)/firmware
+
+# Find library version
+OPENSBI_VERSION_MAJOR=`grep "define OPENSBI_VERSION_MAJOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/'`
+OPENSBI_VERSION_MINOR=`grep "define OPENSBI_VERSION_MINOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/'`
+OPENSBI_VERSION_GIT=$(shell if [ -d $(src_dir)/.git ]; then git describe 2> /dev/null; fi)
+
+# Setup compilation commands
+ifdef CROSS_COMPILE
+CC = $(CROSS_COMPILE)gcc
+CPP = $(CROSS_COMPILE)cpp
+AR = $(CROSS_COMPILE)ar
+LD = $(CROSS_COMPILE)ld
+OBJCOPY = $(CROSS_COMPILE)objcopy
+else
+CC ?= gcc
+CPP ?= cpp
+AR ?= ar
+LD ?= ld
+OBJCOPY ?= objcopy
+endif
+AS = $(CC)
+DTC = dtc
+
+# Guess the compillers xlen
+OPENSBI_CC_XLEN := $(shell TMP=`$(CC) -dumpmachine | sed 's/riscv\([0-9][0-9]\).*/\1/'`; echo $${TMP})
+OPENSBI_CC_ABI := $(shell TMP=`$(CC) -v 2>&1 | sed -n 's/.*\(with\-abi=\([a-zA-Z0-9]*\)\).*/\2/p'`; echo $${TMP})
+OPENSBI_CC_ISA := $(shell TMP=`$(CC) -v 2>&1 | sed -n 's/.*\(with\-arch=\([a-zA-Z0-9]*\)\).*/\2/p'`; echo $${TMP})
+
+# Setup platform XLEN
+ifndef PLATFORM_RISCV_XLEN
+ ifeq ($(OPENSBI_CC_XLEN), 32)
+ PLATFORM_RISCV_XLEN = 32
+ else
+ PLATFORM_RISCV_XLEN = 64
+ endif
+endif
+
+# Setup list of objects.mk files
+ifdef PLATFORM
+platform-object-mks=$(shell if [ -d $(platform_src_dir)/ ]; then find $(platform_src_dir) -iname "objects.mk" | sort -r; fi)
+endif
+libsbi-object-mks=$(shell if [ -d $(libsbi_dir) ]; then find $(libsbi_dir) -iname "objects.mk" | sort -r; fi)
+libsbiutils-object-mks=$(shell if [ -d $(libsbiutils_dir) ]; then find $(libsbiutils_dir) -iname "objects.mk" | sort -r; fi)
+firmware-object-mks=$(shell if [ -d $(firmware_dir) ]; then find $(firmware_dir) -iname "objects.mk" | sort -r; fi)
+
+# Include platform specifig config.mk
+ifdef PLATFORM
+include $(platform_src_dir)/config.mk
+endif
+
+# Include all object.mk files
+ifdef PLATFORM
+include $(platform-object-mks)
+endif
+include $(libsbi-object-mks)
+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))
+libsbiutils-objs-path-y=$(foreach obj,$(libsbiutils-objs-y),$(build_dir)/lib/utils/$(obj))
+ifdef PLATFORM
+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))
+endif
+firmware-elfs-path-y=$(firmware-bins-path-y:.bin=.elf)
+firmware-objs-path-y=$(firmware-bins-path-y:.bin=.o)
+
+# Setup list of deps files for objects
+deps-y=$(platform-objs-path-y:.o=.dep)
+deps-y+=$(libsbi-objs-path-y:.o=.dep)
+deps-y+=$(libsbiutils-objs-path-y:.o=.dep)
+deps-y+=$(firmware-objs-path-y:.o=.dep)
+
+# Setup platform ABI, ISA and Code Model
+ifndef PLATFORM_RISCV_ABI
+ ifneq ($(PLATFORM_RISCV_TOOLCHAIN_DEFAULT), 1)
+ ifeq ($(PLATFORM_RISCV_XLEN), 32)
+ PLATFORM_RISCV_ABI = ilp$(PLATFORM_RISCV_XLEN)
+ else
+ PLATFORM_RISCV_ABI = lp$(PLATFORM_RISCV_XLEN)
+ endif
+ else
+ PLATFORM_RISCV_ABI = $(OPENSBI_CC_ABI)
+ endif
+endif
+ifndef PLATFORM_RISCV_ISA
+ ifneq ($(PLATFORM_RISCV_TOOLCHAIN_DEFAULT), 1)
+ PLATFORM_RISCV_ISA = rv$(PLATFORM_RISCV_XLEN)imafdc
+ else
+ PLATFORM_RISCV_ISA = $(OPENSBI_CC_ISA)
+ endif
+endif
+ifndef PLATFORM_RISCV_CODE_MODEL
+ PLATFORM_RISCV_CODE_MODEL = medany
+endif
+
+# Setup install directories
+ifdef INSTALL_INCLUDE_PATH
+ install_include_path=$(INSTALL_INCLUDE_PATH)
+else
+ install_include_path=include
+endif
+ifdef INSTALL_LIB_PATH
+ install_lib_path=$(INSTALL_LIB_PATH)
+else
+ ifneq ($(origin INSTALL_LIB_SUBDIR), undefined)
+ install_lib_subdir=$(INSTALL_LIB_SUBDIR)
+ else
+ install_lib_subdir=$(PLATFORM_RISCV_ABI)
+ endif
+ install_lib_path=lib$(subst 32,,$(PLATFORM_RISCV_XLEN))/$(install_lib_subdir)
+endif
+ifdef INSTALL_FIRMWARE_PATH
+ install_firmware_path=$(INSTALL_FIRMWARE_PATH)
+else
+ install_firmware_path=share/opensbi/$(PLATFORM_RISCV_ABI)
+endif
+ifdef INSTALL_DOCS_PATH
+ install_docs_path=$(INSTALL_DOCS_PATH)
+else
+ install_docs_path=share/opensbi/docs
+endif
+
+# Setup compilation commands flags
+GENFLAGS = -I$(platform_src_dir)/include
+GENFLAGS += -I$(include_dir)
+ifneq ($(OPENSBI_VERSION_GIT),)
+GENFLAGS += -DOPENSBI_VERSION_GIT="\"$(OPENSBI_VERSION_GIT)\""
+endif
+GENFLAGS += $(libsbiutils-genflags-y)
+GENFLAGS += $(platform-genflags-y)
+GENFLAGS += $(firmware-genflags-y)
+
+CFLAGS = -g -Wall -Werror -ffreestanding -nostdlib -fno-strict-aliasing -O2
+CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
+CFLAGS += -mno-save-restore -mstrict-align
+CFLAGS += -mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA)
+CFLAGS += -mcmodel=$(PLATFORM_RISCV_CODE_MODEL)
+CFLAGS += $(GENFLAGS)
+CFLAGS += $(platform-cflags-y)
+CFLAGS += $(firmware-cflags-y)
+CFLAGS += -fno-pie -no-pie
+
+CPPFLAGS += $(GENFLAGS)
+CPPFLAGS += $(platform-cppflags-y)
+CPPFLAGS += $(firmware-cppflags-y)
+
+ASFLAGS = -g -Wall -nostdlib -D__ASSEMBLY__
+ASFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
+ASFLAGS += -mno-save-restore -mstrict-align
+ASFLAGS += -mabi=$(PLATFORM_RISCV_ABI) -march=$(PLATFORM_RISCV_ISA)
+ASFLAGS += -mcmodel=$(PLATFORM_RISCV_CODE_MODEL)
+ASFLAGS += $(GENFLAGS)
+ASFLAGS += $(platform-asflags-y)
+ASFLAGS += $(firmware-asflags-y)
+
+ARFLAGS = rcs
+
+ELFFLAGS += -Wl,--build-id=none -N -static-libgcc -lgcc
+ELFFLAGS += $(platform-ldflags-y)
+ELFFLAGS += $(firmware-ldflags-y)
+
+MERGEFLAGS += -r
+MERGEFLAGS += -b elf$(PLATFORM_RISCV_XLEN)-littleriscv
+MERGEFLAGS += -m elf$(PLATFORM_RISCV_XLEN)lriscv
+
+DTSCPPFLAGS = $(CPPFLAGS) -nostdinc -nostdlib -fno-builtin -D__DTS__ -x assembler-with-cpp
+
+# Setup functions for compilation
+define dynamic_flags
+-I$(shell dirname $(2)) -D__OBJNAME__=$(subst -,_,$(shell basename $(1) .o))
+endef
+merge_objs = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " MERGE $(subst $(build_dir)/,,$(1))"; \
+ $(LD) $(MERGEFLAGS) $(2) -o $(1)
+merge_deps = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " MERGE-DEP $(subst $(build_dir)/,,$(1))"; \
+ cat $(2) > $(1)
+copy_file = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " COPY $(subst $(build_dir)/,,$(1))"; \
+ cp -f $(2) $(1)
+inst_file = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " INSTALL $(subst $(install_root_dir)/,,$(1))"; \
+ cp -f $(2) $(1)
+inst_file_list = $(CMD_PREFIX)if [ ! -z "$(4)" ]; then \
+ mkdir -p $(1)/$(3); \
+ for file in $(4) ; do \
+ rel_file=`echo $$file | sed -e 's@$(2)/$(subst $(install_firmware_path),platform,$(3))@@'`; \
+ dest_file=$(1)"/"$(3)"/"`echo $$rel_file`; \
+ dest_dir=`dirname $$dest_file`; \
+ echo " INSTALL "$(3)"/"`echo $$rel_file`; \
+ mkdir -p $$dest_dir; \
+ cp -f $$file $$dest_file; \
+ done \
+ fi
+inst_header_dir = $(CMD_PREFIX)mkdir -p $(1); \
+ echo " INSTALL $(subst $(install_root_dir)/,,$(1))"; \
+ cp -rf $(2) $(1)
+compile_cpp = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " CPP $(subst $(build_dir)/,,$(1))"; \
+ $(CPP) $(CPPFLAGS) -x c $(2) | grep -v "\#" > $(1)
+compile_cc_dep = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " CC-DEP $(subst $(build_dir)/,,$(1))"; \
+ printf %s `dirname $(1)`/ > $(1) && \
+ $(CC) $(CFLAGS) $(call dynamic_flags,$(1),$(2)) \
+ -MM $(2) >> $(1) || rm -f $(1)
+compile_cc = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " CC $(subst $(build_dir)/,,$(1))"; \
+ $(CC) $(CFLAGS) $(call dynamic_flags,$(1),$(2)) -c $(2) -o $(1)
+compile_as_dep = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " AS-DEP $(subst $(build_dir)/,,$(1))"; \
+ printf %s `dirname $(1)`/ > $(1) && \
+ $(AS) $(ASFLAGS) $(call dynamic_flags,$(1),$(2)) \
+ -MM $(2) >> $(1) || rm -f $(1)
+compile_as = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " AS $(subst $(build_dir)/,,$(1))"; \
+ $(AS) $(ASFLAGS) $(call dynamic_flags,$(1),$(2)) -c $(2) -o $(1)
+compile_elf = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " ELF $(subst $(build_dir)/,,$(1))"; \
+ $(CC) $(CFLAGS) $(3) $(ELFFLAGS) -Wl,-T$(2) -o $(1)
+compile_ar = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " AR $(subst $(build_dir)/,,$(1))"; \
+ $(AR) $(ARFLAGS) $(1) $(2)
+compile_objcopy = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " OBJCOPY $(subst $(build_dir)/,,$(1))"; \
+ $(OBJCOPY) -S -O binary $(2) $(1)
+compile_dts = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " DTC $(subst $(build_dir)/,,$(1))"; \
+ $(CPP) $(DTSCPPFLAGS) $(2) | $(DTC) -O dtb -i `dirname $(2)` -o $(1)
+compile_d2c = $(CMD_PREFIX)mkdir -p `dirname $(1)`; \
+ echo " D2C $(subst $(build_dir)/,,$(1))"; \
+ $(if $($(2)-varalign-$(3)),$(eval D2C_ALIGN_BYTES := $($(2)-varalign-$(3))),$(eval D2C_ALIGN_BYTES := $(4))) \
+ $(if $($(2)-varprefix-$(3)),$(eval D2C_NAME_PREFIX := $($(2)-varprefix-$(3))),$(eval D2C_NAME_PREFIX := $(5))) \
+ $(if $($(2)-padding-$(3)),$(eval D2C_PADDING_BYTES := $($(2)-padding-$(3))),$(eval D2C_PADDING_BYTES := 0)) \
+ $(src_dir)/scripts/d2c.sh -i $(6) -a $(D2C_ALIGN_BYTES) -p $(D2C_NAME_PREFIX) -t $(D2C_PADDING_BYTES) > $(1)
+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
+targets-y += $(build_dir)/lib/libsbiutils.a
+ifdef PLATFORM
+targets-y += $(platform_build_dir)/lib/libplatsbi.a
+endif
+targets-y += $(firmware-bins-path-y)
+
+# Default rule "make" should always be first rule
+.PHONY: all
+all: $(targets-y)
+
+# Preserve all intermediate files
+.SECONDARY:
+
+$(build_dir)/lib/libsbi.a: $(libsbi-objs-path-y)
+ $(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)
+ $(call compile_ar,$@,$^)
+
+$(build_dir)/%.dep: $(src_dir)/%.c
+ $(call compile_cc_dep,$@,$<)
+
+$(build_dir)/%.o: $(src_dir)/%.c
+ $(call compile_cc,$@,$<)
+
+$(build_dir)/%.dep: $(src_dir)/%.S
+ $(call compile_as_dep,$@,$<)
+
+$(build_dir)/%.o: $(src_dir)/%.S
+ $(call compile_as,$@,$<)
+
+$(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
+ $(call compile_cc_dep,$@,$<)
+
+$(platform_build_dir)/%.o: $(platform_src_dir)/%.c
+ $(call compile_cc,$@,$<)
+
+$(platform_build_dir)/%.o: $(platform_build_dir)/%.c
+ $(call compile_cc,$@,$<)
+
+$(platform_build_dir)/%.dep: $(platform_src_dir)/%.S
+ $(call compile_as_dep,$@,$<)
+
+$(platform_build_dir)/%.o: $(platform_src_dir)/%.S
+ $(call compile_as,$@,$<)
+
+$(platform_build_dir)/%.dep: $(platform_src_dir)/%.dts
+ $(call compile_gen_dep,$@,.dtb,$<)
+ $(call compile_gen_dep,$@,.c,$(@:.dep=.dtb))
+ $(call compile_gen_dep,$@,.o,$(@:.dep=.c))
+
+$(platform_build_dir)/%.c: $(platform_build_dir)/%.dtb
+ $(call compile_d2c,$@,platform,$(subst .dtb,.o,$(subst /,-,$(subst $(platform_build_dir)/,,$<))),16,dt,$<)
+
+$(platform_build_dir)/%.dtb: $(platform_src_dir)/%.dts
+ $(call compile_dts,$@,$<)
+
+$(platform_build_dir)/%.dep: $(src_dir)/%.c
+ $(call compile_cc_dep,$@,$<)
+
+$(platform_build_dir)/%.o: $(src_dir)/%.c
+ $(call compile_cc,$@,$<)
+
+$(platform_build_dir)/%.dep: $(src_dir)/%.S
+ $(call compile_as_dep,$@,$<)
+
+$(platform_build_dir)/%.o: $(src_dir)/%.S
+ $(call compile_as,$@,$<)
+
+# Rule for "make docs"
+$(build_dir)/docs/latex/refman.pdf: $(build_dir)/docs/latex/refman.tex
+ $(CMD_PREFIX)mkdir -p $(build_dir)/docs
+ $(CMD_PREFIX)$(MAKE) -C $(build_dir)/docs/latex
+$(build_dir)/docs/latex/refman.tex: $(build_dir)/docs/doxygen.cfg
+ $(CMD_PREFIX)mkdir -p $(build_dir)/docs
+ $(CMD_PREFIX)doxygen $(build_dir)/docs/doxygen.cfg
+$(build_dir)/docs/doxygen.cfg: $(src_dir)/docs/doxygen.cfg
+ $(CMD_PREFIX)mkdir -p $(build_dir)/docs
+ $(CMD_PREFIX)cat docs/doxygen.cfg | sed -e "s#@@SRC_DIR@@#$(src_dir)#" -e "s#@@BUILD_DIR@@#$(build_dir)#" -e "s#@@OPENSBI_MAJOR@@#$(OPENSBI_VERSION_MAJOR)#" -e "s#@@OPENSBI_MINOR@@#$(OPENSBI_VERSION_MINOR)#" > $(build_dir)/docs/doxygen.cfg
+.PHONY: docs
+docs: $(build_dir)/docs/latex/refman.pdf
+
+# Dependency files should only be included after default Makefile rules
+# They should not be included for any "xxxconfig" or "xxxclean" rule
+all-deps-1 = $(if $(findstring config,$(MAKECMDGOALS)),,$(deps-y))
+all-deps-2 = $(if $(findstring clean,$(MAKECMDGOALS)),,$(all-deps-1))
+-include $(all-deps-2)
+
+# Include external dependency of firmwares after default Makefile rules
+include $(src_dir)/firmware/external_deps.mk
+
+# Convenient "make run" command for emulated platforms
+.PHONY: run
+run: all
+ifneq ($(platform-runcmd),)
+ $(platform-runcmd) $(RUN_ARGS)
+else
+ifdef PLATFORM
+ @echo "Platform $(PLATFORM) doesn't specify a run command"
+ @false
+else
+ @echo Run command only available when targeting a platform
+ @false
+endif
+endif
+
+install_targets-y = install_libsbi
+install_targets-y += install_libsbiutils
+ifdef PLATFORM
+install_targets-y += install_libplatsbi
+install_targets-y += install_firmwares
+endif
+
+# Rule for "make install"
+.PHONY: install
+install: $(install_targets-y)
+
+.PHONY: install_libsbi
+install_libsbi: $(build_dir)/lib/libsbi.a
+ $(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)
+
+.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
+install_libplatsbi: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(build_dir)/lib/libsbiutils.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
+install_firmwares: $(platform_build_dir)/lib/libplatsbi.a $(build_dir)/lib/libsbi.a $(build_dir)/lib/libsbiutils.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-bins-path-y))
+
+.PHONY: install_docs
+install_docs: $(build_dir)/docs/latex/refman.pdf
+ $(call inst_file,$(install_root_dir)/$(install_docs_path)/refman.pdf,$(build_dir)/docs/latex/refman.pdf)
+
+# Rule for "make clean"
+.PHONY: clean
+clean:
+ $(CMD_PREFIX)mkdir -p $(build_dir)
+ $(if $(V), @echo " RM $(build_dir)/*.o")
+ $(CMD_PREFIX)find $(build_dir) -type f -name "*.o" -exec rm -rf {} +
+ $(if $(V), @echo " RM $(build_dir)/*.a")
+ $(CMD_PREFIX)find $(build_dir) -type f -name "*.a" -exec rm -rf {} +
+ $(if $(V), @echo " RM $(build_dir)/*.elf")
+ $(CMD_PREFIX)find $(build_dir) -type f -name "*.elf" -exec rm -rf {} +
+ $(if $(V), @echo " RM $(build_dir)/*.bin")
+ $(CMD_PREFIX)find $(build_dir) -type f -name "*.bin" -exec rm -rf {} +
+ $(if $(V), @echo " RM $(build_dir)/*.dtb")
+ $(CMD_PREFIX)find $(build_dir) -type f -name "*.dtb" -exec rm -rf {} +
+
+# Rule for "make distclean"
+.PHONY: distclean
+distclean: clean
+ $(CMD_PREFIX)mkdir -p $(build_dir)
+ $(if $(V), @echo " RM $(build_dir)/*.dep")
+ $(CMD_PREFIX)find $(build_dir) -type f -name "*.dep" -exec rm -rf {} +
+ifeq ($(build_dir),$(CURDIR)/build)
+ $(if $(V), @echo " RM $(build_dir)")
+ $(CMD_PREFIX)rm -rf $(build_dir)
+endif
+ifeq ($(install_root_dir),$(install_root_dir_default)/usr)
+ $(if $(V), @echo " RM $(install_root_dir_default)")
+ $(CMD_PREFIX)rm -rf $(install_root_dir_default)
+endif