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-extractor
binary, providing only aswift::FrontendObserver
instance.This makes it so that we inherit the behaviours of the released
swift-frontend
, among the known solved issues are:.swiftinterface
files, 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
performFrontend
in the driver executable use aFrontendObserver
built from a dynamic library, and the extractor now provides an alternative frontend observer dynamic library.Some special treatment needed to retain the same features:
finished
method was added toswift::FrontendObserver
to implement thefile_is_successfully_extracted
predicateIdentifier
) 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-frontend
and the extractorCODEQL_EXTRACTOR_SWIFT_RUN_UNDER
functionality has been moved to theextractor
bash wrapper, which also makes it work better to catch crashes happening beforemain
is even entered (which can happen with tracer problems)