aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJisi Liu <liujisi@google.com>2017-08-15 14:25:44 -0700
committerGitHub <noreply@github.com>2017-08-15 14:25:44 -0700
commit3d2f72bf01782ee83c8a2cde082bddb47931443b (patch)
treeaa6bf2075c317fedac5e9a2e2eff7140e7069581
parentf6196219f79063686f86458274f6d9615b913a22 (diff)
parent6654c8dd5014c83d73c0301911f989fb9be439c1 (diff)
downloadprotobuf-3d2f72bf01782ee83c8a2cde082bddb47931443b.tar.gz
protobuf-3d2f72bf01782ee83c8a2cde082bddb47931443b.tar.bz2
protobuf-3d2f72bf01782ee83c8a2cde082bddb47931443b.zip
Merge pull request #3496 from pherl/mingw64
Static link pthread for mingw64 protoc and enable cross compile
-rw-r--r--protoc-artifacts/README.md6
-rwxr-xr-xprotoc-artifacts/build-protoc.sh9
2 files changed, 11 insertions, 4 deletions
diff --git a/protoc-artifacts/README.md b/protoc-artifacts/README.md
index 50629209..17eb77f8 100644
--- a/protoc-artifacts/README.md
+++ b/protoc-artifacts/README.md
@@ -72,6 +72,7 @@ deployment for all platforms. Currently the following platforms are supported:
- Windows (x86_32 and x86_64) with
- Cygwin64 with MinGW compilers (x86_64)
- MSYS with MinGW32 (x86_32)
+ - Cross compile in Linux with MinGW-w64 (x86_32, x86_64)
- MacOSX (x86_32 and x86_64)
As for MSYS2/MinGW64 for Windows: protoc will build, but it insists on
@@ -98,6 +99,9 @@ $ mvn clean deploy -P release -Dstaging.repository=comgoogle-123
A 32-bit artifact can be deployed from a 64-bit host with
``-Dos.detected.arch=x86_32``
+A windows artifact can be deployed from a linux machine with
+``-Dos.detected.name=windows``
+
When you have done deployment for all platforms, go to
https://oss.sonatype.org/#stagingRepositories, verify that the staging
repository has all the binaries, close and release this repository.
@@ -173,5 +177,7 @@ We have successfully built artifacts on the following environments:
- Centos 6.6 (within Docker 1.6.1)
- 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: Cross compile with ``i686-w64-mingw32-g++ 4.8.2`` on Ubuntu 14.04.2 64-bit
- Windows x86_64: Cygwin64 with ``mingw64-x86_64-gcc-g++ 4.8.3-1`` on Windows 7 64-bit
+- Windows x86_64: Cross compile with ``x86_64-w64-mingw32-g++ 4.8.2`` on Ubuntu 14.04.2 64-bit
- Mac OS X x86_32 and x86_64: Mac OS X 10.9.5
diff --git a/protoc-artifacts/build-protoc.sh b/protoc-artifacts/build-protoc.sh
index e31948e9..57523a41 100755
--- a/protoc-artifacts/build-protoc.sh
+++ b/protoc-artifacts/build-protoc.sh
@@ -185,8 +185,6 @@ elif [[ "$(uname)" == Linux* ]]; then
fi
elif [[ "$OS" == windows ]]; then
# Cross-compilation for Windows
- # TODO(zhangkun83) MinGW 64 always adds dependency on libwinpthread-1.dll,
- # which is undesirable for repository deployment.
CONFIGURE_ARGS="$CONFIGURE_ARGS"
if [[ "$ARCH" == x86_64 ]]; then
CONFIGURE_ARGS="$CONFIGURE_ARGS --host=x86_64-w64-mingw32"
@@ -215,8 +213,11 @@ fi
# Statically link libgcc and libstdc++.
# -s to produce stripped binary.
-# And they don't work under Mac.
-if [[ "$OS" != osx ]]; then
+if [[ "$OS" == windows ]]; then
+ # Also static link libpthread required by mingw64
+ LDFLAGS="$LDFLAGS -static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -s"
+elif [[ "$OS" != osx ]]; then
+ # And they don't work under Mac.
LDFLAGS="$LDFLAGS -static-libgcc -static-libstdc++ -s"
fi