From f38a0a255e3233450501bf55799e3ef52f16cea2 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Mon, 23 Oct 2023 12:08:10 +0000 Subject: [PATCH] Add native-linux-riscv64 package This patch adds support for linux-riscv64. It requires updating uraimo/run-on-arch-action to v2.4.0 for support for riscv64. It also uses JDK 21 for riscv64 as it's the first LTS version with support for riscv64 (backports to JDK 17 done and JDK 11 in progress). --- .github/workflows/maven.yml | 56 +++++++- all/pom.xml | 5 + brotli4j/pom.xml | 17 +++ .../brotli4j/Brotli4jLoader.java | 2 + natives/linux-riscv64/build.sh | 21 +++ natives/linux-riscv64/pom.xml | 120 ++++++++++++++++++ .../brotli4j/linux/riscv64/NativeLoader.java | 30 +++++ natives/pom.xml | 15 +++ 8 files changed, 259 insertions(+), 7 deletions(-) create mode 100644 natives/linux-riscv64/build.sh create mode 100644 natives/linux-riscv64/pom.xml create mode 100644 natives/linux-riscv64/src/main/java/com/aayushatharva/brotli4j/linux/riscv64/NativeLoader.java diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 7f57cb0c..1064a86e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -98,7 +98,7 @@ jobs: restore-keys: | ${{ runner.os }}-pr-${{ env.cache-name }}- ${{ runner.os }}-pr- - - uses: uraimo/run-on-arch-action@v2.3.0 + - uses: uraimo/run-on-arch-action@v2.4.0 name: Run commands id: runcmd with: @@ -145,7 +145,7 @@ jobs: key: ${{ runner.os }}-pr-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-pr-${{ matrix.arch }}-pr-${{ env.cache-name }}-pr- - - uses: uraimo/run-on-arch-action@v2.3.0 + - uses: uraimo/run-on-arch-action@v2.4.0 name: Run commands id: runcmd with: @@ -186,7 +186,7 @@ jobs: key: ${{ runner.os }}-pr-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-pr-${{ matrix.arch }}-pr-${{ env.cache-name }}-pr- - - uses: uraimo/run-on-arch-action@v2.3.0 + - uses: uraimo/run-on-arch-action@v2.4.0 name: Run commands id: runcmd with: @@ -228,7 +228,7 @@ jobs: key: ${{ runner.os }}-pr-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-pr-${{ matrix.arch }}-pr-${{ env.cache-name }}-pr- - - uses: uraimo/run-on-arch-action@v2.3.0 + - uses: uraimo/run-on-arch-action@v2.4.0 name: Run commands id: runcmd with: @@ -275,7 +275,7 @@ jobs: key: ${{ runner.os }}-pr-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-pr-${{ matrix.arch }}-pr-${{ env.cache-name }}-pr- - - uses: uraimo/run-on-arch-action@v2.3.0 + - uses: uraimo/run-on-arch-action@v2.4.0 name: Run commands id: runcmd with: @@ -316,7 +316,7 @@ jobs: key: ${{ runner.os }}-pr-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-pr-${{ matrix.arch }}-pr-${{ env.cache-name }}-pr- - - uses: uraimo/run-on-arch-action@v2.3.0 + - uses: uraimo/run-on-arch-action@v2.4.0 name: Run commands id: runcmd with: @@ -359,7 +359,7 @@ jobs: key: ${{ runner.os }}-pr-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-pr-${{ matrix.arch }}-pr-${{ env.cache-name }}-pr- - - uses: uraimo/run-on-arch-action@v2.3.0 + - uses: uraimo/run-on-arch-action@v2.4.0 name: Run commands id: runcmd with: @@ -384,6 +384,48 @@ jobs: chmod +x ./mvnw ./mvnw -B -ntp clean package + Linux-riscv64-Build-JDK21: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/cache@v3 + env: + cache-name: cache-m2-repository-${{ runner.os }}-jdk21-riscv64 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-pr-${{ env.cache-name }}-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-pr-${{ matrix.arch }}-pr-${{ env.cache-name }}-pr- + - uses: uraimo/run-on-arch-action@v2.4.0 + name: Run commands + id: runcmd + with: + arch: riscv64 + distro: ubuntu22.04 + + # Not required, but speeds up builds by storing container images in + # a GitHub package registry. + githubToken: ${{ github.token }} + + # Mount the .m2/repository + dockerRunArgs: | + --platform linux/riscv64 + --volume "/home/runner/.m2/repository/:/root/.m2/repository" + + # Install dependencies + install: | + apt-get update + apt-get install -q -y curl gnupg2 autoconf automake libtool make tar git cmake build-essential + + curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash && . ~/.jabba/jabba.sh + jabba install 21.0.0-custom=tgz+https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.1%2B12-ea-beta/OpenJDK21U-jdk_riscv64_linux_hotspot_ea_21-0-1-12.tar.gz -o /jdk + + run: | + export MAVEN_OPTS="-Djdk.lang.Process.launchMechanism=vfork" + export JAVA_HOME="/jdk" + chmod +x ./mvnw + ./mvnw -B -ntp clean package + Windows-x86_64-Build-JDK8: runs-on: windows-latest steps: diff --git a/all/pom.xml b/all/pom.xml index e52e122c..ec2d50f7 100644 --- a/all/pom.xml +++ b/all/pom.xml @@ -64,6 +64,11 @@ native-linux-s390x ${project.version} + + com.aayushatharva.brotli4j + native-linux-riscv64 + ${project.version} + com.aayushatharva.brotli4j native-osx-aarch64 diff --git a/brotli4j/pom.xml b/brotli4j/pom.xml index 4c18b596..6f95e5af 100644 --- a/brotli4j/pom.xml +++ b/brotli4j/pom.xml @@ -110,6 +110,23 @@ + + linux-riscv64 + + + Linux + riscv64 + + + + + com.aayushatharva.brotli4j + native-linux-riscv64 + ${project.parent.version} + + + + windows-x86_64 diff --git a/brotli4j/src/main/java/com/aayushatharva/brotli4j/Brotli4jLoader.java b/brotli4j/src/main/java/com/aayushatharva/brotli4j/Brotli4jLoader.java index 5d21f807..19ba205f 100644 --- a/brotli4j/src/main/java/com/aayushatharva/brotli4j/Brotli4jLoader.java +++ b/brotli4j/src/main/java/com/aayushatharva/brotli4j/Brotli4jLoader.java @@ -128,6 +128,8 @@ private static String getPlatform() { return "linux-armv7"; } else if ("s390x".equalsIgnoreCase(archName)) { return "linux-s390x"; + } else if ("riscv64".equalsIgnoreCase(archName)) { + return "linux-riscv64"; } } else if (osName.startsWith("Windows")) { if ("amd64".equalsIgnoreCase(archName)) { diff --git a/natives/linux-riscv64/build.sh b/natives/linux-riscv64/build.sh new file mode 100644 index 00000000..84deba17 --- /dev/null +++ b/natives/linux-riscv64/build.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +CURPATH=$(pwd) +TARGET_CLASSES_PATH="target/classes/lib/linux-riscv64" +TARGET_PATH="target" + +exitWithError() { + cd ${CURPATH} + echo "*** An error occurred. Please check log messages. ***" + exit $1 +} + +mkdir -p "$TARGET_CLASSES_PATH" + +cd "$TARGET_PATH" +cmake ../../../ || exitWithError $? +make || exitWithError $? +rm -f "$CURPATH/${TARGET_CLASSES_PATH}/libbrotli.so" +cp "./libbrotli.so" "$CURPATH/${TARGET_CLASSES_PATH}" || exitWithError $? + +cd "${CURPATH}" diff --git a/natives/linux-riscv64/pom.xml b/natives/linux-riscv64/pom.xml new file mode 100644 index 00000000..e94a9771 --- /dev/null +++ b/natives/linux-riscv64/pom.xml @@ -0,0 +1,120 @@ + + + + + natives + com.aayushatharva.brotli4j + 1.12.0 + + 4.0.0 + + native-linux-riscv64 + jar + + + com.aayushatharva.brotli4j.linux.riscv64 + + + + + + org.moditect + moditect-maven-plugin + 1.0.0.RC2 + + + add-module-infos + package + + add-module-info + + + 9 + + + module ${javaModuleName} { + requires com.aayushatharva.brotli4j.service; + exports ${javaModuleName} to com.aayushatharva.brotli4j; + provides com.aayushatharva.brotli4j.service.BrotliNativeProvider with + ${javaModuleName}.NativeLoader; + } + + + + --multi-release + 9 + + + + + + + + + + + linux-riscv64 + + + Linux + riscv64 + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.1.0 + + + build-native + process-classes + + exec + + + /bin/bash + + build.sh + + ${project.basedir} + + + + + + + + + + release + + + + resources + + + + + + + diff --git a/natives/linux-riscv64/src/main/java/com/aayushatharva/brotli4j/linux/riscv64/NativeLoader.java b/natives/linux-riscv64/src/main/java/com/aayushatharva/brotli4j/linux/riscv64/NativeLoader.java new file mode 100644 index 00000000..5ca26f97 --- /dev/null +++ b/natives/linux-riscv64/src/main/java/com/aayushatharva/brotli4j/linux/riscv64/NativeLoader.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020-2023, Aayush Atharva + * + * Brotli4j licenses this file to you under the + * Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.aayushatharva.brotli4j.linux.riscv64; + +import com.aayushatharva.brotli4j.service.BrotliNativeProvider; + +/** + * Service class to access the native lib in a JPMS context + */ +public class NativeLoader implements BrotliNativeProvider { + + @Override + public String platformName() { + return "linux-riscv64"; + } +} diff --git a/natives/pom.xml b/natives/pom.xml index 0238b9e2..5c8d8076 100644 --- a/natives/pom.xml +++ b/natives/pom.xml @@ -32,6 +32,7 @@ linux-aarch64 linux-armv7 linux-s390x + linux-riscv64 windows-x86_64 osx-x86_64 osx-aarch64 @@ -99,6 +100,19 @@ + + linux-riscv64 + + + Linux + riscv64 + + + + linux-riscv64 + + + windows-x86_64 @@ -145,6 +159,7 @@ linux-aarch64 linux-armv7 linux-s390x + linux-riscv64 windows-x86_64 osx-x86_64 osx-aarch64