Skip to content

Conversation

@ADKaster
Copy link
Contributor

@ADKaster ADKaster commented Nov 17, 2024

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.

The SwiftPM entry point is unstable and the new ABIv0 entry point has
already been added to the library.
@ADKaster
Copy link
Contributor Author

cc @compnerd

@grynspan grynspan added bug 🪲 Something isn't working documentation 📚 Improvements or additions to documentation tools integration 🛠️ Integration of swift-testing into tools/IDEs build 🧱 Affects the project's build configuration or process labels Nov 17, 2024
@ADKaster
Copy link
Contributor Author

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

@grynspan
Copy link
Contributor

@ADKaster Did you want to proceed with this PR?

@ADKaster
Copy link
Contributor Author

@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.

Copy link
Contributor

@stmontgomery stmontgomery left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd like to see at least a code comment related to failure tracking leading to a non-zero exit status. Bonus points for actually implementing that logic in the example code!

@grynspan
Copy link
Contributor

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

@grynspan
Copy link
Contributor

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.

@ADKaster
Copy link
Contributor Author

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.

@stmontgomery
Copy link
Contributor

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

@stmontgomery stmontgomery added this to the Swift 6.x milestone May 13, 2025
Copy link
Contributor

@stmontgomery stmontgomery left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @ADKaster. While reviewing this I was reminded about a semi-related issue you filed, #1039. If/when we resolve or improve those install locations, it may warrant further improvements to this document, but that can be done separately of course.

@stmontgomery stmontgomery merged commit 72afbb4 into swiftlang:main May 13, 2025
@stmontgomery stmontgomery modified the milestones: Swift 6.x, Swift 6.2 May 24, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug 🪲 Something isn't working build 🧱 Affects the project's build configuration or process documentation 📚 Improvements or additions to documentation tools integration 🛠️ Integration of swift-testing into tools/IDEs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants