Cleanup any earlier build attempts
November 12, 2014 · View on GitHub
#!/bin/bash
echo Building Google Protobuf for Mac OS X / iOS. echo Use 'tail -f build.log' to monitor progress.
(
VERSION=2.6.1
DARWIN_RELEASE=uname -r
CORES=sysctl hw.ncpu | awk '{print \$2}'
#PREFIX=pwd/protobuf
PREFIX=/opt/protobuf-ios
mkdir {PREFIX}/platform
OSX_SDK=(xcodebuild -showsdks \ | grep macosx | sort | tail -n 1 | awk '{print substr(NF, 7)}' )
IOS_SDK=(xcodebuild -showsdks \ | grep iphoneos | sort | tail -n 1 | awk '{print substr(NF, 9)}' )
XCODEDIR=xcode-select --print-path
MACOSX_PLATFORM={MACOSX_PLATFORM}/Developer/MacOSX${OSX_SDK}.sdk
IPHONEOS_PLATFORM={IPHONEOS_PLATFORM}/Developer/SDKs/iPhoneOS${IOS_SDK}.sdk
IPHONESIMULATOR_PLATFORM={IPHONESIMULATOR_PLATFORM}/Developer/SDKs/iPhoneSimulator${IOS_SDK}.sdk
CC=clang CFLAGS="-DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions" CXX=clang CXXFLAGS="${CFLAGS} -std=c++11 -stdlib=libc++" LDFLAGS="-stdlib=libc++" LIBS="-lc++ -lc++abi"
####################################
Cleanup any earlier build attempts
####################################
( echo "------------------ Cleanup --------------------" cd /tmp if [ -d {PREFIX} fi mkdir {PREFIX}/platform )
##########################################
Fetch Google Protobuf from source.
##########################################
( echo "------------------ Fetch protobuf --------------------" cd /tmp
if [ -d /tmp/protobuf-{VERSION} fi git clone https://github.com/google/protobuf.git protobuf-{VERSION} git checkout ${VERSION} sh autogen.sh )
###############################################################
Replace "namespace google" with "namespace google_public"
in all source/header files. This is to address a
namespace collision issue when building for recent
versions of iOS. Apple is using the protobuf library
internally, and embeds it as a private framework.
###############################################################
( echo "------------------ Fixup namespace --------------------" cd /tmp/protobuf-(find . -name *.h -type f) sed -i '' -e 's/namespace\ google /namespace\ google_public /g' (find . -name *.proto -type f) sed -i '' -e 's/google::protobuf/google_public::protobuf/g' (find . -name *.cc -type f) sed -i '' -e 's/google::protobuf/google_public::protobuf/g' $(find . -name *.proto -type f) )
#####################
x86_64 for Mac OS X
#####################
( echo "------------------ Mac OS X --------------------" cd /tmp/protobuf-{PREFIX} --exec-prefix={CC}" "CFLAGS={CXX}" "CXXFLAGS={LDFLAGS}" "LIBS={CORES} make test make install cd python python setup.py build python setup.py install )
###########################
i386 for iPhone Simulator
###########################
( echo "------------------ iPhone Simulator --------------------" cd /tmp/protobuf-{DARWIN_RELEASE} --host=i386-apple-darwin{PREFIX}/platform/x86_64/bin/protoc --disable-shared --enable-static --prefix={PREFIX}/platform/i386 "CC={CFLAGS} -miphoneos-version-min={IPHONESIMULATOR_SYSROOT}" "CXX={CXXFLAGS} -arch i386 -isysroot {IOS_SDK} {LIBS}" make -j ${CORES} make install )
##################
armv7 for iPhone
##################
( echo "------------------ armv7 iPhone --------------------" cd /tmp/protobuf-{DARWIN_RELEASE} --host=armv7-apple-darwin{PREFIX}/platform/x86_64/bin/protoc --disable-shared --enable-static --prefix={PREFIX}/platform/armv7 "CC={CFLAGS} -miphoneos-version-min={IPHONEOS_SYSROOT}" "CXX={CXXFLAGS} -arch armv7 -isysroot {IOS_SDK} {LIBS}" make -j ${CORES} make install )
###################
armv7s for iPhone
###################
( echo "------------------ armv7s iPhone --------------------" cd /tmp/protobuf-{DARWIN_RELEASE} --host=armv7s-apple-darwin{PREFIX}/platform/x86_64/bin/protoc --disable-shared --enable-static --prefix={PREFIX}/platform/armv7s "CC={CFLAGS} -miphoneos-version-min={IPHONEOS_SYSROOT}" "CXX={CXXFLAGS} -arch armv7s -isysroot {IOS_SDK} {LIBS}" make -j ${CORES} make install )
##################
arm64 for iPhone
##################
( echo "------------------ arm64 iPhone --------------------" cd /tmp/protobuf-{DARWIN_RELEASE} --host=arm --with-protoc={PREFIX} --exec-prefix={CC}" "CFLAGS={IOS_SDK} -arch arm64 -isysroot {CXX}" "CXXFLAGS={IPHONEOS_SYSROOT}" LDFLAGS="-arch arm64 -miphoneos-version-min={LDFLAGS}" "LIBS={CORES} make install )
############################
Create Universal Libraries
############################
( echo "------------------ Universal libs --------------------" cd ${PREFIX}/platform mkdir universal lipo x86_64/lib/libprotobuf.a arm64/lib/libprotobuf.a armv7s/lib/libprotobuf.a armv7/lib/libprotobuf.a i386/lib/libprotobuf.a -create -output universal/libprotobuf.a lipo x86_64/lib/libprotobuf-lite.a arm64/lib/libprotobuf-lite.a armv7s/lib/libprotobuf-lite.a armv7/lib/libprotobuf-lite.a i386/lib/libprotobuf-lite.a -create -output universal/libprotobuf-lite.a )
########################
Finalize the packaging
########################
( echo "------------------ Packaging --------------------" cd ${PREFIX} mkdir bin mkdir lib cp -r platform/x86_64/bin/protoc bin cp -r platform/x86_64/lib/* lib cp -r platform/universal/* lib rm -rf platform ) ) >build.log 2>&1 echo Done!