@@ -351,16 +351,26 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
351351
352352 try await writePIF ( buildParameters: buildParameters)
353353
354+ var symbolGraphOptions : BuildOutput . SymbolGraphOptions ?
355+ for output in buildOutputs {
356+ switch output {
357+ case . symbolGraph( let options) :
358+ symbolGraphOptions = options
359+ default :
360+ continue
361+ }
362+ }
363+
354364 return try await startSWBuildOperation (
355365 pifTargetName: subset. pifTargetName,
356- genSymbolGraph : buildOutputs . contains ( . symbolGraph ) ,
366+ symbolGraphOptions : symbolGraphOptions ,
357367 generateReplArguments: buildOutputs. contains ( . replArguments) ,
358368 )
359369 }
360370
361371 private func startSWBuildOperation(
362372 pifTargetName: String ,
363- genSymbolGraph : Bool ,
373+ symbolGraphOptions : BuildOutput . SymbolGraphOptions ? ,
364374 generateReplArguments: Bool
365375 ) async throws -> BuildResult {
366376 let buildStartTime = ContinuousClock . Instant. now
@@ -413,7 +423,7 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
413423 throw error
414424 }
415425
416- let request = try await self . makeBuildRequest ( session: session, configuredTargets: configuredTargets, derivedDataPath: derivedDataPath, genSymbolGraph : genSymbolGraph )
426+ let request = try await self . makeBuildRequest ( session: session, configuredTargets: configuredTargets, derivedDataPath: derivedDataPath, symbolGraphOptions : symbolGraphOptions )
417427
418428 struct BuildState {
419429 private var targetsByID : [ Int : SwiftBuild . SwiftBuildMessage . TargetStartedInfo ] = [ : ]
@@ -631,7 +641,7 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
631641 )
632642 }
633643
634- private func makeBuildParameters( session: SWBBuildServiceSession , genSymbolGraph : Bool ) async throws -> SwiftBuild . SWBBuildParameters {
644+ private func makeBuildParameters( session: SWBBuildServiceSession , symbolGraphOptions : BuildOutput . SymbolGraphOptions ? ) async throws -> SwiftBuild . SWBBuildParameters {
635645 // Generate the run destination parameters.
636646 let runDestination = makeRunDestination ( )
637647
@@ -658,9 +668,39 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
658668
659669 // FIXME: workaround for old Xcode installations such as what is in CI
660670 settings [ " LM_SKIP_METADATA_EXTRACTION " ] = " YES "
661- if genSymbolGraph {
671+ if let symbolGraphOptions {
662672 settings [ " RUN_SYMBOL_GRAPH_EXTRACT " ] = " YES "
663- // TODO set additional symbol graph options from the build output here, such as "include-spi-symbols"
673+
674+ if symbolGraphOptions. prettyPrint {
675+ settings [ " DOCC_PRETTY_PRINT " ] = " YES "
676+ }
677+
678+ if symbolGraphOptions. emitExtensionBlocks {
679+ settings [ " DOCC_EXTRACT_EXTENSION_SYMBOLS " ] = " YES "
680+ }
681+
682+ if !symbolGraphOptions. includeSynthesized {
683+ settings [ " DOCC_SKIP_SYNTHESIZED_MEMBERS " ] = " YES "
684+ }
685+
686+ if symbolGraphOptions. includeSPI {
687+ settings [ " DOCC_EXTRACT_SPI_DOCUMENTATION " ] = " YES "
688+ }
689+
690+ switch symbolGraphOptions. minimumAccessLevel {
691+ case . private:
692+ settings [ " DOCC_MINIMUM_ACCESS_LEVEL " ] = " private "
693+ case . fileprivate:
694+ settings [ " DOCC_MINIMUM_ACCESS_LEVEL " ] = " fileprivate "
695+ case . internal:
696+ settings [ " DOCC_MINIMUM_ACCESS_LEVEL " ] = " internal "
697+ case . package :
698+ settings [ " DOCC_MINIMUM_ACCESS_LEVEL " ] = " package "
699+ case . public:
700+ settings [ " DOCC_MINIMUM_ACCESS_LEVEL " ] = " public "
701+ case . open:
702+ settings [ " DOCC_MINIMUM_ACCESS_LEVEL " ] = " open "
703+ }
664704 }
665705
666706 let normalizedTriple = Triple ( buildParameters. triple. triple, normalizing: true )
@@ -741,9 +781,9 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
741781 return params
742782 }
743783
744- public func makeBuildRequest( session: SWBBuildServiceSession , configuredTargets: [ SWBTargetGUID ] , derivedDataPath: Basics . AbsolutePath , genSymbolGraph : Bool ) async throws -> SWBBuildRequest {
784+ public func makeBuildRequest( session: SWBBuildServiceSession , configuredTargets: [ SWBTargetGUID ] , derivedDataPath: Basics . AbsolutePath , symbolGraphOptions : BuildOutput . SymbolGraphOptions ? ) async throws -> SWBBuildRequest {
745785 var request = SWBBuildRequest ( )
746- request. parameters = try await makeBuildParameters ( session: session, genSymbolGraph : genSymbolGraph )
786+ request. parameters = try await makeBuildParameters ( session: session, symbolGraphOptions : symbolGraphOptions )
747787 request. configuredTargets = configuredTargets. map { SWBConfiguredTarget ( guid: $0. rawValue, parameters: request. parameters) }
748788 request. useParallelTargets = true
749789 request. useImplicitDependencies = false
0 commit comments