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_ios_arm_inference.sh 5.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #!/usr/bin/env bash
  2. set -e
  3. ARCHS=("arm64" "armv7")
  4. BUILD_TYPE=Release
  5. MGE_ARMV8_2_FEATURE_FP16=OFF
  6. MGE_DISABLE_FLOAT16=OFF
  7. ARCH=arm64
  8. REMOVE_OLD_BUILD=false
  9. NINJA_VERBOSE=OFF
  10. NINJA_DRY_RUN=OFF
  11. SPECIFIED_TARGET="install"
  12. READLINK=readlink
  13. OS=$(uname -s)
  14. if [ $OS = "Darwin" ];then
  15. READLINK=greadlink
  16. fi
  17. SRC_DIR=$($READLINK -f "`dirname $0`/../../")
  18. source $SRC_DIR/scripts/cmake-build/utils/utils.sh
  19. config_ninja_default_max_jobs
  20. echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}"
  21. function usage() {
  22. echo "$0 args1 args2 .."
  23. echo "available args detail:"
  24. echo "-d : Build with Debug mode, default Release mode"
  25. echo "-f : enable MGE_ARMV8_2_FEATURE_FP16 for ARM64, need toolchain and hardware support"
  26. echo "-k : open MGE_DISABLE_FLOAT16 for NEON "
  27. echo "-a : config build arch available: ${ARCHS[@]}"
  28. echo "-r : remove old build dir before make, default off"
  29. echo "-v : ninja with verbose and explain, default off"
  30. echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)"
  31. echo "-j : run N jobs in parallel for ninja, defaut is cpu_number + 2"
  32. echo "-e : build a specified target (always for debug, NOTICE: do not do strip/install target when use -e)"
  33. echo "-l : list CMakeLists.txt all options, can be use to config EXTRA_CMAKE_ARGS"
  34. echo "-h : show usage"
  35. echo "append other cmake config by config EXTRA_CMAKE_ARGS, for example, enable MGE_WITH_TEST and build with Debug mode:"
  36. echo "EXTRA_CMAKE_ARGS=\"-DMGE_WITH_TEST=ON\" $0 -d"
  37. exit -1
  38. }
  39. while getopts "lnvrkhdfa:e:j:" arg
  40. do
  41. case $arg in
  42. j)
  43. NINJA_MAX_JOBS=$OPTARG
  44. echo "config NINJA_MAX_JOBS to ${NINJA_MAX_JOBS}"
  45. ;;
  46. l)
  47. echo "list CMakeLists.txt all options, can be used to config EXTRA_CMAKE_ARGS"
  48. show_cmakelist_options
  49. exit 0
  50. ;;
  51. d)
  52. echo "Build with Debug mode"
  53. BUILD_TYPE=Debug
  54. ;;
  55. f)
  56. echo "enable MGE_ARMV8_2_FEATURE_FP16 for ARM64"
  57. MGE_ARMV8_2_FEATURE_FP16=ON
  58. ;;
  59. k)
  60. echo "open MGE_DISABLE_FLOAT16 for NEON"
  61. MGE_DISABLE_FLOAT16=ON
  62. ;;
  63. a)
  64. tmp_arch=null
  65. for arch in ${ARCHS[@]}; do
  66. if [ "$arch" = "$OPTARG" ]; then
  67. echo "CONFIG BUILD ARCH to : $OPTARG"
  68. tmp_arch=$OPTARG
  69. ARCH=$OPTARG
  70. break
  71. fi
  72. done
  73. if [ "$tmp_arch" = "null" ]; then
  74. echo "ERR args for arch (-a)"
  75. echo "available arch list: ${ARCHS[@]}"
  76. usage
  77. fi
  78. ;;
  79. h)
  80. echo "show usage"
  81. usage
  82. ;;
  83. r)
  84. echo "config REMOVE_OLD_BUILD=true"
  85. REMOVE_OLD_BUILD=true
  86. ;;
  87. v)
  88. echo "config NINJA_VERBOSE=ON"
  89. NINJA_VERBOSE=ON
  90. ;;
  91. n)
  92. echo "config NINJA_DRY_RUN=ON"
  93. NINJA_DRY_RUN=ON
  94. ;;
  95. e)
  96. SPECIFIED_TARGET=$OPTARG
  97. ;;
  98. ?)
  99. echo "unkonw argument"
  100. usage
  101. ;;
  102. esac
  103. done
  104. echo "----------------------------------------------------"
  105. echo "build config summary:"
  106. echo "BUILD_TYPE: $BUILD_TYPE"
  107. echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16"
  108. echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16"
  109. echo "SPECIFIED_TARGET: ${SPECIFIED_TARGET}"
  110. echo "NINJA_MAX_JOBS: ${NINJA_MAX_JOBS}"
  111. echo "ARCH: $ARCH"
  112. echo "----------------------------------------------------"
  113. if [ $OS = "Darwin" ];then
  114. echo "cross build ios from MacOS"
  115. else
  116. echo "cross build ios only support on MacOS, abort now!!"
  117. exit -1
  118. fi
  119. function cmake_build() {
  120. BUILD_DIR=$SRC_DIR/build_dir/apple/$3/$4/$1/$BUILD_TYPE/build
  121. INSTALL_DIR=$BUILD_DIR/../install
  122. TOOLCHAIN=$SRC_DIR/toolchains/$2
  123. OS_PLATFORM=$3
  124. XCODE_IOS_PLATFORM=$4
  125. IOS_ARCH=$1
  126. echo "build dir: $BUILD_DIR"
  127. echo "install dir: $INSTALL_DIR"
  128. echo "build type: $BUILD_TYPE"
  129. echo "build toolchain: $TOOLCHAIN"
  130. echo "build OS_PLATFORM: $OS_PLATFORM"
  131. echo "build XCODE_IOS_PLATFORM: $XCODE_IOS_PLATFORM"
  132. echo "build IOS_ARCH: $IOS_ARCH"
  133. try_remove_old_build $REMOVE_OLD_BUILD $BUILD_DIR $INSTALL_DIR
  134. echo "create build dir"
  135. mkdir -p $BUILD_DIR
  136. mkdir -p $INSTALL_DIR
  137. cd_real_build_dir $BUILD_DIR
  138. bash -c "cmake -G Ninja \
  139. -DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN \
  140. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  141. -DIOS_TOOLCHAIN_ROOT=$TOOLCHAIN \
  142. -DOS_PLATFORM=$OS_PLATFORM \
  143. -DXCODE_IOS_PLATFORM=$XCODE_IOS_PLATFORM \
  144. -DIOS_ARCH=$IOS_ARCH \
  145. -DMGE_INFERENCE_ONLY=ON \
  146. -DPYTHON_EXECUTABLE=/usr/local/bin/python3 \
  147. -DMGE_WITH_CUDA=OFF \
  148. -DMGE_ARMV8_2_FEATURE_FP16=$MGE_ARMV8_2_FEATURE_FP16 \
  149. -DMGE_DISABLE_FLOAT16=$MGE_DISABLE_FLOAT16 \
  150. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  151. -DCMAKE_MAKE_PROGRAM=ninja \
  152. ${EXTRA_CMAKE_ARGS} \
  153. $SRC_DIR "
  154. config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "${SPECIFIED_TARGET}" ${NINJA_DRY_RUN} ${NINJA_MAX_JOBS}
  155. bash -c "${NINJA_CMD}"
  156. }
  157. build_flatc $SRC_DIR $REMOVE_OLD_BUILD
  158. # refs for ../../toolchains/ios.toolchain.cmake
  159. # to config this, if u want to build other,
  160. # like simulator or for iwatch, please do manually modify
  161. # OS_PLATFORM=("OS" "OS64" "SIMULATOR" "SIMULATOR64" "TVOS" "WATCHOS" "SIMULATOR_TVOS")
  162. # XCODE_IOS_PLATFORM=("iphoneos" "iphonesimulator" "appletvos" "appletvsimulator" "watchos", "watchsimulator")
  163. # IOS_ARCHS=("arm64" "armv7" "armv7k" "arm64e" "armv7s")
  164. #by defaut we only triger build arm64/armv7 for iphoneos
  165. OS_PLATFORM=OS
  166. XCODE_IOS_PLATFORM=iphoneos
  167. cmake_build $ARCH ios.toolchain.cmake $OS_PLATFORM $XCODE_IOS_PLATFORM