Add -print-static-build-config to print a static build conformance

Introduce the ability to form a `StaticBuildConfiguration` from
language options. Add a frontend option `-print-static-build-config`
to then print that static build configuration as JSON in a manner that
can be decoded into a `StaticBuildConfiguration`.

Most of the change here is in sinking the bridged ASTContext queries
of language options into a new BridgedLangOptions. The printing of the
static build configuration only has a LangOptions (not an ASTContext),
so this refactoring is required for printing.
This commit is contained in:
Doug Gregor
2025-09-29 13:43:54 -07:00
parent bab1a9cf32
commit ae8f9d8234
20 changed files with 581 additions and 184 deletions

View File

@@ -23,6 +23,7 @@
#include "swift/FrontendTool/FrontendTool.h"
#include "Dependencies.h"
#include "TBD.h"
#include "swift/AST/ASTBridging.h"
#include "swift/AST/ASTDumper.h"
#include "swift/AST/ASTMangler.h"
#include "swift/AST/AvailabilityScope.h"
@@ -38,6 +39,7 @@
#include "swift/AST/NameLookup.h"
#include "swift/AST/TBDGenRequests.h"
#include "swift/Basic/Assertions.h"
#include "swift/Basic/BasicBridging.h"
#include "swift/Basic/Defer.h"
#include "swift/Basic/Edit.h"
#include "swift/Basic/FileSystem.h"
@@ -50,6 +52,7 @@
#include "swift/Basic/TargetInfo.h"
#include "swift/Basic/UUID.h"
#include "swift/Basic/Version.h"
#include "swift/Bridging/ASTGen.h"
#include "swift/ConstExtract/ConstExtract.h"
#include "swift/DependencyScan/ScanDependencies.h"
#include "swift/Frontend/CachedDiagnostics.h"
@@ -2255,6 +2258,14 @@ public:
};
};
#if SWIFT_BUILD_SWIFT_SYNTAX
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreturn-type-c-linkage"
extern "C" BridgedStringRef
swift_ASTGen_printStaticBuildConfiguration(BridgedLangOptions cLangOpts);
#pragma clang diagnostic pop
#endif
int swift::performFrontend(ArrayRef<const char *> Args,
const char *Argv0, void *MainAddr,
FrontendObserver *observer) {
@@ -2385,6 +2396,16 @@ int swift::performFrontend(ArrayRef<const char *> Args,
return finishDiagProcessing(0, /*verifierEnabled*/ false);
}
if (Invocation.getFrontendOptions().PrintBuildConfig) {
#if SWIFT_BUILD_SWIFT_SYNTAX
auto resultText =
swift_ASTGen_printStaticBuildConfiguration(Invocation.getLangOptions());
llvm::outs() << resultText.unbridged();
swift_ASTGen_freeBridgedString(resultText);
#endif
return finishDiagProcessing(0, /*verifierEnabled*/ false);
}
if (Invocation.getFrontendOptions().PrintSupportedFeatures) {
swift::features::printSupportedFeatures(llvm::outs());
return finishDiagProcessing(0, /*verifierEnabled*/ false);