Source code
Revision control
Copy as Markdown
Other Tools
#!/usr/bin/env bash
set -ex
BUILD_SOURCES=false
# parse optional flags
while [[ $# -gt 0 ]]; do
case "$1" in
--generate-swift-sources)
BUILD_SOURCES=true
shift
;;
--help|-h)
echo "USAGE: $0 [--generate-swift-sources] UNIFFI_BINDGEN_LIBRARY COMMON"
exit 0
;;
*)
break
;;
esac
done
# expect only two args after optional
if [[ $# -ne 2 ]]; then
echo "USAGE: $0 [--generate-swift-sources] UNIFFI_BINDGEN_LIBRARY COMMON"
exit 1
fi
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
UNIFFI_BINDGEN_LIBRARY=$1
COMMON=$2
# Helper to run the cargo build command in a controlled environment.
# It's important that we don't let environment variables from the user's default
# desktop build environment leak into the iOS build, otherwise it might e.g.
# link against the desktop build of NSS.
CARGO="$HOME/.cargo/bin/cargo"
UNIFFI_BINDGEN_DIR="$THIS_DIR/../../tools/uniffi-bindgen-library-mode"
UNIFFI_BINDGEN_COMMAND="$CARGO run --manifest-path=$UNIFFI_BINDGEN_DIR/Cargo.toml --"
# Run uniffi-bindgen-library-mode to generate the files.
#
# We can't use the `-m` flag because UNIFFI_BINDGEN_LIBRARY is cross-compiled, which our
# uniffi-bindgen-library-mode tool can't handle yet.
$UNIFFI_BINDGEN_COMMAND -l "$UNIFFI_BINDGEN_LIBRARY" swift --headers "$COMMON/Headers"
$UNIFFI_BINDGEN_COMMAND -l "$UNIFFI_BINDGEN_LIBRARY" swift --modulemap "$COMMON/Modules" --xcframework --modulemap-filename module.modulemap
## Tests will need the generated swift files from uniffi
if [[ "$BUILD_SOURCES" == true ]]; then
echo "Generating uniffi Swift sources..."
GENERATED_SWIFT_OUT_DIR="$THIS_DIR/Sources/MozillaRustComponentsWrapper/Generated"
mkdir -p "$GENERATED_SWIFT_OUT_DIR"
"$CARGO" uniffi-bindgen-library-mode -l "$UNIFFI_BINDGEN_LIBRARY" swift --swift-sources "$GENERATED_SWIFT_OUT_DIR"
fi
echo "original modulemap"
cat "$COMMON/Modules/module.modulemap"
TWEAKED_MODULEMAP=$(cat <(head -n1 "$COMMON/Modules/module.modulemap") <(echo " header \"RustViaductFFI.h\"") <(tail -n +2 "$COMMON/Modules/module.modulemap"))
echo "$TWEAKED_MODULEMAP" > "$COMMON/Modules/module.modulemap"