@@ -72,11 +72,13 @@ OTHER_FLAGS="-DNDEBUG"
7272
7373XCODE_VERSION=$( xcrun xcodebuild -version | head -n1 | tr -Cd ' [:digit:].' )
7474XCODE_ROOT=$( xcode-select -print-path)
75- COMPILER=" $XCODE_ROOT /Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"
75+ COMPILER=$( xcrun -f clang++)
76+ COMPILER_VERSION=$( xcrun clang++ --version | head -n1 | grep -oE ' version \d+\.\d+\.\d+' )
77+ COMPILER_VERSION=" ${COMPILER_VERSION// version / } "
7678
7779THREADS=" -j$( sysctl -n hw.ncpu) "
7880
79- CURRENT_DIR=$( pwd)
81+ CURRENT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " > /dev/null 2>&1 && pwd ) "
8082SRCDIR=" $CURRENT_DIR /src"
8183
8284IOS_DEV_CMD=" xcrun --sdk iphoneos"
@@ -275,6 +277,9 @@ OPTIONS:
275277 --no-framework
276278 Do not create the xcframework.
277279
280+ --no-thinning
281+ Do not reduce the size of the final binaries using BCP.
282+
278283 --universal
279284 Create universal FAT binary.
280285
@@ -533,6 +538,10 @@ parseArgs()
533538 NO_FRAMEWORK=1
534539 ;;
535540
541+ --no-thinning)
542+ NO_THINNING=1
543+ ;;
544+
536545 -j | --threads)
537546 if [ -n " $2 " ]; then
538547 THREADS=" -j$2 "
@@ -624,26 +633,33 @@ cleanup()
624633 if [[ -n $BUILD_IOS ]]; then
625634 rm -rf " $BOOST_SRC /iphone-build"
626635 rm -rf " $BOOST_SRC /iphonesim-build"
636+ rm -rf " $BOOST_SRC_THINNED /iphone-build"
637+ rm -rf " $BOOST_SRC_THINNED /iphonesim-build"
627638 rm -rf " $IOS_OUTPUT_DIR "
628639 fi
629640 if [[ -n $BUILD_TVOS ]]; then
630641 rm -rf " $BOOST_SRC /appletv-build"
631642 rm -rf " $BOOST_SRC /appletvsim-build"
643+ rm -rf " $BOOST_SRC_THINNED /appletv-build"
644+ rm -rf " $BOOST_SRC_THINNED /appletvsim-build"
632645 rm -rf " $TVOS_OUTPUT_DIR "
633646 fi
634647 if [[ -n $BUILD_MACOS ]]; then
635648 rm -rf " $BOOST_SRC /macos-build"
649+ rm -rf " $BOOST_SRC_THINNED /macos-build"
636650 rm -rf " $MACOS_OUTPUT_DIR "
637651 fi
638652 if [[ -n $BUILD_MACOS_SILICON ]]; then
639653 rm -rf " $BOOST_SRC /macos-silicon-build"
654+ rm -rf " $BOOST_SRC_THINNED /macos-silicon-build"
640655 rm -rf " $MACOS_SILICON_OUTPUT_DIR "
641656 fi
642657 if [[ -n $BUILD_MACOS ]] || [[ -n $BUILD_MACOS_SILICON ]] ; then
643658 rm -rf " $MACOS_COMBINED_OUTPUT_DIR "
644659 fi
645660 if [[ -n $BUILD_MAC_CATALYST ]]; then
646661 rm -rf " $BOOST_SRC /mac-catalyst-build"
662+ rm -rf " $BOOST_SRC_THINNED /mac-catalyst-build"
647663 rm -rf " $MAC_CATALYST_OUTPUT_DIR "
648664 fi
649665
@@ -731,7 +747,7 @@ using darwin : $COMPILER_VERSION~iphone
731747: <architecture>arm
732748 <target-os>iphone
733749 <cxxflags>"$CXX_FLAGS "
734- <linkflags>"$LD_FLAGS "
750+ <linkflags>"$LD_FLAGS -isysroot $IOS_SDK_PATH "
735751 <compileflags>"$OTHER_FLAGS ${IOS_ARCH_FLAGS[*]} $EXTRA_IOS_FLAGS -isysroot $IOS_SDK_PATH "
736752 <threading>multi
737753
@@ -741,7 +757,7 @@ using darwin : $COMPILER_VERSION~iphonesim
741757: <architecture>x86
742758 <target-os>iphone
743759 <cxxflags>"$CXX_FLAGS "
744- <linkflags>"$LD_FLAGS "
760+ <linkflags>"$LD_FLAGS -isysroot $IOSSIM_SDK_PATH "
745761 <compileflags>"$OTHER_FLAGS ${IOS_SIM_ARCH_FLAGS[*]} $EXTRA_IOS_SIM_FLAGS -isysroot $IOSSIM_SDK_PATH "
746762 <threading>multi
747763;
@@ -750,7 +766,7 @@ using darwin : $COMPILER_VERSION~appletv
750766: <architecture>arm
751767 <target-os>iphone
752768 <cxxflags>"$CXX_FLAGS "
753- <linkflags>"$LD_FLAGS "
769+ <linkflags>"$LD_FLAGS -isysroot $TVOS_SDK_PATH "
754770 <compileflags>"$OTHER_FLAGS ${TVOS_ARCH_FLAGS[*]} $EXTRA_TVOS_FLAGS -isysroot $TVOS_SDK_PATH "
755771 <threading>multi
756772;
@@ -759,7 +775,7 @@ using darwin : $COMPILER_VERSION~appletvsim
759775: <architecture>x86
760776 <target-os>iphone
761777 <cxxflags>"$CXX_FLAGS "
762- <linkflags>"$LD_FLAGS "
778+ <linkflags>"$LD_FLAGS -isysroot $TVOSSIM_SDK_PATH "
763779 <compileflags>"$OTHER_FLAGS ${TVOS_SIM_ARCH_FLAGS[*]} $EXTRA_TVOS_SIM_FLAGS -isysroot $TVOSSIM_SDK_PATH "
764780 <threading>multi
765781;
@@ -768,7 +784,7 @@ using darwin : $COMPILER_VERSION~macos
768784: <architecture>x86
769785 <target-os>darwin
770786 <cxxflags>"$CXX_FLAGS "
771- <linkflags>"$LD_FLAGS "
787+ <linkflags>"$LD_FLAGS -isysroot $MACOS_SDK_PATH "
772788 <compileflags>"$OTHER_FLAGS ${MACOS_ARCH_FLAGS[*]} $EXTRA_MACOS_FLAGS -isysroot $MACOS_SDK_PATH "
773789 <threading>multi
774790;
@@ -777,15 +793,15 @@ using darwin : $COMPILER_VERSION~macossilicon
777793: <architecture>arm
778794 <target-os>darwin
779795 <cxxflags>"$CXX_FLAGS "
780- <linkflags>"$LD_FLAGS "
796+ <linkflags>"$LD_FLAGS -isysroot $MACOS_SILICON_SDK_PATH "
781797 <compileflags>"$OTHER_FLAGS ${MACOS_SILICON_ARCH_FLAGS[*]} $EXTRA_MACOS_SILICON_FLAGS -isysroot $MACOS_SILICON_SDK_PATH " -target arm64-apple-macos$MIN_MACOS_SILICON_VERSION
782798;
783799using darwin : $COMPILER_VERSION ~maccatalyst
784800: $COMPILER
785801: <architecture>x86
786802 <target-os>darwin
787803 <cxxflags>"$CXX_FLAGS "
788- <linkflags>"$LD_FLAGS "
804+ <linkflags>"$LD_FLAGS -isysroot $MAC_CATALYST_SDK_PATH "
789805 <compileflags>"$OTHER_FLAGS ${MAC_CATALYST_ARCH_FLAGS[*]} $EXTRA_MAC_CATALYST_FLAGS -isysroot $MAC_CATALYST_SDK_PATH -target x86_64-apple-ios$MIN_MAC_CATALYST_VERSION -macabi"
790806 <threading>multi
791807;
797813
798814# ===============================================================================
799815
816+ thinBoost ()
817+ {
818+ echo " Thinning boost in $BOOST_SRC_THINNED (input is $BOOST_SRC )"
819+
820+ # Build bcp
821+ BCP=" $BOOST_SRC /dist/bin/bcp"
822+ (
823+ cd_or_abort " $BOOST_SRC "
824+
825+ $B2 \
826+ toolset=" clang" \
827+ variant=release \
828+ tools/bcp
829+ )
830+
831+ rm -r " $BOOST_SRC_THINNED "
832+ mkdir -p " $BOOST_SRC_THINNED "
833+ mkdir -p " ${OUTPUT_DIR} "
834+
835+ $BCP --boost=" $BOOST_SRC " \
836+ --unix-lines \
837+ build \
838+ " ${BOOST_LIBS[@]} " \
839+ " $BOOST_SRC_THINNED " >> " ${OUTPUT_DIR} /boost-thinning.log" 2>&1
840+ # shellcheck disable=SC2181
841+ if [ $? != 0 ]; then echo " Error running bcp. Check log." ; exit 1; fi
842+
843+ BOOST_SRC_CURRENT=" $BOOST_SRC_THINNED "
844+ echo " Active source dir is now $BOOST_SRC_CURRENT "
845+
846+ doneSection
847+ }
848+
849+ # ===============================================================================
850+
800851bootstrapBoost ()
801852{
802- cd_or_abort " $BOOST_SRC "
853+ cd_or_abort " $BOOST_SRC_CURRENT "
854+
803855 if [[ ${# BOOST_LIBS[@]} -eq 0 ]]; then
804856 ALL_BOOST_LIBS_COMMA=$( IFS=, ; echo " ${ALL_BOOST_LIBS[*]} " )
805857 ./bootstrap.sh --without-libraries=" $ALL_BOOST_LIBS_COMMA "
@@ -834,12 +886,12 @@ bootstrapBoost()
834886
835887buildBoost_iOS ()
836888{
837- cd_or_abort " $BOOST_SRC "
889+ cd_or_abort " $BOOST_SRC_CURRENT "
838890 mkdir -p " $IOS_OUTPUT_DIR "
839891
840892 echo Building Boost for iPhone
841893 # Install this one so we can copy the headers for the frameworks...
842- ./b2 " $THREADS " \
894+ $B2 " $THREADS " \
843895 --build-dir=iphone-build \
844896 --stagedir=iphone-build/stage \
845897 --prefix=" $IOS_OUTPUT_DIR /prefix" \
@@ -850,7 +902,7 @@ buildBoost_iOS()
850902 # shellcheck disable=SC2181
851903 if [ $? != 0 ]; then echo " Error staging iPhone. Check log." ; exit 1; fi
852904
853- ./b2 " $THREADS " \
905+ $B2 " $THREADS " \
854906 --build-dir=iphone-build \
855907 --stagedir=iphone-build/stage \
856908 --prefix=" $IOS_OUTPUT_DIR /prefix" \
@@ -863,7 +915,7 @@ buildBoost_iOS()
863915 doneSection
864916
865917 echo Building Boost for iPhoneSimulator
866- ./b2 " $THREADS " \
918+ $B2 " $THREADS " \
867919 --build-dir=iphonesim-build \
868920 --stagedir=iphonesim-build/stage \
869921 toolset=" darwin-$COMPILER_VERSION ~iphonesim" \
@@ -877,11 +929,11 @@ buildBoost_iOS()
877929
878930buildBoost_tvOS ()
879931{
880- cd_or_abort " $BOOST_SRC "
932+ cd_or_abort " $BOOST_SRC_CURRENT "
881933 mkdir -p " $TVOS_OUTPUT_DIR "
882934
883935 echo Building Boost for AppleTV
884- ./b2 " $THREADS " \
936+ $B2 " $THREADS " \
885937 --build-dir=appletv-build \
886938 --stagedir=appletv-build/stage \
887939 --prefix=" $TVOS_OUTPUT_DIR /prefix" \
@@ -892,7 +944,7 @@ buildBoost_tvOS()
892944 # shellcheck disable=SC2181
893945 if [ $? != 0 ]; then echo " Error staging AppleTV. Check log." ; exit 1; fi
894946
895- ./b2 " $THREADS " \
947+ $B2 " $THREADS " \
896948 --build-dir=appletv-build \
897949 --stagedir=appletv-build/stage \
898950 --prefix=" $TVOS_OUTPUT_DIR /prefix" \
@@ -905,7 +957,7 @@ buildBoost_tvOS()
905957 doneSection
906958
907959 echo " Building Boost for AppleTVSimulator"
908- ./b2 " $THREADS " \
960+ $B2 " $THREADS " \
909961 --build-dir=appletvsim-build \
910962 --stagedir=appletvsim-build/stage \
911963 --prefix=" $TVOS_OUTPUT_DIR /prefix" \
@@ -920,11 +972,11 @@ buildBoost_tvOS()
920972
921973buildBoost_macOS ()
922974{
923- cd_or_abort " $BOOST_SRC "
975+ cd_or_abort " $BOOST_SRC_CURRENT "
924976 mkdir -p " $MACOS_OUTPUT_DIR "
925977
926978 echo building Boost for macOS
927- ./b2 " $THREADS " \
979+ $B2 " $THREADS " \
928980 --build-dir=macos-build \
929981 --stagedir=macos-build/stage \
930982 --prefix=" $MACOS_OUTPUT_DIR /prefix" \
@@ -935,7 +987,7 @@ buildBoost_macOS()
935987 # shellcheck disable=SC2181
936988 if [ $? != 0 ]; then echo " Error staging macOS. Check log." ; exit 1; fi
937989
938- ./b2 " $THREADS " \
990+ $B2 " $THREADS " \
939991 --build-dir=macos-build \
940992 --stagedir=macos-build/stage \
941993 --prefix=" $MACOS_OUTPUT_DIR /prefix" \
@@ -951,11 +1003,11 @@ buildBoost_macOS()
9511003
9521004buildBoost_macOS_silicon ()
9531005{
954- cd_or_abort " $BOOST_SRC "
1006+ cd_or_abort " $BOOST_SRC_CURRENT "
9551007 mkdir -p " $MACOS_SILICON_OUTPUT_DIR "
9561008
9571009 echo building Boost for macOS Silicon
958- ./b2 " $THREADS " \
1010+ $B2 " $THREADS " \
9591011 --build-dir=macos-silicon-build \
9601012 --stagedir=macos-silicon-build/stage \
9611013 --prefix=" $MACOS_SILICON_OUTPUT_DIR /prefix" \
@@ -966,7 +1018,7 @@ buildBoost_macOS_silicon()
9661018 # shellcheck disable=SC2181
9671019 if [ $? != 0 ]; then echo " Error staging macOS silicon. Check log." ; exit 1; fi
9681020
969- ./b2 " $THREADS " \
1021+ $B2 " $THREADS " \
9701022 --build-dir=macos-silicon-build \
9711023 --stagedir=macos-silicon-build/stage \
9721024 --prefix=" $MACOS_SILICON_OUTPUT_DIR /prefix" \
@@ -980,12 +1032,12 @@ buildBoost_macOS_silicon()
9801032
9811033buildBoost_mac_catalyst ()
9821034{
983- cd_or_abort " $BOOST_SRC "
1035+ cd_or_abort " $BOOST_SRC_CURRENT "
9841036 mkdir -p " $MAC_CATALYST_OUTPUT_DIR "
9851037
9861038 echo Building Boost for Mac Catalyst
9871039 # Install this one so we can copy the headers for the frameworks...
988- ./b2 " $THREADS " \
1040+ $B2 " $THREADS " \
9891041 --build-dir=mac-catalyst-build \
9901042 --stagedir=mac-catalyst-build/stage \
9911043 --prefix=" $MAC_CATALYST_OUTPUT_DIR /prefix" \
@@ -996,7 +1048,7 @@ buildBoost_mac_catalyst()
9961048 # shellcheck disable=SC2181
9971049 if [ $? != 0 ]; then echo " Error staging Mac Catalyst. Check log." ; exit 1; fi
9981050
999- ./b2 " $THREADS " \
1051+ $B2 " $THREADS " \
10001052 --build-dir=mac-catalyst-build \
10011053 --stagedir=mac-catalyst-build/stage \
10021054 --prefix=" $MAC_CATALYST_OUTPUT_DIR /prefix" \
@@ -1037,7 +1089,7 @@ unpackArchive()
10371089
10381090scrunchAllLibsTogetherInOneLibPerPlatform ()
10391091{
1040- cd_or_abort " $BOOST_SRC "
1092+ cd_or_abort " $BOOST_SRC_CURRENT "
10411093
10421094 if [[ -n $BUILD_IOS ]]; then
10431095 # iOS Device
@@ -1596,6 +1648,10 @@ EXTRA_MACOS_SILICON_FLAGS="$EXTRA_FLAGS $EXTRA_ARM_FLAGS -mmacosx-version-min=$M
15961648BOOST_VERSION_SNAKE_CASE=" ${BOOST_VERSION// ./ _} "
15971649BOOST_TARBALL=" $CURRENT_DIR /boost_$BOOST_VERSION_SNAKE_CASE .tar.bz2"
15981650BOOST_SRC=" $SRCDIR /boost_${BOOST_VERSION_SNAKE_CASE} "
1651+ BOOST_SRC_THINNED=" $SRCDIR /boost_${BOOST_VERSION_SNAKE_CASE} _thinned"
1652+ # After thinning the sources this will be changed to $BOOST_SRC_THINNED
1653+ BOOST_SRC_CURRENT=" $BOOST_SRC "
1654+ B2=" $BOOST_SRC_CURRENT /b2"
15991655OUTPUT_DIR=" $CURRENT_DIR /build/boost/$BOOST_VERSION "
16001656IOS_OUTPUT_DIR=" $OUTPUT_DIR /ios/$BUILD_VARIANT "
16011657TVOS_OUTPUT_DIR=" $OUTPUT_DIR /tvos/$BUILD_VARIANT "
@@ -1721,6 +1777,11 @@ copyMissingHeaders
17211777patchBoost
17221778updateBoostUserConfigJam
17231779
1780+ if [[ -z $NO_THINNING ]]; then
1781+ bootstrapBoost " bcp" # Necessary to have the b2 binary for building bcp
1782+ thinBoost
1783+ fi
1784+
17241785if [[ -n $BUILD_IOS ]]; then
17251786 bootstrapBoost " iOS"
17261787 buildBoost_iOS
0 commit comments