build_ios.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/bin/bash
  2. # Automatic build script for pbc
  3. ###########################################################################
  4. # Change values here
  5. #
  6. SDKVERSION=$(xcrun -sdk iphoneos --show-sdk-version);
  7. #
  8. ###########################################################################
  9. #
  10. # Don't change anything here
  11. WORKING_DIR="$(cd $(dirname $0))";
  12. cd "$WORKING_DIR";
  13. ARCHS="i386 x86_64 armv7 armv7s arm64";
  14. DEVELOPER_ROOT=$(xcode-select -print-path);
  15. # ======================= options =======================
  16. while getopts "a:d:hs:-" OPTION; do
  17. case $OPTION in
  18. a)
  19. ARCHS="$OPTARG";
  20. ;;
  21. d)
  22. DEVELOPER_ROOT="$OPTARG";
  23. ;;
  24. h)
  25. echo "usage: $0 [options] [-- [make options]]";
  26. echo "options:";
  27. echo "-a [archs] which arch need to built, multiple values must be split by space(default: $ARCHS)";
  28. echo "-d [developer root directory] developer root directory, we use xcode-select -print-path to find default value.(default: $DEVELOPER_ROOT)";
  29. echo "-s [sdk version] sdk version, we use xcrun -sdk iphoneos --show-sdk-version to find default value.(default: $SDKVERSION)";
  30. echo "-h help message.";
  31. exit 0;
  32. ;;
  33. s)
  34. SDKVERSION="$SDKVERSION";
  35. ;;
  36. -)
  37. break;
  38. break;
  39. ;;
  40. ?) #当有不认识的选项的时候arg为?
  41. echo "unkonw argument detected";
  42. exit 1;
  43. ;;
  44. esac
  45. done
  46. shift $(($OPTIND-1));
  47. echo "Ready to build for ios";
  48. echo "WORKING_DIR=${WORKING_DIR}";
  49. echo "ARCHS=${ARCHS}";
  50. echo "DEVELOPER_ROOT=${DEVELOPER_ROOT}";
  51. echo "SDKVERSION=${SDKVERSION}";
  52. echo "make options=$@";
  53. ##########
  54. for ARCH in ${ARCHS}; do
  55. echo "================== Compling $ARCH ==================";
  56. if [[ "${ARCH}" == "i386" || "${ARCH}" == "x86_64" ]]; then
  57. PLATFORM="iPhoneSimulator";
  58. else
  59. PLATFORM="iPhoneOS";
  60. fi
  61. if [ -e build/o ]; then
  62. rm -rf build/o;
  63. fi
  64. echo "Building pbc for ${PLATFORM} ${SDKVERSION} ${ARCH}";
  65. echo "Please stand by...";
  66. export DEVROOT="${DEVELOPER_ROOT}/Platforms/${PLATFORM}.platform/Developer";
  67. export SDKROOT="${DEVROOT}/SDKs/${PLATFORM}${SDKVERSION}.sdk";
  68. export BUILD_TOOLS="${DEVELOPER_ROOT}";
  69. #export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}";
  70. export CC=${BUILD_TOOLS}/usr/bin/gcc;
  71. #export LD=${BUILD_TOOLS}/usr/bin/ld;
  72. #export CPP=${BUILD_TOOLS}/usr/bin/cpp;
  73. #export CXX=${BUILD_TOOLS}/usr/bin/g++;
  74. export AR=${DEVELOPER_ROOT}/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar;
  75. #export AS=${DEVROOT}/usr/bin/as;
  76. #export NM=${DEVROOT}/usr/bin/nm;
  77. #export CXXCPP=${BUILD_TOOLS}/usr/bin/cpp;
  78. #export RANLIB=${BUILD_TOOLS}/usr/bin/ranlib;
  79. #export LDFLAGS="-arch ${ARCH} -isysroot ${SDKROOT} ";
  80. export CFLAGS="-arch ${ARCH} -isysroot ${SDKROOT} -O2 -fPIC -Wall";
  81. make libpbc.a CC="$CC" AR="$AR rc" CFLAGS="$CFLAGS" $@;
  82. mv -f build/libpbc.a "build/libpbc-$ARCH.a";
  83. done
  84. cd "$WORKING_DIR";
  85. echo "Linking and packaging library...";
  86. for LIB_NAME in "libpbc"; do
  87. lipo -create build/$LIB_NAME-*.a -output "build/$LIB_NAME.a";
  88. echo "build/$LIB_NAME.a built.";
  89. done