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

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