diff options
Diffstat (limited to 'platform/ios/scripts/package.sh')
-rwxr-xr-x | platform/ios/scripts/package.sh | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/platform/ios/scripts/package.sh b/platform/ios/scripts/package.sh new file mode 100755 index 0000000000..d067e67eab --- /dev/null +++ b/platform/ios/scripts/package.sh @@ -0,0 +1,152 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail +set -u + +NAME=Mapbox +OUTPUT=build/ios/pkg +IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version` +LIBUV_VERSION=1.7.5 +ENABLE_BITCODE=YES + +if [[ ${#} -eq 0 ]]; then # e.g. "make ipackage" + BUILDTYPE="Release" + BUILD_FOR_DEVICE=true + GCC_GENERATE_DEBUGGING_SYMBOLS="YES" +elif [[ ${1} == "no-bitcode" ]]; then # e.g. "make ipackage-no-bitcode" + BUILDTYPE="Release" + BUILD_FOR_DEVICE=true + GCC_GENERATE_DEBUGGING_SYMBOLS="YES" + ENABLE_BITCODE=NO +elif [[ ${1} == "sim" ]]; then # e.g. "make ipackage-sim" + BUILDTYPE="Debug" + BUILD_FOR_DEVICE=false + GCC_GENERATE_DEBUGGING_SYMBOLS="YES" +else # e.g. "make ipackage-strip" + BUILDTYPE="Release" + BUILD_FOR_DEVICE=true + GCC_GENERATE_DEBUGGING_SYMBOLS="NO" +fi + +function step { >&2 echo -e "\033[1m\033[36m* $@\033[0m"; } +function finish { >&2 echo -en "\033[0m"; } +trap finish EXIT + + +rm -rf ${OUTPUT} +mkdir -p "${OUTPUT}"/static + + +step "Recording library version..." +VERSION="${OUTPUT}"/static/version.txt +echo -n "https://github.com/mapbox/mapbox-gl-native/commit/" > ${VERSION} +HASH=`git log | head -1 | awk '{ print $2 }' | cut -c 1-10` && true +echo -n "mapbox-gl-native " +echo ${HASH} +echo ${HASH} >> ${VERSION} + + +step "Creating build files..." +export MASON_PLATFORM=ios +export BUILDTYPE=${BUILDTYPE:-Release} +export HOST=ios +make Xcode/ios + +if [[ "${BUILD_FOR_DEVICE}" == true ]]; then + step "Building iOS device targets..." + xcodebuild -sdk iphoneos${IOS_SDK_VERSION} \ + ARCHS="arm64 armv7 armv7s" \ + ONLY_ACTIVE_ARCH=NO \ + GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ + ENABLE_BITCODE=${ENABLE_BITCODE} \ + DEPLOYMENT_POSTPROCESSING=YES \ + -project ./build/ios-all/gyp/mbgl.xcodeproj \ + -configuration ${BUILDTYPE} \ + -target everything \ + -jobs ${JOBS} +fi + +step "Building iOS Simulator targets..." +xcodebuild -sdk iphonesimulator${IOS_SDK_VERSION} \ + ARCHS="x86_64 i386" \ + ONLY_ACTIVE_ARCH=NO \ + GCC_GENERATE_DEBUGGING_SYMBOLS=${GCC_GENERATE_DEBUGGING_SYMBOLS} \ + -project ./build/ios-all/gyp/mbgl.xcodeproj \ + -configuration ${BUILDTYPE} \ + -target everything \ + -jobs ${JOBS} + + +step "Building static library..." +LIBS=(core.a platform-ios.a asset-fs.a cache-sqlite.a http-nsurl.a) +if [[ "${BUILD_FOR_DEVICE}" == true ]]; then + libtool -static -no_warning_for_no_symbols \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libuv.a` \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libgeojsonvt.a` \ + -o ${OUTPUT}/static/lib${NAME}.a \ + ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphoneos/libmbgl-} \ + ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphonesimulator/libmbgl-} +else + libtool -static -no_warning_for_no_symbols \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libuv.a` \ + `find mason_packages/ios-${IOS_SDK_VERSION} -type f -name libgeojsonvt.a` \ + -o ${OUTPUT}/static/lib${NAME}.a \ + ${LIBS[@]/#/gyp/build/${BUILDTYPE}-iphonesimulator/libmbgl-} +fi +echo "Created ${OUTPUT}/static/lib${NAME}.a" + + +step "Copying Headers..." +mkdir -p "${OUTPUT}/static/Headers" +for i in `ls -R include/mbgl/darwin | grep -vi private`; do + cp -pv include/mbgl/darwin/$i "${OUTPUT}/static/Headers" +done +for i in `ls -R include/mbgl/ios | grep -vi private`; do + cp -pv include/mbgl/ios/$i "${OUTPUT}/static/Headers" +done + + +# Manually create resource bundle. We don't use a GYP target here because of +# complications between faked GYP bundles-as-executables, device build +# dependencies, and code signing. +step "Copying Resources..." +cp -pv LICENSE.md "${OUTPUT}/static" +mkdir -p "${OUTPUT}/static/${NAME}.bundle" +cp -pv platform/ios/resources/* "${OUTPUT}/static/${NAME}.bundle" + +step "Creating API Docs..." +if [ -z `which appledoc` ]; then + echo "Unable to find appledoc. See https://github.com/mapbox/mapbox-gl-native/blob/master/docs/BUILD_IOS_OSX.md" + exit 1 +fi +DOCS_OUTPUT="${OUTPUT}/static/Docs" +DOCS_VERSION=$( git tag | grep ^ios | sed 's/^ios-//' | sort -r | grep -v '\-rc.' | grep -v '\-pre.' | sed -n '1p' | sed 's/^v//' ) +rm -rf /tmp/mbgl +mkdir -p /tmp/mbgl/ +README=/tmp/mbgl/README.md +cat ios/docs/pod-README.md > ${README} +echo >> ${README} +echo -n "#" >> ${README} +cat CHANGELOG.md | sed -n "/^## iOS ${DOCS_VERSION}/,/^##/p" | sed '$d' >> ${README} +# Copy headers to a temporary location where we can substitute macros that appledoc doesn't understand. +cp -r "${OUTPUT}/static/Headers" /tmp/mbgl +perl \ + -pi \ + -e 's/NS_(?:(MUTABLE)_)?(ARRAY|SET|DICTIONARY)_OF\(\s*(.+?)\s*\)/NS\L\u$1\u$2\E <$3>/g' \ + /tmp/mbgl/Headers/*.h +perl \ + -i -p0 \ + -e 's/^#if\s+!\s*TARGET_OS_IPHONE\s*(?:&&[^\n]+)?\n.+?\n#endif//gms' \ + /tmp/mbgl/Headers/*.h +appledoc \ + --output ${DOCS_OUTPUT} \ + --project-name "Mapbox iOS SDK ${DOCS_VERSION}" \ + --project-company Mapbox \ + --create-html \ + --no-create-docset \ + --no-install-docset \ + --company-id com.mapbox \ + --index-desc ${README} \ + /tmp/mbgl/Headers +cp ${README} "${OUTPUT}/static" |