Skip to content

Commit 63ea1cd

Browse files
add apple silicon .dylib to release jar
1 parent 905c1ef commit 63ea1cd

File tree

7 files changed

+128
-23
lines changed

7 files changed

+128
-23
lines changed

.github/workflows/github_actions.yml

+22-6
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
runs-on: ${{ matrix.os }}
4141
strategy:
4242
matrix:
43-
os: [ ubuntu-latest, macos-11, macos-13-xlarge ]
43+
os: [ macos-13-xlarge ]
4444

4545
steps:
4646
- name: checkout
@@ -65,6 +65,11 @@ jobs:
6565
shell: bash
6666
name: assemble
6767
68+
- run: |
69+
brew install tree; tree;
70+
shell: bash
71+
name: tree
72+
6873
- run: |
6974
unset SYSTEM
7075
./gradlew test
@@ -160,7 +165,7 @@ jobs:
160165
runs-on: ${{ matrix.os }}
161166
strategy:
162167
matrix:
163-
os: [ macos-11, ubuntu-latest ]
168+
os: [ macos-11, ubuntu-latest, macos-13-xlarge]
164169
steps:
165170
- name: checkout
166171
uses: actions/checkout@v3
@@ -175,10 +180,17 @@ jobs:
175180
docker run -e "CFLAGS=$CFLAGS" -e "CPPFLAGS=$CPPFLAGS" -v $(pwd):/TileDB-Java -t lib_builder_2010 /TileDB-Java/ci/build.sh
176181
cp ./build/tiledb_jni/*.so ./build/install/lib/*.so ./build/install/lib64/*.so binaries_$RUNNER_OS/
177182
fi
178-
179-
if [[ ( "$RUNNER_OS" == "macOS" ) ]]; then
180-
./gradlew -PTILEDB_AZURE=ON assemble
181-
cp ./build/tiledb_jni/*.dylib ./build/install/lib/*.dylib binaries_$RUNNER_OS/
183+
184+
if [[ "$RUNNER_OS" == "macOS" ]]; then
185+
if [[ "$(uname -m)" == "arm64" ]]; then
186+
echo "ARM Mac";
187+
mkdir binaries_$RUNNER_OS/arm
188+
./gradlew -PTILEDB_AZURE=ON assemble
189+
cp ./build/tiledb_jni/arm/*.dylib ./build/install/arm/lib/*.dylib binaries_$RUNNER_OS/arm
190+
else
191+
./gradlew -PTILEDB_AZURE=ON assemble
192+
cp ./build/tiledb_jni/*.dylib ./build/install/lib/*.dylib binaries_$RUNNER_OS/
193+
fi
182194
fi
183195
184196
name: 'Build and Upload (Ubuntu and OSX)'
@@ -242,8 +254,10 @@ jobs:
242254
mv Upload-*/* .
243255
244256
mkdir -p ./build/install/lib
257+
mkdir .build/install/arm/lib
245258
mkdir ./build/install/lib64
246259
mkdir ./build/tiledb_jni/
260+
mkdir ./build/tiledb_jni/arm
247261
mkdir ./build/tiledb_jni/Release
248262
mkdir ./build/install/bin
249263
@@ -258,6 +272,8 @@ jobs:
258272
# OSX
259273
mv libtiledb.dylib ./build/install/lib
260274
mv libtiledbjni.dylib ./build/tiledb_jni
275+
mv arm/libtiledb.dylib .build/install/arm/lib
276+
mv arm/libtiledbjni.dylib .build/tiledb_jni/arm
261277
262278
# Linux
263279
cp libtiledb.so ./build/install/lib

CMakeLists.txt

+9-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,15 @@ if (TILEDB_JNI_SUPERBUILD)
6565
project(TileDB-JNI-Superbuild)
6666

6767
# Path to install everything to, for embedding in the jar.
68-
set(RESOURCE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/install")
68+
if (APPLE) # macOS
69+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
70+
set(RESOURCE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/install")
71+
else()
72+
set(RESOURCE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/install/arm")
73+
endif()
74+
else()
75+
set(RESOURCE_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/install")
76+
endif()
6977

7078
message(STATUS "Starting TileDB-JNI superbuild.")
7179
include("cmake/TileDB-JNI-Superbuild.cmake")

build.gradle

+50-6
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,26 @@ dependencies {
4646
}
4747

4848
task cmakeTask(type: Exec) {
49-
File jniLibs = new File(buildDir.path + "/tiledb_jni")
50-
File tiledbLibs = new File(buildDir.path + "/install/lib")
49+
def osName = System.getProperty('os.name').toLowerCase()
50+
def arch = System.getProperty('os.arch').toLowerCase()
51+
52+
println "arch: "
53+
println arch;
54+
println osName;
55+
56+
File jniLibs;
57+
File tiledbLibs;
58+
59+
if (osName.contains("mac") && arch.equals("aarch64")) {
60+
println "mac arm building2";
61+
jniLibs = new File(buildDir.path + "/tiledb_jni/arm")
62+
tiledbLibs = new File(buildDir.path + "/install/arm/lib")
63+
}else{
64+
println " building2";
65+
66+
jniLibs = new File(buildDir.path + "/tiledb_jni")
67+
tiledbLibs = new File(buildDir.path + "/install/lib")
68+
}
5169

5270
onlyIf { !buildDir.exists() || !jniLibs.exists() || !tiledbLibs.exists() }
5371
doFirst {
@@ -83,8 +101,26 @@ task cmakeTask(type: Exec) {
83101
}
84102

85103
task cmakeBuildTask(type: Exec) {
86-
File jniLibs = new File(buildDir.path + "/tiledb_jni")
87-
File tiledbLibs = new File(buildDir.path + "/install/lib")
104+
def osName = System.getProperty('os.name').toLowerCase()
105+
def arch = System.getProperty('os.arch').toLowerCase()
106+
107+
println "arch: "
108+
println arch;
109+
println osName;
110+
111+
File jniLibs;
112+
File tiledbLibs;
113+
114+
if (osName.contains("mac") && arch.equals("aarch64")) {
115+
println "mac arm building";
116+
jniLibs = new File(buildDir.path + "/tiledb_jni/arm")
117+
tiledbLibs = new File(buildDir.path + "/install/arm/lib")
118+
}else{
119+
println " building";
120+
121+
jniLibs = new File(buildDir.path + "/tiledb_jni")
122+
tiledbLibs = new File(buildDir.path + "/install/lib")
123+
}
88124

89125
onlyIf { !buildDir.exists() || !jniLibs.exists() || !tiledbLibs.exists() }
90126
doFirst {
@@ -116,7 +152,7 @@ test {
116152
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
117153
systemProperty "java.library.path", "$buildDir\\install\\bin;$buildDir\\tiledb_jni\\Release"
118154
} else {
119-
systemProperty "java.library.path", "$buildDir/install/lib:$buildDir/install/lib64:$buildDir/tiledb_jni"
155+
systemProperty "java.library.path", "$buildDir/install/lib:$buildDir/install/lib64:$buildDir/tiledb_jni:$buildDir/install/arm/lib:$buildDir/tiledb_jni/arm"
120156
}
121157

122158
testLogging {
@@ -125,12 +161,19 @@ test {
125161
}
126162

127163
jar {
164+
// macOS arm
165+
into(new File('arm/lib').toString()) {
166+
from file("$buildDir/install/arm/lib/libtiledb.dylib")
167+
from file("$buildDir/tiledb_jni/arm/libtiledbjni.dylib")
168+
}
169+
128170
into(new File('lib').toString()) {
129-
// Linux and macOS
171+
// Linux
130172
from file("$buildDir/install/lib/libtiledb.so")
131173
from file("$buildDir/install/lib64/libtiledb.so")
132174
from file("$buildDir/tiledb_jni/libtiledbjni.so")
133175

176+
// macOS intel
134177
from file("$buildDir/install/lib/libtiledb.dylib")
135178
from file("$buildDir/install/lib64/libtiledb.dylib")
136179
from file("$buildDir/tiledb_jni/libtiledbjni.dylib")
@@ -141,6 +184,7 @@ jar {
141184
from file("$buildDir/tiledb_jni/Release/tiledbjni.dll")
142185
}
143186

187+
144188
manifest {
145189
attributes("Implementation-Title": "Gradle",
146190
"Implementation-Version": archiveVersion)

cmake/TileDB-JNI-Superbuild.cmake

+34-9
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,37 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/FindTileDB_EP.cmake)
6060
# Set up the regular build (i.e. non-superbuild).
6161
############################################################
6262

63-
ExternalProject_Add(tiledb_jni
64-
SOURCE_DIR ${PROJECT_SOURCE_DIR}
65-
CMAKE_ARGS
66-
-DTILEDB_JNI_SUPERBUILD=OFF
67-
${INHERITED_CMAKE_ARGS}
68-
INSTALL_COMMAND ""
69-
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/tiledb_jni
70-
DEPENDS ${TILEDB_JNI_EXTERNAL_PROJECTS}
71-
)
63+
if (APPLE) # macOS
64+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
65+
ExternalProject_Add(tiledb_jni
66+
SOURCE_DIR ${PROJECT_SOURCE_DIR}
67+
CMAKE_ARGS
68+
-DTILEDB_JNI_SUPERBUILD=OFF
69+
${INHERITED_CMAKE_ARGS}
70+
INSTALL_COMMAND ""
71+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/tiledb_jni/
72+
DEPENDS ${TILEDB_JNI_EXTERNAL_PROJECTS}
73+
)
74+
else()
75+
ExternalProject_Add(tiledb_jni
76+
SOURCE_DIR ${PROJECT_SOURCE_DIR}
77+
CMAKE_ARGS
78+
-DTILEDB_JNI_SUPERBUILD=OFF
79+
${INHERITED_CMAKE_ARGS}
80+
INSTALL_COMMAND ""
81+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/tiledb_jni/arm
82+
DEPENDS ${TILEDB_JNI_EXTERNAL_PROJECTS}
83+
)
84+
endif()
85+
else()
86+
ExternalProject_Add(tiledb_jni
87+
SOURCE_DIR ${PROJECT_SOURCE_DIR}
88+
CMAKE_ARGS
89+
-DTILEDB_JNI_SUPERBUILD=OFF
90+
${INHERITED_CMAKE_ARGS}
91+
INSTALL_COMMAND ""
92+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/tiledb_jni/
93+
DEPENDS ${TILEDB_JNI_EXTERNAL_PROJECTS}
94+
)
95+
endif()
96+

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ TILEDB_S3=ON
55
TILEDB_AZURE=OFF
66
TILEDB_HDFS=OFF
77
TILEDB_SERIALIZATION=OFF
8-
FORCE_BUILD_TILEDB=OFF
8+
FORCE_BUILD_TILEDB=ON
99
DOWNLOAD_TILEDB_PREBUILT=ON
1010
TILEDB_SKIP_S3AWSSDK_DIR_LENGTH_CHECK=ON

src/main/java/io/tiledb/libtiledb/NativeLibLoader.java

+6
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,12 @@ private static Path extractLibraryFile(
322322
private static Path findNativeLibrary(String libraryName, boolean mapLibraryName) {
323323
String mappedLibraryName = mapLibraryName ? System.mapLibraryName(libraryName) : libraryName;
324324
String libDir = LIB_RESOURCE_DIR;
325+
326+
if (System.getProperty("os.name").contains("mac")
327+
&& System.getProperty("os.arch").equals("aarch64")) {
328+
libDir = "arm" + libDir;
329+
}
330+
325331
String libPath = libDir + "/" + mappedLibraryName;
326332

327333
boolean hasNativeLib = hasResource(libPath);

swig/customCode/NativeLibLoader.java

+6
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,12 @@ private static Path extractLibraryFile(
322322
private static Path findNativeLibrary(String libraryName, boolean mapLibraryName) {
323323
String mappedLibraryName = mapLibraryName ? System.mapLibraryName(libraryName) : libraryName;
324324
String libDir = LIB_RESOURCE_DIR;
325+
326+
if (System.getProperty("os.name").contains("mac")
327+
&& System.getProperty("os.arch").equals("aarch64")) {
328+
libDir = "arm" + libDir;
329+
}
330+
325331
String libPath = libDir + "/" + mappedLibraryName;
326332

327333
boolean hasNativeLib = hasResource(libPath);

0 commit comments

Comments
 (0)