This is an automated email from the ASF dual-hosted git repository.

sekikn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bigtop.git


The following commit(s) were added to refs/heads/master by this push:
     new 69cfa26  BIGTOP-3558. Fix build failure of HBase on ppc64le. (#789)
69cfa26 is described below

commit 69cfa2626ef8f4796b9ad228f54d1cfb5a17a611
Author: Masatake Iwasaki <[email protected]>
AuthorDate: Fri Jun 25 13:02:38 2021 +0900

    BIGTOP-3558. Fix build failure of HBase on ppc64le. (#789)
    
    * BIGTOP-3558. Fix build failure of HBase on ppc64le.
    
    * bumped asciidoctorj.pdf.version to avoid OOM. improved the readability by 
avoiding duplicate architecture specific conditionals.
    
    * added ppc64le patch for protoc.
---
 .../src/common/hbase/do-component-build            | 15 ++---
 .../protoc-3.5.1-add-support-for-ppc64le.patch     | 65 ++++++++++++++++++++++
 bigtop_toolchain/manifests/protobuf.pp             | 22 ++++++++
 3 files changed, 95 insertions(+), 7 deletions(-)

diff --git a/bigtop-packages/src/common/hbase/do-component-build 
b/bigtop-packages/src/common/hbase/do-component-build
index 0619ff9..9de0ca4 100644
--- a/bigtop-packages/src/common/hbase/do-component-build
+++ b/bigtop-packages/src/common/hbase/do-component-build
@@ -25,10 +25,13 @@ if [ "${BIGTOP_JDK:=8}" == "8" ]; then
 fi
 
 if [ $HOSTTYPE = "powerpc64le" ] ; then
-  sed  -i 
"s|<asciidoctor.plugin.version>.*</asciidoctor.plugin.version>|<asciidoctor.plugin.version>1.5.3</asciidoctor.plugin.version>|"
 pom.xml
+  sed -i 
"s|<asciidoctor.plugin.version>.*</asciidoctor.plugin.version>|<asciidoctor.plugin.version>1.5.3</asciidoctor.plugin.version>|"
 pom.xml
+  sed -i 
's|<asciidoctorj.pdf.version>.*</asciidoctorj.pdf.version>|<asciidoctorj.pdf.version>1.5.0-alpha.11</asciidoctorj.pdf.version>|'
 pom.xml
   sed -i 
's|<jruby.version>.*</jruby.version>|<jruby.version>1.7.23</jruby.version>|' 
pom.xml
-  sed  -i 
"s|<version>1.5.0-alpha.6</version>|<version>1.5.0-alpha.11</version>|" pom.xml
-  CLASSIFIER="linux-ppcle_64"
+  mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc 
-Dversion=2.5.0 \
+      -Dclassifier=linux-ppcle_64 -Dpackaging=exe -Dfile=/usr/local/bin/protoc
+  mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc 
-Dversion=3.5.1-1 \
+      -Dclassifier=linux-ppcle_64 -Dpackaging=exe 
-Dfile=/usr/local/protobuf-3.5.1.1/bin/protoc
 fi
 
 if [ $HOSTTYPE = "aarch64" ] ; then
@@ -38,7 +41,8 @@ if [ $HOSTTYPE = "aarch64" ] ; then
 '\             <artifactId>jruby-complete<\/artifactId>\n'\
 '\             <version>9.1.8.0</version>\n'\
 '\          <\/dependency>' pom.xml
-  CLASSIFIER="linux-aarch_64"
+  mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc 
-Dversion=2.5.0 \
+      -Dclassifier=linux-aarch_64 -Dpackaging=exe -Dfile=/usr/local/bin/protoc
 fi
 
 MVN_ARGS="-Phadoop-3.0 "
@@ -50,9 +54,6 @@ MVN_ARGS+="-Dzookeeper.version=${ZOOKEEPER_VERSION} "
 MVN_ARGS+="-DskipTests "
 MVN_ARGS+="-Dcheckstyle.skip=true "
 
-mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc 
-Dversion=2.5.0 \
-            -Dclassifier=${CLASSIFIER} -Dpackaging=exe 
-Dfile=/usr/local/bin/protoc
-
 # HBASE-21513: separate site and assembly:single to avoid assembly issues.
 mvn ${MVN_ARGS} ${MAVEN_ADDITIONAL} clean install "$@"
 mvn ${MVN_ARGS} ${MAVEN_ADDITIONAL} site "$@"
diff --git a/bigtop_toolchain/files/protoc-3.5.1-add-support-for-ppc64le.patch 
b/bigtop_toolchain/files/protoc-3.5.1-add-support-for-ppc64le.patch
new file mode 100644
index 0000000..581ac4e
--- /dev/null
+++ b/bigtop_toolchain/files/protoc-3.5.1-add-support-for-ppc64le.patch
@@ -0,0 +1,65 @@
+diff --git a/protoc-artifacts/build-protoc.sh 
b/protoc-artifacts/build-protoc.sh
+index fe1dec2..f31597a 100755
+--- a/protoc-artifacts/build-protoc.sh
++++ b/protoc-artifacts/build-protoc.sh
+@@ -81,6 +81,8 @@ checkArch ()
+         assertEq $format "elf64-x86-64" $LINENO
+       elif [[ "$ARCH" == aarch_64 ]]; then
+         assertEq $format "elf64-little" $LINENO
++      elif [[ "$ARCH" == ppcle_64 ]]; then
++        assertEq $format "elf64-powerpcle" $LINENO
+       else
+         fail "Unsupported arch: $ARCH"
+       fi
+@@ -127,6 +129,8 @@ checkDependencies ()
+     elif [[ "$ARCH" == aarch_64 ]]; then
+       dump_cmd='objdump -p '"$1"' | grep NEEDED'
+       white_list="libpthread\.so\.0\|libc\.so\.6\|ld-linux-aarch64\.so\.1"
++    elif [[ "$ARCH" == ppcle_64 ]]; then
++      
white_list="linux-vdso64\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|libz\.so\.1\|ld64\.so\.2"
+     fi
+   elif [[ "$OS" == osx ]]; then
+     dump_cmd='otool -L '"$1"' | fgrep dylib'
+@@ -193,6 +197,8 @@ elif [[ "$(uname)" == Linux* ]]; then
+       CXXFLAGS="$CXXFLAGS -m32"
+     elif [[ "$ARCH" == aarch_64 ]]; then
+       CONFIGURE_ARGS="$CONFIGURE_ARGS --host=aarch64-linux-gnu"
++    elif [[ "$ARCH" == ppcle_64 ]]; then
++      CXXFLAGS="$CXXFLAGS -m64"
+     else
+       fail "Unsupported arch: $ARCH"
+     fi
+diff --git a/protoc-artifacts/build-zip.sh b/protoc-artifacts/build-zip.sh
+index f08e275..e87bb39 100755
+--- a/protoc-artifacts/build-zip.sh
++++ b/protoc-artifacts/build-zip.sh
+@@ -20,6 +20,7 @@ included. Each invocation will create 6 zip packages:
+   dist/<TARGET>-<VERSION_NUMBER>-linux-x86_32.zip
+   dist/<TARGET>-<VERSION_NUMBER>-linux-x86_64.zip
+   dist/<TARGET>-<VERSION_NUMBER>-linux-aarch_64.zip
++  dist/<TARGET>-<VERSION_NUMBER>-linux-ppcle_64.zip
+ EOF
+   exit 1
+ fi
+@@ -35,6 +36,8 @@ declare -a FILE_NAMES=( \
+   linux-x86_32.zip linux-x86_32.exe \
+   linux-x86_64.zip linux-x86_64.exe \
+   linux-aarch_64.zip linux-aarch_64.exe \
++  linux-ppcle_64.zip linux-ppcle_64.exe \
++
+ )
+ 
+ # List of all well-known types to be included.
+diff --git a/protoc-artifacts/pom.xml b/protoc-artifacts/pom.xml
+index 0f9dd9f..4a0892e 100644
+--- a/protoc-artifacts/pom.xml
++++ b/protoc-artifacts/pom.xml
+@@ -37,7 +37,7 @@
+       <extension>
+         <groupId>kr.motd.maven</groupId>
+         <artifactId>os-maven-plugin</artifactId>
+-        <version>1.2.3.Final</version>
++        <version>1.5.0.Final</version>
+       </extension>
+     </extensions>
+     <plugins>
diff --git a/bigtop_toolchain/manifests/protobuf.pp 
b/bigtop_toolchain/manifests/protobuf.pp
index 808b702..3e8879e 100644
--- a/bigtop_toolchain/manifests/protobuf.pp
+++ b/bigtop_toolchain/manifests/protobuf.pp
@@ -40,4 +40,26 @@ class bigtop_toolchain::protobuf {
      require => EXEC["download protobuf"],
      timeout => 3000
   }
+
+  if ($architecture == 'ppc64le') {
+    exec { "download protobuf 3.5.1.1":
+      cwd  => "/usr/src",
+      command => "/usr/bin/wget 
https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.5.1.1.tar.gz 
&& mkdir -p protobuf-3.5.1.1 && /bin/tar -xvzf v3.5.1.1.tar.gz -C 
protobuf-3.5.1.1 --strip-components=1",
+      creates => "/usr/src/protobuf-3.5.1.1",
+    }
+
+    file { 
"/usr/src/protobuf-3.5.1.1/protoc-3.5.1-add-support-for-ppc64le.patch":
+      source => 
"puppet:///modules/bigtop_toolchain/protoc-3.5.1-add-support-for-ppc64le.patch",
+      require => Exec["download protobuf 3.5.1.1"],
+    }
+
+    exec { "install protobuf 3.5.1.1":
+      cwd => "/usr/src/protobuf-3.5.1.1",
+      command => "/usr/bin/patch -p1 < 
protoc-3.5.1-add-support-for-ppc64le.patch && 
/usr/src/protobuf-3.5.1.1/autogen.sh && /usr/src/protobuf-3.5.1.1/configure 
--prefix=/usr/local/protobuf-3.5.1.1 --disable-shared --with-pic && 
/usr/bin/make install",
+      creates => "/usr/local/protobuf-3.5.1.1",
+      require => 
File["/usr/src/protobuf-3.5.1.1/protoc-3.5.1-add-support-for-ppc64le.patch"],
+      timeout => 3000
+    }
+  }
+
 }

Reply via email to