2.8 KiB
Generated
2.8 KiB
Generated
Building Kreuzberg
The Swift package wraps a Rust library via swift-bridge. SwiftPM cannot invoke Cargo directly, so you must run the cargo build step first.
Workflow
1. Build the Rust binding crate
From the repository root:
cargo build -p kreuzberg-swift
This compiles target/debug/libkreuzberg_swift.a and runs
swift-bridge-build in build.rs, which writes generated Swift and C sources
into target/debug/build/kreuzberg-swift-*/out/.
2. Copy generated sources into the SwiftPM targets
The package uses two internal targets:
Sources/RustBridgeC/— pure C target with the combined C headerSources/RustBridge/— Swift bridge files thatimport RustBridgeC
OUT=$(ls -dt target/debug/build/kreuzberg-swift-*/out 2>/dev/null | head -1)
# Combine C headers into the RustBridgeC target
cat "$OUT/SwiftBridgeCore.h" "$OUT/kreuzberg-swift/kreuzberg-swift.h" \
> packages/swift/Sources/RustBridgeC/RustBridgeC.h
# Copy Swift bridge files, prepending "import RustBridgeC" so they see the C types.
# Use `{ echo ...; cat ...; }` rather than `printf "...$(cat)..."` because printf
# interprets `%` and `\` sequences in its format string, which would corrupt the
# generated Swift sources.
{ echo "import RustBridgeC"; cat "$OUT/SwiftBridgeCore.swift"; } \
> packages/swift/Sources/RustBridge/SwiftBridgeCore.swift
{ echo "import RustBridgeC"; cat "$OUT/kreuzberg-swift/kreuzberg-swift.swift"; } \
> packages/swift/Sources/RustBridge/kreuzberg-swift.swift
If the glob kreuzberg-swift-*/out matches multiple directories, ls -dt ... | head -1
picks the most recently modified one.
3. Build and test the Swift package
swift build --package-path packages/swift
swift test --package-path packages/swift
Release builds
Replace target/debug with target/release and pass
--configuration release to swift build:
cargo build --release -p kreuzberg-swift
OUT=$(ls -dt target/release/build/kreuzberg-swift-*/out 2>/dev/null | head -1)
cat "$OUT/SwiftBridgeCore.h" "$OUT/kreuzberg-swift/kreuzberg-swift.h" \
> packages/swift/Sources/RustBridgeC/RustBridgeC.h
{ echo "import RustBridgeC"; cat "$OUT/SwiftBridgeCore.swift"; } \
> packages/swift/Sources/RustBridge/SwiftBridgeCore.swift
{ echo "import RustBridgeC"; cat "$OUT/kreuzberg-swift/kreuzberg-swift.swift"; } \
> packages/swift/Sources/RustBridge/kreuzberg-swift.swift
swift build --package-path packages/swift --configuration release
Notes
- Files in
Sources/RustBridgeC/and the generated Swift files inSources/RustBridge/are generated artifacts — overwritten by the copy step. Sources/RustBridge/RustBridge.swiftis a placeholder and is overwritten.target/is in.gitignore; regenerate after everycargo clean.