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..6695449c09d 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-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..4b78beeb5e7 100755 --- a/compiler/check-artifact.sh +++ b/compiler/check-artifact.sh @@ -61,6 +61,8 @@ checkArch () assertEq "$format" "elf64-x86-64" $LINENO elif [[ "$ARCH" == aarch_64 ]]; then assertEq "$format" "elf64-little" $LINENO + elif [[ "$ARCH" == riscv64 ]]; then + assertEq "$format" "elf64-littleriscv" $LINENO elif [[ "$ARCH" == loongarch_64 ]]; then echo $format assertEq "$format" "elf64-loongarch" $LINENO @@ -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'