2019-02-20 14:18:12 +05:30
#!/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"
2020-03-24 18:14:28 +05:30
echo " -o <output_path> Build output path"
2019-02-20 14:18:12 +05:30
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)"
2020-03-24 18:14:28 +05:30
echo " -x <riscv_xlen> RISC-V XLENs for Build (Default: 0)"
echo " 0: RV32 and RV64"
echo " 32: RV32 only"
echo " 64: RV64 only"
2019-02-20 14:18:12 +05:30
exit 1;
}
# Command line options
2020-03-24 18:14:28 +05:30
NUM_THREADS = 1
OUTPUT_PATH = " $( pwd ) /build "
OPENSBI_SOURCE_PATH = " $( pwd ) "
NEED_DOCS = "no"
COMPILE_ONLY = "no"
ARCHIVE_SUFFIX = "unknown"
RISCV_XLEN = 0
2019-02-20 14:18:12 +05:30
while getopts "hdtj:o:p:s:x:" o; do
case " ${ o } " in
h)
usage
; ;
d)
2020-03-24 18:14:28 +05:30
NEED_DOCS = "yes"
2019-02-20 14:18:12 +05:30
; ;
t)
2020-03-24 18:14:28 +05:30
COMPILE_ONLY = "yes"
2019-02-20 14:18:12 +05:30
; ;
j)
2020-03-24 18:14:28 +05:30
NUM_THREADS = ${ OPTARG }
2019-02-20 14:18:12 +05:30
; ;
o)
2020-03-24 18:14:28 +05:30
OUTPUT_PATH = ${ OPTARG }
2019-02-20 14:18:12 +05:30
; ;
p)
2020-03-24 18:14:28 +05:30
OPENSBI_SOURCE_PATH = ${ OPTARG }
2019-02-20 14:18:12 +05:30
; ;
s)
2020-03-24 18:14:28 +05:30
ARCHIVE_SUFFIX = ${ OPTARG }
2019-02-20 14:18:12 +05:30
; ;
x)
2020-03-24 18:14:28 +05:30
RISCV_XLEN = ${ OPTARG }
2019-02-20 14:18:12 +05:30
; ;
*)
usage
; ;
esac
done
shift $(( OPTIND-1))
2020-03-24 18:14:28 +05:30
if [ -z " ${ OPENSBI_SOURCE_PATH } " ] ; then
2019-02-20 14:18:12 +05:30
echo "Must specify OpenSBI source path"
usage
fi
2020-03-24 18:14:28 +05:30
if [ ! -d " ${ OPENSBI_SOURCE_PATH } " ] ; then
2019-02-20 14:18:12 +05:30
echo "OpenSBI source path does not exist"
usage
fi
2020-03-24 18:14:28 +05:30
if [ -z " ${ ARCHIVE_SUFFIX } " ] ; then
2019-02-20 14:18:12 +05:30
echo "Archive suffice cannot be empty"
usage
fi
2020-03-24 18:14:28 +05:30
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
2019-02-20 14:18:12 +05:30
2020-03-24 18:14:28 +05:30
# 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_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 } "
BUILD_ARCHIVE_NAME = " opensbi- ${ BUILD_VERSION_MAJOR } . ${ BUILD_VERSION_MINOR } -rv ${ BUILD_ARCHIVE_RISCV_XLEN } - ${ BUILD_ARCHIVE_SUFFIX } "
case " ${ BUILD_RISCV_XLEN } " in
32)
# Setup 32-bit platform list
BUILD_PLATFORM_SUBDIR = ( "qemu/virt" )
BUILD_PLATFORM_SUBDIR += ( "sifive/fu540" )
; ;
64)
# Setup 64-bit platform list
BUILD_PLATFORM_SUBDIR = ( "qemu/virt" )
BUILD_PLATFORM_SUBDIR += ( "sifive/fu540" )
BUILD_PLATFORM_SUBDIR += ( "kendryte/k210" )
BUILD_PLATFORM_SUBDIR += ( "fpga/ariane" )
BUILD_PLATFORM_SUBDIR += ( "fpga/openpiton" )
BUILD_PLATFORM_SUBDIR += ( "andes/ae350" )
BUILD_PLATFORM_SUBDIR += ( "thead/c910" )
BUILD_PLATFORM_SUBDIR += ( "spike" )
; ;
*)
echo "Invalid Build RISC-V XLEN"
usage
; ;
esac
2019-02-20 14:18:12 +05:30
2020-03-24 18:14:28 +05:30
# 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 }
; ;
2019-02-20 14:18:12 +05:30
32)
2020-03-24 18:14:28 +05:30
build_opensbi ${ NUM_THREADS } ${ OUTPUT_PATH } ${ OPENSBI_SOURCE_PATH } ${ NEED_DOCS } ${ COMPILE_ONLY } "32" "32" ${ ARCHIVE_SUFFIX }
2019-02-20 14:18:12 +05:30
; ;
64)
2020-03-24 18:14:28 +05:30
build_opensbi ${ NUM_THREADS } ${ OUTPUT_PATH } ${ OPENSBI_SOURCE_PATH } ${ NEED_DOCS } ${ COMPILE_ONLY } "64" "64" ${ ARCHIVE_SUFFIX }
2019-02-20 14:18:12 +05:30
; ;
*)
echo "Invalid RISC-V XLEN"
usage
; ;
esac