forked from Mirrors/opensbi
scripts: Extend create-binary-archive.sh for unified binary tar ball
This patch extends/revamps create-binary-archive.sh to allow creating unified binary tar ball containing both RV32 and RV64 images. Users can also create "RV32 only" or "RV64 only" tar balls as well. Few example commands are as follows: ./scripts/create-binary-archive.sh (Build both RV32 & RV64 images) ./scripts/create-binary-archive.sh -x 32 (Build RV32 only images) ./scripts/create-binary-archive.sh -x 64 (Build RV64 only images) Signed-off-by: Anup Patel <anup.patel@wdc.com>
This commit is contained in:
@@ -7,23 +7,26 @@ function usage()
|
|||||||
echo "Options:"
|
echo "Options:"
|
||||||
echo " -h Display help or usage"
|
echo " -h Display help or usage"
|
||||||
echo " -p <opensbi_source_path> OpenSBI source path"
|
echo " -p <opensbi_source_path> OpenSBI source path"
|
||||||
echo " -o <build_output_path> Build output path"
|
echo " -o <output_path> Build output path"
|
||||||
echo " -d Build and install documentation"
|
echo " -d Build and install documentation"
|
||||||
echo " -t Build only with no archive created"
|
echo " -t Build only with no archive created"
|
||||||
echo " -j <num_threads> Number of threads for Make (Default: 1)"
|
echo " -j <num_threads> Number of threads for Make (Default: 1)"
|
||||||
echo " -s <archive_suffix> Archive name suffix (Default: unknown)"
|
echo " -s <archive_suffix> Archive name suffix (Default: unknown)"
|
||||||
echo " -x <riscv_xlen> RISC-V XLEN (Default: 64)"
|
echo " -x <riscv_xlen> RISC-V XLENs for Build (Default: 0)"
|
||||||
|
echo " 0: RV32 and RV64"
|
||||||
|
echo " 32: RV32 only"
|
||||||
|
echo " 64: RV64 only"
|
||||||
exit 1;
|
exit 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Command line options
|
# Command line options
|
||||||
BUILD_NUM_THREADS=1
|
NUM_THREADS=1
|
||||||
BUILD_OUTPUT_PATH="$(pwd)/build"
|
OUTPUT_PATH="$(pwd)/build"
|
||||||
BUILD_OPENSBI_SOURCE_PATH="$(pwd)"
|
OPENSBI_SOURCE_PATH="$(pwd)"
|
||||||
BUILD_DOCS="no"
|
NEED_DOCS="no"
|
||||||
BUILD_ONLY="no"
|
COMPILE_ONLY="no"
|
||||||
BUILD_ARCHIVE_SUFFIX="unknown"
|
ARCHIVE_SUFFIX="unknown"
|
||||||
BUILD_RISCV_XLEN=64
|
RISCV_XLEN=0
|
||||||
|
|
||||||
while getopts "hdtj:o:p:s:x:" o; do
|
while getopts "hdtj:o:p:s:x:" o; do
|
||||||
case "${o}" in
|
case "${o}" in
|
||||||
@@ -31,25 +34,25 @@ while getopts "hdtj:o:p:s:x:" o; do
|
|||||||
usage
|
usage
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
BUILD_DOCS="yes"
|
NEED_DOCS="yes"
|
||||||
;;
|
;;
|
||||||
t)
|
t)
|
||||||
BUILD_ONLY="yes"
|
COMPILE_ONLY="yes"
|
||||||
;;
|
;;
|
||||||
j)
|
j)
|
||||||
BUILD_NUM_THREADS=${OPTARG}
|
NUM_THREADS=${OPTARG}
|
||||||
;;
|
;;
|
||||||
o)
|
o)
|
||||||
BUILD_OUTPUT_PATH=${OPTARG}
|
OUTPUT_PATH=${OPTARG}
|
||||||
;;
|
;;
|
||||||
p)
|
p)
|
||||||
BUILD_OPENSBI_SOURCE_PATH=${OPTARG}
|
OPENSBI_SOURCE_PATH=${OPTARG}
|
||||||
;;
|
;;
|
||||||
s)
|
s)
|
||||||
BUILD_ARCHIVE_SUFFIX=${OPTARG}
|
ARCHIVE_SUFFIX=${OPTARG}
|
||||||
;;
|
;;
|
||||||
x)
|
x)
|
||||||
BUILD_RISCV_XLEN=${OPTARG}
|
RISCV_XLEN=${OPTARG}
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
usage
|
usage
|
||||||
@@ -58,36 +61,44 @@ while getopts "hdtj:o:p:s:x:" o; do
|
|||||||
done
|
done
|
||||||
shift $((OPTIND-1))
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
if [ -z "${BUILD_OPENSBI_SOURCE_PATH}" ]; then
|
if [ -z "${OPENSBI_SOURCE_PATH}" ]; then
|
||||||
echo "Must specify OpenSBI source path"
|
echo "Must specify OpenSBI source path"
|
||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d "${BUILD_OPENSBI_SOURCE_PATH}" ]; then
|
if [ ! -d "${OPENSBI_SOURCE_PATH}" ]; then
|
||||||
echo "OpenSBI source path does not exist"
|
echo "OpenSBI source path does not exist"
|
||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "${BUILD_ARCHIVE_SUFFIX}" ]; then
|
if [ -z "${ARCHIVE_SUFFIX}" ]; then
|
||||||
echo "Archive suffice cannot be empty"
|
echo "Archive suffice cannot be empty"
|
||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get version of OpenSBI
|
build_opensbi() {
|
||||||
BUILD_VERSION_MAJOR=$(grep "define OPENSBI_VERSION_MAJOR" "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/')
|
# Setup parameters
|
||||||
BUILD_VERSION_MINOR=$(grep "define OPENSBI_VERSION_MINOR" "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/')
|
BUILD_NUM_THREADS=$1
|
||||||
|
BUILD_OUTPUT_PATH=$2
|
||||||
|
BUILD_OPENSBI_SOURCE_PATH=$3
|
||||||
|
BUILD_DOCS=$4
|
||||||
|
BUILD_ONLY=$5
|
||||||
|
BUILD_RISCV_XLEN=$6
|
||||||
|
BUILD_ARCHIVE_RISCV_XLEN=$7
|
||||||
|
BUILD_ARCHIVE_SUFFIX=$8
|
||||||
|
|
||||||
# Setup archive name
|
# Setup derived parameters
|
||||||
BUILD_ARCHIVE_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_RISCV_XLEN}-${BUILD_ARCHIVE_SUFFIX}"
|
BUILD_VERSION_MAJOR=$(grep "define OPENSBI_VERSION_MAJOR" "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/')
|
||||||
|
BUILD_VERSION_MINOR=$(grep "define OPENSBI_VERSION_MINOR" "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/')
|
||||||
# Setup platform list
|
BUILD_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_RISCV_XLEN}"
|
||||||
case "${BUILD_RISCV_XLEN}" in
|
BUILD_ARCHIVE_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_ARCHIVE_RISCV_XLEN}-${BUILD_ARCHIVE_SUFFIX}"
|
||||||
32)
|
case "${BUILD_RISCV_XLEN}" in
|
||||||
|
32)
|
||||||
# Setup 32-bit platform list
|
# Setup 32-bit platform list
|
||||||
BUILD_PLATFORM_SUBDIR=("qemu/virt")
|
BUILD_PLATFORM_SUBDIR=("qemu/virt")
|
||||||
BUILD_PLATFORM_SUBDIR+=("sifive/fu540")
|
BUILD_PLATFORM_SUBDIR+=("sifive/fu540")
|
||||||
;;
|
;;
|
||||||
64)
|
64)
|
||||||
# Setup 64-bit platform list
|
# Setup 64-bit platform list
|
||||||
BUILD_PLATFORM_SUBDIR=("qemu/virt")
|
BUILD_PLATFORM_SUBDIR=("qemu/virt")
|
||||||
BUILD_PLATFORM_SUBDIR+=("sifive/fu540")
|
BUILD_PLATFORM_SUBDIR+=("sifive/fu540")
|
||||||
@@ -98,45 +109,60 @@ case "${BUILD_RISCV_XLEN}" in
|
|||||||
BUILD_PLATFORM_SUBDIR+=("thead/c910")
|
BUILD_PLATFORM_SUBDIR+=("thead/c910")
|
||||||
BUILD_PLATFORM_SUBDIR+=("spike")
|
BUILD_PLATFORM_SUBDIR+=("spike")
|
||||||
;;
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid Build RISC-V XLEN"
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Ensure output directory is present
|
||||||
|
mkdir -p "${BUILD_OUTPUT_PATH}/${BUILD_NAME}"
|
||||||
|
|
||||||
|
# Build and install generic library
|
||||||
|
echo "Build and install generic library XLEN=${BUILD_RISCV_XLEN}"
|
||||||
|
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}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Build and install relevant platforms
|
||||||
|
for INDEX in $(seq 0 1 "$(expr ${#BUILD_PLATFORM_SUBDIR[*]} - 1)")
|
||||||
|
do
|
||||||
|
echo "Build and install PLATFORM=${BUILD_PLATFORM_SUBDIR[${INDEX}]} XLEN=${BUILD_RISCV_XLEN}"
|
||||||
|
echo ""
|
||||||
|
make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" PLATFORM="${BUILD_PLATFORM_SUBDIR[${INDEX}]}" PLATFORM_RISCV_XLEN="${BUILD_RISCV_XLEN}" install_libplatsbi install_firmwares -j "${BUILD_NUM_THREADS}"
|
||||||
|
echo ""
|
||||||
|
done
|
||||||
|
|
||||||
|
# Build and install docs
|
||||||
|
if [ "${BUILD_DOCS}" == "yes" ]; then
|
||||||
|
echo "Build and install docs"
|
||||||
|
echo ""
|
||||||
|
make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" install_docs
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create archive file
|
||||||
|
if [ "${BUILD_ONLY}" == "no" ]; then
|
||||||
|
echo "Create archive ${BUILD_ARCHIVE_NAME}.tar.xz"
|
||||||
|
echo ""
|
||||||
|
tar -C "${BUILD_OUTPUT_PATH}" -cJvf "${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}.tar.xz" "${BUILD_ARCHIVE_NAME}"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${RISCV_XLEN}" in
|
||||||
|
0)
|
||||||
|
build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} "no" "yes" "32" "" ${ARCHIVE_SUFFIX}
|
||||||
|
build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} ${NEED_DOCS} ${COMPILE_ONLY} "64" "" ${ARCHIVE_SUFFIX}
|
||||||
|
;;
|
||||||
|
32)
|
||||||
|
build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} ${NEED_DOCS} ${COMPILE_ONLY} "32" "32" ${ARCHIVE_SUFFIX}
|
||||||
|
;;
|
||||||
|
64)
|
||||||
|
build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} ${NEED_DOCS} ${COMPILE_ONLY} "64" "64" ${ARCHIVE_SUFFIX}
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid RISC-V XLEN"
|
echo "Invalid RISC-V XLEN"
|
||||||
usage
|
usage
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Ensure output directory is present
|
|
||||||
mkdir -p "${BUILD_OUTPUT_PATH}"
|
|
||||||
|
|
||||||
# Do a clean build first
|
|
||||||
make distclean
|
|
||||||
|
|
||||||
# Build and install generic library
|
|
||||||
echo "Build and install generic library XLEN=${BUILD_RISCV_XLEN}"
|
|
||||||
echo ""
|
|
||||||
make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" PLATFORM_RISCV_XLEN="${BUILD_RISCV_XLEN}" install_libsbi install_libsbiutils -j "${BUILD_NUM_THREADS}"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Build and install relevant platforms
|
|
||||||
for INDEX in $(seq 0 1 "$(expr ${#BUILD_PLATFORM_SUBDIR[*]} - 1)")
|
|
||||||
do
|
|
||||||
echo "Build and install PLATFORM=${BUILD_PLATFORM_SUBDIR[${INDEX}]} XLEN=${BUILD_RISCV_XLEN}"
|
|
||||||
echo ""
|
|
||||||
make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" PLATFORM="${BUILD_PLATFORM_SUBDIR[${INDEX}]}" PLATFORM_RISCV_XLEN="${BUILD_RISCV_XLEN}" install_libplatsbi install_firmwares -j "${BUILD_NUM_THREADS}"
|
|
||||||
echo ""
|
|
||||||
done
|
|
||||||
|
|
||||||
# Build and install docs
|
|
||||||
if [ "${BUILD_DOCS}" == "yes" ]; then
|
|
||||||
echo "Build and install docs"
|
|
||||||
echo ""
|
|
||||||
make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" install_docs
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create archive file
|
|
||||||
if [ "${BUILD_ONLY}" == "no" ]; then
|
|
||||||
echo "Create archive ${BUILD_ARCHIVE_NAME}.tar.xz"
|
|
||||||
echo ""
|
|
||||||
tar -C "${BUILD_OUTPUT_PATH}" -cJvf "${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}.tar.xz" "${BUILD_ARCHIVE_NAME}"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
Reference in New Issue
Block a user