Skip to content

Commit

Permalink
Apple M1 support part 2 (#9731)
Browse files Browse the repository at this point in the history
* Update osx build for mac m1

* Get rid of old readme, add arm64 detection for apple

* Update CMakeLists.txt

* Update

* Add profile for protoc on mac osx arm64

* Update pom.xml

* Update pom.xml

* Add cross compilation support

* Update pom.xml

* Fix up protoc, cmake declarations
  • Loading branch information
agibsonccc committed Jul 15, 2022
1 parent 64b4197 commit 381844e
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 129 deletions.
8 changes: 7 additions & 1 deletion libnd4j/CMakeLists.txt
Expand Up @@ -241,6 +241,12 @@ elseif (SD_ANDROID_BUILD)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -fPIC -Wno-braced-scalar-init -Wno-delete-non-virtual-dtor -Wno-unused-command-line-argument -Wno-dangling-else -D_RELEASE=true")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g -fPIC -Wno-braced-scalar-init -Wno-delete-non-virtual-dtor -Wno-unused-command-line-argument -Wno-dangling-else")
elseif (APPLE)
if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64*" OR "${SD_ARCH}" MATCHES "armv8-a")
set(SD_ARCH armv8-a)
set(SD_X86_BUILD false)
set(CMAKE_OSX_ARCHITECTURES "arm64")
endif()

set(CMAKE_CXX_FLAGS_RELEASE "-O3 -fPIC -Wno-braced-scalar-init -Wno-delete-non-virtual-dtor -Wno-unused-command-line-argument -Wno-dangling-else -D__APPLE_OS__=true -D_RELEASE=true")
set(CMAKE_CXX_FLAGS_DEBUG " -O0 -g -fPIC -Wno-braced-scalar-init -Wno-delete-non-virtual-dtor -Wno-unused-command-line-argument -Wno-dangling-else -D__APPLE_OS__=true")
elseif(WIN32)
Expand Down Expand Up @@ -277,7 +283,7 @@ else()
endif()

if(SD_NATIVE)
IF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64*")
IF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64*" OR ${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm64*")
set(SD_X86_BUILD false)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mcpu=native")
ELSE()
Expand Down
62 changes: 0 additions & 62 deletions libnd4j/macOSx10 (CPU only).md

This file was deleted.

24 changes: 0 additions & 24 deletions libnd4j/setuposx.sh

This file was deleted.

152 changes: 111 additions & 41 deletions nd4j/nd4j-backends/nd4j-api-parent/nd4j-api/pom.xml
Expand Up @@ -20,8 +20,8 @@
-->

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

Expand Down Expand Up @@ -128,6 +128,110 @@
</dependency>
</dependencies>

<profiles>
<profile>
<activation>
<!-- By default protoc provided binaries don't need a protocCommand. One is downloaded. Protoc plugin does not support
protoc yet. This means we need to use a system protoc on non intel platforms. -->
<os>
<arch>x86_64</arch>
</os>
</activation>
<id>protoc-provided-binaries</id>

<build>
<plugins>
<plugin>
<groupId>com.github.os72</groupId>
<artifactId>protoc-jar-maven-plugin</artifactId>
<version>${protoc-jar-maven-plugin.version}</version>
<executions>
<execution>
<id>tensorflow</id>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<protocVersion>${google.protobuf.version}</protocVersion>
<extension>.proto</extension>
<includeDirectories>
<include>src/main/protobuf/tf</include>
<include>src/main/protobuf/onnx</include>
<include>src/main/protobuf/nd4j</include>
</includeDirectories>
<inputDirectories>
<include>src/main/protobuf/tf/tensorflow</include>
<include>src/main/protobuf/onnx</include>
<include>src/main/protobuf/nd4j</include>
</inputDirectories>
<addSources>main</addSources>
<cleanOutputFolder>false</cleanOutputFolder>
<outputDirectory>src/main/java/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>


</profile>

<profile>
<id>testresources</id>
</profile>

<!-- See: https://github.com/os72/protoc-jar/issues/93 We need to use a system compiled protoc since one is not provided
by the plugin.-->
<profile>
<id>osx-aarch64-protoc</id>
<build>
<plugins>
<plugin>
<groupId>com.github.os72</groupId>
<artifactId>protoc-jar-maven-plugin</artifactId>
<executions>
<execution>
<id>tensorflow</id>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<protocVersion>${google.protobuf.version}</protocVersion>
<extension>.proto</extension>
<includeDirectories>
<include>src/main/protobuf/tf</include>
<include>src/main/protobuf/onnx</include>
<include>src/main/protobuf/nd4j</include>
</includeDirectories>
<inputDirectories>
<include>src/main/protobuf/tf/tensorflow</include>
<include>src/main/protobuf/onnx</include>
<include>src/main/protobuf/nd4j</include>
</inputDirectories>
<addSources>main</addSources>
<cleanOutputFolder>false</cleanOutputFolder>
<outputDirectory>src/main/java/</outputDirectory>
<protocCommand>protoc</protocCommand> <!-- brew install protobuf -->
</configuration>
</execution>

</executions>
</plugin>
</plugins>
</build>
<activation>
<os>
<name>mac os x</name>
<arch>aarch64</arch>
<family>mac</family>
</os>
</activation>
</profile>
</profiles>

<build>
<plugins>
<plugin>
Expand All @@ -150,47 +254,17 @@
<configuration>
<target>
<delete
file="${project.build.sourceDirectory}/onnx/OnnxMlProto3.java"/>
file="${project.build.sourceDirectory}/onnx/OnnxMlProto3.java"/>
<delete
file="${project.build.sourceDirectory}/onnx/OnnxOperatorsProto3.java"/>
file="${project.build.sourceDirectory}/onnx/OnnxOperatorsProto3.java"/>
<delete
file="${project.build.sourceDirectory}/onnx/OnnxProto3.java"/>
file="${project.build.sourceDirectory}/onnx/OnnxProto3.java"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.github.os72</groupId>
<artifactId>protoc-jar-maven-plugin</artifactId>
<version>${protoc-jar-maven-plugin.version}</version>
<executions>
<execution>
<id>tensorflow</id>
<phase>generate-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<protocVersion>${google.protobuf.version}</protocVersion>
<extension>.proto</extension>
<includeDirectories>
<include>src/main/protobuf/tf</include>
<include>src/main/protobuf/onnx</include>
<include>src/main/protobuf/nd4j</include>
</includeDirectories>
<inputDirectories>
<include>src/main/protobuf/tf/tensorflow</include>
<include>src/main/protobuf/onnx</include>
<include>src/main/protobuf/nd4j</include>
</inputDirectories>
<addSources>main</addSources>
<cleanOutputFolder>false</cleanOutputFolder>
<outputDirectory>src/main/java/</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
Expand Down Expand Up @@ -218,9 +292,5 @@
</plugins>
</build>

<profiles>
<profile>
<id>testresources</id>
</profile>
</profiles>

</project>
1 change: 0 additions & 1 deletion nd4j/nd4j-backends/nd4j-backend-impls/nd4j-native/pom.xml
Expand Up @@ -68,7 +68,6 @@
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-preset</artifactId>
<version>${project.version}</version>
<optional>true</optional>
</dependency>
</dependencies>

Expand Down

0 comments on commit 381844e

Please sign in to comment.