You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

cross_build_linux_riscv_inference.sh 4.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #!/usr/bin/env bash
  2. set -e
  3. ARCHS=("rv64gcv0p7" "rv64norvv")
  4. BUILD_TYPE=Release
  5. ARCH=rv64gcv0p7
  6. REMOVE_OLD_BUILD=false
  7. NINJA_VERBOSE=OFF
  8. NINJA_DRY_RUN=OFF
  9. SPECIFIED_TARGET="install/strip"
  10. READLINK=readlink
  11. OS=$(uname -s)
  12. if [ $OS = "Darwin" ];then
  13. READLINK=greadlink
  14. fi
  15. SRC_DIR=$($READLINK -f "`dirname $0`/../../")
  16. source $SRC_DIR/scripts/cmake-build/utils/utils.sh
  17. config_ninja_default_max_jobs
  18. echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}"
  19. function usage() {
  20. echo "$0 args1 args2 .."
  21. echo "available args detail:"
  22. echo "-d : Build with Debug mode, default Release mode"
  23. echo "-a : config build arch available: ${ARCHS[@]}"
  24. echo "-r : remove old build dir before make, default off"
  25. echo "-v : ninja with verbose and explain, default off"
  26. echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)"
  27. echo "-j : run N jobs in parallel for ninja, defaut is cpu_number + 2"
  28. echo "-e : build a specified target (always for debug, NOTICE: do not do strip/install target when use -e)"
  29. echo "-l : list CMakeLists.txt all options, can be use to config EXTRA_CMAKE_ARGS"
  30. echo "-h : show usage"
  31. echo "append other cmake config by config EXTRA_CMAKE_ARGS, for example, enable MGE_WITH_TEST and build with Debug mode:"
  32. echo "EXTRA_CMAKE_ARGS=\"-DMGE_WITH_TEST=ON\" $0 -d"
  33. exit -1
  34. }
  35. while getopts "lnvrhda:e:j:" arg
  36. do
  37. case $arg in
  38. j)
  39. NINJA_MAX_JOBS=$OPTARG
  40. echo "config NINJA_MAX_JOBS to ${NINJA_MAX_JOBS}"
  41. ;;
  42. l)
  43. echo "list CMakeLists.txt all options, can be used to config EXTRA_CMAKE_ARGS"
  44. show_cmakelist_options
  45. exit 0
  46. ;;
  47. d)
  48. echo "Build with Debug mode"
  49. BUILD_TYPE=Debug
  50. ;;
  51. a)
  52. tmp_arch=null
  53. for arch in ${ARCHS[@]}; do
  54. if [ "$arch" = "$OPTARG" ]; then
  55. echo "CONFIG BUILD ARCH to : $OPTARG"
  56. tmp_arch=$OPTARG
  57. ARCH=$OPTARG
  58. break
  59. fi
  60. done
  61. if [ "$tmp_arch" = "null" ]; then
  62. echo "ERR args for arch (-a)"
  63. echo "available arch list: ${ARCHS[@]}"
  64. usage
  65. fi
  66. ;;
  67. h)
  68. echo "show usage"
  69. usage
  70. ;;
  71. r)
  72. echo "config REMOVE_OLD_BUILD=true"
  73. REMOVE_OLD_BUILD=true
  74. ;;
  75. v)
  76. echo "config NINJA_VERBOSE=ON"
  77. NINJA_VERBOSE=ON
  78. ;;
  79. n)
  80. echo "config NINJA_DRY_RUN=ON"
  81. NINJA_DRY_RUN=ON
  82. ;;
  83. e)
  84. SPECIFIED_TARGET=$OPTARG
  85. ;;
  86. ?)
  87. echo "unkonw argument"
  88. usage
  89. ;;
  90. esac
  91. done
  92. echo "----------------------------------------------------"
  93. echo "build config summary:"
  94. echo "BUILD_TYPE: $BUILD_TYPE"
  95. echo "SPECIFIED_TARGET: ${SPECIFIED_TARGET}"
  96. echo "NINJA_MAX_JOBS: ${NINJA_MAX_JOBS}"
  97. echo "ARCH: $ARCH"
  98. echo "----------------------------------------------------"
  99. if [ ! $OS = "Linux" ];then
  100. echo "cross build for riscv only support from Linux"
  101. exit -1
  102. fi
  103. function cmake_build() {
  104. BUILD_DIR=$SRC_DIR/build_dir/riscv-linux/$1/$BUILD_TYPE/build
  105. INSTALL_DIR=$BUILD_DIR/../install
  106. TOOLCHAIN=$SRC_DIR/toolchains/$2
  107. echo "build dir: $BUILD_DIR"
  108. echo "install dir: $INSTALL_DIR"
  109. echo "build type: $BUILD_TYPE"
  110. echo "build toolchain: $TOOLCHAIN"
  111. try_remove_old_build $REMOVE_OLD_BUILD $BUILD_DIR $INSTALL_DIR
  112. echo "create build dir"
  113. mkdir -p $BUILD_DIR
  114. mkdir -p $INSTALL_DIR
  115. cd_real_build_dir $BUILD_DIR
  116. bash -c "cmake -G Ninja \
  117. -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \
  118. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  119. -DMGE_INFERENCE_ONLY=ON \
  120. -DMGE_WITH_CUDA=OFF \
  121. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  122. ${EXTRA_CMAKE_ARGS} \
  123. $SRC_DIR "
  124. config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "${SPECIFIED_TARGET}" ${NINJA_DRY_RUN} ${NINJA_MAX_JOBS}
  125. bash -c "${NINJA_CMD}"
  126. }
  127. build_flatc $SRC_DIR $REMOVE_OLD_BUILD
  128. toolchain=null
  129. if [ "$ARCH" = "rv64gcv0p7" ]; then
  130. toolchain="riscv64-rvv-linux-gnu.toolchain.cmake"
  131. elif [ "$ARCH" = "rv64norvv" ]; then
  132. toolchain="riscv64-linux-gnu.toolchain.cmake"
  133. else
  134. echo "ERR CONFIG ABORT NOW!!"
  135. exit -1
  136. fi
  137. cmake_build $ARCH $toolchain