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_android_arm_inference.sh 4.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #!/usr/bin/env bash
  2. set -e
  3. ARCHS=("arm64-v8a" "armeabi-v7a")
  4. BUILD_TYPE=Release
  5. MGE_ARMV8_2_FEATURE_FP16=OFF
  6. MGE_DISABLE_FLOAT16=OFF
  7. ARCH=arm64-v8a
  8. REMOVE_OLD_BUILD=false
  9. NINJA_VERBOSE=OFF
  10. NINJA_DRY_RUN=OFF
  11. echo "EXTRA_CMAKE_ARGS: ${EXTRA_CMAKE_ARGS}"
  12. function usage() {
  13. echo "$0 args1 args2 .."
  14. echo "available args detail:"
  15. echo "-d : Build with Debug mode, default Release mode"
  16. echo "-f : enable MGE_ARMV8_2_FEATURE_FP16 for ARM64, need toolchain and hardware support"
  17. echo "-k : open MGE_DISABLE_FLOAT16 for NEON "
  18. echo "-a : config build arch available: ${ARCHS[@]}"
  19. echo "-r : remove old build dir before make, default off"
  20. echo "-v : ninja with verbose and explain, default off"
  21. echo "-n : ninja with -n dry run (don't run commands but act like they succeeded)"
  22. echo "-h : show usage"
  23. echo "append other cmake config by export EXTRA_CMAKE_ARGS=..."
  24. echo "example: $0 -d"
  25. exit -1
  26. }
  27. while getopts "nvrkhdfa:" arg
  28. do
  29. case $arg in
  30. d)
  31. echo "Build with Debug mode"
  32. BUILD_TYPE=Debug
  33. ;;
  34. f)
  35. echo "enable MGE_ARMV8_2_FEATURE_FP16 for ARM64"
  36. MGE_ARMV8_2_FEATURE_FP16=ON
  37. ;;
  38. k)
  39. echo "open MGE_DISABLE_FLOAT16 for NEON"
  40. MGE_DISABLE_FLOAT16=ON
  41. ;;
  42. a)
  43. tmp_arch=null
  44. for arch in ${ARCHS[@]}; do
  45. if [ "$arch" = "$OPTARG" ]; then
  46. echo "CONFIG BUILD ARCH to : $OPTARG"
  47. tmp_arch=$OPTARG
  48. ARCH=$OPTARG
  49. break
  50. fi
  51. done
  52. if [ "$tmp_arch" = "null" ]; then
  53. echo "ERR args for arch (-a)"
  54. echo "available arch list: ${ARCHS[@]}"
  55. usage
  56. fi
  57. ;;
  58. h)
  59. echo "show usage"
  60. usage
  61. ;;
  62. r)
  63. echo "config REMOVE_OLD_BUILD=true"
  64. REMOVE_OLD_BUILD=true
  65. ;;
  66. v)
  67. echo "config NINJA_VERBOSE=ON"
  68. NINJA_VERBOSE=ON
  69. ;;
  70. n)
  71. echo "config NINJA_DRY_RUN=ON"
  72. NINJA_DRY_RUN=ON
  73. ;;
  74. ?)
  75. echo "unkonw argument"
  76. usage
  77. ;;
  78. esac
  79. done
  80. echo "----------------------------------------------------"
  81. echo "build config summary:"
  82. echo "BUILD_TYPE: $BUILD_TYPE"
  83. echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16"
  84. echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16"
  85. echo "ARCH: $ARCH"
  86. echo "----------------------------------------------------"
  87. READLINK=readlink
  88. OS=$(uname -s)
  89. if [ $OS = "Darwin" ];then
  90. READLINK=greadlink
  91. elif [[ $OS =~ "NT" ]]; then
  92. echo "BUILD in NT ..."
  93. fi
  94. SRC_DIR=$($READLINK -f "`dirname $0`/../../")
  95. source $SRC_DIR/scripts/cmake-build/utils/utils.sh
  96. if [ -z $NDK_ROOT ];then
  97. echo "can not find NDK_ROOT env, pls export you NDK root dir to NDK_ROOT"
  98. exit -1
  99. fi
  100. function cmake_build() {
  101. BUILD_DIR=$SRC_DIR/build_dir/android/$1/$BUILD_TYPE/build
  102. INSTALL_DIR=$BUILD_DIR/../install
  103. BUILD_ABI=$1
  104. BUILD_NATIVE_LEVEL=$2
  105. echo "build dir: $BUILD_DIR"
  106. echo "install dir: $INSTALL_DIR"
  107. echo "build type: $BUILD_TYPE"
  108. echo "build ABI: $BUILD_ABI"
  109. echo "build native level: $BUILD_NATIVE_LEVEL"
  110. try_remove_old_build $REMOVE_OLD_BUILD $BUILD_DIR $INSTALL_DIR
  111. echo "create build dir"
  112. mkdir -p $BUILD_DIR
  113. mkdir -p $INSTALL_DIR
  114. cd_real_build_dir $BUILD_DIR
  115. unset IFS
  116. bash -c "cmake -G Ninja \
  117. -DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" \
  118. -DANDROID_NDK="$NDK_ROOT" \
  119. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  120. -DANDROID_ABI=$BUILD_ABI \
  121. -DANDROID_NATIVE_API_LEVEL=$BUILD_NATIVE_LEVEL \
  122. -DMGE_INFERENCE_ONLY=ON \
  123. -DMGE_WITH_CUDA=OFF \
  124. -DMGE_ARMV8_2_FEATURE_FP16= $MGE_ARMV8_2_FEATURE_FP16 \
  125. -DMGE_DISABLE_FLOAT16=$MGE_DISABLE_FLOAT16 \
  126. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  127. ${EXTRA_CMAKE_ARGS} \
  128. $SRC_DIR "
  129. config_ninja_target_cmd ${NINJA_VERBOSE} "OFF" "" ${NINJA_DRY_RUN}
  130. bash -c "${NINJA_CMD}"
  131. ${NINJA_BASE} install/strip
  132. }
  133. build_flatc $SRC_DIR $REMOVE_OLD_BUILD
  134. api_level=16
  135. abi="armeabi-v7a with NEON"
  136. IFS=""
  137. if [ "$ARCH" = "arm64-v8a" ]; then
  138. api_level=21
  139. abi="arm64-v8a"
  140. elif [ "$ARCH" = "armeabi-v7a" ]; then
  141. api_level=16
  142. abi="armeabi-v7a with NEON"
  143. else
  144. echo "ERR CONFIG ABORT NOW!!"
  145. exit -1
  146. fi
  147. cmake_build $abi $api_level

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台