PeterPtroc commented on PR #7903:
URL: https://github.com/apache/hadoop/pull/7903#issuecomment-3235836592

   
   @pan3793 Thanks for the suggestion! Below is a concise doc to verify the 
correctness of the crc32riscv implementation:
   
   I mainly verify on RISC‑V by using QEMU together with the openEuler RISC‑V 
image.
   
   Download the image
   - 
https://dl-cdn.openeuler.openatom.cn/openEuler-25.03/virtual_machine_img/riscv64/
   
   For me, from the above link, download these four files: RISCV_VIRT_CODE.fd, 
RISCV_VIRT_VARS.fd, openEuler-25.03-riscv64.qcow2.xz, and start_vm.sh; then log 
in as root with the password: openEuler12#$.
   
   Install required packages
   ````bash
   yum install -y gcc gcc-c++ gcc-gfortran libgcc cmake
   yum install -y wget openssl openssl-devel zlib zlib-devel automake libtool 
make libstdc++-static glibc-static git snappy snappy-devel fuse fuse-devel 
doxygen clang cyrus-sasl cyrus-sasl-devel libtirpc libtirpc-devel
   yum install -y java-17-openjdk.riscv64 java-17-openjdk-devel.riscv64 
java-17-openjdk-headless.riscv64
   ````
   
   Install Protobuf 2.5.0 (with RISC‑V patches)
   ````bash
   mkdir protobuf && cd protobuf
   
   # Fetch sources
   git clone https://gitee.com/src-openeuler/protobuf2.git
   cd protobuf2
   tar -xjf protobuf-2.5.0.tar.bz2
   cp *.patch protobuf-2.5.0 && cd protobuf-2.5.0
   
   # Apply patches (adds riscv64 support and build fixes)
   patch -p1 < 0001-Add-generic-GCC-support-for-atomic-operations.patch
   patch -p1 < protobuf-2.5.0-gtest.patch
   patch -p1 < protobuf-2.5.0-java-fixes.patch
   patch -p1 < protobuf-2.5.0-makefile.patch
   patch -p1 < add-riscv64-support.patch
   
   # Autotools setup
   libtoolize
   yum install -y automake
   automake-1.17 -a
   chmod +x configure
   
   # Configure, build, install
   ./configure --build=riscv64-unknown-linux --prefix=/usr/local/protobuf-2.5.0
   make
   make check
   make install
   ldconfig
   
   # Publish protoc 2.5.0 into local Maven repo (riscv64 classifier)
   mvn install:install-file \
     -DgroupId=com.google.protobuf \
     -DartifactId=protoc \
     -Dversion=2.5.0 \
     -Dclassifier=linux-riscv64 \
     -Dpackaging=exe \
     -Dfile=/usr/local/protobuf-2.5.0/bin/protoc
   
   cd ..
   ````
   
   Install Protobuf 3.25.5
   ````bash
   # Download and unpack
   wget -c 
https://github.com/protocolbuffers/protobuf/releases/download/v25.5/protobuf-25.5.tar.gz
   tar -xzf protobuf-25.5.tar.gz
   cd protobuf-25.5
   
   # Abseil dependency
   git clone https://github.com/abseil/abseil-cpp third_party/abseil-cpp
   
   # Configure and build
   cmake ./ \
     -DCMAKE_BUILD_TYPE=RELEASE \
     -Dprotobuf_BUILD_TESTS=off \
     -DCMAKE_CXX_STANDARD=20 \
     -DCMAKE_INSTALL_PREFIX=/usr/local/protobuf-3.25.5
   
   make install -j "$(nproc)"
   
   # Publish protoc 3.25.5 into local Maven repo (riscv64 classifier)
   mvn install:install-file \
     -DgroupId=com.google.protobuf \
     -DartifactId=protoc \
     -Dversion=3.25.5 \
     -Dclassifier=linux-riscv64 \
     -Dpackaging=exe \
     -Dfile=/usr/local/protobuf-3.25.5/bin/protoc
   
   # Make protoc available on PATH and verify
   sudo ln -sfn /usr/local/protobuf-3.25.5/bin/protoc /usr/local/bin/protoc
   protoc --version
   ````
   
   Verify CRC32 using Hadoop native
   ````bash
   # Clone Hadoop
   git clone https://github.com/apache/hadoop.git
   cd hadoop
   
   # Increase Maven memory
   export MAVEN_OPTS="-Xmx8g -Xms6g"
   
   # Build Hadoop Common (native enabled)
   nohup mvn -pl hadoop-common-project/hadoop-common -am -Pnative -DskipTests 
clean install > build.log 2>&1 &
   
   # Point to built native library directory
   export 
HADOOP_COMMON_LIB_NATIVE_DIR="$PWD/hadoop-common-project/hadoop-common/target/native/target/usr/local/lib"
   export LD_LIBRARY_PATH="$HADOOP_COMMON_LIB_NATIVE_DIR:$LD_LIBRARY_PATH"
   
   # Run the CRC32 native test
   nohup mvn -Pnative -Dtest=org.apache.hadoop.util.TestNativeCrc32 \
     -Djava.library.path="$HADOOP_COMMON_LIB_NATIVE_DIR" test > test.log 2>&1 &


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to