Skip to content

Commit a50c519

Browse files
committed
update manual build script to store intermediate pre-lipo steps, as well as post-lipo steps
1 parent 4e2db6d commit a50c519

File tree

1 file changed

+66
-56
lines changed

1 file changed

+66
-56
lines changed

xcode/build-libldk-manual.sh

Lines changed: 66 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -28,76 +28,86 @@ C_BINDINGS_SOURCE_DIRECTORY="$(cd ${LDK_DIRECTORY}; pwd)/lightning-c-bindings"
2828
BASEDIR=$(dirname "$0")
2929
BUILT_PRODUCTS_DIR="${BASEDIR}/binaries" # directory to copy the shared library and headers into
3030

31-
3231
TARGET_NAME="libldk"
3332

34-
if [[ $PLATFORM_NAME = "" ]]; then
35-
# default for building with xcodebuild
36-
PLATFORM_NAME="macosx"
37-
fi
33+
declare -a platforms=("iphoneos" "iphonesimulator" "macosx" "macosx")
34+
declare -a llvm_target_triple_suffixes=("" "-simulator" "" "-macabi")
35+
declare -a architectures=( "arm64" "arm64,x86_64" "arm64,x86_64" "arm64,x86_64" )
3836

39-
if [[ $PLATFORM_NAME = "macosx" ]]; then
40-
if [[ $LLVM_TARGET_TRIPLE_SUFFIX = "-macabi" ]]; then
41-
RUST_TARGET_OS="ios-macabi"
37+
for (( i=0; i<4; i++ ));
38+
do
39+
PLATFORM_NAME=${platforms[$i]}
40+
LLVM_TARGET_TRIPLE_SUFFIX=${llvm_target_triple_suffixes[$i]}
41+
concatenated_architectures=${architectures[$i]}
42+
IFS=',' read -r -a ARCHS <<< "${concatenated_architectures}"
43+
44+
if [[ $PLATFORM_NAME = "macosx" ]]; then
45+
if [[ $LLVM_TARGET_TRIPLE_SUFFIX = "-macabi" ]]; then
46+
RUST_TARGET_OS="ios-macabi"
47+
else
48+
RUST_TARGET_OS="darwin"
49+
fi
4250
else
43-
RUST_TARGET_OS="darwin"
51+
RUST_TARGET_OS="ios"
4452
fi
45-
else
46-
echo "PLATFORM_NAME ${PLATFORM_NAME}"
47-
RUST_TARGET_OS="ios"
48-
fi
4953

50-
# Clean any pre-existing static libraries that doesn't align with what we're currently trying to build
54+
# Clean any pre-existing static libraries that doesn't align with what we're currently trying to build
5155

52-
declare -a ARCHS=("arm64")
56+
INDIVIDUAL_ARCH_BINARY_DIR="${BUILT_PRODUCTS_DIR}/${PLATFORM_NAME}/raw"
57+
LIPO_BINARY_DIR="${BUILT_PRODUCTS_DIR}/${PLATFORM_NAME}/lipo"
5358

54-
for ARCH in $ARCHS
55-
do
56-
if [[ $(lipo -info "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}" 2>&1) != *"${ARCH}"* ]]; then
57-
rm -f "${BUILT_PRODUCTS_DIR}/${TARGET_NAME}"
59+
for ARCH in $ARCHS
60+
do
61+
CURRENT_ARCH_BINARY_DIR="${INDIVIDUAL_ARCH_BINARY_DIR}/${ARCH}"
62+
echo "Current architecture directory: ${CURRENT_ARCH_BINARY_DIR}"
63+
if [[ $(lipo -info "${CURRENT_ARCH_BINARY_DIR}/${TARGET_NAME}" 2>&1) != *"${ARCH}"* ]]; then
64+
rm -f "${CURRENT_ARCH_BINARY_DIR}/${TARGET_NAME}"
65+
fi
66+
done
67+
68+
if [[ $CONFIGURATION = "Debug" ]]; then
69+
RUST_CONFIGURATION="debug"
70+
RUST_CONFIGURATION_FLAG=""
71+
else
72+
RUST_CONFIGURATION="release"
73+
RUST_CONFIGURATION_FLAG="--release"
5874
fi
59-
done
6075

61-
if [[ $CONFIGURATION = "Debug" ]]; then
62-
RUST_CONFIGURATION="debug"
63-
RUST_CONFIGURATION_FLAG=""
64-
else
65-
RUST_CONFIGURATION="release"
66-
RUST_CONFIGURATION_FLAG="--release"
67-
fi
76+
pushd $C_BINDINGS_SOURCE_DIRECTORY
77+
export RUSTFLAGS='--cfg=c_bindings'
78+
79+
rustup override set nightly
80+
cargo clean
81+
82+
EXECUTABLES=()
83+
for ARCH in $ARCHS
84+
do
85+
RUST_ARCH=$ARCH
86+
CURRENT_ARCH_BINARY_DIR="${INDIVIDUAL_ARCH_BINARY_DIR}/${ARCH}"
87+
if [[ $RUST_ARCH = "arm64" ]]; then
88+
RUST_ARCH="aarch64"
89+
# This is because iOS Simulator builds for x86_64 is `x86_64-apple-ios`, while arm64 is `aarch64-apple-ios-sim`
90+
if [[ $PLATFORM_NAME = "iphonesimulator" ]]; then
91+
RUST_TARGET_OS="ios-sim"
92+
fi
93+
else
94+
if [[ $PLATFORM_NAME = "iphonesimulator" ]]; then
95+
RUST_TARGET_OS="ios"
96+
fi
97+
fi
6898

69-
pushd $C_BINDINGS_SOURCE_DIRECTORY
70-
export RUSTFLAGS='--cfg=c_bindings'
99+
echo "BUILDING ${RUST_ARCH}-apple-${RUST_TARGET_OS}"
71100

72-
rustup override set nightly
73-
cargo clean
101+
cargo build -Z build-std=panic_abort,std --features "std" --target "${RUST_ARCH}-apple-${RUST_TARGET_OS}" $RUST_CONFIGURATION_FLAG
102+
EXECUTABLES+=("$C_BINDINGS_SOURCE_DIRECTORY/target/${RUST_ARCH}-apple-${RUST_TARGET_OS}/${RUST_CONFIGURATION}/${TARGET_NAME}.a")
74103

75-
EXECUTABLES=()
76-
for ARCH in $ARCHS
77-
do
78-
RUST_ARCH=$ARCH
79-
if [[ $RUST_ARCH = "arm64" ]]; then
80-
RUST_ARCH="aarch64"
81-
# This is because iOS Simulator builds for x86_64 is `x86_64-apple-ios`, while arm64 is `aarch64-apple-ios-sim`
82-
if [[ $PLATFORM_NAME = "iphonesimulator" ]]; then
83-
RUST_TARGET_OS="ios-sim"
84-
fi
85-
else
86-
if [[ $PLATFORM_NAME = "iphonesimulator" ]]; then
87-
RUST_TARGET_OS="ios"
88-
fi
89-
fi
104+
mkdir -p "${CURRENT_ARCH_BINARY_DIR}"
105+
cp "$C_BINDINGS_SOURCE_DIRECTORY/target/${RUST_ARCH}-apple-${RUST_TARGET_OS}/${RUST_CONFIGURATION}/${TARGET_NAME}.a" "${CURRENT_ARCH_BINARY_DIR}"
106+
done
90107

91-
echo "BUILDING ${RUST_ARCH}-apple-${RUST_TARGET_OS}"
108+
rustup override unset
92109

93-
cargo build -Z build-std=panic_abort,std --features "std" --target "${RUST_ARCH}-apple-${RUST_TARGET_OS}" $RUST_CONFIGURATION_FLAG
94-
EXECUTABLES+=("$C_BINDINGS_SOURCE_DIRECTORY/target/${RUST_ARCH}-apple-${RUST_TARGET_OS}/${RUST_CONFIGURATION}/${TARGET_NAME}.a")
110+
mkdir -p "${LIPO_BINARY_DIR}"
111+
xcrun --sdk $PLATFORM_NAME lipo -create "${EXECUTABLES[@]}" -output "${LIPO_BINARY_DIR}/${TARGET_NAME}.a"
95112

96-
mkdir -p "${BUILT_PRODUCTS_DIR}/${ARCH}"
97-
cp "$C_BINDINGS_SOURCE_DIRECTORY/target/${RUST_ARCH}-apple-${RUST_TARGET_OS}/${RUST_CONFIGURATION}/${TARGET_NAME}.a" "${BUILT_PRODUCTS_DIR}/${ARCH}"
98113
done
99-
100-
rustup override unset
101-
102-
mkdir -p "${BUILT_PRODUCTS_DIR}"
103-
xcrun --sdk $PLATFORM_NAME lipo -create "${EXECUTABLES[@]}" -output "${PROJECT_DIR}/${TARGET_NAME}.a"

0 commit comments

Comments
 (0)