123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #!/usr/bin/env 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 <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 XLENs for Build (Default: 0)"
- echo " 0: RV32 and RV64"
- echo " 32: RV32 only"
- echo " 64: RV64 only"
- exit 1;
- }
- # Command line options
- NUM_THREADS=1
- OUTPUT_PATH="$(pwd)/build"
- OPENSBI_SOURCE_PATH="$(pwd)"
- NEED_DOCS="no"
- COMPILE_ONLY="no"
- ARCHIVE_SUFFIX="unknown"
- RISCV_XLEN=0
- while getopts "hdtj:o:p:s:x:" o; do
- case "${o}" in
- h)
- usage
- ;;
- d)
- NEED_DOCS="yes"
- ;;
- t)
- COMPILE_ONLY="yes"
- ;;
- j)
- NUM_THREADS=${OPTARG}
- ;;
- o)
- OUTPUT_PATH=${OPTARG}
- ;;
- p)
- OPENSBI_SOURCE_PATH=${OPTARG}
- ;;
- s)
- ARCHIVE_SUFFIX=${OPTARG}
- ;;
- x)
- RISCV_XLEN=${OPTARG}
- ;;
- *)
- usage
- ;;
- esac
- done
- shift $((OPTIND-1))
- if [ -z "${OPENSBI_SOURCE_PATH}" ]; then
- echo "Must specify OpenSBI source path"
- usage
- fi
- if [ ! -d "${OPENSBI_SOURCE_PATH}" ]; then
- echo "OpenSBI source path does not exist"
- usage
- fi
- if [ -z "${ARCHIVE_SUFFIX}" ]; then
- echo "Archive suffice cannot be empty"
- usage
- fi
- 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_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+=("generic")
- ;;
- 64)
- # Setup 64-bit platform list
- BUILD_PLATFORM_SUBDIR+=("nuclei/ux600")
- BUILD_PLATFORM_SUBDIR+=("kendryte/k210")
- BUILD_PLATFORM_SUBDIR+=("fpga/ariane")
- BUILD_PLATFORM_SUBDIR+=("fpga/openpiton")
- BUILD_PLATFORM_SUBDIR+=("generic")
- ;;
- *)
- 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 -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"
- usage
- ;;
- esac
|