Android端 TNN编译流程

1. 编译环境

ubuntu18.04 Linux (虚拟机)

ndkVersion: 25.2.9519653

cmakeVersion: 3.25.1

NDK下载地址:

Home · android/ndk Wiki · GitHub

TNN 0.3.0 源码下载地址:

Release TNN v0.3.0 · Tencent/TNN · GitHub

2. 修改源码

需要需改上述文件 source/tnn/device/arm/acc/compute/gemm_function.cc

使用 以下git节点的源码修改上述文件

800ec4d3e8c0d89a1b9d747312927892ddf92bbe

更新日期为:Sep 30, 2022

3. 编译方法

3.1 切换到脚本目录

cd <path_to_tnn>/scripts

3.2 编辑build_android.sh修改配置选项

ABIA32="armeabi-v7a with NEON"
ABIA64="arm64-v8a"
STL="c++_static"
SHARED_LIB="ON"                # ON表示编译动态库,OFF表示编译静态库
ARM="ON"                       # ON表示编译带有Arm CPU版本的库
OPENMP="ON"                    # ON表示打开OpenMP
OPENCL="ON"                    # ON表示编译带有Arm GPU版本的库
HUAWEI_NPU="ON"                # ON表示编译带有Arm GPU NPU版本的库
SHARING_MEM_WITH_OPENGL=0      # 1表示OpenGL的Texture可以与OpenCL共享

华为NPU PS: 运行前需要下载DDK, 并放到指定文件夹。 或是用脚本直接下载具体请参考: FAQ如何创建华为NPU编译环境

3.3 执行编译脚本

设定NDK目录环境变量

export ANDROID_NDK=/home/lyy/android-ndk-r25c-linux/android-ndk-r25c/
./build_android.sh

编译完成后,在当前目录的release目录下生成对应的armeabi-v7a库,arm64-v8a库和include头文件。如果是编译成静态库,集成链接需添加-Wl,--whole-archive tnn -Wl,--no-whole-archive。

4. 编译选项

OPENCL="OFF" # 关闭GPU加速
OPENMP="OFF" # 关闭OMP

5. 参考

TNN/compile.md at master · Tencent/TNN · GitHub

6. 附件

6.1 编译脚本 (build_android.sh)

#!/bin/bash

#ABIA32="armeabi-v7a with NEON"
ABIA32="armeabi-v7a"
ABIA64="arm64-v8a"
STL="c++_static"
#STL="gnustl_static"
SHARED_LIB="ON"
ARM="ON"
OPENMP="OFF"
OPENCL="OFF"
#HUAWEI_NPU="ON"
if [ -z "$HUAWEI_NPU" ]; then
    HUAWEI_NPU="OFF"
fi
BENMARK_MODE="OFF"
DEBUG="OFF"
INCREMENTAL_COMPILE="OFF"
SHARING_MEM_WITH_OPENGL=0
ANDROID_API_LEVEL="android-14"
# check ANDROID_NDK whether set.
if [ ! -f "$ANDROID_NDK/build/cmake/android.toolchain.cmake" ]; then
   echo -e "Not found: build/cmake/android.toolchain.cmake in ANDROID_NDK:$ANDROID_NDK"
   echo -e "Please download android ndk and set ANDROID_NDK environment variable."
   exit -1
fi

while [ "$1" != "" ]; do
    case $1 in
        -ic)
            shift
            INCREMENTAL_COMPILE="ON"
            ;;
        *)
            usage
            exit 1
    esac
done


TNN_BUILD_PATH=$PWD
if [ -z $TNN_ROOT_PATH ]
then
    TNN_ROOT_PATH=$(cd `dirname $0`; pwd)/..
    echo $TNN_ROOT_PATH
fi

echo ' '
echo '******************** step 2: start build rpn arm32 ********************'
cd $TNN_BUILD_PATH
if [ -x "build32" ];then
    if [ "${INCREMENTAL_COMPILE}" = "OFF" ];then
        echo 'remove build32'
        rm -r build32
        mkdir build32
    fi
else
    mkdir -p build32
fi

cd build32
echo $ABIA32
cmake ${TNN_ROOT_PATH} \
      -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
      -DDEBUG:BOOL=$DEBUG \
      -DANDROID_ABI="${ABIA32}" \
      -DANDROID_STL=${STL} \
      -DANDROID_NATIVE_API_LEVEL=${ANDROID_API_LEVEL}  \
      -DANDROID_TOOLCHAIN=clang \
      -DBUILD_FOR_ANDROID_COMMAND=true \
      -DTNN_CPU_ENABLE:BOOL=ON \
      -DTNN_ARM_ENABLE:BOOL=$ARM \
      -DTNN_HUAWEI_NPU_ENABLE:BOOL=$HUAWEI_NPU \
      -DTNN_OPENCL_ENABLE:BOOL=$OPENCL \
      -DTNN_BENCHMARK_MODE:BOOL=$BENMARK_MODE \
      -DTNN_TEST_ENABLE:BOOL=ON \
      -DTNN_OPENMP_ENABLE:BOOL=$OPENMP \
      -DSHARING_MEM_WITH_OPENGL=${SHARING_MEM_WITH_OPENGL} \
      -DTNN_BUILD_SHARED:BOOL=$SHARED_LIB \
      -Wl,-Bsymbolic
make -j32

echo ' '
echo '******************** step 3: start build rpn arm64 ********************'
cd $TNN_BUILD_PATH
if [ -x "build64" ];then
    if [ "${INCREMENTAL_COMPILE}" = "OFF" ];then
        echo 'remove build64'
        rm -r build64
        mkdir build64
    fi
else
    mkdir -p build64
fi

cd build64
echo $ABIA64
cmake ${TNN_ROOT_PATH} \
      -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
      -DDEBUG:BOOL=$DEBUG \
      -DANDROID_ABI="${ABIA64}" \
      -DANDROID_STL=${STL} \
      -DANDROID_NATIVE_API_LEVEL=${ANDROID_API_LEVEL}  \
      -DANDROID_TOOLCHAIN=clang \
      -DBUILD_FOR_ANDROID_COMMAND=true \
      -DTNN_CPU_ENABLE:BOOL=ON \
      -DTNN_ARM_ENABLE:BOOL=$ARM \
      -DTNN_HUAWEI_NPU_ENABLE:BOOL=$HUAWEI_NPU \
      -DTNN_OPENCL_ENABLE:BOOL=$OPENCL \
      -DTNN_TEST_ENABLE:BOOL=ON \
      -DTNN_BENCHMARK_MODE:BOOL=$BENMARK_MODE \
      -DTNN_OPENMP_ENABLE:BOOL=$OPENMP \
      -DSHARING_MEM_WITH_OPENGL=${SHARING_MEM_WITH_OPENGL} \
      -DTNN_BUILD_SHARED:BOOL=$SHARED_LIB \
      -Wl,-Bsymbolic
make -j32

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值