opensbi/scripts/create-binary-archive.sh
Anup Patel d022c5d3ae scripts: Add script for creating binary archive
This patch adds scripts/create-binary-archive.sh which helps
us create a common tarball containing headers, static library
and firmware ELFs for all platforms.

This script can be used for release purpose OR for compile
testing all platforms.

Example usage commands are as follows:

1) Binary release archive for 32bit systems
./scripts/create-binary-archive.sh -s "bin" -x 32 -d

2) Binary release archive for 64bit systems
./scripts/create-binary-archive.sh -s "bin" -d

3) Compile test for 32bit systems
./scripts/create-binary-archive.sh -x 32 -t

4) Compile test for 64bit systems
./scripts/create-binary-archive.sh -t

Signed-off-by: Anup Patel <anup.patel@wdc.com>
2019-02-22 11:28:41 +05:30

135 lines
3.6 KiB
Bash
Executable file

#!/bin/bash
function usage()
{
echo "Usage:"
echo " $0 [options]"
echo "Options:"
echo " -h Display help or usage"
echo " -p <opensbi_source_path> OpenSBI source path"
echo " -o <build_output_path> Build output path"
echo " -d Build and install documentation"
echo " -t Build only with no archive created"
echo " -j <num_threads> Number of threads for Make (Default: 1)"
echo " -s <archive_suffix> Archive name suffix (Default: unknown)"
echo " -x <riscv_xlen> RISC-V XLEN (Default: 64)"
exit 1;
}
# Command line options
BUILD_NUM_THREADS=1
BUILD_OUTPUT_PATH="$(pwd)/build"
BUILD_OPENSBI_SOURCE_PATH="$(pwd)"
BUILD_DOCS="no"
BUILD_ONLY="no"
BUILD_ARCHIVE_SUFFIX="unknown"
BUILD_RISCV_XLEN=64
while getopts "hdtj:o:p:s:x:" o; do
case "${o}" in
h)
usage
;;
d)
BUILD_DOCS="yes"
;;
t)
BUILD_ONLY="yes"
;;
j)
BUILD_NUM_THREADS=${OPTARG}
;;
o)
BUILD_OUTPUT_PATH=${OPTARG}
;;
p)
BUILD_OPENSBI_SOURCE_PATH=${OPTARG}
;;
s)
BUILD_ARCHIVE_SUFFIX=${OPTARG}
;;
x)
BUILD_RISCV_XLEN=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
if [ -z "${BUILD_OPENSBI_SOURCE_PATH}" ]; then
echo "Must specify OpenSBI source path"
usage
fi
if [ ! -d "${BUILD_OPENSBI_SOURCE_PATH}" ]; then
echo "OpenSBI source path does not exist"
usage
fi
if [ -z "${BUILD_ARCHIVE_SUFFIX}" ]; then
echo "Archive suffice cannot be empty"
usage
fi
# Get version of OpenSBI
BUILD_VERSION_MAJOR=$(grep MAJOR "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/')
BUILD_VERSION_MINOR=$(grep MINOR "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/')
# Setup archive name
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
32)
# Setup 32bit platform list
BUILD_PLATFORM_SUBDIR=("qemu/virt")
BUILD_PLATFORM_SUBDIR+=("qemu/sifive_u")
;;
64)
# Setup 64bit platform list
BUILD_PLATFORM_SUBDIR=("qemu/virt")
BUILD_PLATFORM_SUBDIR+=("qemu/sifive_u")
BUILD_PLATFORM_SUBDIR+=("sifive/fu540")
BUILD_PLATFORM_SUBDIR+=("kendryte/k210")
;;
*)
echo "Invalid RISC-V XLEN"
usage
;;
esac
# Ensure output directory is present
mkdir -p "${BUILD_OUTPUT_PATH}"
# 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 -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