Skip to content

Latest commit

 

History

History
125 lines (114 loc) · 5.07 KB

compile.md

File metadata and controls

125 lines (114 loc) · 5.07 KB

从源代码编译

一、iOS库编译

1. 编译环境要求

  • Mac系统, Xcode IDE
  • cmake(使用3.1及以上版本)

2. 编译步骤

1)切换到脚本目录

cd <path_to_tnn>/scripts

2)执行编译脚本

./build_ios.sh

编译过程中如果出现xcrun、metal或metallib命令找不到,可尝试如下命令。

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer/

编译完成后,在目录platforms/ios下产生tnn.framework库和tnn.bundle资源 3)添加到工程

  • 在iOS app工程的根目录中添加tnn.framework库和tnn.bundle资源;
  • 在app Xcode工程的设置中找到Build Setting -> Linking -> Other Linker Flags选项;
  • 添加-force_load "$(path_to_tnn)/tnn.framework/tnn";

3. 限制说明

当前编译出的tnn.framework支持iOS设备上跑CPU和GPU,在Mac设备上当前仅支持跑GPU,CPU的支持在后续版本迭代中支持。

二、Android库编译

1. 环境要求

依赖库

  • cmake(使用3.6及以上版本)

NDK配置

2. 命令依赖

centos:

yum install attr.x86_64

ubuntu:

sudo apt-get install attr

3. 编译步骤

1)切换到脚本目录

cd <path_to_tnn>/scripts

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版本的库
 SHARING_MEM_WITH_OPENGL=0      # 1表示OpenGL的Texture可以与OpenCL共享

3)执行编译脚本

./build_android.sh

编译完成后,在当前目录的release目录下生成对应的armeabi-v7a库,arm64-v8a库和include头文件。

三、ARM Linux跨平台交叉编译

1. 环境要求

依赖库

2. 编译步骤

1)切换到脚本目录

cd <path_to_tnn>/scripts

2)编辑build_aarch_linux.shbuild_arm32hf_linux.sh 修改配置选项

 SHARED_LIB="ON"                # ON表示编译动态库,OFF表示编译静态库
 ARM="ON"                       # ON表示编译带有Arm CPU版本的库
 OPENMP="ON"                    # ON表示打开OpenMP
 OPENCL="OFF"                   # ON表示编译带有Arm GPU版本的库
 #ARM64:
 CC=aarch64-linux-gnu-gcc       # 指定C编译器
 CXX=aarch64-linux-gnu-g++      # 指定C++编译器
 TARGET_ARCH=aarch64            # 指定指令架构
 #ARM32HF:
 CC=arm-linux-gnueabihf-gcc       
 CXX=arm-linux-gnueabihf-g++      
 TARGET_ARCH=arm

3)执行编译脚本

./build_arm_linux.sh

编译参数option说明

Option 默认值 说明
TNN_CPU_ENABLE OFF 代码source/device/cpu编译开关,代码仅用用于调试以及UnitTest基准测试,实现全部为c++代码,不包含特定CPU加速指令。
TNN_X86_ENABLE OFF 代码source/device/x86编译开关, 当前适配openvino实现,后续会迁入更多加速代码实现。
TNN_ARM_ENABLE OFF 代码source/device/arm编译开关,代码包含neon加速指令, 且部分实现了int8加速。
TNN_METAL_ENABLE OFF 代码source/device/metal编译开关,代码包含metal加速指令。
TNN_OPENCL_ENABLE OFF 代码source/device/opencl编译开关,代码包含opencl加速指令。
TNN_CUDA_ENABLE OFF 代码source/device/cuda编译开关,代码包含cuda加速指令, 当前仅迁移了小部分实现。
TNN_DSP_ENABLE OFF 代码source/device/dsp编译开关,当前适配snpe实现。
TNN_ATLAS_ENABLE OFF 代码source/device/atlas编译开关,当前适配华为atlas加速框架。
TNN_NPU_ENABLE OFF 代码source/device/npu编译开关,当前适配HiAI加速框架。
TNN_SYMBOL_HIDE ON 加速库符号隐藏,release发布默认非public接口符号不可见。
TNN_OPENMP_ENABLE OFF OpenMP开关,控制是否打开openmp加速。
TNN_BUILD_SHARED ON 动态库编译开关,关闭则编译静态库。
TNN_TEST_ENABLE OFF test代码编译开关
TNN_UNIT_TEST_ENABLE OFF unit test编译开关,打开unit test编译开关会自动打开TNN_CPU_ENABLE开关,作为测试基准。
TNN_PROFILER_ENABLE OFF 性能调试开关,打开后会打印更多性能信息,仅用于调试。
TNN_QUANTIZATION_ENABLE OFF 量化工具编译开关
TNN_BENCHMARK_MODE OFF benchmark开关,打开后支持model weights文件为空,可自动生成数据。