swift-testing icon indicating copy to clipboard operation
swift-testing copied to clipboard

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

Open ADKaster opened this issue 1 year ago • 5 comments

The SwiftPM entry point is unstable and the new ABIv0 entry point has already been added to the library.

Motivation:

Using the SwiftPM entry point when building tests from a CMake project as recommended in the documentation is outdated and unwise.

Modifications:

Replace the example with one using the new ABIv0 entry point.

Result:

CMake projects should stop relying on the SwiftPM entry point.

Checklist:

  • [ ] Code and documentation should follow the style of the Style Guide.
  • [ ] If public symbols are renamed or modified, DocC references should be updated.

ADKaster avatar Nov 17 '24 22:11 ADKaster

cc @compnerd

ADKaster avatar Nov 17 '24 22:11 ADKaster

Hm. Chatting with Jonathan on Slack some more, it seems like the fact that this works with the Swift OSS toolchain on linux is a toolchain bug: we shouldn't be able to access the private module from user code.

Another alternative (with -enable-experimental-feature Extern) looks like this:

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 throws {
        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)
        }
    }
}

ADKaster avatar Nov 18 '24 00:11 ADKaster

@ADKaster Did you want to proceed with this PR?

grynspan avatar Dec 10 '24 15:12 grynspan

@grynspan I've updated the PR to address your two comments and other discussions we had on slack. I'm not 100% sure on the formatting, but the example code as-is does work.

ADKaster avatar Dec 10 '24 18:12 ADKaster

@ADKaster Can you update us on the state of this PR?

grynspan avatar Jan 14 '25 17:01 grynspan

Okay, if you're satisfied with the changes you've made here, we can merge them any time. If you don't have a Squash and merge button in GitHub, @stmontgomery can do it.

grynspan avatar May 13 '25 01:05 grynspan

Yeah I'm all set with this. There's other sections of this file don't seem quite right, but that's for a separate PR. I don't have merge permissions though.

ADKaster avatar May 13 '25 04:05 ADKaster

Hi, let me catch up with this discussion and PR this morning and I will hopefully merge it

stmontgomery avatar May 13 '25 11:05 stmontgomery