Commit c8eda8e9 authored by Kun Zhang's avatar Kun Zhang

Run make protoc(.exe) instead of just make, because the latter fails on Cygwin…

Run make protoc(.exe) instead of just make, because the latter fails on Cygwin with mingw gcc; build-protoc.sh works under Cygwin; build-protoc.sh will use the --host parameter consistent with what os-maven-plugin has detected
parent e4999565
#!/bin/bash #!/bin/bash
# Builds protoc executable into target/protoc.exe
# To be run from Maven.
# Usage: build-protoc.sh <OS> <ARCH>
# <OS> and <ARCH> are ${os.detected.name} and ${os.detected.arch} from os-maven-plugin
OS=$1
ARCH=$2
# Under Cygwin, bash doesn't have these in PATH when called from Maven which
# runs in Windows version of Java.
export PATH="/bin:/usr/bin:$PATH"
############################################################################
# Helper functions
############################################################################
E_PARAM_ERR=98
E_ASSERT_FAILED=99
fail()
{
echo "Error: $1"
exit $E_ASSERT_FAILED
}
# Usage: assertEq VAL1 VAL2 $LINENO
assertEq ()
{
lineno=$3
if [ -z "$lineno" ]; then
echo "lineno not given"
exit $E_PARAM_ERR
fi
if [[ "$1" != "$2" ]]; then
echo "Assertion failed: \"$1\" == \"$2\""
echo "File \"$0\", line $lineno" # Give name of file and line number.
exit $E_ASSERT_FAILED
fi
}
############################################################################
echo "Building protoc, OS=$OS ARCH=$ARCH"
cd $(dirname "$0") cd $(dirname "$0")
WORKING_DIR=$(pwd) WORKING_DIR=$(pwd)
CONFIGURE_ARGS="--disable-shared"
MAKE_TARGET="protoc"
if [[ "$OS" == windows ]]; then
MAKE_TARGET="${MAKE_TARGET}.exe"
fi
if [[ "$(uname)" == CYGWIN* ]]; then
assertEq "$OS" windows $LINENO
# Use mingw32 compilers because executables produced by Cygwin compiler
# always have dependency on Cygwin DLL.
if [[ "$ARCH" == x86_64 ]]; then
CONFIGURE_ARGS="$CONFIGURE_ARGS --host=x86_64-w64-mingw32"
elif [[ "$ARCH" == x86_32 ]]; then
CONFIGURE_ARGS="$CONFIGURE_ARGS --host=i686-pc-mingw32"
else
fail "Unsupported arch by CYGWIN: $ARCH"
fi
elif [[ "$(uname)" == MINGW32* ]]; then
assertEq "$OS" windows $LINENO
assertEq "$ARCH" x86_32 $LINENO
elif [[ "$(uname)" == Linux* ]]; then
assertEq "$OS" linux $LINENO
if [[ "$ARCH" == x86_64 ]]; then
CONFIGURE_ARGS="$CONFIGURE_ARGS --host=x86_64-linux-gnu"
elif [[ "$ARCH" == x86_32 ]]; then
CONFIGURE_ARGS="$CONFIGURE_ARGS --host=i686-linux-gnu"
else
fail "Unsupported arch by CYGWIN: $ARCH"
fi
elif [[ "$(uname)" == Darwin* ]]; then
assertEq "$OS" osx $LINENO
else
fail "Unsupported system: $(uname)"
fi
# Override the default value set in configure.ac that has '-g' which produces # Override the default value set in configure.ac that has '-g' which produces
# huge binary. # huge binary.
...@@ -11,14 +88,7 @@ export CXXFLAGS="-DNDEBUG" ...@@ -11,14 +88,7 @@ export CXXFLAGS="-DNDEBUG"
# -s to produce stripped binary # -s to produce stripped binary
export LDFLAGS="-static-libgcc -static-libstdc++ -s" export LDFLAGS="-static-libgcc -static-libstdc++ -s"
# Under Cygwin we use MinGW GCC because the executable produced by Cygwin GCC cd "$WORKING_DIR"/.. && ./configure $CONFIGURE_ARGS &&
# depends on Cygwin DLL. cd src && make clean && make $MAKE_TARGET &&
if [[ "$(uname)" == CYGWIN* ]]; then
export CC=i686-pc-mingw32-gcc
export CXX=i686-pc-mingw32-c++
export CXXCPP=i686-pc-mingw32-cpp
fi
cd "$WORKING_DIR"/.. && ./configure --disable-shared && make clean && make &&
cd "$WORKING_DIR" && mkdir -p target && cd "$WORKING_DIR" && mkdir -p target &&
(cp ../src/protoc target/protoc.exe || cp ../src/protoc.exe target/protoc.exe) (cp ../src/protoc target/protoc.exe || cp ../src/protoc.exe target/protoc.exe)
...@@ -57,6 +57,8 @@ ...@@ -57,6 +57,8 @@
<executable>bash</executable> <executable>bash</executable>
<arguments> <arguments>
<argument>build-protoc.sh</argument> <argument>build-protoc.sh</argument>
<argument>${os.detected.name}</argument>
<argument>${os.detected.arch}</argument>
</arguments> </arguments>
</configuration> </configuration>
</plugin> </plugin>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment