From 72ebcd5c96621a56db7a1016c51876bce69f1480 Mon Sep 17 00:00:00 2001 From: wangyijia Date: Sat, 30 Aug 2025 01:46:26 +0800 Subject: [PATCH 1/5] Add riscv64 support Co-authored-by: gong-flying --- buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base | 1 + buildscripts/kokoro/linux_artifacts.sh | 2 ++ buildscripts/kokoro/unix.sh | 4 +++- buildscripts/kokoro/upload_artifacts.sh | 3 +++ buildscripts/make_dependencies.sh | 2 ++ compiler/build.gradle | 5 ++++- compiler/check-artifact.sh | 4 ++++ 7 files changed, 19 insertions(+), 2 deletions(-) diff --git a/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base b/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base index da2c46904ca..bd8e4f4f764 100644 --- a/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base +++ b/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base @@ -9,6 +9,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ curl \ g++-aarch64-linux-gnu \ g++-powerpc64le-linux-gnu \ + g++-riscv64-linux-gnu \ openjdk-8-jdk \ pkg-config \ && \ diff --git a/buildscripts/kokoro/linux_artifacts.sh b/buildscripts/kokoro/linux_artifacts.sh index 49d9932dfa0..bdbcced4006 100755 --- a/buildscripts/kokoro/linux_artifacts.sh +++ b/buildscripts/kokoro/linux_artifacts.sh @@ -21,3 +21,5 @@ trap spongify_logs EXIT # internal compiler error: output_operand: invalid %-code "$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-ubuntu2004 env \ SKIP_TESTS=true ARCH=s390_64 /grpc-java/buildscripts/kokoro/unix.sh +"$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-multiarch env \ + SKIP_TESTS=true ARCH=riscv64 /grpc-java/buildscripts/kokoro/unix.sh diff --git a/buildscripts/kokoro/unix.sh b/buildscripts/kokoro/unix.sh index e65825cac01..5d5fc03101c 100755 --- a/buildscripts/kokoro/unix.sh +++ b/buildscripts/kokoro/unix.sh @@ -13,6 +13,8 @@ # ARCH=ppcle_64 ./buildscripts/kokoro/unix.sh # For s390x arch: # ARCH=s390_64 ./buildscripts/kokoro/unix.sh +# For riscv64 arch: +# ARCH=riscv_64 ./buildscripts/kokoro/unix.sh # This script assumes `set -e`. Removing it may lead to undefined behavior. set -exu -o pipefail @@ -89,7 +91,7 @@ fi LOCAL_MVN_TEMP=$(mktemp -d) # Note that this disables parallel=true from GRADLE_FLAGS if [[ -z "${ALL_ARTIFACTS:-}" ]]; then - if [[ "$ARCH" = "aarch_64" || "$ARCH" = "ppcle_64" || "$ARCH" = "s390_64" ]]; then + if [[ "$ARCH" = "aarch_64" || "$ARCH" = "ppcle_64" || "$ARCH" = "s390_64" || "$ARCH" = "riscv64" ]]; then GRADLE_FLAGS+=" -x grpc-compiler:generateTestProto -x grpc-compiler:generateTestLiteProto" GRADLE_FLAGS+=" -x grpc-compiler:testGolden -x grpc-compiler:testLiteGolden" GRADLE_FLAGS+=" -x grpc-compiler:testDeprecatedGolden -x grpc-compiler:testDeprecatedLiteGolden" diff --git a/buildscripts/kokoro/upload_artifacts.sh b/buildscripts/kokoro/upload_artifacts.sh index 39e27eff522..5140f607a12 100644 --- a/buildscripts/kokoro/upload_artifacts.sh +++ b/buildscripts/kokoro/upload_artifacts.sh @@ -40,6 +40,9 @@ LOCAL_OTHER_ARTIFACTS="$KOKORO_GFILE_DIR"/github/grpc-java/artifacts/ # for linux s390x platform [[ "$(find "$LOCAL_MVN_ARTIFACTS" -type f -iname 'protoc-gen-grpc-java-*-linux-s390_64.exe' | wc -l)" != '0' ]] +# for linux riscv64 platform +[[ "$(find "$LOCAL_MVN_ARTIFACTS" -type f -iname 'protoc-gen-grpc-java-*-linux-riscv64.exe' | wc -l)" != '0' ]] + # from macos job: [[ "$(find "$LOCAL_MVN_ARTIFACTS" -type f -iname 'protoc-gen-grpc-java-*-osx-x86_64.exe' | wc -l)" != '0' ]] # copy all x86 artifacts to aarch until native artifacts are built diff --git a/buildscripts/make_dependencies.sh b/buildscripts/make_dependencies.sh index e5d2450afe7..cce5d84148d 100755 --- a/buildscripts/make_dependencies.sh +++ b/buildscripts/make_dependencies.sh @@ -55,6 +55,8 @@ else GCC_ARCH=s390x-linux-gnu elif [[ "$ARCH" == loongarch_64 ]]; then GCC_ARCH=loongarch64-unknown-linux-gnu + elif [[ "$ARCH" == riscv* ]]; then + GCC_ARCH=riscv64-unknown-linux-gnu else echo "Unknown architecture: $ARCH" exit 1 diff --git a/compiler/build.gradle b/compiler/build.gradle index 6d832ecd56b..fc0dce43ed3 100644 --- a/compiler/build.gradle +++ b/compiler/build.gradle @@ -63,6 +63,7 @@ model { linker.executable = 's390x-linux-gnu-g++' } target("loongarch_64") + target("riscv64") } clang(Clang) { target("aarch_64") {} @@ -76,6 +77,7 @@ model { aarch_64 { architecture "aarch_64" } s390_64 { architecture "s390_64" } loongarch_64 { architecture "loongarch_64" } + riscv64 { architecture "riscv64" } } components { @@ -86,7 +88,8 @@ model { 'ppcle_64', 'aarch_64', 's390_64', - 'loongarch_64' + 'loongarch_64', + 'riscv64' ]) { // If arch is not within the defined platforms, we do not specify the // targetPlatform so that Gradle will choose what is appropriate. diff --git a/compiler/check-artifact.sh b/compiler/check-artifact.sh index 12d7709a2a8..a2632be81b7 100755 --- a/compiler/check-artifact.sh +++ b/compiler/check-artifact.sh @@ -63,6 +63,8 @@ checkArch () assertEq "$format" "elf64-little" $LINENO elif [[ "$ARCH" == loongarch_64 ]]; then echo $format + elif [[ "$ARCH" == riscv64 ]]; then + assertEq "$format" "elf64-littleriscv" $LINENO assertEq "$format" "elf64-loongarch" $LINENO elif [[ "$ARCH" == ppcle_64 ]]; then format="$(powerpc64le-linux-gnu-objdump -f "$1" | grep -o "file format .*$" | grep -o "[^ ]*$")" @@ -121,6 +123,8 @@ checkDependencies () white_list="${white_list}\|libm\.so\.6" elif [[ "$ARCH" == aarch_64 ]]; then white_list="${white_list}\|ld-linux-aarch64\.so\.1" + elif [[ "$ARCH" == riscv64 ]]; then + white_list="libm\.so\.6\|libc\.so\.6\|ld-linux-riscv64-lp64d\.so\.1" fi elif [[ "$OS" == osx ]]; then dump_cmd='otool -L '"$1"' | fgrep dylib' From 1d2491dd95c2e90110743d79023c49172796f8d7 Mon Sep 17 00:00:00 2001 From: wangyijia Date: Sat, 30 Aug 2025 10:21:16 +0800 Subject: [PATCH 2/5] Add riscv64 support Co-authored-by: gong-flying --- buildscripts/make_dependencies.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildscripts/make_dependencies.sh b/buildscripts/make_dependencies.sh index cce5d84148d..6695449c09d 100755 --- a/buildscripts/make_dependencies.sh +++ b/buildscripts/make_dependencies.sh @@ -56,7 +56,7 @@ else elif [[ "$ARCH" == loongarch_64 ]]; then GCC_ARCH=loongarch64-unknown-linux-gnu elif [[ "$ARCH" == riscv* ]]; then - GCC_ARCH=riscv64-unknown-linux-gnu + GCC_ARCH=riscv64-linux-gnu else echo "Unknown architecture: $ARCH" exit 1 From 70ccae99fd687616f638d963de8a10f54b7bf8b7 Mon Sep 17 00:00:00 2001 From: wangyijia Date: Tue, 2 Sep 2025 09:18:23 +0800 Subject: [PATCH 3/5] try to fix diffrent CI results Co-authored-by: gong-flying --- compiler/build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/build.gradle b/compiler/build.gradle index fc0dce43ed3..adb19a90405 100644 --- a/compiler/build.gradle +++ b/compiler/build.gradle @@ -63,7 +63,10 @@ model { linker.executable = 's390x-linux-gnu-g++' } target("loongarch_64") - target("riscv64") + target("riscv64") { + cppCompiler.executable = 'riscv64-linux-gnu-g++' + linker.executable = 'riscv64-linux-gnu-g++' + } } clang(Clang) { target("aarch_64") {} From 00882620c8e3174bc4e46b8791da8bd28e813b23 Mon Sep 17 00:00:00 2001 From: wangyijia Date: Wed, 3 Sep 2025 21:05:07 +0800 Subject: [PATCH 4/5] try to fix diffrent CI results Co-authored-by: gong-flying --- compiler/build.gradle | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/compiler/build.gradle b/compiler/build.gradle index adb19a90405..fc0dce43ed3 100644 --- a/compiler/build.gradle +++ b/compiler/build.gradle @@ -63,10 +63,7 @@ model { linker.executable = 's390x-linux-gnu-g++' } target("loongarch_64") - target("riscv64") { - cppCompiler.executable = 'riscv64-linux-gnu-g++' - linker.executable = 'riscv64-linux-gnu-g++' - } + target("riscv64") } clang(Clang) { target("aarch_64") {} From 29bcce42f75587d52368381f8aa51b513b663d8b Mon Sep 17 00:00:00 2001 From: wangyijia Date: Thu, 4 Sep 2025 23:40:23 +0800 Subject: [PATCH 5/5] fix the location of `riscv` in check-artifact.sh, the old version had a bug Co-authored-by: gong-flying --- compiler/check-artifact.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/check-artifact.sh b/compiler/check-artifact.sh index a2632be81b7..4b78beeb5e7 100755 --- a/compiler/check-artifact.sh +++ b/compiler/check-artifact.sh @@ -61,10 +61,10 @@ checkArch () assertEq "$format" "elf64-x86-64" $LINENO elif [[ "$ARCH" == aarch_64 ]]; then assertEq "$format" "elf64-little" $LINENO - elif [[ "$ARCH" == loongarch_64 ]]; then - echo $format elif [[ "$ARCH" == riscv64 ]]; then assertEq "$format" "elf64-littleriscv" $LINENO + elif [[ "$ARCH" == loongarch_64 ]]; then + echo $format assertEq "$format" "elf64-loongarch" $LINENO elif [[ "$ARCH" == ppcle_64 ]]; then format="$(powerpc64le-linux-gnu-objdump -f "$1" | grep -o "file format .*$" | grep -o "[^ ]*$")"