Skip to content

Commit 0fbeccc

Browse files
committed
- first attempt at adding native m1 builds using remote runner - my laptop
1 parent b909d15 commit 0fbeccc

File tree

4 files changed

+94
-2
lines changed

4 files changed

+94
-2
lines changed

.github/workflows/build.yml

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ jobs:
121121
artifacts/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar
122122
artifacts/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so
123123
124+
125+
126+
124127
build_linux_arm64:
125128
strategy:
126129
matrix:
@@ -224,6 +227,9 @@ jobs:
224227
artifacts/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar
225228
artifacts/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so
226229
230+
231+
232+
227233
# Build native libraries for Linux and Mac. Uploads the libraries
228234
# as artifacts which are used in subsequent jobs.
229235
build_mac_linux_x64:
@@ -293,6 +299,78 @@ jobs:
293299
opencv-${{ env.OPENCV_VERSION }}/build/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so
294300
opencv-${{ env.OPENCV_VERSION }}/build/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib
295301
302+
303+
304+
305+
# Build Apple Silicon Mac native binary.
306+
# See https://cmake.org/cmake/help/v3.23/variable/CMAKE_APPLE_SILICON_PROCESSOR.html
307+
build_mac_aarch64:
308+
strategy:
309+
matrix:
310+
java: [8]
311+
runs-on: [self-hosted, macOS, ARM64]
312+
313+
steps:
314+
- name: Checkout Repo
315+
uses: actions/checkout@v2
316+
317+
- name: Setup JDK ${{ matrix.java }}
318+
uses: actions/setup-java@v1
319+
with:
320+
java-version: ${{ matrix.java }}
321+
322+
- name: Get Version Info
323+
run: |
324+
echo "POM_VERSION=$(mvn build-helper:parse-version org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
325+
echo "OPENCV_VERSION=$(mvn build-helper:parse-version org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=opencv.version.long -q -DforceStdout)" >> $GITHUB_ENV
326+
echo "OPENCV_VERSION_SHORT=$(mvn build-helper:parse-version org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=opencv.version.short -q -DforceStdout)" >> $GITHUB_ENV
327+
328+
- name: Build OpenCV
329+
run: |
330+
wget https://github.com/opencv/opencv/archive/${{ env.OPENCV_VERSION }}.zip > /dev/null
331+
unzip ${{ env.OPENCV_VERSION }} > /dev/null
332+
cd opencv-${{ env.OPENCV_VERSION }}
333+
mkdir build
334+
cd build
335+
cmake \
336+
-D OPENCV_FORCE_3RDPARTY_BUILD=ON \
337+
-D BUILD_JAVA=ON \
338+
-D BUILD_FAT_JAVA_LIB=ON \
339+
-D OPENCV_ENABLE_NONFREE=ON \
340+
-D BUILD_SHARED_LIBS=OFF \
341+
-D BUILD_PERF_TESTS=OFF \
342+
-D BUILD_TESTS=OFF \
343+
-D BUILD_EXAMPLES=OFF \
344+
-D BUILD_DOCS=OFF \
345+
-D BUILD_PACKAGE=OFF \
346+
-D BUILD_opencv_python2=OFF \
347+
-D BUILD_opencv_python3=OFF \
348+
-D BUILD_opencv_apps=OFF \
349+
-D BUILD_opencv_gapi=OFF \
350+
-D CMAKE_BUILD_TYPE=RELEASE \
351+
-D CMAKE_APPLE_SILICON_PROCESSOR=arm64 \
352+
..
353+
make -j8
354+
355+
- name: Copy Libraries
356+
run: |
357+
cp opencv-${{ env.OPENCV_VERSION }}/build/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar upstream || :
358+
cp opencv-${{ env.OPENCV_VERSION }}/build/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib src/main/resources/nu/pattern/opencv/osx/ARMv8 || :
359+
360+
- name: Build with Maven
361+
run: mvn -B test
362+
363+
- name: Upload Libraries
364+
uses: actions/upload-artifact@v2
365+
with:
366+
name: macos-aarch64
367+
path: |
368+
opencv-${{ env.OPENCV_VERSION }}/build/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar
369+
opencv-${{ env.OPENCV_VERSION }}/build/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib
370+
371+
372+
373+
296374
# Downloads the Windows distribution from OpenCV, extracts it and uploads
297375
# the native libraries as artifacts for use by subsequent jobs. This is
298376
# in leiu of building the native libraries on Windows.
@@ -331,10 +409,13 @@ jobs:
331409
name: windows-2016
332410
path: opencv/build/java
333411

412+
413+
414+
334415
# Download and combine the artifacts from the above jobs and build the
335416
# distribution jar. Uploads it as an artifact for subsequent steps.
336417
build_dist:
337-
needs: [build_linux_arm, build_linux_arm64, build_mac_linux_x64, build_windows]
418+
needs: [build_mac_aarch64, build_linux_arm, build_linux_arm64, build_mac_linux_x64, build_windows]
338419

339420
strategy:
340421
matrix:
@@ -365,6 +446,7 @@ jobs:
365446
run: |
366447
cp macos-10.15/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar upstream
367448
cp macos-10.15/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib src/main/resources/nu/pattern/opencv/osx/x86_64
449+
cp macos-aarch64/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib src/main/resources/nu/pattern/opencv/osx/ARMv8
368450
cp ubuntu-18.04/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/x86_64
369451
cp ubuntu-18.04-arm/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv7
370452
cp ubuntu-18.04-arm64/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv8
@@ -380,6 +462,9 @@ jobs:
380462
name: dist
381463
path: target/opencv*
382464

465+
466+
467+
383468
# Downloads the distribution jar that was built above and runs
384469
# a short smoke test on it on many platforms and versions of
385470
# Java. This is intended to ensure that the built jar
@@ -418,6 +503,9 @@ jobs:
418503
shell: bash
419504
run: java -cp opencv-${{ env.POM_VERSION }}.jar nu.pattern.PrintVersion
420505

506+
507+
508+
421509
publish:
422510
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
423511

@@ -457,6 +545,7 @@ jobs:
457545
run: |
458546
cp macos-10.15/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar upstream
459547
cp macos-10.15/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib src/main/resources/nu/pattern/opencv/osx/x86_64
548+
cp macos-aarch64/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib src/main/resources/nu/pattern/opencv/osx/ARMv8
460549
cp ubuntu-18.04/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/x86_64
461550
cp ubuntu-18.04-arm/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv7
462551
cp ubuntu-18.04-arm64/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv8

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<packaging>bundle</packaging>
88
<groupId>org.openpnp</groupId>
99
<artifactId>opencv</artifactId>
10-
<version>4.5.5-0</version>
10+
<version>4.5.5-1</version>
1111
<name>OpenPnP OpenCV</name>
1212
<description>OpenCV packaged with native libraries and loader for multiple platforms.</description>
1313
<url>http://github.com/openpnp/opencv</url>

src/main/java/nu/pattern/OpenCV.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,9 @@ private static Path extractNativeBinary(final OS os, final Arch arch) {
377377
case X86_64:
378378
location = "/nu/pattern/opencv/osx/x86_64/libopencv_java455.dylib";
379379
break;
380+
case ARMv8:
381+
location = "/nu/pattern/opencv/osx/ARMv8/libopencv_java455.dylib";
382+
break;
380383
default:
381384
throw new UnsupportedPlatformException(os, arch);
382385
}

src/main/resources/nu/pattern/opencv/osx/ARMv8/README.md

Whitespace-only changes.

0 commit comments

Comments
 (0)