MAC 上 protobuf 编译

#!/bin/bash
#选本替换成https://github.com/google/protobuf/releases/tag/v2.6.1

echo Building Google Protobuf for Mac OS X / iOS.
echo Use ‘tail -f build.log‘ to monitor progress.

(
PREFIX=`pwd`/protobuf
mkdir ${PREFIX}
mkdir ${PREFIX}/platform

XCODEDIR=`xcode-select --print-path`

MACOSX_PLATFORM=${XCODEDIR}/Platforms/MacOSX.platform
MACOSX_SYSROOT=${MACOSX_PLATFORM}/Developer/MacOSX10.9.sdk

IPHONEOS_PLATFORM=${XCODEDIR}/Platforms/iPhoneOS.platform
IPHONEOS_SYSROOT=${IPHONEOS_PLATFORM}/Developer/SDKs/iPhoneOS7.0.sdk

IPHONESIMULATOR_PLATFORM=${XCODEDIR}/Platforms/iPhoneSimulator.platform
IPHONESIMULATOR_SYSROOT=${IPHONESIMULATOR_PLATFORM}/Developer/SDKs/iPhoneSimulator7.0.sdk

CC=clang
CFLAGS="-DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions"
CXX=clang++
CXXFLAGS="${CFLAGS} -std=c++11 -stdlib=libc++"

####################################
# Cleanup any earlier build attempts
####################################

(
    cd /tmp
    if [ -d ${PREFIX} ]
    then
        rm -rf ${PREFIX}
    fi
    mkdir ${PREFIX}
    mkdir ${PREFIX}/platform
)

##########################################
# Fetch Google Protobuf 2.5.0 from source.
##########################################

(
    cd /tmp
    curl http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz --output /tmp/protobuf-2.5.0.tar.gz

    if [ -d /tmp/protobuf-2.5.0 ]
    then
        rm -rf /tmp/protobuf-2.5.0
    fi

    tar xvf /tmp/protobuf-2.5.0.tar.gz
)

#####################
# x86_64 for Mac OS X
#####################

(
    cd /tmp/protobuf-2.5.0
    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"
    make
    make test
    make install
)

###########################
# i386 for iPhone Simulator
###########################

(
    cd /tmp/protobuf-2.5.0
    make distclean
    ./configure --build=x86_64-apple-darwin13.0.0 --host=i386-apple-darwin13.0.0 --with-protoc=${PREFIX}/platform/x86_64/bin/protoc --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/i386 "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=6.1 -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch i386 -isysroot ${IPHONESIMULATOR_SYSROOT}" LDFLAGS="-arch i386 -miphoneos-version-min=6.1"
    make
    make install
)

##################
# armv7 for iPhone
##################

(
    cd /tmp/protobuf-2.5.0
    make distclean
    ./configure --build=x86_64-apple-darwin13.0.0 --host=armv7-apple-darwin13.0.0 --with-protoc=${PREFIX}/platform/x86_64/bin/protoc --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/armv7 "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=6.1 -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7 -miphoneos-version-min=6.1"
    make
    make install
)

###################
# armv7s for iPhone
###################

(
    cd /tmp/protobuf-2.5.0
    make distclean
    ./configure --build=x86_64-apple-darwin13.0.0 --host=armv7s-apple-darwin13.0.0 --with-protoc=${PREFIX}/platform/x86_64/bin/protoc --disable-shared --prefix=${PREFIX} --exec-prefix=${PREFIX}/platform/armv7s "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=6.1 -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7s -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7s -miphoneos-version-min=6.1"
    make
    make install
)

########################################
# Patch Protobuf 2.5.0 for 64bit support
########################################

(
    cd /tmp/protobuf-2.5.0
    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
)

##################
# arm64 for iPhone
##################

(
    cd /tmp/protobuf-2.5.0
    ./configure --build=x86_64-apple-darwin13.0.0 --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=6.1 -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch arm64 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch arm64 -miphoneos-version-min=6.1"
    make
    make install
)

############################
# 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
)
) >build.log 2>&1
echo Done!

  

时间: 2024-09-29 06:02:07

MAC 上 protobuf 编译的相关文章

ffmpeg在Mac上的编译

原帖地址:https://blog.csdn.net/minger1202/article/details/52302500 Mac上的编译 在Ubuntu系统下编译ffmpeg的源码很方便,缺少什么第三方的工具或者lib直接就可以apt-get,再不行就百度,总之解决起来很方便.最近屌丝鸟枪换Mac了,所以这里就说说Mac上如何编译ffmpeg源码以及如何解决编译过程中遇见的问题. 下载源码配置环境 首先你需要下载源码的地址:https://ffmpeg.org/download.html#g

MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)

前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的,mac上也妥妥的.这里记录下在mac上所用的东西和流程. 总共需要三个软件,为了便于找到最新的版本,把官网也放后面: Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1 dex2jar: https://github.com

mysql在mac上的编译和调试

今天正式开始漫漫长路,打算这几年用业余时间刷刷mysql5.5源代码,由于手边的书籍基本都是基于mysql5.5的,所以就不用5.7版本的代码了,更何况我更关注基本内核.因此,没有特殊指明,那么,一般都指mysql5.5版本.工作原因没有深入去了解mysql,既然想玩技术,工作上的技术挑战没有研究mysql内核这么直接,因此,决定用业余时间搞搞些技术活,一方面可以让自己的技术深入储备,另一方面也让自己在工作之余从技术中获得点点成就感. 选择mac平台因为简单,windows平台我也编译成功了,但

MAC上反编译android apk-apktool, dex2jar, jd-jui安装使用

前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的,mac上也妥妥的.这里记录下在mac上所用的东西和流程. 总共需要三个软件,为了便于找到最新的版本,把官网也放后面: Apktool:最新版本2.0.1 dex2jar: 最新版本2.0 JD-GUI: 最新版本1.4.0 这三个软件Apktool的安装稍微麻烦点,其他都还好,基本上下载下来解压了就

npm grunt在mac上编译bootstrap源码

因为gmu需要用编译的方式下载,于是联想到bootstrap什么less sass编译 less先学,据说基于js编译和less编译器,安装起来详细, sass据网上介绍基于ruby, 以下为在mac上下载编译boostrap过程 1.安装node.js brew install node.js就可以了 2.sudo npm install bootstrap(记住npm命令需要加sudo) 3.进入bootstrap sudo npm install(根据package.json编译)(再次提

mac安装protobuf

首先从http://code.google.com/p/protobuf/下载protobuf 之后需要安装brew [非root] brew install autoconf[need to across the great wall and reach the bigger world] brew install automake brew install libel [root] sudo ./autogen.sh ./configure(先autogen.sh才有,如果没有权限chmod

TiDB之mac上搭建及调试技巧

此文目的 由于本人最近已经成为TiDB的粉丝,所以就开始各种研究TiDB的源码,研究源码这个事情,首先就需要在自己电脑上不断的调试及修改.TiDB本身的代码是非常容易编译和调试的,但是要把PD.TiKV集群同时在本机上建立起来,还是有一点难度的.好在pingcap官方提供了docker-compose搭建集群的方式,可以快速的在个人电脑上启动一个TiDB的集群.但是,我要的不只是一个集群,我还希望在我的mac上实时编译调试TiDB服务,这个TiDB服务能够和docker-compose的集群里的

尝试在Mac上编译DNX

自从XRE改名为DNX至今,从来没有在Mac OS X上成功编译过DNX.一直很纳闷,难道DNX的开发人员不用Mac?今天突然明白了,DNX的开发人员真的不用Mac.而且DNX用的2个持续集成服务AppVeyor与Travis,一个是Windows环境,一个是Linux环境,就是没有Mac OS X环境. 看来不能指望DNX的开发人员短期内解决这个问题了,只能自己动手. 编译的错误信息如下(编译命令./build.sh): Restore complete, 725ms elapsed info

Mac上编译并运行Android5.0源码

下载.配置环境.build和运行参考的都是Android Source提供的文档,包括:Initializing a Build Environment,Downloading the Source和Building the System. 我是在OSX 10.10.3上编译的AOSP,记录一下中途碰到的各种问题. 下载 AOSP需要FQ,而且经常会断,还好是断点续传,坚持个两三天怎么也能下下来. case sensitive system 我在Mac上对file system只会用Disk U