Skip to content

Commit 18d7d5d

Browse files
Merge pull request #69 from ipsosante/bcp-thinning
Add sources thinning using Boost BCP
2 parents c1fd07d + 732ce43 commit 18d7d5d

File tree

1 file changed

+89
-28
lines changed

1 file changed

+89
-28
lines changed

boost.sh

Lines changed: 89 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,13 @@ OTHER_FLAGS="-DNDEBUG"
7272

7373
XCODE_VERSION=$(xcrun xcodebuild -version | head -n1 | tr -Cd '[:digit:].')
7474
XCODE_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

7779
THREADS="-j$(sysctl -n hw.ncpu)"
7880

79-
CURRENT_DIR=$(pwd)
81+
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
8082
SRCDIR="$CURRENT_DIR/src"
8183

8284
IOS_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
;
783799
using 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
;
@@ -797,9 +813,45 @@ EOF
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+
800851
bootstrapBoost()
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

835887
buildBoost_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

878930
buildBoost_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

921973
buildBoost_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

9521004
buildBoost_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

9811033
buildBoost_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

10381090
scrunchAllLibsTogetherInOneLibPerPlatform()
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
15961648
BOOST_VERSION_SNAKE_CASE="${BOOST_VERSION//./_}"
15971649
BOOST_TARBALL="$CURRENT_DIR/boost_$BOOST_VERSION_SNAKE_CASE.tar.bz2"
15981650
BOOST_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"
15991655
OUTPUT_DIR="$CURRENT_DIR/build/boost/$BOOST_VERSION"
16001656
IOS_OUTPUT_DIR="$OUTPUT_DIR/ios/$BUILD_VARIANT"
16011657
TVOS_OUTPUT_DIR="$OUTPUT_DIR/tvos/$BUILD_VARIANT"
@@ -1721,6 +1777,11 @@ copyMissingHeaders
17211777
patchBoost
17221778
updateBoostUserConfigJam
17231779

1780+
if [[ -z $NO_THINNING ]]; then
1781+
bootstrapBoost "bcp" # Necessary to have the b2 binary for building bcp
1782+
thinBoost
1783+
fi
1784+
17241785
if [[ -n $BUILD_IOS ]]; then
17251786
bootstrapBoost "iOS"
17261787
buildBoost_iOS

0 commit comments

Comments
 (0)