create-binary-archive.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #!/bin/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 <build_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 XLEN (Default: 64)"
  15. exit 1;
  16. }
  17. # Command line options
  18. BUILD_NUM_THREADS=1
  19. BUILD_OUTPUT_PATH="$(pwd)/build"
  20. BUILD_OPENSBI_SOURCE_PATH="$(pwd)"
  21. BUILD_DOCS="no"
  22. BUILD_ONLY="no"
  23. BUILD_ARCHIVE_SUFFIX="unknown"
  24. BUILD_RISCV_XLEN=64
  25. while getopts "hdtj:o:p:s:x:" o; do
  26. case "${o}" in
  27. h)
  28. usage
  29. ;;
  30. d)
  31. BUILD_DOCS="yes"
  32. ;;
  33. t)
  34. BUILD_ONLY="yes"
  35. ;;
  36. j)
  37. BUILD_NUM_THREADS=${OPTARG}
  38. ;;
  39. o)
  40. BUILD_OUTPUT_PATH=${OPTARG}
  41. ;;
  42. p)
  43. BUILD_OPENSBI_SOURCE_PATH=${OPTARG}
  44. ;;
  45. s)
  46. BUILD_ARCHIVE_SUFFIX=${OPTARG}
  47. ;;
  48. x)
  49. BUILD_RISCV_XLEN=${OPTARG}
  50. ;;
  51. *)
  52. usage
  53. ;;
  54. esac
  55. done
  56. shift $((OPTIND-1))
  57. if [ -z "${BUILD_OPENSBI_SOURCE_PATH}" ]; then
  58. echo "Must specify OpenSBI source path"
  59. usage
  60. fi
  61. if [ ! -d "${BUILD_OPENSBI_SOURCE_PATH}" ]; then
  62. echo "OpenSBI source path does not exist"
  63. usage
  64. fi
  65. if [ -z "${BUILD_ARCHIVE_SUFFIX}" ]; then
  66. echo "Archive suffice cannot be empty"
  67. usage
  68. fi
  69. # Get version of OpenSBI
  70. BUILD_VERSION_MAJOR=$(grep MAJOR "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/')
  71. BUILD_VERSION_MINOR=$(grep MINOR "${BUILD_OPENSBI_SOURCE_PATH}/include/sbi/sbi_version.h" | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/')
  72. # Setup archive name
  73. BUILD_ARCHIVE_NAME="opensbi-${BUILD_VERSION_MAJOR}.${BUILD_VERSION_MINOR}-rv${BUILD_RISCV_XLEN}-${BUILD_ARCHIVE_SUFFIX}"
  74. # Setup platform list
  75. case "${BUILD_RISCV_XLEN}" in
  76. 32)
  77. # Setup 32bit platform list
  78. BUILD_PLATFORM_SUBDIR=("qemu/virt")
  79. BUILD_PLATFORM_SUBDIR+=("qemu/sifive_u")
  80. ;;
  81. 64)
  82. # Setup 64bit platform list
  83. BUILD_PLATFORM_SUBDIR=("qemu/virt")
  84. BUILD_PLATFORM_SUBDIR+=("qemu/sifive_u")
  85. BUILD_PLATFORM_SUBDIR+=("sifive/fu540")
  86. BUILD_PLATFORM_SUBDIR+=("kendryte/k210")
  87. ;;
  88. *)
  89. echo "Invalid RISC-V XLEN"
  90. usage
  91. ;;
  92. esac
  93. # Ensure output directory is present
  94. mkdir -p "${BUILD_OUTPUT_PATH}"
  95. # Build and install generic library
  96. echo "Build and install generic library XLEN=${BUILD_RISCV_XLEN}"
  97. echo ""
  98. 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}"
  99. echo ""
  100. # Build and install relevant platforms
  101. for INDEX in $(seq 0 1 "$(expr ${#BUILD_PLATFORM_SUBDIR[*]} - 1)")
  102. do
  103. echo "Build and install PLATFORM=${BUILD_PLATFORM_SUBDIR[${INDEX}]} XLEN=${BUILD_RISCV_XLEN}"
  104. echo ""
  105. 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}"
  106. echo ""
  107. done
  108. # Build and install docs
  109. if [ "${BUILD_DOCS}" == "yes" ]; then
  110. echo "Build and install docs"
  111. echo ""
  112. make -C "${BUILD_OPENSBI_SOURCE_PATH}" O="${BUILD_OUTPUT_PATH}" I="${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}" install_docs
  113. echo ""
  114. fi
  115. # Create archive file
  116. if [ "${BUILD_ONLY}" == "no" ]; then
  117. echo "Create archive ${BUILD_ARCHIVE_NAME}.tar.xz"
  118. echo ""
  119. tar -C "${BUILD_OUTPUT_PATH}" -cJvf "${BUILD_OUTPUT_PATH}/${BUILD_ARCHIVE_NAME}.tar.xz" "${BUILD_ARCHIVE_NAME}"
  120. echo ""
  121. fi