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.下载源码,下载之后如下图所示:


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源码根目录下,如下图所示:

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源码目录下都可以找得到这些头文件)


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文件的内容合并为一个如下图所示:

WX20171024-120503@2x.png

WX20171024-120701@2x.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,958评论 19 139
  • 前言Android Build 系统是 Android 源码的一部分。关于如何获取 Android 源码,请参照 ...
    加菲猫Jack阅读 2,360评论 0 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,404评论 25 708
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,573评论 9 467
  • 每向你,走近一步 我的心就离你疏远 你懂得,却不愿去明白。 今年的夏天很好 你未在场 也不曾看到葳蕤绿叶 铺陈在蜿...
    月倚舟阅读 308评论 1 2