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.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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_ARMV8_2_FEATURE_DOTPROD=OFF
  7. MGE_DISABLE_FLOAT16=OFF
  8. ARCH=arm64-v8a
  9. function usage() {
  10. echo "$0 args1 args2 .."
  11. echo "available args detail:"
  12. echo "-d : Build with Debug mode, defaule Release mode"
  13. echo "-f : enable MGE_ARMV8_2_FEATURE_FP16 for ARM64, need toolchain and hardware support"
  14. echo "-p : enable MGE_ARMV8_2_FEATURE_DOTPROD for ARM64, need toolchain and hardware support"
  15. echo "-k : open MGE_DISABLE_FLOAT16 for NEON "
  16. echo "-a : config build arch available: ${ARCHS[@]}"
  17. echo "-h : show usage"
  18. echo "example: $0 -d"
  19. exit -1
  20. }
  21. while getopts "khdfpa:" arg
  22. do
  23. case $arg in
  24. d)
  25. echo "Build with Debug mode"
  26. BUILD_TYPE=Debug
  27. ;;
  28. f)
  29. echo "enable MGE_ARMV8_2_FEATURE_FP16 for ARM64"
  30. MGE_ARMV8_2_FEATURE_FP16=ON
  31. ;;
  32. p)
  33. echo "enable MGE_ARMV8_2_FEATURE_DOTPROD for ARM64"
  34. MGE_ARMV8_2_FEATURE_DOTPROD=ON
  35. ;;
  36. k)
  37. echo "open MGE_DISABLE_FLOAT16 for NEON"
  38. MGE_DISABLE_FLOAT16=ON
  39. ;;
  40. a)
  41. tmp_arch=null
  42. for arch in ${ARCHS[@]}; do
  43. if [ "$arch" = "$OPTARG" ]; then
  44. echo "CONFIG BUILD ARCH to : $OPTARG"
  45. tmp_arch=$OPTARG
  46. ARCH=$OPTARG
  47. break
  48. fi
  49. done
  50. if [ "$tmp_arch" = "null" ]; then
  51. echo "ERR args for arch (-a)"
  52. echo "available arch list: ${ARCHS[@]}"
  53. usage
  54. fi
  55. ;;
  56. h)
  57. echo "show usage"
  58. usage
  59. ;;
  60. ?)
  61. echo "unkonw argument"
  62. usage
  63. ;;
  64. esac
  65. done
  66. echo "----------------------------------------------------"
  67. echo "build config summary:"
  68. echo "BUILD_TYPE: $BUILD_TYPE"
  69. echo "MGE_ARMV8_2_FEATURE_FP16: $MGE_ARMV8_2_FEATURE_FP16"
  70. echo "MGE_ARMV8_2_FEATURE_DOTPROD: $MGE_ARMV8_2_FEATURE_DOTPROD"
  71. echo "MGE_DISABLE_FLOAT16: $MGE_DISABLE_FLOAT16"
  72. echo "ARCH: $ARCH"
  73. echo "----------------------------------------------------"
  74. READLINK=readlink
  75. OS=$(uname -s)
  76. if [ $OS = "Darwin" ];then
  77. READLINK=greadlink
  78. fi
  79. SRC_DIR=$($READLINK -f "`dirname $0`/../../")
  80. if [ -z $NDK_ROOT ];then
  81. echo "can not find NDK_ROOT env, pls export you NDK root dir to NDK_ROOT"
  82. exit -1
  83. fi
  84. function cmake_build() {
  85. BUILD_DIR=$SRC_DIR/build_dir/android/$1/$BUILD_TYPE/build
  86. INSTALL_DIR=$BUILD_DIR/../install
  87. BUILD_ABI=$1
  88. BUILD_NATIVE_LEVEL=$2
  89. echo "build dir: $BUILD_DIR"
  90. echo "install dir: $INSTALL_DIR"
  91. echo "build type: $BUILD_TYPE"
  92. echo "build ABI: $BUILD_ABI"
  93. echo "build native level: $BUILD_NATIVE_LEVEL"
  94. if [ -e $BUILD_DIR ];then
  95. echo "clean old dir: $BUILD_DIR"
  96. rm -rf $BUILD_DIR
  97. fi
  98. if [ -e $INSTALL_DIR ];then
  99. echo "clean old dir: $INSTALL_DIR"
  100. rm -rf $INSTALL_DIR
  101. fi
  102. echo "create build dir"
  103. mkdir -p $BUILD_DIR
  104. mkdir -p $INSTALL_DIR
  105. cd $BUILD_DIR
  106. cmake -DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" \
  107. -DANDROID_NDK="$NDK_ROOT" \
  108. -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
  109. -DANDROID_ABI=$BUILD_ABI \
  110. -DANDROID_NATIVE_API_LEVEL=$BUILD_NATIVE_LEVEL \
  111. -DMGE_INFERENCE_ONLY=ON \
  112. -DMGE_WITH_CUDA=OFF \
  113. -DMGE_ARMV8_2_FEATURE_FP16= $MGE_ARMV8_2_FEATURE_FP16 \
  114. -DMGE_ARMV8_2_FEATURE_DOTPROD=$MGE_ARMV8_2_FEATURE_DOTPROD \
  115. -DMGE_DISABLE_FLOAT16=$MGE_DISABLE_FLOAT16 \
  116. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  117. $SRC_DIR
  118. make -j$(nproc)
  119. make install/strip
  120. }
  121. function build_flatc() {
  122. BUILD_DIR=$SRC_DIR/build_dir/host_flatc/build
  123. INSTALL_DIR=$BUILD_DIR/../install
  124. if [ -e $BUILD_DIR ];then
  125. echo "clean old dir: $BUILD_DIR"
  126. rm -rf $BUILD_DIR
  127. fi
  128. if [ -e $INSTALL_DIR ];then
  129. echo "clean old dir: $INSTALL_DIR"
  130. rm -rf $INSTALL_DIR
  131. fi
  132. echo "create build dir"
  133. mkdir -p $BUILD_DIR
  134. mkdir -p $INSTALL_DIR
  135. cd $BUILD_DIR
  136. cmake -DCMAKE_BUILD_TYPE=Release \
  137. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR \
  138. -DFLATBUFFERS_BUILD_TESTS=OFF \
  139. -DFLATBUFFERS_BUILD_FLATHASH=OFF \
  140. -DFLATBUFFERS_BUILD_FLATLIB=OFF \
  141. -DFLATBUFFERS_LIBCXX_WITH_CLANG=OFF \
  142. $SRC_DIR/third_party/flatbuffers
  143. make -j$(nproc)
  144. make install/strip
  145. }
  146. build_flatc
  147. api_level=16
  148. abi="armeabi-v7a with NEON"
  149. IFS=""
  150. if [ "$ARCH" = "arm64-v8a" ]; then
  151. api_level=21
  152. abi="arm64-v8a"
  153. elif [ "$ARCH" = "armeabi-v7a" ]; then
  154. api_level=16
  155. abi="armeabi-v7a with NEON"
  156. else
  157. echo "ERR CONFIG ABORT NOW!!"
  158. exit -1
  159. fi
  160. cmake_build $abi $api_level

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