iOS编译openmp

Posted 周旭光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS编译openmp相关的知识,希望对你有一定的参考价值。


1、下载openmp源码
https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.6/openmp-14.0.6.src.tar.xz

2、下载ios.toolchain.cmake
https://github.com/leetal/ios-cmake/tree/4.3.0
源码根目录创建toolchains目录,将ios.toolchain.cmake放入toolchains目录


3、进入到源码目录,执行下列操作
sed -i'' -e '/.size __kmp_unnamed_critical_addr/d' runtime/src/z_Linux_asm.S
sed -i'' -e 's/__kmp_unnamed_critical_addr/___kmp_unnamed_critical_addr/g' runtime/src/z_Linux_asm.S

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \\
            -DPLATFORM=OS64 -DENABLE_BITCODE=1 -DENABLE_ARC=0 -DENABLE_VISIBILITY=0 \\
            -DPERL_EXECUTABLE=/usr/local/bin/perl \\
            -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF ..


cmake --build . -j 12
cmake --build . --target install

注意,编译模拟器的库使用下面的命令
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/ios.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install \\
            -DPLATFORM=SIMULATOR64 -DENABLE_BITCODE=1 -DENABLE_ARC=0 -DENABLE_VISIBILITY=0 \\
            -DPERL_EXECUTABLE=/usr/local/bin/perl \\
            -DLIBOMP_ENABLE_SHARED=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF ..

4、编译后的产物放在build/install文件夹中

5、将真机的库和模拟器的库使用lipo工具合并,
lipo -create build_sim64/install/lib/libomp.a build_ios64/install/lib/libomp.a  -output libomp.a 

build_sim64/install/lib/libomp.a build_ios64/install/lib/libomp.a 分别是模拟器和真机的库,输出库的路径 -output libomp.a

lipo -info libomp.a验证
Architectures in the fat file: libomp.a are: x86_64 arm64 说明有两个架构就是OK的

6、工程中引用头文件,增加编译选项 -Xclang -fopenmp

iOS和mac上原生没有支持openmp,通过编译,就可以在iOS和mac上使用,mac上编译比较简单,直接cmake,然后make就可以了。希望这个方法能帮助到大家

以上是关于iOS编译openmp的主要内容,如果未能解决你的问题,请参考以下文章

iOS编译openmp

ios flutter 混编

windows 源码编译 opencv-4.5.4 + tbb + ipp + openmp

openmp应用和原理

在 OS X 上使用 OpenCV 的 OpenMP

用 ISPC 编译器编译 OpenMP 程序