zoukankan      html  css  js  c++  java
  • 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!
    

      

  • 相关阅读:
    敏捷软件开发实践-Release Process/Release Plan(转)
    《敏捷软件开发-原则、方法与实践》-Robert C. Martin读书笔记(转)
    测试RESTful API利器-Postman
    backbone.js初探(转)
    JavaScript有关的10个怪癖和秘密(转)
    Restful Web Service初识
    JSTL标签库的使用
    JavaScript处理JSON
    绑定QQ登录 PHP OAuth详解(转)
    mysql if exist坑
  • 原文地址:https://www.cnblogs.com/dependence/p/5580403.html
Copyright © 2011-2022 走看看