Skip to content

Documentation: Update CMake.md to use the ABI entry point #828

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
May 13, 2025
29 changes: 22 additions & 7 deletions Documentation/CMake.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,21 +59,36 @@ endif()
## Add an entry point

You must include a source file in your test executable target with a
`@main` entry point. The following example uses the SwiftPM entry point:
`@main` entry point. The example main below requires the experimental
`Extern` feature. The declaration of `swt_abiv0_getEntryPoint` could
also be written in a C header file with its own `module.modulemap`.

```swift
import Testing
import Foundation

typealias EntryPoint = @convention(thin) @Sendable (_ configurationJSON: UnsafeRawBufferPointer?, _ recordHandler: @escaping @Sendable (_ recordJSON: UnsafeRawBufferPointer) -> Void) async throws -> Bool

@_extern(c, "swt_abiv0_getEntryPoint")
func swt_abiv0_getEntryPoint() -> UnsafeRawPointer

@main struct Runner {
static func main() async {
await Testing.__swiftPMEntryPoint() as Never
static func main() async throws {
nonisolated(unsafe) let configurationJSON: UnsafeRawBufferPointer? = nil
let recordHandler: @Sendable (UnsafeRawBufferPointer) -> Void = { _ in }

let entryPoint = unsafeBitCast(swt_abiv0_getEntryPoint(), to: EntryPoint.self)

if try await entryPoint(configurationJSON, recordHandler) {
exit(EXIT_SUCCESS)
} else {
exit(EXIT_FAILURE)
}
}
}
```

> [!WARNING]
> The entry point is expected to change to an entry point designed for other
> build systems prior to the initial stable release of Swift Testing.
For more information on the input configuration and output records of the ABI entry
point, refer to the [ABI documentation](ABI/JSON.md)

## Integrate with CTest

Expand Down