-
-
Save CodingArtisan-cn/dab6747ffb622fde2c6073c780ddac9e to your computer and use it in GitHub Desktop.
Revisions
-
BennettSmith revised this gist
Sep 21, 2015 . 2 changed files with 24 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -54,3 +54,21 @@ Create a build rule in your Xcode project with the following settings. Depending on where you choose to install the protobuf build, you will need to adjust the path to `protoc`. # FAQ ## Can Protobuf be built using libstdc++? Unfortunately, the protobuf C++ code is not compatible with libstdc++ at the moment. You must use `libc++` instead. ## Can you provide a similar script for Android? No ## Why am I gettings all the `implicit conversion looses integer precision` warnings? Unfortunately, the code generated by `protoc` is not 64-bit clean. In practice I have not experienced any issues as a result of this. It would be better if the generated code was reworked for better 64-bit support. This may come with the 3.0 version they are working on now. This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -105,10 +105,14 @@ CXX=clang SILENCED_WARNINGS="-Wno-unused-local-typedef -Wno-unused-function" # NOTE: Google Protobuf does not currently build if you specify 'libstdc++' # instead of `libc++` here. STDLIB=libc++ CFLAGS="${CLANG_VERBOSE} ${SILENCED_WARNINGS} -DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions" CXXFLAGS="${CLANG_VERBOSE} ${CFLAGS} -std=c++11 -stdlib=${STDLIB}" LDFLAGS="-stdlib=${STDLIB}" LIBS="-lc++ -lc++abi" echo "PREFIX ..................... ${PREFIX}" -
BennettSmith revised this gist
Sep 21, 2015 . 3 changed files with 132 additions and 50 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,4 @@ protobuf protobuf-2.6.0 protobuf-2.6.1 protobuf-master This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,4 @@ # Google Protobuf - Mac OS X and iOS Support The script in this gist will help you buid the Google Protobuf library for use with Mac OS X and iOS. Other methods (such as homebrew or direct compilation) @@ -17,17 +17,25 @@ $ git clone https://gist.github.com/9487468ae3375d0db0cc.git build-protobuf # Performing the Build The script will automatically download the tarball from Google Code, so all you need to do is run the script. This will build the 2.6.1 version of Protobuf. The script understands a few command-line options too. ``` $ cd build-protobuf $ ./build-protobuf.sh ``` Add `--interactive` to the above script if you would like the script to stop after each major operation. This makes it easier to inspect the output from the various steps for potential errors. Add `--master` if you would prefer to build from the master branch in the Google Protobuf git repo. # Results Build results are found in a folder called `protobuf-{version}`, where `{version}` will be either `2.6.1` or `master`. This folder contains `bin`, `include` and `lib` folders. # Integration with Xcode This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -6,6 +6,52 @@ echo "# Preparing to build Google Protobuf" echo "###################################################################" echo "$(tput sgr0)" # The version of Protobuf to build. It must match # one of the values found in the releases section of the github repo. # It can be set to "master" when building directly from the github repo. PROTOBUF_VERSION=2.6.1 # Set to "YES" if you would like the build script to # pause after each major section. INTERACTIVE=NO # A "YES" value will build the latest code from GitHub on the master branch. # A "NO" value will use the 2.6.1 tarball downloaded from googlecode.com. USE_GIT_MASTER=NO while [[ $# > 0 ]] do key="$1" case $key in -i|--interactive) INTERACTIVE=YES ;; -m|--master) USE_GIT_MASTER=YES PROTOBUF_VERSION=master ;; *) # unknown option ;; esac shift # past argument or value done function conditionalPause { if [ "${INTERACTIVE}" == "YES" ] then while true; do read -p "Proceed with build? (y/n) " yn case $yn in [Yy]* ) break;; [Nn]* ) exit;; * ) echo "Please answer yes or no.";; esac done fi } # The results will be stored relative to the location # where you stored this script, **not** relative to # the location of the protobuf git repo. @@ -16,14 +62,9 @@ then fi mkdir -p "${PREFIX}/platform" PROTOBUF_GIT_URL=https://github.com/google/protobuf.git PROTOBUF_GIT_DIRNAME=protobuf PROTOBUF_RELEASE_URL=https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/protobuf-${PROTOBUF_VERSION}.tar.gz PROTOBUF_RELEASE_DIRNAME=protobuf-${PROTOBUF_VERSION} BUILD_MACOSX_X86_64=YES @@ -37,11 +78,14 @@ BUILD_IOS_ARM64=YES PROTOBUF_SRC_DIR=/tmp/protobuf # 13.4.0 - Mavericks # 14.0.0 - Yosemite # 15.0.0 - El Capitan DARWIN=darwin14.0.0 XCODEDIR=`xcode-select --print-path` IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version` MIN_SDK_VERSION=8.3 MACOSX_PLATFORM=${XCODEDIR}/Platforms/MacOSX.platform MACOSX_SYSROOT=${MACOSX_PLATFORM}/Developer/MacOSX10.9.sdk @@ -59,7 +103,9 @@ IPHONESIMULATOR_SYSROOT=`xcrun --sdk iphonesimulator --show-sdk-path` CC=clang CXX=clang SILENCED_WARNINGS="-Wno-unused-local-typedef -Wno-unused-function" CFLAGS="${CLANG_VERBOSE} ${SILENCED_WARNINGS} -DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions" CXXFLAGS="${CLANG_VERBOSE} ${CFLAGS} -std=c++11 -stdlib=libc++" LDFLAGS="-stdlib=libc++" @@ -96,14 +142,7 @@ echo "CXXFLAGS ................... ${CXXFLAGS}" echo "LDFLAGS .................... ${LDFLAGS}" echo "LIBS ....................... ${LIBS}" conditionalPause echo "$(tput setaf 2)" echo "###################################################################" @@ -141,42 +180,64 @@ echo "$(tput sgr0)" fi ) conditionalPause if [ "${PROTOBUF_VERSION}" == "master" ] then echo "$(tput setaf 2)" echo "###################################################################" echo "# Run autogen.sh to prepare for build." echo "###################################################################" echo "$(tput sgr0)" ( cd ${PROTOBUF_SRC_DIR} ( exec ./autogen.sh ) ) else echo "$(tput setaf 2)" echo "###################################################################" echo "# Fetch Google Test & Prepare the Configure Script" echo "# (note: This section is lifted from autogen.sh)" echo "###################################################################" echo "$(tput sgr0)" ( cd ${PROTOBUF_SRC_DIR} # Check that we are being run from the right directory. if test ! -f src/google/protobuf/stubs/common.h then cat >&2 << __EOF__ Could not find source code. Make sure you are running this script from the root of the distribution tree. __EOF__ exit 1 fi # Check that gtest is present. Older versions of protobuf were stored in SVN # and the gtest directory was setup as an SVN external. Now, protobuf is # stored in GitHub and the gtest directory is not included. The commands # below will grab the latest version of gtest. Currently that is 1.7.0. if test ! -e gtest then echo "Google Test not present. Fetching gtest-1.7.0 from the web..." curl --location https://github.com/google/googletest/archive/release-1.7.0.tar.gz --output gtest-1.7.0.tar.gz tar xvf gtest-1.7.0.tar.gz rm gtest-1.7.0.tar.gz mv googletest-release-1.7.0 gtest fi autoreconf -f -i -Wall,no-obsolete rm -rf autom4te.cache config.h.in~ ) fi conditionalPause ################################################################### # This section contains the build commands to create the native @@ -205,6 +266,8 @@ fi PROTOC=${PREFIX}/platform/x86_64-mac/bin/protoc conditionalPause ################################################################### # This section contains the build commands for each of the # architectures that will be included in the universal binaries. @@ -227,6 +290,8 @@ then ) fi conditionalPause echo "$(tput setaf 2)" echo "#############################" echo "# x86_64 for iPhone Simulator" @@ -244,6 +309,8 @@ then ) fi conditionalPause echo "$(tput setaf 2)" echo "##################" echo "# armv7 for iPhone" @@ -261,6 +328,8 @@ then ) fi conditionalPause echo "$(tput setaf 2)" echo "###################" echo "# armv7s for iPhone" @@ -278,6 +347,8 @@ then ) fi conditionalPause echo "$(tput setaf 2)" echo "##################" echo "# arm64 for iPhone" @@ -295,6 +366,8 @@ then ) fi conditionalPause echo "$(tput setaf 2)" echo "###################################################################" echo "# Create Universal Libraries and Finalize the packaging" -
Gubarev revised this gist
Sep 21, 2015 . 1 changed file with 4 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -221,7 +221,7 @@ then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=i386-apple-${DARWIN} --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/i386-sim "CC=${CC}" "CFLAGS=${CFLAGS} -mios-simulator-version-min=${MIN_SDK_VERSION} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -mios-simulator-version-min=${MIN_SDK_VERSION} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" LDFLAGS="-arch i386 -mios-simulator-version-min=${MIN_SDK_VERSION} ${LDFLAGS} -L${IPHONESIMULATOR_SYSROOT}/usr/lib/ -L${IPHONESIMULATOR_SYSROOT}/usr/lib/system" "LIBS=${LIBS}" make make install ) @@ -238,7 +238,7 @@ then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=x86_64-apple-${DARWIN} --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/x86_64-sim "CC=${CC}" "CFLAGS=${CFLAGS} -mios-simulator-version-min=${MIN_SDK_VERSION} -arch x86_64 -isysroot ${IPHONESIMULATOR_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -mios-simulator-version-min=${MIN_SDK_VERSION} -arch x86_64 -isysroot ${IPHONESIMULATOR_SYSROOT}" LDFLAGS="-arch x86_64 -mios-simulator-version-min=${MIN_SDK_VERSION} ${LDFLAGS} -L${IPHONESIMULATOR_SYSROOT}/usr/lib/ -L${IPHONESIMULATOR_SYSROOT}/usr/lib/system" "LIBS=${LIBS}" make make install ) @@ -272,7 +272,7 @@ then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=armv7s-apple-${DARWIN} --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/armv7s-ios "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7s -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) @@ -289,7 +289,7 @@ then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=arm --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/arm64-ios "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch arm64 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) -
Gubarev revised this gist
Sep 21, 2015 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -151,7 +151,7 @@ echo "$(tput sgr0)" ( cd ${PROTOBUF_SRC_DIR} # Check that we are being run from the right directory. if test ! -f src/google/protobuf/stubs/common.h then cat >&2 << __EOF__ -
BennettSmith revised this gist
Sep 20, 2014 . 1 changed file with 2 additions and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -328,7 +328,8 @@ then fi mv "${PREFIX}" "${PREFIX}-master" else if [ -d "${PREFIX}-${PROTOBUF_VERSION}" ] then rm -rf "${PREFIX}-${PROTOBUF_VERSION}" fi mv "${PREFIX}" "${PREFIX}-${PROTOBUF_VERSION}" -
BennettSmith revised this gist
Sep 20, 2014 . 2 changed files with 116 additions and 28 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1 +1,3 @@ protobuf protobuf-2.6.0 protobuf-master This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -2,21 +2,10 @@ echo "$(tput setaf 2)" echo "###################################################################" echo "# Preparing to build Google Protobuf" echo "###################################################################" echo "$(tput sgr0)" # The results will be stored relative to the location # where you stored this script, **not** relative to # the location of the protobuf git repo. @@ -27,13 +16,15 @@ then fi mkdir -p "${PREFIX}/platform" # A "YES" value will build the latest code from GitHub on the master branch. # A "NO" value will use the 2.6.0 tarball downloaded from googlecode.com. USE_GIT_MASTER=NO PROTOBUF_GIT_URL=https://github.com/google/protobuf.git PROTOBUF_GIT_DIRNAME=protobuf PROTOBUF_VERSION=2.6.0 PROTOBUF_RELEASE_URL=https://protobuf.googlecode.com/svn/rc/protobuf-${PROTOBUF_VERSION}.tar.gz PROTOBUF_RELEASE_DIRNAME=protobuf-${PROTOBUF_VERSION} BUILD_MACOSX_X86_64=YES @@ -44,6 +35,10 @@ BUILD_IOS_ARMV7=YES BUILD_IOS_ARMV7S=YES BUILD_IOS_ARM64=YES PROTOBUF_SRC_DIR=/tmp/protobuf DARWIN=darwin13.4.0 XCODEDIR=`xcode-select --print-path` IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version` MIN_SDK_VERSION=7.1 @@ -57,15 +52,95 @@ IPHONEOS_SYSROOT=`xcrun --sdk iphoneos --show-sdk-path` IPHONESIMULATOR_PLATFORM=`xcrun --sdk iphonesimulator --show-sdk-platform-path` IPHONESIMULATOR_SYSROOT=`xcrun --sdk iphonesimulator --show-sdk-path` # Uncomment if you want to see more information about each invocation # of clang as the builds proceed. # CLANG_VERBOSE="--verbose" CC=clang CXX=clang CFLAGS="${CLANG_VERBOSE} -DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions" CXXFLAGS="${CLANG_VERBOSE} ${CFLAGS} -std=c++11 -stdlib=libc++" LDFLAGS="-stdlib=libc++" LIBS="-lc++ -lc++abi" echo "PREFIX ..................... ${PREFIX}" echo "USE_GIT_MASTER ............. ${USE_GIT_MASTER}" echo "PROTOBUF_GIT_URL ........... ${PROTOBUF_GIT_URL}" echo "PROTOBUF_GIT_DIRNAME ....... ${PROTOBUF_GIT_DIRNAME}" echo "PROTOBUF_VERSION ........... ${PROTOBUF_VERSION}" echo "PROTOBUF_RELEASE_URL ....... ${PROTOBUF_RELEASE_URL}" echo "PROTOBUF_RELEASE_DIRNAME ... ${PROTOBUF_RELEASE_DIRNAME}" echo "BUILD_MACOSX_X86_64 ........ ${BUILD_MACOSX_X86_64}" echo "BUILD_I386_IOSSIM .......... ${BUILD_I386_IOSSIM}" echo "BUILD_X86_64_IOSSIM ........ ${BUILD_X86_64_IOSSIM}" echo "BUILD_IOS_ARMV7 ............ ${BUILD_IOS_ARMV7}" echo "BUILD_IOS_ARMV7S ........... ${BUILD_IOS_ARMV7S}" echo "BUILD_IOS_ARM64 ............ ${BUILD_IOS_ARM64}" echo "PROTOBUF_SRC_DIR ........... ${PROTOBUF_SRC_DIR}" echo "DARWIN ..................... ${DARWIN}" echo "XCODEDIR ................... ${XCODEDIR}" echo "IOS_SDK_VERSION ............ ${IOS_SDK_VERSION}" echo "MIN_SDK_VERSION ............ ${MIN_SDK_VERSION}" echo "MACOSX_PLATFORM ............ ${MACOSX_PLATFORM}" echo "MACOSX_SYSROOT ............. ${MACOSX_SYSROOT}" echo "IPHONEOS_PLATFORM .......... ${IPHONEOS_PLATFORM}" echo "IPHONEOS_SYSROOT ........... ${IPHONEOS_SYSROOT}" echo "IPHONESIMULATOR_PLATFORM ... ${IPHONESIMULATOR_PLATFORM}" echo "IPHONESIMULATOR_SYSROOT .... ${IPHONESIMULATOR_SYSROOT}" echo "CC ......................... ${CC}" echo "CFLAGS ..................... ${CFLAGS}" echo "CXX ........................ ${CXX}" echo "CXXFLAGS ................... ${CXXFLAGS}" echo "LDFLAGS .................... ${LDFLAGS}" echo "LIBS ....................... ${LIBS}" while true; do read -p "Proceed with build? (y/n) " yn case $yn in [Yy]* ) break;; [Nn]* ) exit;; * ) echo "Please answer yes or no.";; esac done echo "$(tput setaf 2)" echo "###################################################################" echo "# Fetch Google Protobuf" echo "###################################################################" echo "$(tput sgr0)" ( if [ -d ${PROTOBUF_SRC_DIR} ] then rm -rf ${PROTOBUF_SRC_DIR} fi cd `dirname ${PROTOBUF_SRC_DIR}` if [ "${USE_GIT_MASTER}" == "YES" ] then git clone ${PROTOBUF_GIT_URL} else if [ -d ${PROTOBUF_RELEASE_DIRNAME} ] then rm -rf "${PROTOBUF_RELEASE_DIRNAME}" fi curl --location ${PROTOBUF_RELEASE_URL} --output ${PROTOBUF_RELEASE_DIRNAME}.tar.gz tar xvf ${PROTOBUF_RELEASE_DIRNAME}.tar.gz mv "${PROTOBUF_RELEASE_DIRNAME}" "${PROTOBUF_SRC_DIR}" rm ${PROTOBUF_RELEASE_DIRNAME}.tar.gz # Remove the version of Google Test included with the release. # We will replace it with version 1.7.0 in a later step. if [ -d "${PROTOBUF_SRC_DIR}/gtest" ] then rm -r "${PROTOBUF_SRC_DIR}/gtest" fi fi ) echo "$(tput setaf 2)" echo "###################################################################" echo "# Fetch Google Test & Prepare the Configure Script" @@ -123,6 +198,7 @@ then make distclean ./configure --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/x86_64-mac "CC=${CC}" "CFLAGS=${CFLAGS} -arch x86_64" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch x86_64" "LDFLAGS=${LDFLAGS}" "LIBS=${LIBS}" make make check make install ) fi @@ -221,7 +297,7 @@ fi echo "$(tput setaf 2)" echo "###################################################################" echo "# Create Universal Libraries and Finalize the packaging" echo "###################################################################" echo "$(tput sgr0)" @@ -232,12 +308,6 @@ echo "$(tput sgr0)" lipo x86_64-sim/lib/libprotobuf-lite.a i386-sim/lib/libprotobuf-lite.a arm64-ios/lib/libprotobuf-lite.a armv7s-ios/lib/libprotobuf-lite.a armv7-ios/lib/libprotobuf-lite.a -create -output universal/libprotobuf-lite.a ) ( cd ${PREFIX} mkdir bin @@ -246,7 +316,23 @@ echo "$(tput setaf 2)" cp -r platform/x86_64-mac/lib/* lib cp -r platform/universal/* lib rm -rf platform lipo -info lib/libprotobuf.a lipo -info lib/libprotobuf-lite.a ) if [ "${USE_GIT_MASTER}" == "YES" ] then if [ -d "${PREFIX}-master" ] then rm -rf "${PREFIX}-master" fi mv "${PREFIX}" "${PREFIX}-master" else if [ -d "${PREFIX}-${PROTOBUF_VERSION}" rm -rf "${PREFIX}-${PROTOBUF_VERSION}" fi mv "${PREFIX}" "${PREFIX}-${PROTOBUF_VERSION}" fi echo Done! -
BennettSmith revised this gist
Sep 20, 2014 . 3 changed files with 148 additions and 62 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ protobuf This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1 +1,48 @@ # Google Protobuf 2.6.0 - Mac OS X and iOS Support The script in this gist will help you buid the Google Protobuf library for use with Mac OS X and iOS. Other methods (such as homebrew or direct compilation) have issues that prevent their use. The libraries built by this script are universal and support all iOS device architectures including the simluator. # Get the Script The easiest way to use this script is to simply clone the gist onto your machine using the following command: ``` $ git clone https://gist.github.com/9487468ae3375d0db0cc.git build-protobuf ``` # Performing the Build The script will automatically download the tarball from Google Code, so all you need to do is run the script. ``` $ cd build-protobuf $ ./build-protobuf-2.6.0.sh ``` # Results Build results are found in a folder called `protobuf`. This folder contains `bin`, `include` and `lib` folders. # Integration with Xcode Create a build rule in your Xcode project with the following settings. Process *Source files with names matching:* `*.proto` Using *Custom script:* cd ${INPUT_FILE_DIR} ${SRCROOT}/Google/protobuf/bin/protoc --proto_path=${INPUT_FILE_DIR} ${INPUT_FILE_PATH} --cpp_out=${DERIVED_FILE_DIR} Output Files $(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).pb.cc $(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).pb.h Depending on where you choose to install the protobuf build, you will need to adjust the path to `protoc`. This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,9 +1,11 @@ #!/bin/bash echo "$(tput setaf 2)" echo "###################################################################" echo "# Fetch Google Protobuf from the GitHub repo. We are going to" echo "# build the master branch, so this is bleeding edge stuff! ;-)" echo "###################################################################" echo "$(tput sgr0)" PROTOBUF_SRC_DIR=/tmp/protobuf ( @@ -33,11 +35,14 @@ mkdir -p "${PREFIX}/platform" DARWIN=darwin13.4.0 BUILD_MACOSX_X86_64=YES BUILD_I386_IOSSIM=YES BUILD_X86_64_IOSSIM=YES BUILD_IOS_ARMV7=YES BUILD_IOS_ARMV7S=YES BUILD_IOS_ARM64=YES XCODEDIR=`xcode-select --print-path` IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version` @@ -61,33 +66,42 @@ CXXFLAGS="--verbose ${CFLAGS} -std=c++11 -stdlib=libc++" LDFLAGS="-stdlib=libc++" LIBS="-lc++ -lc++abi" echo "$(tput setaf 2)" echo "###################################################################" echo "# Fetch Google Test & Prepare the Configure Script" echo "# (note: This section is lifted from autogen.sh)" echo "###################################################################" echo "$(tput sgr0)" ( cd ${PROTOBUF_SRC_DIR} # Check that we're being run from the right directory. if test ! -f src/google/protobuf/stubs/common.h then cat >&2 << __EOF__ Could not find source code. Make sure you are running this script from the root of the distribution tree. __EOF__ exit 1 fi # Check that gtest is present. Older versions of protobuf were stored in SVN # and the gtest directory was setup as an SVN external. Now, protobuf is # stored in GitHub and the gtest directory is not included. The commands # below will grab the latest version of gtest. Currently that is 1.7.0. if test ! -e gtest then echo "Google Test not present. Fetching gtest-1.7.0 from the web..." curl --location http://googletest.googlecode.com/files/gtest-1.7.0.zip --output gtest-1.7.0.zip unzip gtest-1.7.0.zip rm gtest-1.7.0.zip mv gtest-1.7.0 gtest fi autoreconf -f -i -Wall,no-obsolete rm -rf autom4te.cache config.h.in~ ) ################################################################### # This section contains the build commands to create the native @@ -96,116 +110,140 @@ fi # susequent iOS builds. ################################################################### echo "$(tput setaf 2)" echo "###################################################################" echo "# x86_64 for Mac OS X" echo "###################################################################" echo "$(tput sgr0)" if [ "${BUILD_MACOSX_X86_64}" == "YES" ] then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/x86_64-mac "CC=${CC}" "CFLAGS=${CFLAGS} -arch x86_64" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch x86_64" "LDFLAGS=${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi PROTOC=${PREFIX}/platform/x86_64-mac/bin/protoc ################################################################### # This section contains the build commands for each of the # architectures that will be included in the universal binaries. ################################################################### echo "$(tput setaf 2)" echo "###########################" echo "# i386 for iPhone Simulator" echo "###########################" echo "$(tput sgr0)" if [ "${BUILD_I386_IOSSIM}" == "YES" ] then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=i386-apple-${DARWIN} --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/i386-sim "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" LDFLAGS="-arch i386 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi echo "$(tput setaf 2)" echo "#############################" echo "# x86_64 for iPhone Simulator" echo "#############################" echo "$(tput sgr0)" if [ "${BUILD_X86_64_IOSSIM}" == "YES" ] then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=x86_64-apple-${DARWIN} --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/x86_64-sim "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch x86_64 -isysroot ${IPHONESIMULATOR_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch x86_64 -isysroot ${IPHONESIMULATOR_SYSROOT}" LDFLAGS="-arch x86_64 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi echo "$(tput setaf 2)" echo "##################" echo "# armv7 for iPhone" echo "##################" echo "$(tput sgr0)" if [ "${BUILD_IOS_ARMV7}" == "YES" ] then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=armv7-apple-${DARWIN} --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/armv7-ios "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi echo "$(tput setaf 2)" echo "###################" echo "# armv7s for iPhone" echo "###################" echo "$(tput sgr0)" if [ "${BUILD_IOS_ARMV7S}" == "YES" ] then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=armv7s-apple-${DARWIN} --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/armv7s-ios "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7s -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi echo "$(tput setaf 2)" echo "##################" echo "# arm64 for iPhone" echo "##################" echo "$(tput sgr0)" if [ "${BUILD_IOS_ARM64}" == "YES" ] then ( cd ${PROTOBUF_SRC_DIR} make distclean ./configure --build=x86_64-apple-${DARWIN} --host=arm --with-protoc=${PROTOC} --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/arm64-ios "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch arm64 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi echo "$(tput setaf 2)" echo "###################################################################" echo "# Create Universal Libraries" echo "###################################################################" echo "$(tput sgr0)" ( cd ${PREFIX}/platform mkdir universal lipo x86_64-sim/lib/libprotobuf.a i386-sim/lib/libprotobuf.a arm64-ios/lib/libprotobuf.a armv7s-ios/lib/libprotobuf.a armv7-ios/lib/libprotobuf.a -create -output universal/libprotobuf.a lipo x86_64-sim/lib/libprotobuf-lite.a i386-sim/lib/libprotobuf-lite.a arm64-ios/lib/libprotobuf-lite.a armv7s-ios/lib/libprotobuf-lite.a armv7-ios/lib/libprotobuf-lite.a -create -output universal/libprotobuf-lite.a ) echo "$(tput setaf 2)" echo "###################################################################" echo "# Finalize the packaging" echo "###################################################################" echo "$(tput setaf 2)" ( cd ${PREFIX} mkdir bin mkdir lib cp -r platform/x86_64-mac/bin/protoc bin cp -r platform/x86_64-mac/lib/* lib cp -r platform/universal/* lib rm -rf platform ) -
BennettSmith revised this gist
Sep 20, 2014 . 1 changed file with 214 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,214 @@ #!/bin/bash ################################################################### # Fetch Google Protobuf from the GitHub repo. We are going to # build the master branch, so this is bleeding edge stuff! ;-) ################################################################### PROTOBUF_SRC_DIR=/tmp/protobuf ( if [ -d ${PROTOBUF_SRC_DIR} ] then rm -rf ${PROTOBUF_SRC_DIR} fi cd `dirname ${PROTOBUF_SRC_DIR}` git clone https://github.com/google/protobuf.git ) # The results will be stored relative to the location # where you stored this script, **not** relative to # the location of the protobuf git repo. PREFIX=`pwd`/protobuf if [ -d ${PREFIX} ] then rm -rf "${PREFIX}" fi mkdir -p "${PREFIX}/platform" ################################################################### # Build variables. The stuff in this section controls the outcome # of the build process. It selects the iOS SDK version based # on how xcrun is currently configured. ################################################################### DARWIN=darwin13.4.0 BUILD_MAXOSX_X86_64=YES BUILD_I386_IOS=YES BUILD_IOS_ARMV7=YES BUILD_IOS_ARMV7S=YES BUILD_IOS_ARMV64=YES XCODEDIR=`xcode-select --print-path` IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version` MIN_SDK_VERSION=7.1 MACOSX_PLATFORM=${XCODEDIR}/Platforms/MacOSX.platform MACOSX_SYSROOT=${MACOSX_PLATFORM}/Developer/MacOSX10.9.sdk IPHONEOS_PLATFORM=`xcrun --sdk iphoneos --show-sdk-platform-path` IPHONEOS_SYSROOT=`xcrun --sdk iphoneos --show-sdk-path` IPHONESIMULATOR_PLATFORM=`xcrun --sdk iphonesimulator --show-sdk-platform-path` IPHONESIMULATOR_SYSROOT=`xcrun --sdk iphonesimulator --show-sdk-path` CC=clang CFLAGS="--verbose -DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions" CXX=clang CXXFLAGS="--verbose ${CFLAGS} -std=c++11 -stdlib=libc++" LDFLAGS="-stdlib=libc++" LIBS="-lc++ -lc++abi" ################################################################### # The following section is lifted from the autogen.sh script that # is part of the protobuf source code. It verifies we are in the # correct folder and fetches the version if Google Test that is # used by for unit tests. ################################################################### # Check that we're being run from the right directory. if test ! -f src/google/protobuf/stubs/common.h; then cat >&2 << __EOF__ Could not find source code. Make sure you are running this script from the root of the distribution tree. __EOF__ exit 1 fi # Check that gtest is present. Older versions of protobuf were stored in SVN # and the gtest directory was setup as an SVN external. Now, protobuf is # stored in GitHub and the gtest directory is not included. The commands # below will grab the latest version of gtest. Currently that is 1.7.0. if test ! -e gtest; then echo "Google Test not present. Fetching gtest-1.7.0 from the web..." curl --location http://googletest.googlecode.com/files/gtest-1.7.0.zip --output gtest-1.7.0.zip unzip gtest-1.7.0.zip rm gtest-1.7.0.zip mv gtest-1.7.0 gtest fi ################################################################### # This section contains the build commands to create the native # protobuf library for Mac OS X. This is done first so we have # a copy of the protoc compiler. It will be used in all of the # susequent iOS builds. ################################################################### echo "###################################################################" echo "# x86_64 for Mac OS X" echo "###################################################################" if [ "${BUILD_MACOSX_X86_64}" == "YES" ] then ( make distclean ./configure --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/x86_64 "CC=${CC}" "CFLAGS=${CFLAGS} -arch x86_64" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch x86_64" "LDFLAGS=${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi ################################################################### # This section contains the build commands for each of the # architectures that will be included in the universal binaries. ################################################################### echo "###########################" echo "# i386 for iPhone Simulator" echo "###########################" if [ "${BUILD_I386_IOS}" == "YES" ] then ( make distclean ./configure --build=x86_64-apple-${DARWIN} --host=i386-apple-${DARWIN} --with-protoc=${PREFIX}/platform/x86_64/bin/protoc --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/i386 "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" LDFLAGS="-arch i386 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi echo "##################" echo "# armv7 for iPhone" echo "##################" if [ "${BUILD_IOS_ARMV7}" == "YES" ] then ( make distclean ./configure --build=x86_64-apple-${DARWIN} --host=armv7-apple-${DARWIN} --with-protoc=${PREFIX}/platform/x86_64/bin/protoc --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/armv7 "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi echo "###################" echo "# armv7s for iPhone" echo "###################" if [ "${BUILD_IOS_ARMV7S}" == "YES" ] then ( make distclean ./configure --build=x86_64-apple-${DARWIN} --host=armv7s-apple-${DARWIN} --with-protoc=${PREFIX}/platform/x86_64/bin/protoc --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/armv7s "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7s -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi ######################################## # Patch Protobuf 2.5.0 for 64bit support ######################################## # ( # cd /tmp/${PROTOBUF_FOLDER} # make distclean # curl https://gist.github.com/BennettSmith/7111094/raw/171695f70b102de2301f5b45d9e9ab3167b4a0e8/0001-Add-generic-GCC-support-for-atomic-operations.patch --output /tmp/0001-Add-generic-GCC-support-for-atomic-operations.patch # curl https://gist.github.com/BennettSmith/7111094/raw/a4e85ffc82af00ae7984020300db51a62110db48/0001-Add-generic-gcc-header-to-Makefile.am.patch --output /tmp/0001-Add-generic-gcc-header-to-Makefile.am.patch # patch -p1 < /tmp/0001-Add-generic-GCC-support-for-atomic-operations.patch # patch -p1 < /tmp/0001-Add-generic-gcc-header-to-Makefile.am.patch # rm /tmp/0001-Add-generic-GCC-support-for-atomic-operations.patch # rm /tmp/0001-Add-generic-gcc-header-to-Makefile.am.patch # ) echo "##################" echo "# arm64 for iPhone" echo "##################" if [ "${BUILD_IOS_ARMV64}" == "YES" ] then ( ./configure --build=x86_64-apple-${DARWIN} --host=arm --with-protoc=${PREFIX}/platform/x86_64/bin/protoc --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/arm64 "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=${MIN_SDK_VERSION} -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch arm64 -miphoneos-version-min=${MIN_SDK_VERSION} ${LDFLAGS}" "LIBS=${LIBS}" make make install ) fi ################################################################### # Create Universal Libraries ################################################################### ( 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 ################################################################### ( 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 ) echo Done! -
BennettSmith created this gist
Sep 20, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ The script in this gist can be used to create a universal binary containing the 2.6.0 version of Google Protobuf.