1313# less painful.
1414#
1515# To configure the script, define:
16- # BOOST_VERSION: Which version of Boost to build (e.g. 1.61 .0)
16+ # BOOST_VERSION: Which version of Boost to build (e.g. 1.69 .0)
1717# BOOST_LIBS: Which Boost libraries to build
18- # IOS_SDK_VERSION: iOS SDK version (e.g. 10 .0)
19- # MIN_IOS_VERSION: Minimum iOS Target Version (e.g. 10 .0)
20- # TVOS_SDK_VERSION: iOS SDK version (e.g. 10 .0)
21- # MIN_TVOS_VERSION: Minimum iOS Target Version (e.g. 10 .0)
22- # MACOS_SDK_VERSION: macOS SDK version (e.g. 10.11 )
23- # MIN_MACOS_VERSION: Minimum macOS Target Version (e.g. 10.10 )
18+ # IOS_SDK_VERSION: iOS SDK version (e.g. 12 .0)
19+ # MIN_IOS_VERSION: Minimum iOS Target Version (e.g. 11 .0)
20+ # TVOS_SDK_VERSION: iOS SDK version (e.g. 12 .0)
21+ # MIN_TVOS_VERSION: Minimum iOS Target Version (e.g. 11 .0)
22+ # MACOS_SDK_VERSION: macOS SDK version (e.g. 10.14 )
23+ # MIN_MACOS_VERSION: Minimum macOS Target Version (e.g. 10.12 )
2424#
2525# If a boost tarball (a file named “boost_$BOOST_VERSION2.tar.bz2”) does not
2626# exist in the current directory, this script will attempt to download the
27- # version specified by BOOST_VERSION2 . You may also manually place a matching
27+ # version specified. You may also manually place a matching
2828# tarball in the current directory and the script will use that.
2929#
3030# ===============================================================================
@@ -42,20 +42,21 @@ ALL_BOOST_LIBS_1_69=\
4242" serialization signals2 system test thread timer type_erasure wave"
4343BOOTSTRAP_LIBS=" "
4444
45- MIN_IOS_VERSION=10 .0
45+ MIN_IOS_VERSION=11 .0
4646IOS_SDK_VERSION=` xcrun --sdk iphoneos --show-sdk-version`
4747
48- MIN_TVOS_VERSION=10 .0
48+ MIN_TVOS_VERSION=11 .0
4949TVOS_SDK_VERSION=` xcrun --sdk appletvos --show-sdk-version`
5050TVOS_SDK_PATH=` xcrun --sdk appletvos --show-sdk-path`
5151TVOSSIM_SDK_PATH=` xcrun --sdk appletvsimulator --show-sdk-path`
5252
53- MIN_MACOS_VERSION=10.10
53+ MIN_MACOS_VERSION=10.12
5454MACOS_SDK_VERSION=` xcrun --sdk macosx --show-sdk-version`
5555MACOS_SDK_PATH=` xcrun --sdk macosx --show-sdk-path`
5656
5757MACOS_ARCHS=(" x86_64" )
5858IOS_ARCHS=(" armv7 arm64" )
59+ IOS_SIM_ARCHS=(" i386 x86_64" )
5960
6061# Applied to all platforms
6162CXX_FLAGS=" -std=c++14 -stdlib=libc++"
@@ -89,7 +90,7 @@ The -ios, -tvos, and -macOS options may be specified together. Default
8990is to build all of them.
9091
9192Examples:
92- ./boost.sh -ios -tvos --boost-version 1.63 .0
93+ ./boost.sh -ios -tvos --boost-version 1.68 .0
9394 ./boost.sh -macos --no-framework
9495 ./boost.sh --clean
9596
@@ -174,14 +175,15 @@ OPTIONS:
174175 Defaults to $IOS_SDK_VERSION
175176
176177 --min-ios-version [num]
177- Specify the minimum iOS version to target. Since iOS 11 is 64-bit only,
178+ Specify the minimum iOS version to target. Since iOS 11+ are 64-bit only,
178179 if the minimum iOS version is set to iOS 11.0 or later, iOS archs is
179- automatically set to 'arm64', unless '--ios-archs' is also specified.
180+ automatically set to 'arm64' and iOS Simulator archs is set to "x86_64",
181+ unless '--ios-archs' is also specified.
180182 Defaults to $MIN_IOS_VERSION
181183
182184 --ios-archs "(archs, ...)"
183- Specify the iOS architectures to build for. Space-separate list.
184- Defaults to ${IOS_ARCHS[*]}
185+ Specify the iOS architectures to build for. Also updates the iOS Simulator
186+ architectures to match. Space-separate list.
185187
186188 --tvos-sdk [num]
187189 Specify the tvOS SDK version to build with.
@@ -447,8 +449,19 @@ parseArgs()
447449
448450 if [[ -n $CUSTOM_IOS_ARCHS ]]; then
449451 IOS_ARCHS=($CUSTOM_IOS_ARCHS )
452+ IOS_SIM_ARCHS=" "
453+ # As of right now this matches the currently available ARM architectures
454+ # Add 32-bit simulator for 32-bit arm
455+ if [[ " ${IOS_ARCHS[@]} " =~ armv ]]; then
456+ IOS_SIM_ARCHS=" i386 $IOS_SIM_ARCHS "
457+ fi
458+ # Add 64-bit simulator for 64-bit arm
459+ if [[ " ${IOS_ARCHS[@]} " =~ arm64 ]]; then
460+ IOS_SIM_ARCHS=" x86_64 $IOS_SIM_ARCHS "
461+ fi
450462 elif (( $(echo "$MIN_IOS_VERSION >= 11 .0 " | bc - l) )) ; then
451463 IOS_ARCHS=(" arm64" )
464+ IOS_SIM_ARCHS=(" x86_64" )
452465 fi
453466}
454467
@@ -542,7 +555,7 @@ using darwin : ${IOS_SDK_VERSION}~iphone
542555: <architecture>arm <target-os>iphone
543556;
544557using darwin : ${IOS_SDK_VERSION} ~iphonesim
545- : $COMPILER -arch i386 -arch x86_64 $EXTRA_IOS_FLAGS
558+ : $COMPILER $IOS_SIM_ARCH_FLAGS $EXTRA_IOS_SIM_FLAGS
546559: <striper> <root>$XCODE_ROOT /Platforms/iPhoneSimulator.platform/Developer
547560: <architecture>x86 <target-os>iphone
548561;
@@ -558,7 +571,7 @@ using darwin : ${TVOS_SDK_VERSION}~appletv
558571: <architecture>arm <target-os>iphone
559572;
560573using darwin : ${TVOS_SDK_VERSION} ~appletvsim
561- : $COMPILER -arch x86_64 $EXTRA_TVOS_FLAGS -isysroot $TVOSSIM_SDK_PATH -I $TVOSSIM_SDK_PATH
574+ : $COMPILER -arch x86_64 $EXTRA_TVOS_SIM_FLAGS -isysroot $TVOSSIM_SDK_PATH -I $TVOSSIM_SDK_PATH
562575: <striper> <root>$XCODE_ROOT /Platforms/AppleTVSimulator.platform/Developer
563576: <architecture>x86 <target-os>iphone
564577;
@@ -644,7 +657,8 @@ buildBoost_iOS()
644657
645658 echo Building Boost for iPhoneSimulator
646659 ./b2 $THREADS --build-dir=iphonesim-build --stagedir=iphonesim-build/stage \
647- toolset=darwin-${IOS_SDK_VERSION} ~iphonesim cxxflags=" ${CXX_FLAGS} " architecture=x86 linkflags=" -stdlib=libc++" \
660+ toolset=darwin-${IOS_SDK_VERSION} ~iphonesim \
661+ cxxflags=" ${CXX_FLAGS} ${IOS_SIM_ARCH_FLAGS} " architecture=x86 linkflags=" -stdlib=libc++" \
648662 target-os=iphone macosx-version=iphonesim-${IOS_SDK_VERSION} \
649663 link=static variant=${BUILD_VARIANT} stage >> " ${IOS_OUTPUT_DIR} /ios-build.log" 2>&1
650664 if [ $? != 0 ]; then echo " Error staging iPhoneSimulator. Check log." ; exit 1; fi
@@ -739,8 +753,9 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
739753 done
740754
741755 # iOS Simulator
742- mkdir -p " $IOS_BUILD_DIR /i386/obj"
743- mkdir -p " $IOS_BUILD_DIR /x86_64/obj"
756+ for ARCH in ${IOS_SIM_ARCHS[@]} ; do
757+ mkdir -p " $IOS_BUILD_DIR /$ARCH /obj"
758+ done
744759 fi
745760
746761 if [[ -n $BUILD_TVOS ]]; then
@@ -771,14 +786,24 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
771786
772787 if [[ -n $BUILD_IOS ]]; then
773788 for ARCH in ${IOS_ARCHS[@]} ; do
774- $IOS_ARM_DEV_CMD lipo " iphone-build/stage/lib/libboost_$NAME .a" \
775- -thin $ARCH -o " $IOS_BUILD_DIR /$ARCH /libboost_$NAME .a"
789+ if [[ ${# IOS_ARCHS[@]} > 1 ]]; then
790+ $IOS_ARM_DEV_CMD lipo " iphone-build/stage/lib/libboost_$NAME .a" \
791+ -thin $ARCH -o " $IOS_BUILD_DIR /$ARCH /libboost_$NAME .a"
792+ else
793+ cp " iphone-build/stage/lib/libboost_$NAME .a" \
794+ " $IOS_BUILD_DIR /$ARCH /libboost_$NAME .a"
795+ fi
776796 done
777797
778- $IOS_SIM_DEV_CMD lipo " iphonesim-build/stage/lib/libboost_$NAME .a" \
779- -thin i386 -o " $IOS_BUILD_DIR /i386/libboost_$NAME .a"
780- $IOS_SIM_DEV_CMD lipo " iphonesim-build/stage/lib/libboost_$NAME .a" \
781- -thin x86_64 -o " $IOS_BUILD_DIR /x86_64/libboost_$NAME .a"
798+ for ARCH in ${IOS_SIM_ARCHS[@]} ; do
799+ if [[ ${# IOS_SIM_ARCHS[@]} > 1 ]]; then
800+ $IOS_SIM_DEV_CMD lipo " iphonesim-build/stage/lib/libboost_$NAME .a" \
801+ -thin $ARCH -o " $IOS_BUILD_DIR /$ARCH /libboost_$NAME .a"
802+ else
803+ cp " iphonesim-build/stage/lib/libboost_$NAME .a" \
804+ " $IOS_BUILD_DIR /$ARCH /libboost_$NAME .a"
805+ fi
806+ done
782807 fi
783808
784809 if [[ -n $BUILD_TVOS ]]; then
@@ -814,8 +839,9 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
814839 for ARCH in ${IOS_ARCHS[@]} ; do
815840 unpackArchive " $IOS_BUILD_DIR /$ARCH /obj" $NAME
816841 done
817- unpackArchive " $IOS_BUILD_DIR /i386/obj" $NAME
818- unpackArchive " $IOS_BUILD_DIR /x86_64/obj" $NAME
842+ for ARCH in ${IOS_SIM_ARCHS[@]} ; do
843+ unpackArchive " $IOS_BUILD_DIR /$ARCH /obj" $NAME
844+ done
819845 fi
820846
821847 if [[ -n $BUILD_TVOS ]]; then
@@ -862,10 +888,10 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
862888 (cd " $IOS_BUILD_DIR /$ARCH " ; $IOS_ARM_DEV_CMD ar crus libboost.a obj/$NAME /* .o; )
863889 done
864890
865- echo ...ios-i386
866- (cd " $IOS_BUILD_DIR /i386 " ; $IOS_SIM_DEV_CMD ar crus libboost.a obj/ $NAME / * .o ; )
867- echo ...ios-x86_64
868- (cd " $IOS_BUILD_DIR /x86_64 " ; $IOS_SIM_DEV_CMD ar crus libboost.a obj/ $NAME / * .o ; )
891+ for ARCH in ${IOS_SIM_ARCHS[@]} ; do
892+ echo ...ios-sim- $ARCH
893+ (cd " $IOS_BUILD_DIR / $ARCH " ; $IOS_SIM_ARM_DEV_CMD ar crus libboost.a obj/ $NAME / * .o ; )
894+ done
869895 fi
870896
871897 if [[ -n $BUILD_TVOS ]]; then
@@ -900,13 +926,9 @@ buildUniversal()
900926 for ARCH in ${IOS_ARCHS[@]} ; do
901927 ARCH_FILES+=" $ARCH /libboost_$NAME .a"
902928 done
903- # Ideally IOS_ARCHS contains i386 and x86_64 and simulator build steps are not treated out of band
904- if [ -f " i386/libboost_$NAME .a" ]; then
905- ARCH_FILES+=" i386/libboost_$NAME .a"
906- fi
907- if [ -f " x86_64/libboost_$NAME .a" ]; then
908- ARCH_FILES+=" x86_64/libboost_$NAME .a"
909- fi
929+ for ARCH in ${IOS_SIM_ARCHS[@]} ; do
930+ ARCH_FILES+=" $ARCH /libboost_$NAME .a"
931+ done
910932 if [[ ${ARCH_FILES[@]} ]]; then
911933 echo " ... $NAME "
912934 $IOS_ARM_DEV_CMD lipo -create $ARCH_FILES -o " universal/libboost_$NAME .a" || abort " Lipo $1 failed"
@@ -945,12 +967,9 @@ buildUniversal()
945967 fi
946968
947969 ARCH_FILES=" "
948- if [ -f " i386/libboost_$NAME .a" ]; then
949- ARCH_FILES+=" i386/libboost_$NAME .a"
950- fi
951- if [ -f " x86_64/libboost_$NAME .a" ]; then
952- ARCH_FILES+=" x86_64/libboost_$NAME .a"
953- fi
970+ for ARCH in ${MACOS_ARCHS[@]} ; do
971+ ARCH_FILES+=" $ARCH /libboost_$NAME .a"
972+ done
954973 if [[ ${ARCH_FILES[@]} ]]; then
955974 echo " ... $NAME "
956975 $TVOS_ARM_DEV_CMD lipo -create $ARCH_FILES -o " universal/libboost_$NAME .a" || abort " Lipo $1 failed"
@@ -1067,7 +1086,9 @@ EXTRA_FLAGS="-fembed-bitcode -Wno-unused-local-typedef -Wno-nullability-complete
10671086EXTRA_ARM_FLAGS=" -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -g -DNDEBUG"
10681087
10691088EXTRA_IOS_FLAGS=" $EXTRA_FLAGS $EXTRA_ARM_FLAGS -mios-version-min=$MIN_IOS_VERSION "
1089+ EXTRA_IOS_SIM_FLAGS=" $EXTRA_FLAGS $EXTRA_ARM_FLAGS -mios-simulator-version-min=$MIN_IOS_VERSION "
10701090EXTRA_TVOS_FLAGS=" $EXTRA_FLAGS $EXTRA_ARM_FLAGS -mtvos-version-min=$MIN_TVOS_VERSION "
1091+ EXTRA_TVOS_SIM_FLAGS=" $EXTRA_FLAGS $EXTRA_ARM_FLAGS -mtvos-simulator-version-min=$MIN_TVOS_VERSION "
10711092EXTRA_MACOS_FLAGS=" $EXTRA_FLAGS -mmacosx-version-min=$MIN_MACOS_VERSION "
10721093EXTRA_MACOS_SDK_FLAGS=" -isysroot ${MACOS_SDK_PATH} -mmacosx-version-min=${MIN_MACOS_VERSION} "
10731094
@@ -1096,6 +1117,11 @@ for ARCH in ${IOS_ARCHS[@]}; do
10961117 IOS_ARCH_FLAGS=" $IOS_ARCH_FLAGS -arch $ARCH "
10971118done
10981119
1120+ IOS_SIM_ARCH_FLAGS=" "
1121+ for ARCH in ${IOS_SIM_ARCHS[@]} ; do
1122+ IOS_SIM_ARCH_FLAGS=" $IOS_SIM_ARCH_FLAGS -arch $ARCH "
1123+ done
1124+
10991125format=" %-20s %s\n"
11001126printf " $format " " BUILD_IOS:" $( [[ -n $BUILD_IOS ]] && echo " YES" || echo " NO" )
11011127printf " $format " " BUILD_TVOS:" $( [[ -n $BUILD_TVOS ]] && echo " YES" || echo " NO" )
@@ -1112,6 +1138,7 @@ printf "$format" "MACOS_SDK_PATH:" "$MACOS_SDK_PATH"
11121138printf " $format " " MIN_MACOS_VERSION:" " $MIN_MACOS_VERSION "
11131139printf " $format " " MACOS_ARCHS:" " ${MACOS_ARCHS[*]} "
11141140printf " $format " " IOS_ARCHS:" " ${IOS_ARCHS[*]} "
1141+ printf " $format " " IOS_SIM_ARCHS" " ${IOS_SIM_ARCHS[*]} "
11151142printf " $format " " BOOST_LIBS:" " $BOOST_LIBS "
11161143printf " $format " " BOOST_SRC:" " $BOOST_SRC "
11171144printf " $format " " IOS_BUILD_DIR:" " $IOS_BUILD_DIR "
0 commit comments