Swift: turn extractor into a swift-frontend plugin
#12713
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This change turns the extractor into a plugin to a slightly modified
swift-extractorbinary, providing only aswift::FrontendObserverinstance.This makes it so that we inherit the behaviours of the released
swift-frontend, among the known solved issues are:.swiftinterfacefiles, which was preventing the extractor from working on top of earlier versions of the swift SDK@-prefixed parameter files are now supportedUnder the hood the Swift build system has been tweaked so that calls to
performFrontendin the driver executable use aFrontendObserverbuilt from a dynamic library, and the extractor now provides an alternative frontend observer dynamic library.Some special treatment needed to retain the same features:
finishedmethod was added toswift::FrontendObserverto implement thefile_is_successfully_extractedpredicateIdentifier) needed to be extracted into a separate dynamic library as well, as behaviour was depending on the value of static pointers that therefore needed to be shared betweenswift-frontendand the extractorCODEQL_EXTRACTOR_SWIFT_RUN_UNDERfunctionality has been moved to theextractorbash wrapper, which also makes it work better to catch crashes happening beforemainis even entered (which can happen with tracer problems)