@@ -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
0 commit comments