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:
Anup Patel
2020-03-24 18:14:28 +05:30
committed by Anup Patel
parent 4d93586bfa
commit 550ba88db1

View File

@@ -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,29 +61,37 @@ 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() {
# Setup parameters
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 derived parameters
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_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/') 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_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_RISCV_XLEN}"
# Setup archive name BUILD_ARCHIVE_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_ARCHIVE_RISCV_XLEN}-${BUILD_ARCHIVE_SUFFIX}"
BUILD_ARCHIVE_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_RISCV_XLEN}-${BUILD_ARCHIVE_SUFFIX}"
# Setup platform list
case "${BUILD_RISCV_XLEN}" in case "${BUILD_RISCV_XLEN}" in
32) 32)
# Setup 32-bit platform list # Setup 32-bit platform list
@@ -99,21 +110,18 @@ case "${BUILD_RISCV_XLEN}" in
BUILD_PLATFORM_SUBDIR+=("spike") BUILD_PLATFORM_SUBDIR+=("spike")
;; ;;
*) *)
echo "Invalid RISC-V XLEN" echo "Invalid Build RISC-V XLEN"
usage usage
;; ;;
esac esac
# Ensure output directory is present # Ensure output directory is present
mkdir -p "${BUILD_OUTPUT_PATH}" mkdir -p "${BUILD_OUTPUT_PATH}/${BUILD_NAME}"
# Do a clean build first
make distclean
# 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}" 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 install_libsbiutils -j "${BUILD_NUM_THREADS}"
echo "" echo ""
# Build and install relevant platforms # Build and install relevant platforms
@@ -121,7 +129,7 @@ for INDEX in $(seq 0 1 "$(expr ${#BUILD_PLATFORM_SUBDIR[*]} - 1)")
do do
echo "Build and install PLATFORM=${BUILD_PLATFORM_SUBDIR[${INDEX}]} XLEN=${BUILD_RISCV_XLEN}" echo "Build and install PLATFORM=${BUILD_PLATFORM_SUBDIR[${INDEX}]} XLEN=${BUILD_RISCV_XLEN}"
echo "" 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}" 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 "" echo ""
done done
@@ -129,7 +137,7 @@ done
if [ "${BUILD_DOCS}" == "yes" ]; then if [ "${BUILD_DOCS}" == "yes" ]; then
echo "Build and install docs" echo "Build and install docs"
echo "" echo ""
make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" install_docs make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" install_docs
echo "" echo ""
fi fi
@@ -140,3 +148,21 @@ if [ "${BUILD_ONLY}" == "no" ]; then
tar -C "${BUILD_OUTPUT_PATH}" -cJvf "${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}.tar.xz" "${BUILD_ARCHIVE_NAME}" tar -C "${BUILD_OUTPUT_PATH}" -cJvf "${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}.tar.xz" "${BUILD_ARCHIVE_NAME}"
echo "" echo ""
fi 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"
usage
;;
esac