作者: Sam(甄峰) sam_code@hotmail.com
1. OpenBLAS简介:
OpenBLAS 是一个基于GotoBLAS2的,经过优化的BLAS库。
BLAS(Basic Linear
Algebra Subprograms)是做什么的呢?它提供一系列的基于线性代数的,向量和矩阵计算的程序。
2. 编译介绍:
正常模式下,要编译OpenBLAS,需要提前准备以下工具和软件:
GNU Make
A C compiler, e.g. GCC or Clang
A Fortran compiler (optional, for LAPACK)
IBM MASS (optional, see below)
其中,fortran编译器是可选的,它为lapack所准备。
Android NDK并不包含Fortran编译器。所以通常编译不包含Lapack的OpenBLAS版本。
如果是使用ARM交叉编译器编译OpenBLAS。则因为很多编译器支持Fortran,所以可以编译带Lapack的版本。
3. NDK编译:
Sam 选用clang. 编译32bit版本。
创建文件---set_ENV:
内容如下:
export
NDK_BUNDLE_DIR=/opt/android-ndk-r15c
export
PATH=${NDK_BUNDLE_DIR}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:${NDK_BUNDLE_DIR}/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
export
LDFLAGS="-L${NDK_BUNDLE_DIR}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x"
export
CLANG_FLAGS="-target arm-linux-androideabi -marm -mfpu=vfp
-mfloat-abi=softfp --sysroot
${NDK_BUNDLE_DIR}/platforms/android-23/arch-arm -gcc-toolchain
${NDK_BUNDLE_DIR}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/
-I${NDK_BUNDLE_DIR}/sources/cxx-stl/llvm-libc++/include/"
# make TARGET=ARMV7
ONLY_CBLAS=1 AR=ar CC="clang ${CLANG_FLAGS}" HOSTCC=gcc
ARM_SOFTFP_ABI=1 -j4
$source set_ENV
$make TARGET=ARMV7 ONLY_CBLAS=1 AR=ar CC="clang
${CLANG_FLAGS}" HOSTCC=gcc ARM_SOFTFP_ABI=1 -j4
则可以编译出来了。