|
18 | 18 | pull_request: |
19 | 19 |
|
20 | 20 | jobs: |
| 21 | + build_linux_arm: |
| 22 | + strategy: |
| 23 | + matrix: |
| 24 | + os: [ubuntu-18.04] |
| 25 | + java: [8] |
| 26 | + |
| 27 | + runs-on: ${{ matrix.os }} |
| 28 | + |
| 29 | + steps: |
| 30 | + - name: Checkout Repo |
| 31 | + uses: actions/checkout@v2 |
| 32 | + |
| 33 | + - name: Setup JDK ${{ matrix.java }} |
| 34 | + uses: actions/setup-java@v1 |
| 35 | + with: |
| 36 | + java-version: ${{ matrix.java }} |
| 37 | + |
| 38 | + - name: Get Version Info |
| 39 | + run: | |
| 40 | + 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 |
| 41 | + 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 |
| 42 | + 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 |
| 43 | +
|
| 44 | + - name: Build OpenCV on Arm |
| 45 | + |
| 46 | + with: |
| 47 | + arch: armv7 |
| 48 | + distro: ubuntu18.04 |
| 49 | + |
| 50 | + # Not required, but speeds up builds |
| 51 | + githubToken: ${{ github.token }} |
| 52 | + |
| 53 | + # Create an artifacts directory |
| 54 | + setup: | |
| 55 | + mkdir -p "${PWD}/artifacts" |
| 56 | +
|
| 57 | + # Mount the artifacts directory as /artifacts in the container |
| 58 | + # Also mount the checked out repo as /host_repo so we can do a test build. |
| 59 | + dockerRunArgs: | |
| 60 | + --volume "${PWD}/artifacts:/artifacts" |
| 61 | + --volume "${PWD}:/host_repo" |
| 62 | +
|
| 63 | + run: | |
| 64 | + apt-get update -q -y |
| 65 | + apt-get install -q -y git wget cmake unzip build-essential default-jre default-jdk ant maven python3 |
| 66 | +
|
| 67 | + # TODO: I'd like to get this path automatically somehow. I think it might be |
| 68 | + # in /etc/environment but sourcing it didn't seem to work. Need to figure out |
| 69 | + # where it would be after starting a new shell. |
| 70 | + export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-armhf |
| 71 | +
|
| 72 | + wget https://github.com/opencv/opencv/archive/${{ env.OPENCV_VERSION }}.zip > /dev/null |
| 73 | + unzip ${{ env.OPENCV_VERSION }} > /dev/null |
| 74 | +
|
| 75 | + cd opencv-${{ env.OPENCV_VERSION }} |
| 76 | + mkdir build |
| 77 | + cd build |
| 78 | + cmake \ |
| 79 | + -D OPENCV_FORCE_3RDPARTY_BUILD=ON \ |
| 80 | + -D BUILD_JAVA=ON \ |
| 81 | + -D BUILD_FAT_JAVA_LIB=ON \ |
| 82 | + -D OPENCV_ENABLE_NONFREE=ON \ |
| 83 | + -D BUILD_SHARED_LIBS=OFF \ |
| 84 | + -D BUILD_PERF_TESTS=OFF \ |
| 85 | + -D BUILD_TESTS=OFF \ |
| 86 | + -D BUILD_EXAMPLES=OFF \ |
| 87 | + -D BUILD_DOCS=OFF \ |
| 88 | + -D BUILD_PACKAGE=OFF \ |
| 89 | + -D BUILD_opencv_python2=OFF \ |
| 90 | + -D BUILD_opencv_python3=OFF \ |
| 91 | + -D BUILD_opencv_apps=OFF \ |
| 92 | + -D BUILD_opencv_gapi=OFF \ |
| 93 | + -D CMAKE_BUILD_TYPE=RELEASE \ |
| 94 | + .. |
| 95 | + make -j8 |
| 96 | +
|
| 97 | + # Copy the build artifacts to the /artifacts directory, which will be |
| 98 | + # used by the host to upload them. |
| 99 | + mkdir -p /artifacts/bin |
| 100 | + mkdir -p /artifacts/lib |
| 101 | + cp bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar /artifacts/bin |
| 102 | + cp lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so /artifacts/lib |
| 103 | +
|
| 104 | + # And also copy the build artifacts to the repo, so we can do a test build. |
| 105 | + # Note that we use the repo checked out on the host so that we can use |
| 106 | + # actions/checkout for the Git stuff, rather than having to mess with |
| 107 | + # the authentication in this container. |
| 108 | + cp bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar /host_repo/upstream |
| 109 | + cp lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so /host_repo/src/main/resources/nu/pattern/opencv/linux/ARMv7 |
| 110 | +
|
| 111 | + # Peform a test build in the host repo, which now contains all of the |
| 112 | + # build artifacts. |
| 113 | + cd /host_repo |
| 114 | + mvn -B test |
| 115 | +
|
| 116 | + - name: Upload Artifacts |
| 117 | + uses: actions/upload-artifact@v2 |
| 118 | + with: |
| 119 | + name: ubuntu-18.04-arm |
| 120 | + path: | |
| 121 | + artifacts/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar |
| 122 | + artifacts/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so |
| 123 | +
|
21 | 124 | build_linux_arm64: |
22 | 125 | strategy: |
23 | 126 | matrix: |
@@ -231,7 +334,7 @@ jobs: |
231 | 334 | # Download and combine the artifacts from the above jobs and build the |
232 | 335 | # distribution jar. Uploads it as an artifact for subsequent steps. |
233 | 336 | build_dist: |
234 | | - needs: [build_linux_arm64, build_mac_linux_x64, build_windows] |
| 337 | + needs: [build_linux_arm, build_linux_arm64, build_mac_linux_x64, build_windows] |
235 | 338 |
|
236 | 339 | strategy: |
237 | 340 | matrix: |
@@ -263,6 +366,7 @@ jobs: |
263 | 366 | cp macos-10.15/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar upstream |
264 | 367 | cp macos-10.15/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib src/main/resources/nu/pattern/opencv/osx/x86_64 |
265 | 368 | cp ubuntu-18.04/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/x86_64 |
| 369 | + cp ubuntu-18.04-arm/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv7 |
266 | 370 | cp ubuntu-18.04-arm64/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv8 |
267 | 371 | cp windows-2016/x86/opencv_java${{ env.OPENCV_VERSION_SHORT }}.dll src/main/resources/nu/pattern/opencv/windows/x86_32 |
268 | 372 | cp windows-2016/x64/opencv_java${{ env.OPENCV_VERSION_SHORT }}.dll src/main/resources/nu/pattern/opencv/windows/x86_64 |
@@ -354,6 +458,7 @@ jobs: |
354 | 458 | cp macos-10.15/bin/opencv-${{ env.OPENCV_VERSION_SHORT }}.jar upstream |
355 | 459 | cp macos-10.15/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.dylib src/main/resources/nu/pattern/opencv/osx/x86_64 |
356 | 460 | cp ubuntu-18.04/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/x86_64 |
| 461 | + cp ubuntu-18.04-arm/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv7 |
357 | 462 | cp ubuntu-18.04-arm64/lib/libopencv_java${{ env.OPENCV_VERSION_SHORT }}.so src/main/resources/nu/pattern/opencv/linux/ARMv8 |
358 | 463 | cp windows-2016/x86/opencv_java${{ env.OPENCV_VERSION_SHORT }}.dll src/main/resources/nu/pattern/opencv/windows/x86_32 |
359 | 464 | cp windows-2016/x64/opencv_java${{ env.OPENCV_VERSION_SHORT }}.dll src/main/resources/nu/pattern/opencv/windows/x86_64 |
|
0 commit comments