@@ -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