diff --git a/1003-Added-support-for-building-the-loongarch64-protoc-bi.patch b/1003-Added-support-for-building-the-loongarch64-protoc-bi.patch new file mode 100644 index 0000000000000000000000000000000000000000..75f588daad9cbe8f0cddd57c6026f95926ad71cd --- /dev/null +++ b/1003-Added-support-for-building-the-loongarch64-protoc-bi.patch @@ -0,0 +1,45 @@ +From 4ca123978d4170d709768f5559315f561490fe2f Mon Sep 17 00:00:00 2001 +From: Wenlong Zhang +Date: Wed, 15 Oct 2025 01:35:17 +0000 +Subject: [PATCH] Added support for building the loongarch64 protoc binaries + with Kokoro + +--- + protoc-artifacts/build-protoc.sh | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/protoc-artifacts/build-protoc.sh b/protoc-artifacts/build-protoc.sh +index 20ca057..5aab39a 100755 +--- a/protoc-artifacts/build-protoc.sh ++++ b/protoc-artifacts/build-protoc.sh +@@ -95,6 +95,8 @@ checkArch () + assertEq $format "elf64-little" $LINENO + elif [[ "$ARCH" == riscv64 ]]; then + assertEq $format "elf64-littleriscv" $LINENO ++ elif [[ "$ARCH" == loongarch64 ]]; then ++ assertEq $format "elf64-loongarch" $LINENO + elif [[ "$ARCH" == s390_64 ]]; then + if [[ $host_machine == s390x ]];then + assertEq $format "elf64-s390" $LINENO +@@ -167,6 +169,9 @@ checkDependencies () + elif [[ "$ARCH" == riscv64 ]]; then + dump_cmd='objdump -p '"$1"' | grep NEEDED' + white_list="libz\.so\.1\|libm\.so\.6\|libc\.so\.6\|ld-linux-riscv64-lp64d\.so\.1" ++ elif [[ "$ARCH" == loongarch64 ]]; then ++ dump_cmd='objdump -p '"$1"' | grep NEEDED' ++ white_list="libz\.so\.1\|libm\.so\.6\|libc\.so\.6\|ld-linux-loongarch-lp64d\.so\.1" + fi + elif [[ "$OS" == osx ]]; then + dump_cmd='otool -L '"$1"' | fgrep dylib' +@@ -233,6 +238,8 @@ elif [[ "$(uname)" == Linux* ]]; then + CONFIGURE_ARGS="$CONFIGURE_ARGS --host=powerpc64le-linux-gnu" + elif [[ "$ARCH" == riscv64 ]]; then + CONFIGURE_ARGS="$CONFIGURE_ARGS --host=riscv64-linux-gnu" ++ elif [[ "$ARCH" == loongarch64 ]]; then ++ CONFIGURE_ARGS="$CONFIGURE_ARGS --host=loongarch64-linux-gnu" + elif [[ "$ARCH" == s390_64 ]]; then + CXXFLAGS="$CXXFLAGS -m64" + CONFIGURE_ARGS="$CONFIGURE_ARGS --host=s390x-linux-gnu" +-- +2.43.0 + diff --git a/1004-Add-protoc-java-support-for-loongarch64.patch b/1004-Add-protoc-java-support-for-loongarch64.patch new file mode 100644 index 0000000000000000000000000000000000000000..43bcc50b462a0ce567e8d16a6c1bbe697fcee920 --- /dev/null +++ b/1004-Add-protoc-java-support-for-loongarch64.patch @@ -0,0 +1,26 @@ +From 72ed72bb66a3ee391fb791992851bb9f14cd6ad9 Mon Sep 17 00:00:00 2001 +From: Wenlong Zhang +Date: Wed, 15 Oct 2025 02:04:38 +0000 +Subject: [PATCH] Add support for loongarch64 + +--- + src/main/java/com/github/os72/protocjar/PlatformDetector.java | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/main/java/com/github/os72/protocjar/PlatformDetector.java b/src/main/java/com/github/os72/protocjar/PlatformDetector.java +index b8f08e5..16920cb 100644 +--- a/src/main/java/com/github/os72/protocjar/PlatformDetector.java ++++ b/src/main/java/com/github/os72/protocjar/PlatformDetector.java +@@ -214,6 +214,9 @@ public class PlatformDetector + if ("riscv64".equals(value)) { + return "riscv64"; + } ++ if ("loongarch64".equals(value)) { ++ return "loongarch64"; ++ } + if ("s390".equals(value)) { + return "s390_32"; + } +-- +2.43.0 + diff --git a/1005-Added-support-for-building-the-loongarch64-protoc-ge.patch b/1005-Added-support-for-building-the-loongarch64-protoc-ge.patch new file mode 100644 index 0000000000000000000000000000000000000000..cc0da9c02e165b8276a082cdcb367e48bebea052 --- /dev/null +++ b/1005-Added-support-for-building-the-loongarch64-protoc-ge.patch @@ -0,0 +1,54 @@ +From fd86e1d640f2acb56f00d1aeedb303f85b6b53ee Mon Sep 17 00:00:00 2001 +From: Wenlong Zhang +Date: Thu, 16 Oct 2025 08:54:03 +0000 +Subject: [PATCH] Added support for building the loongarch64 + protoc-gen-grpc-java + +--- + buildscripts/kokoro/unix.sh | 2 +- + compiler/check-artifact.sh | 2 +- + gradle/libs.versions.toml | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/buildscripts/kokoro/unix.sh b/buildscripts/kokoro/unix.sh +index 048aef9..8eaccb0 100755 +--- a/buildscripts/kokoro/unix.sh ++++ b/buildscripts/kokoro/unix.sh +@@ -90,7 +90,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 == "riscv64" ]]; then ++ if [[ $ARCH == "aarch_64" || $ARCH == "riscv64" || $ARCH == "loongarch64" ]]; 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/compiler/check-artifact.sh b/compiler/check-artifact.sh +index ebe9dc4..b633dd9 100755 +--- a/compiler/check-artifact.sh ++++ b/compiler/check-artifact.sh +@@ -126,7 +126,7 @@ checkDependencies () + white_list="libm\.so\.6\|libc\.so\.6\|ld-linux-riscv64-lp64d\.so\.1" + elif [[ "$ARCH" == loongarch_64 ]]; then + dump_cmd='objdump -x '"$1"' | grep NEEDED' +- white_list="linux-vdso\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld\.so\.1" ++ white_list="linux-vdso\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld\.so\.1\|ld-linux-loongarch-lp64d\.so\.1" + elif [[ "$ARCH" == ppcle_64 ]]; then + dump_cmd='powerpc64le-linux-gnu-objdump -x '"$1"' |grep "NEEDED"' + white_list="linux-vdso64\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld64\.so\.2" +diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml +index 57aefc4..7e0b3a6 100644 +--- a/gradle/libs.versions.toml ++++ b/gradle/libs.versions.toml +@@ -8,7 +8,7 @@ netty = '4.1.87.Final' + # SECURITY.md + nettytcnative = '2.0.61.Final' + opencensus = "0.31.1" +-protobuf = "3.22.3" ++protobuf = "3.25.1" + + [libraries] + android-annotations = "com.google.android:annotations:4.1.1.4" +-- +2.43.0 + diff --git a/spark.spec b/spark.spec index 3ee04f13c6d3e3d71ef24166718560e7de63e89a..b8916d2826765a7905609763f5d687d30e418f40 100644 --- a/spark.spec +++ b/spark.spec @@ -4,7 +4,7 @@ Summary: A unified analytics engine for large-scale data processing. Name: spark Version: 3.5.0 -Release: 5 +Release: 6 License: Apache 2.0 URL: http://spark.apache.org/ Source0: https://github.com/apache/spark/archive/v%{version}.tar.gz @@ -18,12 +18,16 @@ Patch0001: 0001-change-mvn-scalafmt.patch Patch0002: 0002-Upgrade-os-maven-plugin-to-1.7.1.patch Patch0003: backport-CVE-2024-23945.patch -%ifarch riscv64 -BuildRequires: protobuf-devel protobuf-compiler -BuildRequires: autoconf automake libtool pkgconfig zlib-devel libstdc++-static gcc-c++ Patch1000: 1000-Added-support-for-building-the-riscv64-protoc-binari.patch Patch1001: 1001-Add-protoc-java-support-for-riscv64.patch Patch1002: 1002-Added-support-for-building-the-riscv64-protoc-gen-gr.patch +Patch1003: 1003-Added-support-for-building-the-loongarch64-protoc-bi.patch +Patch1004: 1004-Add-protoc-java-support-for-loongarch64.patch +Patch1005: 1005-Added-support-for-building-the-loongarch64-protoc-ge.patch + +%ifarch riscv64 loongarch64 +BuildRequires: protobuf-devel protobuf-compiler +BuildRequires: autoconf automake libtool pkgconfig zlib-devel libstdc++-static gcc-c++ %endif BuildRequires: java-1.8.0-openjdk-devel git maven @@ -35,51 +39,73 @@ ExclusiveArch: x86_64 aarch64 ppc64le riscv64 loongarch64 Apache Spark achieves high performance for both batch and streaming data, using a state-of-the-art DAG scheduler, a query optimizer, and a physical execution engine. %prep -%ifarch riscv64 -mkdir -p ${HOME}/%{name}-prep_dir +%setup -q + +%patch0001 -p1 +%patch0002 -p1 +%patch0003 -p1 +%ifarch riscv64 loongarch64 +mkdir -p %{_builddir}/%{name}-%{version}/%{name}-prep_dir export PROTOC_VERSION="3."$(protoc --version | awk '{print $NF}') +%ifarch riscv64 mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=${PROTOC_VERSION} -Dclassifier=linux-riscv64 -Dpackaging=exe -Dfile=/usr/bin/protoc +%endif +%ifarch loongarch64 +mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=${PROTOC_VERSION} -Dclassifier=linux-loongarch_64 -Dpackaging=exe -Dfile=/usr/bin/protoc +%endif # protoc -tar -mxf %{SOURCE1} -C ${HOME}/%{name}-prep_dir -pushd ${HOME}/%{name}-prep_dir/protobuf-3.21.7 +tar -mxf %{SOURCE1} -C %{_builddir}/%{name}-%{version}/%{name}-prep_dir +pushd %{_builddir}/%{name}-%{version}/%{name}-prep_dir/protobuf-3.21.7 %patch1000 -p1 +%patch1003 -p1 ./autogen.sh +%ifarch riscv64 ./protoc-artifacts/build-protoc.sh linux riscv64 protoc mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.21.7 -Dclassifier=linux-riscv64 -Dpackaging=exe -Dfile=protoc-artifacts/target/linux/riscv64/protoc.exe +%endif +%ifarch loongarch64 +./protoc-artifacts/build-protoc.sh linux loongarch64 protoc +mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.21.7 -Dclassifier=linux-loongarch64 -Dpackaging=exe -Dfile=protoc-artifacts/target/linux/loongarch64/protoc.exe +%endif popd + # protoc-jar -tar -mxf %{SOURCE2} -C ${HOME}/%{name}-prep_dir -pushd ${HOME}/%{name}-prep_dir/protoc-jar-3.11.4 +tar -mxf %{SOURCE2} -C %{_builddir}/%{name}-%{version}/%{name}-prep_dir +pushd %{_builddir}/%{name}-%{version}/%{name}-prep_dir/protoc-jar-3.11.4 %patch1001 -p1 +%patch1004 -p1 mvn clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true popd # protoc-jar-maven-plugin -unzip %{SOURCE3} -d ${HOME}/%{name}-prep_dir -pushd ${HOME}/%{name}-prep_dir/protoc-jar-maven-plugin-3.11.4 +unzip %{SOURCE3} -d %{_builddir}/%{name}-%{version}/%{name}-prep_dir +pushd %{_builddir}/%{name}-%{version}/%{name}-prep_dir/protoc-jar-maven-plugin-3.11.4 mvn clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true +rm -rf target/incremental/io.takari.maven.plugins_takari-lifecycle-plugin_testProperties_testProperties popd # prepare gradle and protobuf for build protoc-gen-grpc-java mkdir -p %{_tmppath}/source cp %{SOURCE4} %{_tmppath}/source tar xzf %{SOURCE5} -C %{_tmppath}/source # protoc-gen-grpc-java -tar -mxf %{SOURCE6} -C ${HOME}/%{name}-prep_dir -pushd ${HOME}/%{name}-prep_dir/grpc-java-1.56.0 +tar -mxf %{SOURCE6} -C %{_builddir}/%{name}-%{version}/%{name}-prep_dir +pushd %{_builddir}/%{name}-%{version}/%{name}-prep_dir/grpc-java-1.56.0 %patch1002 -p1 +%patch1005 -p1 sed -i "s,@HOME@,${HOME},g" build.gradle sed -i 's|https\\://services.gradle.org/distributions|file://%{_tmppath}/source|g' gradle/wrapper/gradle-wrapper.properties +%ifarch riscv64 SKIP_TESTS=true ARCH=riscv64 ./buildscripts/kokoro/unix.sh mvn install:install-file -DgroupId=io.grpc -DartifactId=protoc-gen-grpc-java -Dversion=1.56.0 -Dclassifier=linux-riscv64 -Dpackaging=exe -Dfile=mvn-artifacts/io/grpc/protoc-gen-grpc-java/1.56.0/protoc-gen-grpc-java-1.56.0-linux-riscv64.exe +%endif +%ifarch loongarch64 +SKIP_TESTS=true ARCH=loongarch_64 ./buildscripts/kokoro/unix.sh +mvn install:install-file -DgroupId=io.grpc -DartifactId=protoc-gen-grpc-java -Dversion=1.56.0 -Dclassifier=linux-loongarch_64 -Dpackaging=exe -Dfile=mvn-artifacts/io/grpc/protoc-gen-grpc-java/1.56.0/protoc-gen-grpc-java-1.56.0-linux-loongarch_64.exe +%endif popd %endif -%setup -q -%patch0001 -p1 -%patch0002 -p1 -%patch0003 -p1 - -%ifarch riscv64 +%ifarch riscv64 loongarch64 sed -i -e 's/protoVersion = "3.23.4/protoVersion = "'${PROTOC_VERSION}/'' project/SparkBuild.scala sed -i -e 's/3.23.4/'${PROTOC_VERSION}/'' pom.xml %endif @@ -99,6 +125,9 @@ cp -rf ../%{name}-%{version} %{buildroot}/opt/apache-%{name}-%{version} %changelog +* Wed Oct 15 2025 Wenlong Zhang - 3.5.0-6 +- fix build error on loongarch64 + * Thu Jan 2 2025 changtao - 3.5.0-5 - Type: CVE - CVE: CVE-2024-23945