create-binary-archive.sh 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #!/usr/bin/env bash
  2. function usage()
  3. {
  4. echo "Usage:"
  5. echo " $0 [options]"
  6. echo "Options:"
  7. echo " -h Display help or usage"
  8. echo " -p <opensbi_source_path> OpenSBI source path"
  9. echo " -o <output_path> Build output path"
  10. echo " -d Build and install documentation"
  11. echo " -t Build only with no archive created"
  12. echo " -j <num_threads> Number of threads for Make (Default: 1)"
  13. echo " -s <archive_suffix> Archive name suffix (Default: unknown)"
  14. echo " -x <riscv_xlen> RISC-V XLENs for Build (Default: 0)"
  15. echo " 0: RV32 and RV64"
  16. echo " 32: RV32 only"
  17. echo " 64: RV64 only"
  18. exit 1;
  19. }
  20. # Command line options
  21. NUM_THREADS=1
  22. OUTPUT_PATH="$(pwd)/build"
  23. OPENSBI_SOURCE_PATH="$(pwd)"
  24. NEED_DOCS="no"
  25. COMPILE_ONLY="no"
  26. ARCHIVE_SUFFIX="unknown"
  27. RISCV_XLEN=0
  28. while getopts "hdtj:o:p:s:x:" o; do
  29. case "${o}" in
  30. h)
  31. usage
  32. ;;
  33. d)
  34. NEED_DOCS="yes"
  35. ;;
  36. t)
  37. COMPILE_ONLY="yes"
  38. ;;
  39. j)
  40. NUM_THREADS=${OPTARG}
  41. ;;
  42. o)
  43. OUTPUT_PATH=${OPTARG}
  44. ;;
  45. p)
  46. OPENSBI_SOURCE_PATH=${OPTARG}
  47. ;;
  48. s)
  49. ARCHIVE_SUFFIX=${OPTARG}
  50. ;;
  51. x)
  52. RISCV_XLEN=${OPTARG}
  53. ;;
  54. *)
  55. usage
  56. ;;
  57. esac
  58. done
  59. shift $((OPTIND-1))
  60. if [ -z "${OPENSBI_SOURCE_PATH}" ]; then
  61. echo "Must specify OpenSBI source path"
  62. usage
  63. fi
  64. if [ ! -d "${OPENSBI_SOURCE_PATH}" ]; then
  65. echo "OpenSBI source path does not exist"
  66. usage
  67. fi
  68. if [ -z "${ARCHIVE_SUFFIX}" ]; then
  69. echo "Archive suffice cannot be empty"
  70. usage
  71. fi
  72. build_opensbi() {
  73. # Setup parameters
  74. BUILD_NUM_THREADS=$1
  75. BUILD_OUTPUT_PATH=$2
  76. BUILD_OPENSBI_SOURCE_PATH=$3
  77. BUILD_DOCS=$4
  78. BUILD_ONLY=$5
  79. BUILD_RISCV_XLEN=$6
  80. BUILD_ARCHIVE_RISCV_XLEN=$7
  81. BUILD_ARCHIVE_SUFFIX=$8
  82. # Setup derived parameters
  83. 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/')
  84. 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/')
  85. BUILD_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_RISCV_XLEN}"
  86. BUILD_ARCHIVE_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_ARCHIVE_RISCV_XLEN}-${BUILD_ARCHIVE_SUFFIX}"
  87. case "${BUILD_RISCV_XLEN}" in
  88. 32)
  89. # Setup 32-bit platform list
  90. BUILD_PLATFORM_SUBDIR+=("generic")
  91. ;;
  92. 64)
  93. # Setup 64-bit platform list
  94. BUILD_PLATFORM_SUBDIR+=("nuclei/ux600")
  95. BUILD_PLATFORM_SUBDIR+=("kendryte/k210")
  96. BUILD_PLATFORM_SUBDIR+=("fpga/ariane")
  97. BUILD_PLATFORM_SUBDIR+=("fpga/openpiton")
  98. BUILD_PLATFORM_SUBDIR+=("generic")
  99. ;;
  100. *)
  101. echo "Invalid Build RISC-V XLEN"
  102. usage
  103. ;;
  104. esac
  105. # Ensure output directory is present
  106. mkdir -p "${BUILD_OUTPUT_PATH}/${BUILD_NAME}"
  107. # Build and install generic library
  108. echo "Build and install generic library XLEN=${BUILD_RISCV_XLEN}"
  109. echo ""
  110. 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}"
  111. echo ""
  112. # Build and install relevant platforms
  113. for INDEX in $(seq 0 1 "$(expr ${#BUILD_PLATFORM_SUBDIR[*]} - 1)")
  114. do
  115. echo "Build and install PLATFORM=${BUILD_PLATFORM_SUBDIR[${INDEX}]} XLEN=${BUILD_RISCV_XLEN}"
  116. echo ""
  117. 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}"
  118. echo ""
  119. done
  120. # Build and install docs
  121. if [ "${BUILD_DOCS}" == "yes" ]; then
  122. echo "Build and install docs"
  123. echo ""
  124. make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}/${BUILD_NAME}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" install_docs
  125. echo ""
  126. fi
  127. # Create archive file
  128. if [ "${BUILD_ONLY}" == "no" ]; then
  129. echo "Create archive ${BUILD_ARCHIVE_NAME}.tar.xz"
  130. echo ""
  131. tar -C "${BUILD_OUTPUT_PATH}" -cJvf "${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}.tar.xz" "${BUILD_ARCHIVE_NAME}"
  132. echo ""
  133. fi
  134. }
  135. case "${RISCV_XLEN}" in
  136. 0)
  137. build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} "no" "yes" "32" "" ${ARCHIVE_SUFFIX}
  138. build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} ${NEED_DOCS} ${COMPILE_ONLY} "64" "" ${ARCHIVE_SUFFIX}
  139. ;;
  140. 32)
  141. build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} ${NEED_DOCS} ${COMPILE_ONLY} "32" "32" ${ARCHIVE_SUFFIX}
  142. ;;
  143. 64)
  144. build_opensbi ${NUM_THREADS} ${OUTPUT_PATH} ${OPENSBI_SOURCE_PATH} ${NEED_DOCS} ${COMPILE_ONLY} "64" "64" ${ARCHIVE_SUFFIX}
  145. ;;
  146. *)
  147. echo "Invalid RISC-V XLEN"
  148. usage
  149. ;;
  150. esac