diff --git a/1000-Added-support-for-building-the-riscv64-protoc-binari.patch b/1000-Added-support-for-building-the-riscv64-protoc-binari.patch new file mode 100644 index 0000000000000000000000000000000000000000..90cccad24716547fe2e4fa8ea4c44a9db1f064ea --- /dev/null +++ b/1000-Added-support-for-building-the-riscv64-protoc-binari.patch @@ -0,0 +1,56 @@ +From fd266072ee39ac69c6592570a10e4dc4b1b73974 Mon Sep 17 00:00:00 2001 +From: Dingli Zhang +Date: Mon, 6 May 2024 16:50:47 +0800 +Subject: [PATCH] Added support for building the riscv64 protoc binaries with + Kokoro + + +diff --git a/kokoro/release/protoc/linux/build.sh b/kokoro/release/protoc/linux/build.sh +index 44a95aab3..13be7b2ed 100755 +--- a/kokoro/release/protoc/linux/build.sh ++++ b/kokoro/release/protoc/linux/build.sh +@@ -22,6 +22,9 @@ protoc-artifacts/build-protoc.sh linux aarch_64 protoc + sudo apt install -y g++-powerpc64le-linux-gnu + protoc-artifacts/build-protoc.sh linux ppcle_64 protoc + ++sudo apt install -y g++-riscv64-linux-gnu ++protoc-artifacts/build-protoc.sh linux riscv64 protoc ++ + sudo apt install -y g++-s390x-linux-gnu + protoc-artifacts/build-protoc.sh linux s390_64 protoc + +diff --git a/protoc-artifacts/build-protoc.sh b/protoc-artifacts/build-protoc.sh +index 460284262..20ca05739 100755 +--- a/protoc-artifacts/build-protoc.sh ++++ b/protoc-artifacts/build-protoc.sh +@@ -93,6 +93,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" == s390_64 ]]; then + if [[ $host_machine == s390x ]];then + assertEq $format "elf64-s390" $LINENO +@@ -162,6 +164,9 @@ checkDependencies () + elif [[ "$ARCH" == aarch_64 ]]; then + dump_cmd='objdump -p '"$1"' | grep NEEDED' + white_list="libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux-aarch64\.so\.1" ++ 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" + fi + elif [[ "$OS" == osx ]]; then + dump_cmd='otool -L '"$1"' | fgrep dylib' +@@ -226,6 +231,8 @@ elif [[ "$(uname)" == Linux* ]]; then + elif [[ "$ARCH" == ppcle_64 ]]; then + CXXFLAGS="$CXXFLAGS -m64" + CONFIGURE_ARGS="$CONFIGURE_ARGS --host=powerpc64le-linux-gnu" ++ elif [[ "$ARCH" == riscv64 ]]; then ++ CONFIGURE_ARGS="$CONFIGURE_ARGS --host=riscv64-linux-gnu" + elif [[ "$ARCH" == s390_64 ]]; then + CXXFLAGS="$CXXFLAGS -m64" + CONFIGURE_ARGS="$CONFIGURE_ARGS --host=s390x-linux-gnu" +-- +2.41.0 + diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000000000000000000000000000000000000..aab8d00b45f87d932a581b634990ffeeac53a8d1 --- /dev/null +++ b/_multibuild @@ -0,0 +1,3 @@ + + protoc-hbase + diff --git a/hbase.spec b/hbase.spec index 1dc6d0a32d5566c8d6de6b345daf53dd7825693d..4baff3f559efec6f09230142051d57ee38a5e64b 100644 --- a/hbase.spec +++ b/hbase.spec @@ -8,7 +8,7 @@ Name: hbase Version: 2.5.0 -Release: 3 +Release: 4 Summary: A database for Apache Hadoop License: Apache-2.0 and BSD and CPL-1.0 and EPL-1.0 and MIT URL: http://hbase.apache.org/ @@ -17,7 +17,6 @@ Source1: %{name}.logrotate Source2: %{name}-site.xml Source3: %{name}.service.template Source4: xmvn-reactor -Source5: protoc-3.21.1-linux-riscv64.exe Patch0: upgrade_os-maven_plugin_to_1.7.1.patch Patch1: fix-riscv64-support.patch BuildArch: noarch @@ -29,6 +28,9 @@ BuildRequires: systemd BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: java-1.8.0-openjdk-devel maven hostname maven-local protobuf2-devel protobuf2-compiler protobuf2 Requires: java-1.8.0-openjdk +%ifarch riscv64 +BuildRequires: hbase-protoc +%endif Requires(post): systemd Requires(preun): systemd @@ -65,7 +67,7 @@ This package contains the API documentation for %{name}. %if "%{_arch}" == "riscv64" %patch1 -p1 mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=2.5.0 -Dclassifier=linux-riscv64 -Dpackaging=exe -Dfile=/usr/bin/protoc -mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.21.1 -Dclassifier=linux-riscv64 -Dpackaging=exe -Dfile=%{SOURCE5} +mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.21.1 -Dclassifier=linux-riscv64 -Dpackaging=exe -Dfile=/usr/bin/%{name}-protoc-3.21.1/protoc.exe %endif mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=2.5.0 -Dclassifier=linux-aarch_64 -Dpackaging=exe -Dfile=/usr/bin/protoc cp %{SOURCE4} ./.xmvn-reactor @@ -273,6 +275,10 @@ fi %endif %changelog +* Mon Jun 3 2024 Dingli Zhang - 2.5.0-4 +- Remove protoc riscv64 binary +- Add hbase-protoc spec for riscv64 because of no artifact on Maven Central Repository + * Wed May 29 2024 Dingli Zhang - 2.5.0-3 - Fix riscv64 support - Upgrade os-maven-plugin to 1.7.1 diff --git a/protoc-hbase.spec b/protoc-hbase.spec new file mode 100644 index 0000000000000000000000000000000000000000..fb6f2266ae54961b04fac784335f191db9f7cbdf --- /dev/null +++ b/protoc-hbase.spec @@ -0,0 +1,62 @@ +%global _debuginfo_template %{nil} +%global _debugsource_template %{nil} + +Summary: Protocol Buffers - Google's data interchange format +Name: protoc-hbase +Version: 3.21.1 +Release: 1%{?dist} +License: BSD +URL: https://github.com/protocolbuffers/protobuf +Source: https://github.com/protocolbuffers/protobuf/archive/refs/tags/v%{version}%{?rcver}.tar.gz + +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: gcc-c++ +BuildRequires: libtool +BuildRequires: pkgconfig +BuildRequires: zlib-devel +BuildRequires: libstdc++-static + +Patch0: 1000-Added-support-for-building-the-riscv64-protoc-binari.patch + +%description +Protocol Buffers are a way of encoding structured data in an efficient +yet extensible format. Google uses Protocol Buffers for almost all of +its internal RPC protocols and file formats. + +Protocol buffers are a flexible, efficient, automated mechanism for +serializing structured data – think XML, but smaller, faster, and +simpler. You define how you want your data to be structured once, then +you can use special generated source code to easily write and read +your structured data to and from a variety of data streams and using a +variety of languages. You can even update your data structure without +breaking deployed programs that are compiled against the "old" format. + +%prep +%setup -q -n protobuf-%{version}%{?rcver} +%patch0 -p1 + +%build +./autogen.sh +pushd protoc-artifacts +%ifarch riscv64 +./build-protoc.sh linux riscv64 protoc +%endif +popd + +%install +install -d -m 0755 %{buildroot}%{_bindir}/%{name}-%{version}%{?rcver} +%ifarch riscv64 +install -m 0755 protoc-artifacts/target/linux/riscv64/protoc.exe %{buildroot}%{_bindir}/%{name}-%{version}%{?rcver}/protoc.exe +%endif + +%files +%ifarch riscv64 +%{_bindir}/%{name}-%{version}%{?rcver}/protoc.exe +%endif +%doc README.md +%license LICENSE + +%changelog +* Mon Jun 3 2024 Dingli Zhang - 3.21.1-1 +- init package \ No newline at end of file diff --git a/protoc-3.21.1-linux-riscv64.exe b/v3.21.1.tar.gz similarity index 38% rename from protoc-3.21.1-linux-riscv64.exe rename to v3.21.1.tar.gz index 14f98c760013682731e704d07c027fda40199eb9..02ed70123403669f9e8fe82730dafc29198d31c7 100644 Binary files a/protoc-3.21.1-linux-riscv64.exe and b/v3.21.1.tar.gz differ