diff --git a/scripts/build_framework.sh b/scripts/build_framework.sh index 033ce4db1..c2509b631 100755 --- a/scripts/build_framework.sh +++ b/scripts/build_framework.sh @@ -22,7 +22,9 @@ # process options, valid arguments -c [Debug|Release] -n BUILDCONFIGURATION=Debug NOEXTRAS=1 -while getopts ":ntc:" OPTNAME +WATCHOS=0 +TVOS=0 +while getopts ":ntc:-:" OPTNAME do case "$OPTNAME" in "c") @@ -34,11 +36,28 @@ do "t") NOEXTRAS=0 ;; + -) + case "${OPTARG}" in + "with-watchos") + WATCHOS=1 + ;; + "with-tvos") + TVOS=1 + ;; + *) + # Should not occur + echo "Unknown error while processing options" + die + ;; + esac + ;; "?") - echo "$0 -c [Debug|Release] -n" + echo "$0 -c [Debug|Release] -n --with-watchos --with-tvos" echo " -c sets configuration (default=Debug)" echo " -n no test run (default)" echo " -t test run" + echo " --with-watchos Add watchOS framework" + echo " --with-tvos Add tvOS framework" die ;; ":") @@ -59,6 +78,7 @@ test -x "$LIPO" || die 'Could not find lipo in $PATH' BOLTS_IOS_BINARY=$BOLTS_BUILD/${BUILDCONFIGURATION}-universal/Bolts.framework/Bolts BOLTS_OSX_BINARY=$BOLTS_BUILD/${BUILDCONFIGURATION}/Bolts.framework BOLTS_TVOS_BINARY=$BOLTS_BUILD/${BUILDCONFIGURATION}-appletv-universal/Bolts.framework/Bolts +BOLTS_WATCHOS_BINARY=$BOLTS_BUILD/${BUILDCONFIGURATION}-watch-universal/Bolts.framework/Bolts # ----------------------------------------------------------------------------- @@ -79,15 +99,23 @@ test -d "$BOLTS_OSX_BUILD" \ || mkdir -p "$BOLTS_OSX_BUILD" \ || die "Could not create directory $BOLTS_OSX_BUILD" -test -d "$BOLTS_TVOS_BUILD" \ - || mkdir -p "$BOLTS_TVOS_BUILD" \ - || die "Could not create directory $BOLTS_TVOS_BUILD" +if [ $WATCHOS -eq 1 ]; then + test -d "$BOLTS_WATCHOS_BUILD" \ + || mkdir -p "$BOLTS_WATCHOS_BUILD" \ + || die "Could not create directory $BOLTS_WATCHOS_BUILD" +fi + +if [ $TVOS -eq 1 ]; then + test -d "$BOLTS_TVOS_BUILD" \ + || mkdir -p "$BOLTS_TVOS_BUILD" \ + || die "Could not create directory $BOLTS_TVOS_BUILD" +fi cd "$BOLTS_SRC" function xcode_build_target() { echo "Compiling for platform: ${1}." $XCODEBUILD \ - -target "${3}Bolts" \ + -target "${3}" \ -sdk $1 \ -configuration "${2}" \ SYMROOT="$BOLTS_BUILD" \ @@ -96,11 +124,17 @@ function xcode_build_target() { || die "Xcode build failed for platform: ${1}." } -xcode_build_target "iphonesimulator" "${BUILDCONFIGURATION}" -xcode_build_target "iphoneos" "${BUILDCONFIGURATION}" -xcode_build_target "macosx" "${BUILDCONFIGURATION}" "Mac" -xcode_build_target "appletvsimulator" "${BUILDCONFIGURATION}" "TV" -xcode_build_target "appletvos" "${BUILDCONFIGURATION}" "TV" +xcode_build_target "iphonesimulator" "${BUILDCONFIGURATION}" "Bolts" +xcode_build_target "iphoneos" "${BUILDCONFIGURATION}" "Bolts" +xcode_build_target "macosx" "${BUILDCONFIGURATION}" "MacBolts" +if [ $WATCHOS -eq 1 ]; then + xcode_build_target "watchsimulator" "${BUILDCONFIGURATION}" "Bolts-watchOS" + xcode_build_target "watchos" "${BUILDCONFIGURATION}" "Bolts-watchOS" +fi +if [ $TVOS -eq 1 ]; then + xcode_build_target "appletvsimulator" "${BUILDCONFIGURATION}" "TVBolts" + xcode_build_target "appletv" "${BUILDCONFIGURATION}" "TVBolts" +fi # ----------------------------------------------------------------------------- # Merge lib files for different platforms into universal binary @@ -108,7 +142,14 @@ xcode_build_target "appletvos" "${BUILDCONFIGURATION}" "TV" progress_message "Building Bolts univeral library using lipo." mkdir -p "$(dirname "$BOLTS_IOS_BINARY")" -mkdir -p "$(dirname "$BOLTS_TVOS_BINARY")" + +if [ $WATCHOS -eq 1 ]; then + mkdir -p "$(dirname "$BOLTS_WATCHOS_BINARY")" +fi + +if [ $TVOS -eq 1 ]; then + mkdir -p "$(dirname "$BOLTS_TVOS_BINARY")" +fi # Copy/Paste iOS Framework to get structure/resources/etc cp -av \ @@ -116,11 +157,21 @@ cp -av \ "$BOLTS_BUILD/${BUILDCONFIGURATION}-universal" rm "$BOLTS_BUILD/${BUILDCONFIGURATION}-universal/Bolts.framework/Bolts" -# Copy/Paste AppleTV framework to get structure/resources/etc -cp -av \ - "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletvos/Bolts.framework" \ - "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletv-universal" -rm "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletv-universal/Bolts.framework/Bolts" +if [ $WATCHOS -eq 1 ]; then + # Copy/Paste watchOS framework to get structure/resources/etc + cp -av \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-watchos/Bolts.framework" \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-watch-universal" + rm "$BOLTS_BUILD/${BUILDCONFIGURATION}-watch-universal/Bolts.framework/Bolts" +fi + +if [ $TVOS -eq 1 ]; then + # Copy/Paste tvOS framework to get structure/resources/etc + cp -av \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletvos/Bolts.framework" \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletv-universal" + rm "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletv-universal/Bolts.framework/Bolts" +fi # Combine iOS/Simulator binaries into a single universal binary. $LIPO \ @@ -130,13 +181,25 @@ $LIPO \ -output "$BOLTS_IOS_BINARY" \ || die "lipo failed - could not create universal static library" -# Combine AppleTV/Simulator binaries into a single universal binary. -$LIPO \ - -create \ - "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletvsimulator/Bolts.framework/Bolts" \ - "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletvos/Bolts.framework/Bolts" \ - -output "$BOLTS_TVOS_BINARY" \ - || die "lipo failed - could not create universal static library" +if [ $WATCHOS -eq 1 ]; then + # Combine watchOS/Simulator binaries into a single universal binary. + $LIPO \ + -create \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-watchsimulator/Bolts.framework/Bolts" \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-watchos/Bolts.framework/Bolts" \ + -output "$BOLTS_WATCHOS_BINARY" \ + || die "lipo failed - could not create universal static library" +fi + +if [ $TVOS -eq 1 ]; then + # Combine tvOS/Simulator binaries into a single universal binary. + $LIPO \ + -create \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletvsimulator/Bolts.framework/Bolts" \ + "$BOLTS_BUILD/${BUILDCONFIGURATION}-appletvos/Bolts.framework/Bolts" \ + -output "$BOLTS_TVOS_BINARY" \ + || die "lipo failed - could not create universal static library" +fi # Copy/Paste created iOS Framework to final location cp -av "$(dirname "$BOLTS_IOS_BINARY")" $BOLTS_IOS_FRAMEWORK @@ -144,8 +207,15 @@ cp -av "$(dirname "$BOLTS_IOS_BINARY")" $BOLTS_IOS_FRAMEWORK # Copy/Paste OSX framework, as this is already built for us cp -av "$BOLTS_OSX_BINARY" $BOLTS_OSX_FRAMEWORK -# Copy/Paste TVOS Framework -cp -av "$(dirname "$BOLTS_TVOS_BINARY")" $BOLTS_TVOS_FRAMEWORK +if [ $WATCHOS -eq 1 ]; then + # Copy/Paste watchOS Framework + cp -av "$(dirname "$BOLTS_WATCHOS_BINARY")" $BOLTS_WATCHOS_FRAMEWORK +fi + +if [ $TVOS -eq 1 ]; then + # Copy/Paste tvOS Framework + cp -av "$(dirname "$BOLTS_TVOS_BINARY")" $BOLTS_TVOS_FRAMEWORK +fi # ----------------------------------------------------------------------------- # Run unit tests diff --git a/scripts/build_release.sh b/scripts/build_release.sh index e0580641e..0c982d78c 100755 --- a/scripts/build_release.sh +++ b/scripts/build_release.sh @@ -22,9 +22,9 @@ # ----------------------------------------------------------------------------- # Call out to build .framework # -. $BOLTS_SCRIPT/build_framework.sh -c Release +. $BOLTS_SCRIPT/build_framework.sh --with-watchos -c Release cd $BOLTS_BUILD -zip -r --symlinks $BOLTS_DISTRIBUTION_ARCHIVE ios/ osx/ +zip -r --symlinks $BOLTS_DISTRIBUTION_ARCHIVE ios/ osx/ watchOS/ common_success diff --git a/scripts/common.sh b/scripts/common.sh index 70a876195..6e22778fc 100755 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -48,7 +48,8 @@ if [ -z "$BOLTS_SCRIPT" ]; then BOLTS_BUILD=$BOLTS_ROOT/build BOLTS_IOS_BUILD=$BOLTS_ROOT/build/ios BOLTS_OSX_BUILD=$BOLTS_ROOT/build/osx - BOLTS_TVOS_BUILD=$BOLTS_ROOT/build/tvos + BOLTS_WATCHOS_BUILD=$BOLTS_ROOT/build/watchOS + BOLTS_TVOS_BUILD=$BOLTS_ROOT/build/tvOS BOLTS_BUILD_LOG=$BOLTS_BUILD/build.log # The name of the Bolts framework @@ -57,7 +58,8 @@ if [ -z "$BOLTS_SCRIPT" ]; then # The path to the built Bolts .framework file BOLTS_IOS_FRAMEWORK=$BOLTS_IOS_BUILD/$BOLTS_FRAMEWORK_NAME BOLTS_OSX_FRAMEWORK=$BOLTS_OSX_BUILD/$BOLTS_FRAMEWORK_NAME - BOLTS_TVOS_FRAMEWORK=$BOLTS_TVOS_BUILD/$BOLTS_FRAMEWORK_NAME + BOLTS_WATCHOS_FRAMEWORK=$BOLTS_WATCHOS_BUILD/$BOLTS_FRAMEWORK_NAME + BOLTS_TVOS_FRAMEWORK=$BOLTS_WATCHOS_BUILD/$BOLTS_FRAMEWORK_NAME # The name of the docset BOLTS_DOCSET_NAME=Bolts.docset