scripts: Add script for creating binary archive
authorAnup Patel <anup.patel@wdc.com>
Wed, 20 Feb 2019 08:48:12 +0000 (14:18 +0530)
committerAnup Patel <anup@brainfault.org>
Fri, 22 Feb 2019 05:58:41 +0000 (11:28 +0530)
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>
scripts/create-binary-archive.sh [new file with mode: 0755]

diff --git a/scripts/create-binary-archive.sh b/scripts/create-binary-archive.sh
new file mode 100755 (executable)
index 0000000..be8cfe1
--- /dev/null
@@ -0,0 +1,135 @@
+#!/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