浏览代码

Additional support for building and deploying ppcle_64 artifacts

nashimus 7 年之前
父节点
当前提交
1f7837a2ab
共有 2 个文件被更改,包括 29 次插入11 次删除
  1. 16 9
      protoc-artifacts/README.md
  2. 13 2
      protoc-artifacts/build-protoc.sh

+ 16 - 9
protoc-artifacts/README.md

@@ -52,7 +52,7 @@ and/or architecture. Valid values are defined as the return values of
 [os-maven-plugin](https://github.com/trustin/os-maven-plugin/blob/master/src/main/java/kr/motd/maven/os/Detector.java).
 [os-maven-plugin](https://github.com/trustin/os-maven-plugin/blob/master/src/main/java/kr/motd/maven/os/Detector.java).
 Frequently used values are:
 Frequently used values are:
 - ``os.detected.name``: ``linux``, ``osx``, ``windows``.
 - ``os.detected.name``: ``linux``, ``osx``, ``windows``.
-- ``os.detected.arch``: ``x86_32``, ``x86_64``
+- ``os.detected.arch``: ``x86_32``, ``x86_64``, ``ppcle_64``
 
 
 For example, MinGW32 only ships with 32-bit compilers, but you can still build
 For example, MinGW32 only ships with 32-bit compilers, but you can still build
 32-bit protoc under 64-bit Windows, with the following command:
 32-bit protoc under 64-bit Windows, with the following command:
@@ -68,7 +68,7 @@ configure GPG and Sonatype account.
 You need to perform the deployment for every platform that you want to
 You need to perform the deployment for every platform that you want to
 support. DO NOT close the staging repository until you have done the
 support. DO NOT close the staging repository until you have done the
 deployment for all platforms. Currently the following platforms are supported:
 deployment for all platforms. Currently the following platforms are supported:
-- Linux (x86_32, x86_64 and cross compiled aarch_64)
+- Linux (x86_32, x86_64, ppcle_64 and cross compiled aarch_64 or ppcle_64)
 - Windows (x86_32 and x86_64) with
 - Windows (x86_32 and x86_64) with
   - Cygwin64 with MinGW compilers (x86_64)
   - Cygwin64 with MinGW compilers (x86_64)
   - MSYS with MinGW32 (x86_32)
   - MSYS with MinGW32 (x86_32)
@@ -102,6 +102,9 @@ A 32-bit artifact can be deployed from a 64-bit host with
 An arm64 artifact can be deployed from x86 host with
 An arm64 artifact can be deployed from x86 host with
 ``-Dos.detected.arch=aarch_64``
 ``-Dos.detected.arch=aarch_64``
 
 
+A ppcle_64 artifact can be deployed from x86 host with
+``-Dos.detected.arch=ppcle_64``
+
 A windows artifact can be deployed from a linux machine with
 A windows artifact can be deployed from a linux machine with
 ``-Dos.detected.name=windows``
 ``-Dos.detected.name=windows``
 
 
@@ -115,15 +118,16 @@ build-zip.sh script to bulid zip packages for these protoc binaries
 and upload these zip packages to the download section of the github
 and upload these zip packages to the download section of the github
 release. For example:
 release. For example:
 ```
 ```
-$ ./build-zip.sh 3.0.0-beta-4
+$ ./build-zip.sh 3.6.0
 ```
 ```
-The above command will create 5 zip files:
+The above command will create 6 zip files:
 ```
 ```
-dist/protoc-3.0.0-beta-4-win32.zip
-dist/protoc-3.0.0-beta-4-osx-x86_32.zip
-dist/protoc-3.0.0-beta-4-osx-x86_64.zip
-dist/protoc-3.0.0-beta-4-linux-x86_32.zip
-dist/protoc-3.0.0-beta-4-linux-x86_64.zip
+dist/protoc-3.6.0-win32.zip
+dist/protoc-3.6.0-osx-x86_32.zip
+dist/protoc-3.6.0-osx-x86_64.zip
+dist/protoc-3.6.0-linux-x86_32.zip
+dist/protoc-3.6.0-linux-x86_64.zip
+dist/protoc-3.6.0-linux-ppcle_64.zip
 ```
 ```
 Before running the script, make sure the artifacts are accessible from:
 Before running the script, make sure the artifacts are accessible from:
 http://repo1.maven.org/maven2/com/google/protobuf/protoc/
 http://repo1.maven.org/maven2/com/google/protobuf/protoc/
@@ -183,6 +187,9 @@ We have successfully built artifacts on the following environments:
 - Linux x86_32 and x86_64:
 - Linux x86_32 and x86_64:
   - Centos 6.6 (within Docker 1.6.1)
   - Centos 6.6 (within Docker 1.6.1)
   - Ubuntu 14.04.2 64-bit
   - Ubuntu 14.04.2 64-bit
+- Linux ppc64le:
+  - Debian 9.4
+  - Cross compiled with `g++-powerpc64le-linux-gnu` on Debian 9.4 x86_64
 - Linux aarch_64: Cross compiled with `g++-aarch64-linux-gnu` on Ubuntu 14.04.2 64-bit
 - Linux aarch_64: Cross compiled with `g++-aarch64-linux-gnu` on Ubuntu 14.04.2 64-bit
 - Windows x86_32: MSYS with ``mingw32-gcc-g++ 4.8.1-4`` on Windows 7 64-bit
 - Windows x86_32: MSYS with ``mingw32-gcc-g++ 4.8.1-4`` on Windows 7 64-bit
 - Windows x86_32: Cross compile with ``i686-w64-mingw32-g++ 4.8.2`` on Ubuntu 14.04.2 64-bit
 - Windows x86_32: Cross compile with ``i686-w64-mingw32-g++ 4.8.2`` on Ubuntu 14.04.2 64-bit

+ 13 - 2
protoc-artifacts/build-protoc.sh

@@ -7,10 +7,11 @@
 # <OS> and <ARCH> are ${os.detected.name} and ${os.detected.arch} from os-maven-plugin
 # <OS> and <ARCH> are ${os.detected.name} and ${os.detected.arch} from os-maven-plugin
 # <TARGET> can be "protoc" or "protoc-gen-javalite"
 # <TARGET> can be "protoc" or "protoc-gen-javalite"
 #
 #
-# The script now supports cross-compiling windows and linux-arm64 in linux-x86
+# The script now supports cross-compiling windows, linux-arm64, and linux-ppc64le in linux-x86
 # environment. Required packages:
 # environment. Required packages:
 # - Windows: i686-w64-mingw32-gcc (32bit) and x86_64-w64-mingw32-gcc (64bit)
 # - Windows: i686-w64-mingw32-gcc (32bit) and x86_64-w64-mingw32-gcc (64bit)
 # - Arm64: g++-aarch64-linux-gnu
 # - Arm64: g++-aarch64-linux-gnu
+# - Ppc64le: g++-powerpc64le-linux-gcc
 
 
 OS=$1
 OS=$1
 ARCH=$2
 ARCH=$2
@@ -75,6 +76,7 @@ checkArch ()
     format="$(objdump -f "$1" | grep -o "file format .*$" | grep -o "[^ ]*$")"
     format="$(objdump -f "$1" | grep -o "file format .*$" | grep -o "[^ ]*$")"
     echo Format=$format
     echo Format=$format
     if [[ "$OS" == linux ]]; then
     if [[ "$OS" == linux ]]; then
+      host_machine="$(uname -m)";
       if [[ "$ARCH" == x86_32 ]]; then
       if [[ "$ARCH" == x86_32 ]]; then
         assertEq $format "elf32-i386" $LINENO
         assertEq $format "elf32-i386" $LINENO
       elif [[ "$ARCH" == x86_64 ]]; then
       elif [[ "$ARCH" == x86_64 ]]; then
@@ -82,7 +84,11 @@ checkArch ()
       elif [[ "$ARCH" == aarch_64 ]]; then
       elif [[ "$ARCH" == aarch_64 ]]; then
         assertEq $format "elf64-little" $LINENO
         assertEq $format "elf64-little" $LINENO
       elif [[ "$ARCH" == ppcle_64 ]]; then
       elif [[ "$ARCH" == ppcle_64 ]]; then
-        assertEq $format "elf64-powerpcle" $LINENO
+	if [[ $host_machine == ppc64le ]];then
+	  assertEq $format "elf64-powerpcle" $LINENO	
+	else	
+          assertEq $format "elf64-little" $LINENO
+	fi
       else
       else
         fail "Unsupported arch: $ARCH"
         fail "Unsupported arch: $ARCH"
       fi
       fi
@@ -121,12 +127,16 @@ checkDependencies ()
     dump_cmd='objdump -x '"$1"' | fgrep "DLL Name"'
     dump_cmd='objdump -x '"$1"' | fgrep "DLL Name"'
     white_list="KERNEL32\.dll\|msvcrt\.dll"
     white_list="KERNEL32\.dll\|msvcrt\.dll"
   elif [[ "$OS" == linux ]]; then
   elif [[ "$OS" == linux ]]; then
+    host_machine="$(uname -m)";
     dump_cmd='ldd '"$1"
     dump_cmd='ldd '"$1"
     if [[ "$ARCH" == x86_32 ]]; then
     if [[ "$ARCH" == x86_32 ]]; then
       white_list="linux-gate\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux\.so\.2"
       white_list="linux-gate\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux\.so\.2"
     elif [[ "$ARCH" == x86_64 ]]; then
     elif [[ "$ARCH" == x86_64 ]]; then
       white_list="linux-vdso\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux-x86-64\.so\.2"
       white_list="linux-vdso\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|ld-linux-x86-64\.so\.2"
     elif [[ "$ARCH" == ppcle_64 ]]; then
     elif [[ "$ARCH" == ppcle_64 ]]; then
+      if [[ $host_machine != ppc64le ]];then      
+        dump_cmd='objdump -p '"$1"' | grep NEEDED'
+      fi
       white_list="linux-vdso64\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|libz\.so\.1\|ld64\.so\.2"
       white_list="linux-vdso64\.so\.1\|libpthread\.so\.0\|libm\.so\.6\|libc\.so\.6\|libz\.so\.1\|ld64\.so\.2"
     elif [[ "$ARCH" == aarch_64 ]]; then
     elif [[ "$ARCH" == aarch_64 ]]; then
       dump_cmd='objdump -p '"$1"' | grep NEEDED'
       dump_cmd='objdump -p '"$1"' | grep NEEDED'
@@ -199,6 +209,7 @@ elif [[ "$(uname)" == Linux* ]]; then
       CONFIGURE_ARGS="$CONFIGURE_ARGS --host=aarch64-linux-gnu"
       CONFIGURE_ARGS="$CONFIGURE_ARGS --host=aarch64-linux-gnu"
     elif [[ "$ARCH" == ppcle_64 ]]; then
     elif [[ "$ARCH" == ppcle_64 ]]; then
       CXXFLAGS="$CXXFLAGS -m64"
       CXXFLAGS="$CXXFLAGS -m64"
+      CONFIGURE_ARGS="$CONFIGURE_ARGS --host=powerpc64le-linux-gnu"
     else
     else
       fail "Unsupported arch: $ARCH"
       fail "Unsupported arch: $ARCH"
     fi
     fi