Skip to content

Commit

Permalink
* Add support for iOS and Accelerate to presets for OpenBLAS (pull #515
Browse files Browse the repository at this point in the history
)
  • Loading branch information
johanvos authored and saudet committed Feb 4, 2018
1 parent 553517a commit 53e9326
Show file tree
Hide file tree
Showing 4 changed files with 187 additions and 2 deletions.
21 changes: 21 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,27 @@ matrix:
install: true
script: ./ci/install-travis.sh

- os: osx
osx_image: xcode7.3
env: PROJ=openblas OS=ios-arm
install: true
script: ./ci/install-travis.sh
- os: osx
osx_image: xcode7.3
env: PROJ=openblas OS=ios-arm64
install: true
script: ./ci/install-travis.sh
- os: osx
osx_image: xcode7.3
env: PROJ=openblas OS=ios-x86
install: true
script: ./ci/install-travis.sh
- os: osx
osx_image: xcode7.3
env: PROJ=openblas OS=ios-x86_64
install: true
script: ./ci/install-travis.sh

- os: linux
env: PROJ=opencv,flandmark OS=linux-armhf
install: true
Expand Down
40 changes: 39 additions & 1 deletion openblas/cppbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ case $PLATFORM in
export NOFORTRAN=1
fi
export BINARY=32
export TARGET=ARMV5
export TARGET=ARMV5 # to disable hard-float functions unsupported by Android
export ARM_SOFTFP_ABI=1
sed -i 's/-march=armv5/-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16/' Makefile.arm
;;
Expand All @@ -57,6 +57,44 @@ case $PLATFORM in
export BINARY=32
export TARGET=ATOM
;;
ios-arm)
export CC="$(xcrun --sdk iphoneos --find clang) -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -arch armv7"
export FC=
export NO_LAPACK=1
export NOFORTRAN=1
export BINARY=32
export TARGET=ARMV5 # to disable unsupported assembler from iOS SDK
export NO_SHARED=1
;;
ios-arm64)
# https://gmplib.org/list-archives/gmp-bugs/2014-September/003538.html
sed -i="" 's/add.sp, sp, #-(11 \* 16)/sub sp, sp, #(11 \* 16)/g' kernel/arm64/sgemm_kernel_4x4.S
export CC="$(xcrun --sdk iphoneos --find clang) -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -arch arm64"
export FC=
export NO_LAPACK=1
export NOFORTRAN=1
export BINARY=64
export TARGET=ARMV8
export NO_SHARED=1
;;
ios-x86)
export CC="$(xcrun --sdk iphonesimulator --find clang) -isysroot $(xcrun --sdk iphonesimulator --show-sdk-path) -arch i686"
export FC=
export NO_LAPACK=1
export NOFORTRAN=1
export BINARY=32
export TARGET=ATOM
export NO_SHARED=1
;;
ios-x86_64)
export CC="$(xcrun --sdk iphonesimulator --find clang) -isysroot $(xcrun --sdk iphonesimulator --show-sdk-path) -arch x86_64"
export FC=
export NO_LAPACK=1
export NOFORTRAN=1
export BINARY=64
export TARGET=ATOM
export NO_SHARED=1
;;
linux-x86)
export CC="$OLDCC -m32"
export FC="$OLDFC -m32"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@
@Platform(value = "linux-armhf", preloadpath = {"/usr/arm-linux-gnueabihf/lib/", "/usr/lib/arm-linux-gnueabihf/"}),
@Platform(value = "linux-x86", preloadpath = {"/lib32/", "/lib/", "/usr/lib32/", "/usr/lib/", "/opt/intel/lib/ia32/", "/opt/intel/mkl/lib/ia32/"}),
@Platform(value = "linux-x86_64", preloadpath = {"/lib64/", "/lib/", "/usr/lib64/", "/usr/lib/", "/opt/intel/lib/intel64/", "/opt/intel/mkl/lib/intel64/"}),
@Platform(value = "linux-ppc64", preloadpath = {"/usr/lib/powerpc64-linux-gnu/", "/usr/lib/powerpc64le-linux-gnu/"}) })
@Platform(value = "linux-ppc64", preloadpath = {"/usr/lib/powerpc64-linux-gnu/", "/usr/lib/powerpc64le-linux-gnu/"}),
@Platform(value = "ios", include = {"openblas_config.h", "cblas.h", "blas_extra.h" /* no LAPACK */}, preload = "libopenblas")
})
public class openblas implements LoadEnabled, InfoMapper {

@Override public void init(ClassProperties properties) {
Expand Down
124 changes: 124 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,130 @@
</properties>
</profile>

<profile>
<id>javacpp-platform-ios-arm</id>
<activation>
<property>
<name>javacpp.platform</name>
<value>ios-arm</value>
</property>
</activation>
<modules>
<module>openblas</module>
</modules>
<properties>
<javacpp.platform.android-arm></javacpp.platform.android-arm>
<javacpp.platform.android-arm64></javacpp.platform.android-arm64>
<javacpp.platform.android-x86></javacpp.platform.android-x86>
<javacpp.platform.android-x86_64></javacpp.platform.android-x86_64>
<javacpp.platform.ios-arm>${javacpp.platform}</javacpp.platform.ios-arm>
<javacpp.platform.ios-arm64></javacpp.platform.ios-arm64>
<javacpp.platform.ios-x86></javacpp.platform.ios-x86>
<javacpp.platform.ios-x86_64></javacpp.platform.ios-x86_64>
<javacpp.platform.linux-armhf></javacpp.platform.linux-armhf>
<javacpp.platform.linux-arm64></javacpp.platform.linux-arm64>
<javacpp.platform.linux-ppc64le></javacpp.platform.linux-ppc64le>
<javacpp.platform.linux-x86></javacpp.platform.linux-x86>
<javacpp.platform.linux-x86_64></javacpp.platform.linux-x86_64>
<javacpp.platform.macosx-x86_64></javacpp.platform.macosx-x86_64>
<javacpp.platform.windows-x86></javacpp.platform.windows-x86>
<javacpp.platform.windows-x86_64></javacpp.platform.windows-x86_64>
</properties>
</profile>

<profile>
<id>javacpp-platform-ios-arm64</id>
<activation>
<property>
<name>javacpp.platform</name>
<value>ios-arm64</value>
</property>
</activation>
<modules>
<module>openblas</module>
</modules>
<properties>
<javacpp.platform.android-arm></javacpp.platform.android-arm>
<javacpp.platform.android-arm64></javacpp.platform.android-arm64>
<javacpp.platform.android-x86></javacpp.platform.android-x86>
<javacpp.platform.android-x86_64></javacpp.platform.android-x86_64>
<javacpp.platform.ios-arm></javacpp.platform.ios-arm>
<javacpp.platform.ios-arm64>${javacpp.platform}</javacpp.platform.ios-arm64>
<javacpp.platform.ios-x86></javacpp.platform.ios-x86>
<javacpp.platform.ios-x86_64></javacpp.platform.ios-x86_64>
<javacpp.platform.linux-armhf></javacpp.platform.linux-armhf>
<javacpp.platform.linux-arm64></javacpp.platform.linux-arm64>
<javacpp.platform.linux-ppc64le></javacpp.platform.linux-ppc64le>
<javacpp.platform.linux-x86></javacpp.platform.linux-x86>
<javacpp.platform.linux-x86_64></javacpp.platform.linux-x86_64>
<javacpp.platform.macosx-x86_64></javacpp.platform.macosx-x86_64>
<javacpp.platform.windows-x86></javacpp.platform.windows-x86>
<javacpp.platform.windows-x86_64></javacpp.platform.windows-x86_64>
</properties>
</profile>

<profile>
<id>javacpp-platform-ios-x86</id>
<activation>
<property>
<name>javacpp.platform</name>
<value>ios-x86</value>
</property>
</activation>
<modules>
<module>openblas</module>
</modules>
<properties>
<javacpp.platform.android-arm></javacpp.platform.android-arm>
<javacpp.platform.android-arm64></javacpp.platform.android-arm64>
<javacpp.platform.android-x86></javacpp.platform.android-x86>
<javacpp.platform.android-x86_64></javacpp.platform.android-x86_64>
<javacpp.platform.ios-arm></javacpp.platform.ios-arm>
<javacpp.platform.ios-arm64></javacpp.platform.ios-arm64>
<javacpp.platform.ios-x86>${javacpp.platform}</javacpp.platform.ios-x86>
<javacpp.platform.ios-x86_64></javacpp.platform.ios-x86_64>
<javacpp.platform.linux-armhf></javacpp.platform.linux-armhf>
<javacpp.platform.linux-arm64></javacpp.platform.linux-arm64>
<javacpp.platform.linux-ppc64le></javacpp.platform.linux-ppc64le>
<javacpp.platform.linux-x86></javacpp.platform.linux-x86>
<javacpp.platform.linux-x86_64></javacpp.platform.linux-x86_64>
<javacpp.platform.macosx-x86_64></javacpp.platform.macosx-x86_64>
<javacpp.platform.windows-x86></javacpp.platform.windows-x86>
<javacpp.platform.windows-x86_64></javacpp.platform.windows-x86_64>
</properties>
</profile>

<profile>
<id>javacpp-platform-ios-x86_64</id>
<activation>
<property>
<name>javacpp.platform</name>
<value>ios-x86_64</value>
</property>
</activation>
<modules>
<module>openblas</module>
</modules>
<properties>
<javacpp.platform.android-arm></javacpp.platform.android-arm>
<javacpp.platform.android-arm64></javacpp.platform.android-arm64>
<javacpp.platform.android-x86></javacpp.platform.android-x86>
<javacpp.platform.android-x86_64></javacpp.platform.android-x86_64>
<javacpp.platform.ios-arm></javacpp.platform.ios-arm>
<javacpp.platform.ios-arm64></javacpp.platform.ios-arm64>
<javacpp.platform.ios-x86></javacpp.platform.ios-x86>
<javacpp.platform.ios-x86_64>${javacpp.platform}</javacpp.platform.ios-x86_64>
<javacpp.platform.linux-armhf></javacpp.platform.linux-armhf>
<javacpp.platform.linux-arm64></javacpp.platform.linux-arm64>
<javacpp.platform.linux-ppc64le></javacpp.platform.linux-ppc64le>
<javacpp.platform.linux-x86></javacpp.platform.linux-x86>
<javacpp.platform.linux-x86_64></javacpp.platform.linux-x86_64>
<javacpp.platform.macosx-x86_64></javacpp.platform.macosx-x86_64>
<javacpp.platform.windows-x86></javacpp.platform.windows-x86>
<javacpp.platform.windows-x86_64></javacpp.platform.windows-x86_64>
</properties>
</profile>

<profile>
<id>javacpp-platform-linux-armhf</id>
<activation>
Expand Down

2 comments on commit 53e9326

@radxe
Copy link

@radxe radxe commented on 53e9326 Feb 8, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello, @saudet ,
To build skia need to access google releated sites, it is blocked at china, so I can't build it.
could you please to build a libskia.so, and libjniSkia.dylib for iOS arm64 for me? thanks!
I use robovm(robovm.mobidevelop.com), I need a arm64 bit version.
another question, I know flutter use skia, I know it's size is about 6M, but I see skia for linux is 200M+ for javacpp preset, for Mac osx is 20M+, why is the difference so large?

thanks a lot!

@nornagon
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@radxe the size difference is because the javacpp Skia build includes all its dependencies (libjpeg, zlib, harfbuzz, libwebp, etc. etc.), whereas the flutter build probably uses the system-installed versions of those libraries. Bundling the dependencies makes it easy to ensure that everything's available and linked, and you don't get runtime link errors when distributing a javacpp app.

Please sign in to comment.