How to build OpenBLAS for iPhone iOS

OpenBLAS 介绍

OpenBLAS是由中科院软件所并行软件与计算科学实验室发起的基于GotoBLAS2 1.13 BSD版的开源BLAS库高性能实现.

OpenBLAS源码地址

OpenBLAS地址:https://github.com/xianyi/OpenBLAS/tree/release-0.2.21

build OpenBLAS for iPhone

1.下载源码,下载之后如下图所示:


1179305-22263c2185de4542.png
WX20171024-104921@2x.png

2.找到c_check文件,在这段代码的后面

$cross_suffix = "";
     if (dirname($compiler_name) ne ".") {
         $cross_suffix .= dirname($compiler_name) . "/";
     }
     if (basename($compiler_name) =~ /([^\s]*-)(.*)/) {
         $cross_suffix .= $1;
     }

添加如下代码:

 $cross_suffix = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/";

3.新建一个openBlasBuild.sh文件,写入如下代码:

TOOLCHAIN_PATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
SYSROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.0.sdk
make TARGET=ARMV8 BINARY=64 HOSTCC=clang CC="$TOOLCHAIN_PATH/clang -isysroot $SYSROOT_PATH -arch arm64 -miphoneos-version-min=8.0 -O2" NOFORTRAN=1 libs

参数说明TOOLCHAIN_PATH xcode安装目录,SYSROOT_PATH iOS SDK目录,make编译,TARGET目标架构(可以是ARMV8,x86_64等),-arch arm64可以是arm64、armv7、arm7s。
4.把openBlasBuild.sh执行文件放到刚刚下载的OpenBLAS源码根目录下,如下图所示:

1179305-84ca7c81873276d0.png
WX20171024-112904@2x.png

赋予openBlasBuild.sh文件可执行权限:

chmod a+x openBlasBuild.sh

然后运行:

./openBlasBuild.sh

等待编译完成,在OpenBLAS源码根目录下就生成了libopenblas_armv8p-r0.2.20.a文件。

如何使用

刚刚生成的是一个libopenblas_armv8p-r0.2.20.a静态库,需要的头文件如下图所示:(在OpenBLAS源码目录下都可以找得到这些头文件)


1179305-9e477b9f2bcdf237.png
WX20171024-114218@2x.png

把这个文件夹加入到iOS工程引头文件就可以使用了,注意需要把用到的那个类的后缀名改为.mm,这样xcode才可以编译通过,因为这个库是c++写的。

编译支持模拟器x86_64

需要支持模拟器的把步骤3的代码改为:

TOOLCHAIN_PATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
SYSROOT_PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
make TARGET=x86_64 BINARY=64 HOSTCC=clang CC="$TOOLCHAIN_PATH/clang -isysroot $SYSROOT_PATH -arch x86_64 -miphoneos-version-min=8.0 -O2" NOFORTRAN=1 libs

新下载一份OpenBLAS源码,按照234步骤编译。通过lipo -create -output命令把两个.a合在一块就可以同时支持模拟器与真机了(iPhone5s以上机型与模拟器)。
两个.a文件合并完成了,还需要合并用到的头文件中的config.h文件,每次生成.a文件都会生成对应的config.h文件。config.h里面是定义的宏,我们用#if !TARGET_IPHONE_SIMULATOR预编译宏区别是真机还是模拟器。把两个config.h文件的内容合并为一个如下图所示:

1179305-0d4874dec7f09abc.png
WX20171024-120503@2x.png

1179305-e3a0a3ad16dfd982.png
WX20171024-120701@2x.png

制作好的openBlas库git地址:https://github.com/PingshengZhao/openBlasForiOS

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值