summaryrefslogtreecommitdiff
path: root/platform/ios/scripts/package.sh
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ios/scripts/package.sh')
-rwxr-xr-xplatform/ios/scripts/package.sh152
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"