From b8afb4b9a48cdae608d44aaab4c76009c1fc259b Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Tue, 27 Aug 2024 16:01:44 +0200 Subject: [PATCH 01/22] Make runner environment configurable --- Sources/ScipioKit/BuildOptions.swift | 14 +++++++++++++- .../ScipioKit/Producer/PIF/PIFCompiler.swift | 4 ++-- .../Producer/PIF/ToolchainGenerator.swift | 7 +++++-- Sources/ScipioKit/Runner.swift | 17 +++++++++++++---- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 87b3cf81..a88db3de 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -1,5 +1,6 @@ import Foundation import OrderedCollections +import Basics struct BuildOptions: Hashable, Codable, Sendable { init( @@ -10,7 +11,8 @@ struct BuildOptions: Hashable, Codable, Sendable { extraFlags: ExtraFlags?, extraBuildParameters: ExtraBuildParameters?, enableLibraryEvolution: Bool, - customFrameworkModuleMapContents: Data? + customFrameworkModuleMapContents: Data?, + environment: Environment? ) { self.buildConfiguration = buildConfiguration self.isDebugSymbolsEmbedded = isDebugSymbolsEmbedded @@ -20,6 +22,7 @@ struct BuildOptions: Hashable, Codable, Sendable { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.customFrameworkModuleMapContents = customFrameworkModuleMapContents + self.environment = environment } let buildConfiguration: BuildConfiguration @@ -33,6 +36,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? + let environment: Environment? } public struct ExtraFlags: Hashable, Codable, Sendable { @@ -189,3 +193,11 @@ extension ExtraFlags { ) } } + +extension Environment: Hashable { + public func hash(into hasher: inout Hasher) { + for item in self { + hasher.combine(item.value) + } + } +} diff --git a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift index edf2fe35..77ef825e 100644 --- a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift +++ b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift @@ -30,7 +30,7 @@ struct PIFCompiler: Compiler { private func fetchDefaultToolchainBinPath() async throws -> AbsolutePath { let result = try await executor.execute("/usr/bin/xcrun", "xcode-select", "-p") - let rawString = try result.unwrapOutput() + let rawString = try result.unwrapOutput().trimmingCharacters(in: .whitespacesAndNewlines) let developerDirPath = try AbsolutePath(validating: rawString) let toolchainPath = try RelativePath(validating: "./Toolchains/XcodeDefault.xctoolchain/usr/bin") return developerDirPath.appending(toolchainPath) @@ -38,7 +38,7 @@ struct PIFCompiler: Compiler { private func makeToolchain(for sdk: SDK) async throws -> UserToolchain { let toolchainDirPath = try await fetchDefaultToolchainBinPath() - let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath) + let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath, environment: buildOptions.environment) return try await toolchainGenerator.makeToolChain(sdk: sdk) } diff --git a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift index d1e0d262..954ad196 100644 --- a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift +++ b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift @@ -7,20 +7,23 @@ import PackageModel #endif import TSCBasic import struct Basics.Triple +import struct Basics.Environment struct ToolchainGenerator { private let toolchainDirPath: AbsolutePath private let executor: any Executor + private let environment: Environment? - init(toolchainDirPath: AbsolutePath, executor: any Executor = ProcessExecutor()) { + init(toolchainDirPath: AbsolutePath, executor: any Executor = ProcessExecutor(), environment: Environment? = nil) { self.toolchainDirPath = toolchainDirPath self.executor = executor + self.environment = environment } func makeToolChain(sdk: SDK) async throws -> UserToolchain { let destination: SwiftSDK = try await makeDestination(sdk: sdk) #if swift(>=5.10) - return try UserToolchain(swiftSDK: destination) + return try UserToolchain(swiftSDK: destination, environment: environment ?? .current) #else return try UserToolchain(destination: destination) #endif diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index 436971c8..cb2aa50c 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -3,6 +3,7 @@ import ScipioStorage import struct TSCBasic.AbsolutePath import protocol TSCBasic.FileSystem import var TSCBasic.localFileSystem +import struct Basics.Environment public typealias PlatformMatrix = [String: Set] @@ -132,6 +133,7 @@ extension Runner { public var enableLibraryEvolution: Bool /// An option indicates use custom modulemaps for distributionb public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy + public var environment: Environment? public init( buildConfiguration: BuildConfiguration = .release, @@ -142,7 +144,8 @@ extension Runner { extraFlags: ExtraFlags? = nil, extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool = false, - frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated + frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, + environment: Environment? = nil ) { self.buildConfiguration = buildConfiguration self.platforms = platforms @@ -153,6 +156,7 @@ extension Runner { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.frameworkModuleMapGenerationPolicy = frameworkModuleMapGenerationPolicy + self.environment = environment } } public struct TargetBuildOptions { @@ -165,6 +169,7 @@ extension Runner { public var extraBuildParameters: [String: String]? public var enableLibraryEvolution: Bool? public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy? + public var environment: [String: String]? public init( buildConfiguration: BuildConfiguration? = nil, @@ -175,7 +180,8 @@ extension Runner { extraFlags: ExtraFlags? = nil, extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool? = nil, - frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy? = nil + frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy? = nil, + environment: [String: String]? = nil ) { self.buildConfiguration = buildConfiguration self.platforms = platforms @@ -186,6 +192,7 @@ extension Runner { self.extraFlags = extraFlags self.enableLibraryEvolution = enableLibraryEvolution self.frameworkModuleMapGenerationPolicy = frameworkModuleMapGenerationPolicy + self.environment = environment } } @@ -296,7 +303,8 @@ extension Runner.Options.BuildOptions { extraFlags: extraFlags, extraBuildParameters: extraBuildParameters, enableLibraryEvolution: enableLibraryEvolution, - customFrameworkModuleMapContents: customFrameworkModuleMapContents + customFrameworkModuleMapContents: customFrameworkModuleMapContents, + environment: environment ) } @@ -340,7 +348,8 @@ extension Runner.Options.BuildOptions { extraFlags: mergedExtraFlags, extraBuildParameters: mergedExtraBuildParameters, enableLibraryEvolution: fetch(\.enableLibraryEvolution, by: \.enableLibraryEvolution), - frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy) + frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy), + environment: environment ) } } From 52d04d8334899e5995e0b712044e6435fedf9219 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Thu, 5 Sep 2024 17:31:38 +0200 Subject: [PATCH 02/22] Avoid environment affecting final hash --- Sources/ScipioKit/BuildOptions.swift | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index a88db3de..910f67aa 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -194,10 +194,6 @@ extension ExtraFlags { } } -extension Environment: Hashable { - public func hash(into hasher: inout Hasher) { - for item in self { - hasher.combine(item.value) - } - } +extension Environment: @retroactive Hashable { + public func hash(into hasher: inout Hasher) {} } From 413a5c92fff9eae9941ef2295d7a7701f1e7a705 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Fri, 6 Sep 2024 12:01:34 +0200 Subject: [PATCH 03/22] Exclude environment from CodingKeys --- Sources/ScipioKit/BuildOptions.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 910f67aa..09713aaf 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -3,6 +3,18 @@ import OrderedCollections import Basics struct BuildOptions: Hashable, Codable, Sendable { + + private enum CodingKeys: CodingKey { + case buildConfiguration + case isDebugSymbolsEmbedded + case frameworkType + case sdks + case extraFlags + case extraBuildParameters + case enableLibraryEvolution + case customFrameworkModuleMapContents + } + init( buildConfiguration: BuildConfiguration, isDebugSymbolsEmbedded: Bool, @@ -36,7 +48,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - let environment: Environment? + private(set) var environment: Environment? = nil } public struct ExtraFlags: Hashable, Codable, Sendable { From b6f27fc0c8449453fb405bccba08c292966808de Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Fri, 6 Sep 2024 12:04:33 +0200 Subject: [PATCH 04/22] Revert "Exclude environment from CodingKeys" This reverts commit 413a5c92fff9eae9941ef2295d7a7701f1e7a705. --- Sources/ScipioKit/BuildOptions.swift | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 09713aaf..910f67aa 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -3,18 +3,6 @@ import OrderedCollections import Basics struct BuildOptions: Hashable, Codable, Sendable { - - private enum CodingKeys: CodingKey { - case buildConfiguration - case isDebugSymbolsEmbedded - case frameworkType - case sdks - case extraFlags - case extraBuildParameters - case enableLibraryEvolution - case customFrameworkModuleMapContents - } - init( buildConfiguration: BuildConfiguration, isDebugSymbolsEmbedded: Bool, @@ -48,7 +36,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - private(set) var environment: Environment? = nil + let environment: Environment? } public struct ExtraFlags: Hashable, Codable, Sendable { From 5c0f81e03dedf0f8d3fbeac292a352c55ec3580e Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Fri, 6 Sep 2024 12:09:49 +0200 Subject: [PATCH 05/22] Reapply "Exclude environment from CodingKeys" This reverts commit b6f27fc0c8449453fb405bccba08c292966808de. --- Sources/ScipioKit/BuildOptions.swift | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 910f67aa..09713aaf 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -3,6 +3,18 @@ import OrderedCollections import Basics struct BuildOptions: Hashable, Codable, Sendable { + + private enum CodingKeys: CodingKey { + case buildConfiguration + case isDebugSymbolsEmbedded + case frameworkType + case sdks + case extraFlags + case extraBuildParameters + case enableLibraryEvolution + case customFrameworkModuleMapContents + } + init( buildConfiguration: BuildConfiguration, isDebugSymbolsEmbedded: Bool, @@ -36,7 +48,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - let environment: Environment? + private(set) var environment: Environment? = nil } public struct ExtraFlags: Hashable, Codable, Sendable { From 7eab940b19b4207a9f9429c222f4018edee4b168 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Fri, 6 Sep 2024 12:13:32 +0200 Subject: [PATCH 06/22] Add test ensuring environment not encoded in cache key --- Tests/ScipioKitTests/CacheSystemTests.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index dfdcb660..79312b24 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -1,6 +1,7 @@ import Foundation @testable import ScipioKit import XCTest +@_spi(SwiftPMInternal) import struct Basics.Environment final class ClangCheckerTests: XCTestCase { private let clangVersion = """ @@ -36,7 +37,11 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault extraFlags: .init(swiftFlags: ["-D", "SOME_FLAG"]), extraBuildParameters: ["SWIFT_OPTIMIZATION_LEVEL": "-Osize"], enableLibraryEvolution: true, - customFrameworkModuleMapContents: Data(customModuleMap.utf8) + customFrameworkModuleMapContents: Data(customModuleMap.utf8), + environment: Environment([ + "DEVELOPER_DIR": "/Xcode.app/Contents/Developer", + "PATH": "/Xcode.app/Contents/Developer:/usr/bin:/bin" + ]) ), clangVersion: "clang-1400.0.29.102", xcodeVersion: .init(xcodeVersion: "15.4", xcodeBuildVersion: "15F31d") From 3fc23b130c57c791e485263fad29eae7999ff487 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Sun, 8 Sep 2024 10:05:16 +0200 Subject: [PATCH 07/22] Adapt default build options --- Tests/ScipioKitTests/RunnerTests.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tests/ScipioKitTests/RunnerTests.swift b/Tests/ScipioKitTests/RunnerTests.swift index 4bf9b4b1..a543be56 100644 --- a/Tests/ScipioKitTests/RunnerTests.swift +++ b/Tests/ScipioKitTests/RunnerTests.swift @@ -716,6 +716,7 @@ extension BuildOptions { extraFlags: nil, extraBuildParameters: nil, enableLibraryEvolution: true, - customFrameworkModuleMapContents: nil + customFrameworkModuleMapContents: nil, + environment: nil ) } From 913dafd3023f4d39408bcfa468dbe376f648b250 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 9 Sep 2024 16:53:24 +0200 Subject: [PATCH 08/22] Add proper conformance of Environment to Hashable --- Sources/ScipioKit/BuildOptions.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 09713aaf..06edd8df 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -207,5 +207,10 @@ extension ExtraFlags { } extension Environment: @retroactive Hashable { - public func hash(into hasher: inout Hasher) {} + public func hash(into hasher: inout Hasher) { + for item in self { + hasher.combine(item.value) + } + } } + From 12dfd7c9cb6dd6265634b055d31f192d36a4c285 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 9 Sep 2024 17:05:53 +0200 Subject: [PATCH 09/22] Xcode Beta 6 changes --- Sources/scipio/Arguments.swift | 2 +- Sources/scipio/CreateCommands.swift | 8 -------- Sources/scipio/Options.swift | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/Sources/scipio/Arguments.swift b/Sources/scipio/Arguments.swift index a7d20e13..13f64c43 100644 --- a/Sources/scipio/Arguments.swift +++ b/Sources/scipio/Arguments.swift @@ -10,7 +10,7 @@ extension URL: @retroactive ExpressibleByArgument { } } -extension BuildConfiguration: @retroactive ExpressibleByArgument { +extension BuildConfiguration: ExpressibleByArgument { public init?(argument: String) { switch argument.lowercased() { case "debug": diff --git a/Sources/scipio/CreateCommands.swift b/Sources/scipio/CreateCommands.swift index d20d6503..76d6aa71 100644 --- a/Sources/scipio/CreateCommands.swift +++ b/Sources/scipio/CreateCommands.swift @@ -52,12 +52,4 @@ extension Scipio { private let availablePlatforms: Set = [.iOS, .macOS, .tvOS, .watchOS] -#if compiler(>=6.0) - -extension Runner.Options.Platform: @retroactive ExpressibleByArgument { } - -#else - extension Runner.Options.Platform: ExpressibleByArgument { } - -#endif diff --git a/Sources/scipio/Options.swift b/Sources/scipio/Options.swift index 8ea8a768..0afaec53 100644 --- a/Sources/scipio/Options.swift +++ b/Sources/scipio/Options.swift @@ -49,7 +49,7 @@ struct BuildOptionGroup: ParsableArguments { #if compiler(>=6.0) -extension FrameworkType: @retroactive ExpressibleByArgument { } +extension FrameworkType: ExpressibleByArgument { } #else From 28c0db1eb18ca681ba77be1fdda8b27600e4a7f7 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 9 Sep 2024 17:46:03 +0200 Subject: [PATCH 10/22] Make linter happy --- Sources/ScipioKit/BuildOptions.swift | 3 +-- Tests/ScipioKitTests/CacheSystemTests.swift | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 06edd8df..8620b9bf 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -48,7 +48,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - private(set) var environment: Environment? = nil + private(set) var environment: Environment? } public struct ExtraFlags: Hashable, Codable, Sendable { @@ -213,4 +213,3 @@ extension Environment: @retroactive Hashable { } } } - diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index 79312b24..2cf2f018 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -40,7 +40,7 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault customFrameworkModuleMapContents: Data(customModuleMap.utf8), environment: Environment([ "DEVELOPER_DIR": "/Xcode.app/Contents/Developer", - "PATH": "/Xcode.app/Contents/Developer:/usr/bin:/bin" + "PATH": "/Xcode.app/Contents/Developer:/usr/bin:/bin", ]) ), clangVersion: "clang-1400.0.29.102", From bd0a03522541fe5a3545f3e7e7d051a7bda887ef Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Tue, 10 Sep 2024 09:03:57 +0200 Subject: [PATCH 11/22] Support Swift <= 6.0 --- Sources/ScipioKit/BuildOptions.swift | 33 +++++++++- .../ScipioKit/Producer/PIF/PIFCompiler.swift | 4 ++ .../Producer/PIF/ToolchainGenerator.swift | 16 ++++- Sources/ScipioKit/Runner.swift | 62 ++++++++++++++++++- Tests/ScipioKitTests/CacheSystemTests.swift | 20 ++++++ Tests/ScipioKitTests/RunnerTests.swift | 13 ++++ 6 files changed, 142 insertions(+), 6 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 8620b9bf..d439c952 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -23,8 +23,7 @@ struct BuildOptions: Hashable, Codable, Sendable { extraFlags: ExtraFlags?, extraBuildParameters: ExtraBuildParameters?, enableLibraryEvolution: Bool, - customFrameworkModuleMapContents: Data?, - environment: Environment? + customFrameworkModuleMapContents: Data? ) { self.buildConfiguration = buildConfiguration self.isDebugSymbolsEmbedded = isDebugSymbolsEmbedded @@ -34,8 +33,33 @@ struct BuildOptions: Hashable, Codable, Sendable { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.customFrameworkModuleMapContents = customFrameworkModuleMapContents + } + + #if compiler(>=6.0) + init( + buildConfiguration: BuildConfiguration, + isDebugSymbolsEmbedded: Bool, + frameworkType: FrameworkType, + sdks: Set, + extraFlags: ExtraFlags?, + extraBuildParameters: ExtraBuildParameters?, + enableLibraryEvolution: Bool, + customFrameworkModuleMapContents: Data?, + environment: Environment? + ) { + self.init( + buildConfiguration: buildConfiguration, + isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, + frameworkType: frameworkType, + sdks: sdks, + extraFlags: extraFlags, + extraBuildParameters: extraBuildParameters, + enableLibraryEvolution: enableLibraryEvolution, + customFrameworkModuleMapContents: customFrameworkModuleMapContents + ) self.environment = environment } + #endif let buildConfiguration: BuildConfiguration let isDebugSymbolsEmbedded: Bool @@ -48,7 +72,10 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? + + #if compiler(>=6.0) private(set) var environment: Environment? + #endif } public struct ExtraFlags: Hashable, Codable, Sendable { @@ -206,6 +233,7 @@ extension ExtraFlags { } } +#if compiler(>=6.0) extension Environment: @retroactive Hashable { public func hash(into hasher: inout Hasher) { for item in self { @@ -213,3 +241,4 @@ extension Environment: @retroactive Hashable { } } } +#endif diff --git a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift index 77ef825e..a3663c26 100644 --- a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift +++ b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift @@ -38,7 +38,11 @@ struct PIFCompiler: Compiler { private func makeToolchain(for sdk: SDK) async throws -> UserToolchain { let toolchainDirPath = try await fetchDefaultToolchainBinPath() + #if compiler(>=6.0) let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath, environment: buildOptions.environment) + #else + let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath) + #endif return try await toolchainGenerator.makeToolChain(sdk: sdk) } diff --git a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift index 954ad196..1733ab7b 100644 --- a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift +++ b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift @@ -2,28 +2,40 @@ import Foundation import TSCUtility #if compiler(>=6.0) @_spi(SwiftPMInternal) import PackageModel +import struct Basics.Environment #else import PackageModel #endif import TSCBasic import struct Basics.Triple -import struct Basics.Environment struct ToolchainGenerator { private let toolchainDirPath: AbsolutePath private let executor: any Executor + + #if compiler(>=6.0) private let environment: Environment? + #endif + #if compiler(>=6.0) init(toolchainDirPath: AbsolutePath, executor: any Executor = ProcessExecutor(), environment: Environment? = nil) { self.toolchainDirPath = toolchainDirPath self.executor = executor self.environment = environment } + #else + init(toolchainDirPath: AbsolutePath, executor: any Executor = ProcessExecutor()) { + self.toolchainDirPath = toolchainDirPath + self.executor = executor + } + #endif func makeToolChain(sdk: SDK) async throws -> UserToolchain { let destination: SwiftSDK = try await makeDestination(sdk: sdk) - #if swift(>=5.10) + #if swift(>=6.0) return try UserToolchain(swiftSDK: destination, environment: environment ?? .current) + #elseif swift(>=5.10) + return try UserToolchain(swiftSDK: destination) #else return try UserToolchain(destination: destination) #endif diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index cb2aa50c..95a16da8 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -3,7 +3,9 @@ import ScipioStorage import struct TSCBasic.AbsolutePath import protocol TSCBasic.FileSystem import var TSCBasic.localFileSystem +#if compiler(>=6.0) import struct Basics.Environment +#endif public typealias PlatformMatrix = [String: Set] @@ -133,7 +135,10 @@ extension Runner { public var enableLibraryEvolution: Bool /// An option indicates use custom modulemaps for distributionb public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy + + #if compiler(>=6.0) public var environment: Environment? + #endif public init( buildConfiguration: BuildConfiguration = .release, @@ -144,8 +149,7 @@ extension Runner { extraFlags: ExtraFlags? = nil, extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool = false, - frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, - environment: Environment? = nil + frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated ) { self.buildConfiguration = buildConfiguration self.platforms = platforms @@ -156,8 +160,35 @@ extension Runner { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.frameworkModuleMapGenerationPolicy = frameworkModuleMapGenerationPolicy + } + + #if compiler(>=6.0) + public init( + buildConfiguration: BuildConfiguration = .release, + platforms: PlatformSpecifier = .manifest, + isSimulatorSupported: Bool = false, + isDebugSymbolsEmbedded: Bool = false, + frameworkType: FrameworkType = .dynamic, + extraFlags: ExtraFlags? = nil, + extraBuildParameters: [String: String]? = nil, + enableLibraryEvolution: Bool = false, + frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, + environment: Environment? = nil + ) { + self.init( + buildConfiguration: buildConfiguration, + platforms: platforms, + isSimulatorSupported: isSimulatorSupported, + isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, + frameworkType: frameworkType, + extraFlags: extraFlags, + extraBuildParameters: extraBuildParameters, + enableLibraryEvolution: enableLibraryEvolution, + frameworkModuleMapGenerationPolicy: frameworkModuleMapGenerationPolicy + ) self.environment = environment } + #endif } public struct TargetBuildOptions { public var buildConfiguration: BuildConfiguration? @@ -295,6 +326,7 @@ extension Runner.Options.BuildOptions { try fileSystem.readFileContents(url.absolutePath.spmAbsolutePath) } + #if compiler(>=6.0) return BuildOptions( buildConfiguration: buildConfiguration, isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, @@ -306,6 +338,18 @@ extension Runner.Options.BuildOptions { customFrameworkModuleMapContents: customFrameworkModuleMapContents, environment: environment ) + #else + return BuildOptions( + buildConfiguration: buildConfiguration, + isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, + frameworkType: frameworkType, + sdks: Set(sdks), + extraFlags: extraFlags, + extraBuildParameters: extraBuildParameters, + enableLibraryEvolution: enableLibraryEvolution, + customFrameworkModuleMapContents: customFrameworkModuleMapContents + ) + #endif } private func detectSDKsToBuild( @@ -339,6 +383,7 @@ extension Runner.Options.BuildOptions { let mergedExtraFlags = extraFlags? .concatenating(overridingOptions.extraFlags) ?? overridingOptions.extraFlags + #if compiler(>=6.0) return .init( buildConfiguration: fetch(\.buildConfiguration, by: \.buildConfiguration), platforms: fetch(\.platforms, by: \.platforms), @@ -351,6 +396,19 @@ extension Runner.Options.BuildOptions { frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy), environment: environment ) + #else + return .init( + buildConfiguration: fetch(\.buildConfiguration, by: \.buildConfiguration), + platforms: fetch(\.platforms, by: \.platforms), + isSimulatorSupported: fetch(\.isSimulatorSupported, by: \.isSimulatorSupported), + isDebugSymbolsEmbedded: fetch(\.isDebugSymbolsEmbedded, by: \.isDebugSymbolsEmbedded), + frameworkType: fetch(\.frameworkType, by: \.frameworkType), + extraFlags: mergedExtraFlags, + extraBuildParameters: mergedExtraBuildParameters, + enableLibraryEvolution: fetch(\.enableLibraryEvolution, by: \.enableLibraryEvolution), + frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy) + ) + #endif } } diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index 2cf2f018..0bad5389 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -1,7 +1,9 @@ import Foundation @testable import ScipioKit import XCTest +#if compiler(>=6.0) @_spi(SwiftPMInternal) import struct Basics.Environment +#endif final class ClangCheckerTests: XCTestCase { private let clangVersion = """ @@ -28,6 +30,7 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault } func testEncodeCacheKey() throws { + #if compiler(>=6.0) let cacheKey = SwiftPMCacheKey(targetName: "MyTarget", pin: .revision("111111111"), buildOptions: .init(buildConfiguration: .release, @@ -46,6 +49,23 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault clangVersion: "clang-1400.0.29.102", xcodeVersion: .init(xcodeVersion: "15.4", xcodeBuildVersion: "15F31d") ) + #else + let cacheKey = SwiftPMCacheKey(targetName: "MyTarget", + pin: .revision("111111111"), + buildOptions: .init(buildConfiguration: .release, + isDebugSymbolsEmbedded: false, + frameworkType: .dynamic, + sdks: [.iOS], + extraFlags: .init(swiftFlags: ["-D", "SOME_FLAG"]), + extraBuildParameters: ["SWIFT_OPTIMIZATION_LEVEL": "-Osize"], + enableLibraryEvolution: true, + customFrameworkModuleMapContents: Data(customModuleMap.utf8) + ), + clangVersion: "clang-1400.0.29.102", + xcodeVersion: .init(xcodeVersion: "15.4", xcodeBuildVersion: "15F31d") + ) + #endif + let encoder = JSONEncoder() encoder.outputFormatting = [.sortedKeys, .prettyPrinted] let data = try encoder.encode(cacheKey) diff --git a/Tests/ScipioKitTests/RunnerTests.swift b/Tests/ScipioKitTests/RunnerTests.swift index a543be56..4d5f7a87 100644 --- a/Tests/ScipioKitTests/RunnerTests.swift +++ b/Tests/ScipioKitTests/RunnerTests.swift @@ -708,6 +708,7 @@ framework module MyTarget { } extension BuildOptions { + #if compiler(>=6.0) fileprivate static let `default`: Self = .init( buildConfiguration: .release, isDebugSymbolsEmbedded: false, @@ -719,4 +720,16 @@ extension BuildOptions { customFrameworkModuleMapContents: nil, environment: nil ) + #else + fileprivate static let `default`: Self = .init( + buildConfiguration: .release, + isDebugSymbolsEmbedded: false, + frameworkType: .dynamic, + sdks: [.iOS], + extraFlags: nil, + extraBuildParameters: nil, + enableLibraryEvolution: true, + customFrameworkModuleMapContents: nil + ) + #endif } From 9d6054350bf8f18cf0e34638130e2e54ac5c2d58 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 23 Sep 2024 13:52:24 +0200 Subject: [PATCH 12/22] Revert "Support Swift <= 6.0" This reverts commit bd0a03522541fe5a3545f3e7e7d051a7bda887ef. --- Sources/ScipioKit/BuildOptions.swift | 33 +--------- .../ScipioKit/Producer/PIF/PIFCompiler.swift | 4 -- .../Producer/PIF/ToolchainGenerator.swift | 16 +---- Sources/ScipioKit/Runner.swift | 62 +------------------ Tests/ScipioKitTests/CacheSystemTests.swift | 20 ------ Tests/ScipioKitTests/RunnerTests.swift | 13 ---- 6 files changed, 6 insertions(+), 142 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index d439c952..8620b9bf 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -23,7 +23,8 @@ struct BuildOptions: Hashable, Codable, Sendable { extraFlags: ExtraFlags?, extraBuildParameters: ExtraBuildParameters?, enableLibraryEvolution: Bool, - customFrameworkModuleMapContents: Data? + customFrameworkModuleMapContents: Data?, + environment: Environment? ) { self.buildConfiguration = buildConfiguration self.isDebugSymbolsEmbedded = isDebugSymbolsEmbedded @@ -33,33 +34,8 @@ struct BuildOptions: Hashable, Codable, Sendable { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.customFrameworkModuleMapContents = customFrameworkModuleMapContents - } - - #if compiler(>=6.0) - init( - buildConfiguration: BuildConfiguration, - isDebugSymbolsEmbedded: Bool, - frameworkType: FrameworkType, - sdks: Set, - extraFlags: ExtraFlags?, - extraBuildParameters: ExtraBuildParameters?, - enableLibraryEvolution: Bool, - customFrameworkModuleMapContents: Data?, - environment: Environment? - ) { - self.init( - buildConfiguration: buildConfiguration, - isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, - frameworkType: frameworkType, - sdks: sdks, - extraFlags: extraFlags, - extraBuildParameters: extraBuildParameters, - enableLibraryEvolution: enableLibraryEvolution, - customFrameworkModuleMapContents: customFrameworkModuleMapContents - ) self.environment = environment } - #endif let buildConfiguration: BuildConfiguration let isDebugSymbolsEmbedded: Bool @@ -72,10 +48,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - - #if compiler(>=6.0) private(set) var environment: Environment? - #endif } public struct ExtraFlags: Hashable, Codable, Sendable { @@ -233,7 +206,6 @@ extension ExtraFlags { } } -#if compiler(>=6.0) extension Environment: @retroactive Hashable { public func hash(into hasher: inout Hasher) { for item in self { @@ -241,4 +213,3 @@ extension Environment: @retroactive Hashable { } } } -#endif diff --git a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift index a3663c26..77ef825e 100644 --- a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift +++ b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift @@ -38,11 +38,7 @@ struct PIFCompiler: Compiler { private func makeToolchain(for sdk: SDK) async throws -> UserToolchain { let toolchainDirPath = try await fetchDefaultToolchainBinPath() - #if compiler(>=6.0) let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath, environment: buildOptions.environment) - #else - let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath) - #endif return try await toolchainGenerator.makeToolChain(sdk: sdk) } diff --git a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift index 1733ab7b..954ad196 100644 --- a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift +++ b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift @@ -2,40 +2,28 @@ import Foundation import TSCUtility #if compiler(>=6.0) @_spi(SwiftPMInternal) import PackageModel -import struct Basics.Environment #else import PackageModel #endif import TSCBasic import struct Basics.Triple +import struct Basics.Environment struct ToolchainGenerator { private let toolchainDirPath: AbsolutePath private let executor: any Executor - - #if compiler(>=6.0) private let environment: Environment? - #endif - #if compiler(>=6.0) init(toolchainDirPath: AbsolutePath, executor: any Executor = ProcessExecutor(), environment: Environment? = nil) { self.toolchainDirPath = toolchainDirPath self.executor = executor self.environment = environment } - #else - init(toolchainDirPath: AbsolutePath, executor: any Executor = ProcessExecutor()) { - self.toolchainDirPath = toolchainDirPath - self.executor = executor - } - #endif func makeToolChain(sdk: SDK) async throws -> UserToolchain { let destination: SwiftSDK = try await makeDestination(sdk: sdk) - #if swift(>=6.0) + #if swift(>=5.10) return try UserToolchain(swiftSDK: destination, environment: environment ?? .current) - #elseif swift(>=5.10) - return try UserToolchain(swiftSDK: destination) #else return try UserToolchain(destination: destination) #endif diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index 95a16da8..cb2aa50c 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -3,9 +3,7 @@ import ScipioStorage import struct TSCBasic.AbsolutePath import protocol TSCBasic.FileSystem import var TSCBasic.localFileSystem -#if compiler(>=6.0) import struct Basics.Environment -#endif public typealias PlatformMatrix = [String: Set] @@ -135,10 +133,7 @@ extension Runner { public var enableLibraryEvolution: Bool /// An option indicates use custom modulemaps for distributionb public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy - - #if compiler(>=6.0) public var environment: Environment? - #endif public init( buildConfiguration: BuildConfiguration = .release, @@ -149,7 +144,8 @@ extension Runner { extraFlags: ExtraFlags? = nil, extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool = false, - frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated + frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, + environment: Environment? = nil ) { self.buildConfiguration = buildConfiguration self.platforms = platforms @@ -160,35 +156,8 @@ extension Runner { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.frameworkModuleMapGenerationPolicy = frameworkModuleMapGenerationPolicy - } - - #if compiler(>=6.0) - public init( - buildConfiguration: BuildConfiguration = .release, - platforms: PlatformSpecifier = .manifest, - isSimulatorSupported: Bool = false, - isDebugSymbolsEmbedded: Bool = false, - frameworkType: FrameworkType = .dynamic, - extraFlags: ExtraFlags? = nil, - extraBuildParameters: [String: String]? = nil, - enableLibraryEvolution: Bool = false, - frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, - environment: Environment? = nil - ) { - self.init( - buildConfiguration: buildConfiguration, - platforms: platforms, - isSimulatorSupported: isSimulatorSupported, - isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, - frameworkType: frameworkType, - extraFlags: extraFlags, - extraBuildParameters: extraBuildParameters, - enableLibraryEvolution: enableLibraryEvolution, - frameworkModuleMapGenerationPolicy: frameworkModuleMapGenerationPolicy - ) self.environment = environment } - #endif } public struct TargetBuildOptions { public var buildConfiguration: BuildConfiguration? @@ -326,7 +295,6 @@ extension Runner.Options.BuildOptions { try fileSystem.readFileContents(url.absolutePath.spmAbsolutePath) } - #if compiler(>=6.0) return BuildOptions( buildConfiguration: buildConfiguration, isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, @@ -338,18 +306,6 @@ extension Runner.Options.BuildOptions { customFrameworkModuleMapContents: customFrameworkModuleMapContents, environment: environment ) - #else - return BuildOptions( - buildConfiguration: buildConfiguration, - isDebugSymbolsEmbedded: isDebugSymbolsEmbedded, - frameworkType: frameworkType, - sdks: Set(sdks), - extraFlags: extraFlags, - extraBuildParameters: extraBuildParameters, - enableLibraryEvolution: enableLibraryEvolution, - customFrameworkModuleMapContents: customFrameworkModuleMapContents - ) - #endif } private func detectSDKsToBuild( @@ -383,7 +339,6 @@ extension Runner.Options.BuildOptions { let mergedExtraFlags = extraFlags? .concatenating(overridingOptions.extraFlags) ?? overridingOptions.extraFlags - #if compiler(>=6.0) return .init( buildConfiguration: fetch(\.buildConfiguration, by: \.buildConfiguration), platforms: fetch(\.platforms, by: \.platforms), @@ -396,19 +351,6 @@ extension Runner.Options.BuildOptions { frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy), environment: environment ) - #else - return .init( - buildConfiguration: fetch(\.buildConfiguration, by: \.buildConfiguration), - platforms: fetch(\.platforms, by: \.platforms), - isSimulatorSupported: fetch(\.isSimulatorSupported, by: \.isSimulatorSupported), - isDebugSymbolsEmbedded: fetch(\.isDebugSymbolsEmbedded, by: \.isDebugSymbolsEmbedded), - frameworkType: fetch(\.frameworkType, by: \.frameworkType), - extraFlags: mergedExtraFlags, - extraBuildParameters: mergedExtraBuildParameters, - enableLibraryEvolution: fetch(\.enableLibraryEvolution, by: \.enableLibraryEvolution), - frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy) - ) - #endif } } diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index 0bad5389..2cf2f018 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -1,9 +1,7 @@ import Foundation @testable import ScipioKit import XCTest -#if compiler(>=6.0) @_spi(SwiftPMInternal) import struct Basics.Environment -#endif final class ClangCheckerTests: XCTestCase { private let clangVersion = """ @@ -30,7 +28,6 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault } func testEncodeCacheKey() throws { - #if compiler(>=6.0) let cacheKey = SwiftPMCacheKey(targetName: "MyTarget", pin: .revision("111111111"), buildOptions: .init(buildConfiguration: .release, @@ -49,23 +46,6 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault clangVersion: "clang-1400.0.29.102", xcodeVersion: .init(xcodeVersion: "15.4", xcodeBuildVersion: "15F31d") ) - #else - let cacheKey = SwiftPMCacheKey(targetName: "MyTarget", - pin: .revision("111111111"), - buildOptions: .init(buildConfiguration: .release, - isDebugSymbolsEmbedded: false, - frameworkType: .dynamic, - sdks: [.iOS], - extraFlags: .init(swiftFlags: ["-D", "SOME_FLAG"]), - extraBuildParameters: ["SWIFT_OPTIMIZATION_LEVEL": "-Osize"], - enableLibraryEvolution: true, - customFrameworkModuleMapContents: Data(customModuleMap.utf8) - ), - clangVersion: "clang-1400.0.29.102", - xcodeVersion: .init(xcodeVersion: "15.4", xcodeBuildVersion: "15F31d") - ) - #endif - let encoder = JSONEncoder() encoder.outputFormatting = [.sortedKeys, .prettyPrinted] let data = try encoder.encode(cacheKey) diff --git a/Tests/ScipioKitTests/RunnerTests.swift b/Tests/ScipioKitTests/RunnerTests.swift index 4d5f7a87..a543be56 100644 --- a/Tests/ScipioKitTests/RunnerTests.swift +++ b/Tests/ScipioKitTests/RunnerTests.swift @@ -708,7 +708,6 @@ framework module MyTarget { } extension BuildOptions { - #if compiler(>=6.0) fileprivate static let `default`: Self = .init( buildConfiguration: .release, isDebugSymbolsEmbedded: false, @@ -720,16 +719,4 @@ extension BuildOptions { customFrameworkModuleMapContents: nil, environment: nil ) - #else - fileprivate static let `default`: Self = .init( - buildConfiguration: .release, - isDebugSymbolsEmbedded: false, - frameworkType: .dynamic, - sdks: [.iOS], - extraFlags: nil, - extraBuildParameters: nil, - enableLibraryEvolution: true, - customFrameworkModuleMapContents: nil - ) - #endif } From c3ac051a2d8ddab36645a69f574414d371e52361 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 23 Sep 2024 14:19:10 +0200 Subject: [PATCH 13/22] Use `[String: String]` instead of `Environment` --- Sources/ScipioKit/BuildOptions.swift | 4 ++-- .../Producer/PIF/ToolchainGenerator.swift | 19 ++++++++++++++----- Sources/ScipioKit/Runner.swift | 4 ++-- Tests/ScipioKitTests/CacheSystemTests.swift | 4 ++-- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 8620b9bf..1d8b9147 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -24,7 +24,7 @@ struct BuildOptions: Hashable, Codable, Sendable { extraBuildParameters: ExtraBuildParameters?, enableLibraryEvolution: Bool, customFrameworkModuleMapContents: Data?, - environment: Environment? + environment: [String: String]? ) { self.buildConfiguration = buildConfiguration self.isDebugSymbolsEmbedded = isDebugSymbolsEmbedded @@ -48,7 +48,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - private(set) var environment: Environment? + private(set) var environment: [String: String]? } public struct ExtraFlags: Hashable, Codable, Sendable { diff --git a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift index 954ad196..7d3519e5 100644 --- a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift +++ b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift @@ -2,19 +2,23 @@ import Foundation import TSCUtility #if compiler(>=6.0) @_spi(SwiftPMInternal) import PackageModel +@_spi(SwiftPMInternal) import struct Basics.Environment #else import PackageModel #endif import TSCBasic import struct Basics.Triple -import struct Basics.Environment struct ToolchainGenerator { private let toolchainDirPath: AbsolutePath private let executor: any Executor - private let environment: Environment? + private let environment: [String: String]? - init(toolchainDirPath: AbsolutePath, executor: any Executor = ProcessExecutor(), environment: Environment? = nil) { + init( + toolchainDirPath: AbsolutePath, + executor: any Executor = ProcessExecutor(), + environment: [String: String]? = nil + ) { self.toolchainDirPath = toolchainDirPath self.executor = executor self.environment = environment @@ -22,8 +26,13 @@ struct ToolchainGenerator { func makeToolChain(sdk: SDK) async throws -> UserToolchain { let destination: SwiftSDK = try await makeDestination(sdk: sdk) - #if swift(>=5.10) - return try UserToolchain(swiftSDK: destination, environment: environment ?? .current) + #if compiler(>=6.0) + return try UserToolchain( + swiftSDK: destination, + environment: environment.map(Environment.init) ?? .current + ) + #elseif swift(>=5.10) + return try UserToolchain(swiftSDK: destination) #else return try UserToolchain(destination: destination) #endif diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index cb2aa50c..c9717f20 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -133,7 +133,7 @@ extension Runner { public var enableLibraryEvolution: Bool /// An option indicates use custom modulemaps for distributionb public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy - public var environment: Environment? + public var environment: [String: String]? public init( buildConfiguration: BuildConfiguration = .release, @@ -145,7 +145,7 @@ extension Runner { extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool = false, frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, - environment: Environment? = nil + environment: [String: String]? = nil ) { self.buildConfiguration = buildConfiguration self.platforms = platforms diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index 2cf2f018..eb9a8226 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -38,10 +38,10 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault extraBuildParameters: ["SWIFT_OPTIMIZATION_LEVEL": "-Osize"], enableLibraryEvolution: true, customFrameworkModuleMapContents: Data(customModuleMap.utf8), - environment: Environment([ + environment: [ "DEVELOPER_DIR": "/Xcode.app/Contents/Developer", "PATH": "/Xcode.app/Contents/Developer:/usr/bin:/bin", - ]) + ] ), clangVersion: "clang-1400.0.29.102", xcodeVersion: .init(xcodeVersion: "15.4", xcodeBuildVersion: "15F31d") From b3b02190a91f46c9a1350fdf1564057ddecdd2d2 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 23 Sep 2024 14:22:00 +0200 Subject: [PATCH 14/22] Remove extra new line --- Sources/scipio/Arguments.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/scipio/Arguments.swift b/Sources/scipio/Arguments.swift index 1f74db5d..c83abf31 100644 --- a/Sources/scipio/Arguments.swift +++ b/Sources/scipio/Arguments.swift @@ -10,7 +10,6 @@ extension URL: @retroactive ExpressibleByArgument { } } - #else extension URL: ExpressibleByArgument { From b5d5b5720ea7700e20340b72a0b7f8f6bff24f31 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 23 Sep 2024 14:25:59 +0200 Subject: [PATCH 15/22] Add compiler check for environment extension --- Sources/ScipioKit/BuildOptions.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 1d8b9147..7dfbe57a 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -206,6 +206,8 @@ extension ExtraFlags { } } +#if compiler(>=6.0) + extension Environment: @retroactive Hashable { public func hash(into hasher: inout Hasher) { for item in self { @@ -213,3 +215,5 @@ extension Environment: @retroactive Hashable { } } } + +#endif From 24289cf0d8bf85a7cbcc0c1d54ecd28e370ce74a Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 23 Sep 2024 15:00:19 +0200 Subject: [PATCH 16/22] Remove extra import --- Sources/ScipioKit/Runner.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index c9717f20..821bca99 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -3,7 +3,6 @@ import ScipioStorage import struct TSCBasic.AbsolutePath import protocol TSCBasic.FileSystem import var TSCBasic.localFileSystem -import struct Basics.Environment public typealias PlatformMatrix = [String: Set] From 834467e6048b2f59acc5d3ffcd40258454239972 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Mon, 23 Sep 2024 15:04:28 +0200 Subject: [PATCH 17/22] Remove one more extra import --- Tests/ScipioKitTests/CacheSystemTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index eb9a8226..3b66f680 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -1,7 +1,6 @@ import Foundation @testable import ScipioKit import XCTest -@_spi(SwiftPMInternal) import struct Basics.Environment final class ClangCheckerTests: XCTestCase { private let clangVersion = """ From d171e0cd47f1ecda4f35af3051ff20e66238c4e0 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Wed, 25 Sep 2024 09:01:06 +0200 Subject: [PATCH 18/22] environment -> toolchainEnvironment --- Sources/ScipioKit/BuildOptions.swift | 6 +++--- Sources/ScipioKit/Producer/PIF/PIFCompiler.swift | 2 +- Sources/ScipioKit/Runner.swift | 10 +++++----- Tests/ScipioKitTests/CacheSystemTests.swift | 2 +- Tests/ScipioKitTests/RunnerTests.swift | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 7dfbe57a..46c1c106 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -24,7 +24,7 @@ struct BuildOptions: Hashable, Codable, Sendable { extraBuildParameters: ExtraBuildParameters?, enableLibraryEvolution: Bool, customFrameworkModuleMapContents: Data?, - environment: [String: String]? + toolchainEnvironment: [String: String]? ) { self.buildConfiguration = buildConfiguration self.isDebugSymbolsEmbedded = isDebugSymbolsEmbedded @@ -34,7 +34,7 @@ struct BuildOptions: Hashable, Codable, Sendable { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.customFrameworkModuleMapContents = customFrameworkModuleMapContents - self.environment = environment + self.toolchainEnvironment = toolchainEnvironment } let buildConfiguration: BuildConfiguration @@ -48,7 +48,7 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - private(set) var environment: [String: String]? + private(set) var toolchainEnvironment: [String: String]? } public struct ExtraFlags: Hashable, Codable, Sendable { diff --git a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift index 77ef825e..8e7739d8 100644 --- a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift +++ b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift @@ -38,7 +38,7 @@ struct PIFCompiler: Compiler { private func makeToolchain(for sdk: SDK) async throws -> UserToolchain { let toolchainDirPath = try await fetchDefaultToolchainBinPath() - let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath, environment: buildOptions.environment) + let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath, environment: buildOptions.toolchainEnvironment) return try await toolchainGenerator.makeToolChain(sdk: sdk) } diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index 821bca99..ade8c3d4 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -132,7 +132,7 @@ extension Runner { public var enableLibraryEvolution: Bool /// An option indicates use custom modulemaps for distributionb public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy - public var environment: [String: String]? + public var toolchainEnvironment: [String: String]? public init( buildConfiguration: BuildConfiguration = .release, @@ -144,7 +144,7 @@ extension Runner { extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool = false, frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, - environment: [String: String]? = nil + toolchainEnvironment: [String: String]? = nil ) { self.buildConfiguration = buildConfiguration self.platforms = platforms @@ -155,7 +155,7 @@ extension Runner { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.frameworkModuleMapGenerationPolicy = frameworkModuleMapGenerationPolicy - self.environment = environment + self.toolchainEnvironment = toolchainEnvironment } } public struct TargetBuildOptions { @@ -303,7 +303,7 @@ extension Runner.Options.BuildOptions { extraBuildParameters: extraBuildParameters, enableLibraryEvolution: enableLibraryEvolution, customFrameworkModuleMapContents: customFrameworkModuleMapContents, - environment: environment + toolchainEnvironment: toolchainEnvironment ) } @@ -348,7 +348,7 @@ extension Runner.Options.BuildOptions { extraBuildParameters: mergedExtraBuildParameters, enableLibraryEvolution: fetch(\.enableLibraryEvolution, by: \.enableLibraryEvolution), frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy), - environment: environment + toolchainEnvironment: toolchainEnvironment ) } } diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index 3b66f680..b3bb342e 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -37,7 +37,7 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault extraBuildParameters: ["SWIFT_OPTIMIZATION_LEVEL": "-Osize"], enableLibraryEvolution: true, customFrameworkModuleMapContents: Data(customModuleMap.utf8), - environment: [ + toolchainEnvironment: [ "DEVELOPER_DIR": "/Xcode.app/Contents/Developer", "PATH": "/Xcode.app/Contents/Developer:/usr/bin:/bin", ] diff --git a/Tests/ScipioKitTests/RunnerTests.swift b/Tests/ScipioKitTests/RunnerTests.swift index a543be56..ffbce6c2 100644 --- a/Tests/ScipioKitTests/RunnerTests.swift +++ b/Tests/ScipioKitTests/RunnerTests.swift @@ -717,6 +717,6 @@ extension BuildOptions { extraBuildParameters: nil, enableLibraryEvolution: true, customFrameworkModuleMapContents: nil, - environment: nil + toolchainEnvironment: nil ) } From ef8fb172b21d762ba8191d8275c9d6d2d8193b0d Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Wed, 25 Sep 2024 10:25:35 +0200 Subject: [PATCH 19/22] Move environment from build to runner options --- Sources/ScipioKit/BuildOptions.swift | 16 +--------------- .../ScipioKit/Producer/FrameworkProducer.swift | 5 ++++- Sources/ScipioKit/Producer/PIF/PIFCompiler.swift | 7 +++++-- Sources/ScipioKit/Runner.swift | 16 +++++++--------- Tests/ScipioKitTests/CacheSystemTests.swift | 6 +----- Tests/ScipioKitTests/RunnerTests.swift | 3 +-- 6 files changed, 19 insertions(+), 34 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 46c1c106..060570cc 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -4,17 +4,6 @@ import Basics struct BuildOptions: Hashable, Codable, Sendable { - private enum CodingKeys: CodingKey { - case buildConfiguration - case isDebugSymbolsEmbedded - case frameworkType - case sdks - case extraFlags - case extraBuildParameters - case enableLibraryEvolution - case customFrameworkModuleMapContents - } - init( buildConfiguration: BuildConfiguration, isDebugSymbolsEmbedded: Bool, @@ -23,8 +12,7 @@ struct BuildOptions: Hashable, Codable, Sendable { extraFlags: ExtraFlags?, extraBuildParameters: ExtraBuildParameters?, enableLibraryEvolution: Bool, - customFrameworkModuleMapContents: Data?, - toolchainEnvironment: [String: String]? + customFrameworkModuleMapContents: Data? ) { self.buildConfiguration = buildConfiguration self.isDebugSymbolsEmbedded = isDebugSymbolsEmbedded @@ -34,7 +22,6 @@ struct BuildOptions: Hashable, Codable, Sendable { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.customFrameworkModuleMapContents = customFrameworkModuleMapContents - self.toolchainEnvironment = toolchainEnvironment } let buildConfiguration: BuildConfiguration @@ -48,7 +35,6 @@ struct BuildOptions: Hashable, Codable, Sendable { /// - Note: It have to store the actual file contents rather than its path, /// because the cache key should change when the file contents change. let customFrameworkModuleMapContents: Data? - private(set) var toolchainEnvironment: [String: String]? } public struct ExtraFlags: Hashable, Codable, Sendable { diff --git a/Sources/ScipioKit/Producer/FrameworkProducer.swift b/Sources/ScipioKit/Producer/FrameworkProducer.swift index 4cfcf3d1..0b16d578 100644 --- a/Sources/ScipioKit/Producer/FrameworkProducer.swift +++ b/Sources/ScipioKit/Producer/FrameworkProducer.swift @@ -14,6 +14,7 @@ struct FrameworkProducer { private let overwrite: Bool private let outputDir: URL private let fileSystem: any FileSystem + private let toolchainEnvironment: [String: String]? private var cacheStorage: (any CacheStorage)? { switch cacheMode { @@ -51,7 +52,8 @@ struct FrameworkProducer { cacheMode: Runner.Options.CacheMode, overwrite: Bool, outputDir: URL, - fileSystem: any FileSystem = localFileSystem + fileSystem: any FileSystem = localFileSystem, + toolchainEnvironment: [String: String]? = nil ) { self.descriptionPackage = descriptionPackage self.baseBuildOptions = buildOptions @@ -60,6 +62,7 @@ struct FrameworkProducer { self.overwrite = overwrite self.outputDir = outputDir self.fileSystem = fileSystem + self.toolchainEnvironment = toolchainEnvironment } func produce() async throws { diff --git a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift index 8e7739d8..29a95c78 100644 --- a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift +++ b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift @@ -10,6 +10,7 @@ struct PIFCompiler: Compiler { private let fileSystem: any FileSystem private let executor: any Executor private let buildOptionsMatrix: [String: BuildOptions] + private let toolchainEnvironment: [String: String]? private let buildParametersGenerator: BuildParametersGenerator @@ -18,7 +19,8 @@ struct PIFCompiler: Compiler { buildOptions: BuildOptions, buildOptionsMatrix: [String: BuildOptions], fileSystem: any FileSystem = TSCBasic.localFileSystem, - executor: any Executor = ProcessExecutor() + executor: any Executor = ProcessExecutor(), + toolchainEnvironment: [String: String]? = nil ) { self.descriptionPackage = descriptionPackage self.buildOptions = buildOptions @@ -26,6 +28,7 @@ struct PIFCompiler: Compiler { self.fileSystem = fileSystem self.executor = executor self.buildParametersGenerator = .init(buildOptions: buildOptions, fileSystem: fileSystem) + self.toolchainEnvironment = toolchainEnvironment } private func fetchDefaultToolchainBinPath() async throws -> AbsolutePath { @@ -38,7 +41,7 @@ struct PIFCompiler: Compiler { private func makeToolchain(for sdk: SDK) async throws -> UserToolchain { let toolchainDirPath = try await fetchDefaultToolchainBinPath() - let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath, environment: buildOptions.toolchainEnvironment) + let toolchainGenerator = ToolchainGenerator(toolchainDirPath: toolchainDirPath, environment: toolchainEnvironment) return try await toolchainGenerator.makeToolChain(sdk: sdk) } diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index ade8c3d4..0f3b4a70 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -132,7 +132,6 @@ extension Runner { public var enableLibraryEvolution: Bool /// An option indicates use custom modulemaps for distributionb public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy - public var toolchainEnvironment: [String: String]? public init( buildConfiguration: BuildConfiguration = .release, @@ -143,8 +142,7 @@ extension Runner { extraFlags: ExtraFlags? = nil, extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool = false, - frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated, - toolchainEnvironment: [String: String]? = nil + frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy = .autoGenerated ) { self.buildConfiguration = buildConfiguration self.platforms = platforms @@ -155,7 +153,6 @@ extension Runner { self.extraBuildParameters = extraBuildParameters self.enableLibraryEvolution = enableLibraryEvolution self.frameworkModuleMapGenerationPolicy = frameworkModuleMapGenerationPolicy - self.toolchainEnvironment = toolchainEnvironment } } public struct TargetBuildOptions { @@ -240,6 +237,7 @@ extension Runner { public var cacheMode: CacheMode public var overwrite: Bool public var verbose: Bool + public var toolchainEnvironment: [String: String]? public init( baseBuildOptions: BuildOptions = .init(), @@ -247,7 +245,8 @@ extension Runner { shouldOnlyUseVersionsFromResolvedFile: Bool = false, cacheMode: CacheMode = .project, overwrite: Bool = false, - verbose: Bool = false + verbose: Bool = false, + toolchainEnvironment: [String: String]? = nil ) { self.buildOptionsContainer = BuildOptionsContainer( baseBuildOptions: baseBuildOptions, @@ -257,6 +256,7 @@ extension Runner { self.cacheMode = cacheMode self.overwrite = overwrite self.verbose = verbose + self.toolchainEnvironment = toolchainEnvironment } } } @@ -302,8 +302,7 @@ extension Runner.Options.BuildOptions { extraFlags: extraFlags, extraBuildParameters: extraBuildParameters, enableLibraryEvolution: enableLibraryEvolution, - customFrameworkModuleMapContents: customFrameworkModuleMapContents, - toolchainEnvironment: toolchainEnvironment + customFrameworkModuleMapContents: customFrameworkModuleMapContents ) } @@ -347,8 +346,7 @@ extension Runner.Options.BuildOptions { extraFlags: mergedExtraFlags, extraBuildParameters: mergedExtraBuildParameters, enableLibraryEvolution: fetch(\.enableLibraryEvolution, by: \.enableLibraryEvolution), - frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy), - toolchainEnvironment: toolchainEnvironment + frameworkModuleMapGenerationPolicy: fetch(\.frameworkModuleMapGenerationPolicy, by: \.frameworkModuleMapGenerationPolicy) ) } } diff --git a/Tests/ScipioKitTests/CacheSystemTests.swift b/Tests/ScipioKitTests/CacheSystemTests.swift index b3bb342e..dfdcb660 100644 --- a/Tests/ScipioKitTests/CacheSystemTests.swift +++ b/Tests/ScipioKitTests/CacheSystemTests.swift @@ -36,11 +36,7 @@ InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault extraFlags: .init(swiftFlags: ["-D", "SOME_FLAG"]), extraBuildParameters: ["SWIFT_OPTIMIZATION_LEVEL": "-Osize"], enableLibraryEvolution: true, - customFrameworkModuleMapContents: Data(customModuleMap.utf8), - toolchainEnvironment: [ - "DEVELOPER_DIR": "/Xcode.app/Contents/Developer", - "PATH": "/Xcode.app/Contents/Developer:/usr/bin:/bin", - ] + customFrameworkModuleMapContents: Data(customModuleMap.utf8) ), clangVersion: "clang-1400.0.29.102", xcodeVersion: .init(xcodeVersion: "15.4", xcodeBuildVersion: "15F31d") diff --git a/Tests/ScipioKitTests/RunnerTests.swift b/Tests/ScipioKitTests/RunnerTests.swift index ffbce6c2..4bf9b4b1 100644 --- a/Tests/ScipioKitTests/RunnerTests.swift +++ b/Tests/ScipioKitTests/RunnerTests.swift @@ -716,7 +716,6 @@ extension BuildOptions { extraFlags: nil, extraBuildParameters: nil, enableLibraryEvolution: true, - customFrameworkModuleMapContents: nil, - toolchainEnvironment: nil + customFrameworkModuleMapContents: nil ) } From b8adc6c885822ee01c628770700db38b59f80f8d Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Wed, 25 Sep 2024 10:39:04 +0200 Subject: [PATCH 20/22] Environment doesn't need to be hashable anymore --- Sources/ScipioKit/BuildOptions.swift | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Sources/ScipioKit/BuildOptions.swift b/Sources/ScipioKit/BuildOptions.swift index 060570cc..0eee5af2 100644 --- a/Sources/ScipioKit/BuildOptions.swift +++ b/Sources/ScipioKit/BuildOptions.swift @@ -191,15 +191,3 @@ extension ExtraFlags { ) } } - -#if compiler(>=6.0) - -extension Environment: @retroactive Hashable { - public func hash(into hasher: inout Hasher) { - for item in self { - hasher.combine(item.value) - } - } -} - -#endif From 3ca022775a90844da70a6fb61e1062e29fd68408 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Wed, 25 Sep 2024 10:41:42 +0200 Subject: [PATCH 21/22] Remove environment leftovers from TargetBuildOptions --- Sources/ScipioKit/Runner.swift | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Sources/ScipioKit/Runner.swift b/Sources/ScipioKit/Runner.swift index 0f3b4a70..22294061 100644 --- a/Sources/ScipioKit/Runner.swift +++ b/Sources/ScipioKit/Runner.swift @@ -165,7 +165,6 @@ extension Runner { public var extraBuildParameters: [String: String]? public var enableLibraryEvolution: Bool? public var frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy? - public var environment: [String: String]? public init( buildConfiguration: BuildConfiguration? = nil, @@ -176,8 +175,7 @@ extension Runner { extraFlags: ExtraFlags? = nil, extraBuildParameters: [String: String]? = nil, enableLibraryEvolution: Bool? = nil, - frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy? = nil, - environment: [String: String]? = nil + frameworkModuleMapGenerationPolicy: FrameworkModuleMapGenerationPolicy? = nil ) { self.buildConfiguration = buildConfiguration self.platforms = platforms @@ -188,7 +186,6 @@ extension Runner { self.extraFlags = extraFlags self.enableLibraryEvolution = enableLibraryEvolution self.frameworkModuleMapGenerationPolicy = frameworkModuleMapGenerationPolicy - self.environment = environment } } From eaa8f2ca81e812fb41187fe15b425337a0971d94 Mon Sep 17 00:00:00 2001 From: Dima Hutsuliak Date: Wed, 25 Sep 2024 13:18:46 +0200 Subject: [PATCH 22/22] Keep dependencies at end of parameter list --- Sources/ScipioKit/Producer/FrameworkProducer.swift | 6 +++--- Sources/ScipioKit/Producer/PIF/PIFCompiler.swift | 6 +++--- Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Sources/ScipioKit/Producer/FrameworkProducer.swift b/Sources/ScipioKit/Producer/FrameworkProducer.swift index 0b16d578..3b3c7c9f 100644 --- a/Sources/ScipioKit/Producer/FrameworkProducer.swift +++ b/Sources/ScipioKit/Producer/FrameworkProducer.swift @@ -52,8 +52,8 @@ struct FrameworkProducer { cacheMode: Runner.Options.CacheMode, overwrite: Bool, outputDir: URL, - fileSystem: any FileSystem = localFileSystem, - toolchainEnvironment: [String: String]? = nil + toolchainEnvironment: [String: String]? = nil, + fileSystem: any FileSystem = localFileSystem ) { self.descriptionPackage = descriptionPackage self.baseBuildOptions = buildOptions @@ -61,8 +61,8 @@ struct FrameworkProducer { self.cacheMode = cacheMode self.overwrite = overwrite self.outputDir = outputDir - self.fileSystem = fileSystem self.toolchainEnvironment = toolchainEnvironment + self.fileSystem = fileSystem } func produce() async throws { diff --git a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift index 29a95c78..bae94f27 100644 --- a/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift +++ b/Sources/ScipioKit/Producer/PIF/PIFCompiler.swift @@ -18,17 +18,17 @@ struct PIFCompiler: Compiler { descriptionPackage: DescriptionPackage, buildOptions: BuildOptions, buildOptionsMatrix: [String: BuildOptions], + toolchainEnvironment: [String: String]? = nil, fileSystem: any FileSystem = TSCBasic.localFileSystem, - executor: any Executor = ProcessExecutor(), - toolchainEnvironment: [String: String]? = nil + executor: any Executor = ProcessExecutor() ) { self.descriptionPackage = descriptionPackage self.buildOptions = buildOptions self.buildOptionsMatrix = buildOptionsMatrix + self.toolchainEnvironment = toolchainEnvironment self.fileSystem = fileSystem self.executor = executor self.buildParametersGenerator = .init(buildOptions: buildOptions, fileSystem: fileSystem) - self.toolchainEnvironment = toolchainEnvironment } private func fetchDefaultToolchainBinPath() async throws -> AbsolutePath { diff --git a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift index 7d3519e5..6a048093 100644 --- a/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift +++ b/Sources/ScipioKit/Producer/PIF/ToolchainGenerator.swift @@ -11,17 +11,17 @@ import struct Basics.Triple struct ToolchainGenerator { private let toolchainDirPath: AbsolutePath - private let executor: any Executor private let environment: [String: String]? + private let executor: any Executor init( toolchainDirPath: AbsolutePath, - executor: any Executor = ProcessExecutor(), - environment: [String: String]? = nil + environment: [String: String]? = nil, + executor: any Executor = ProcessExecutor() ) { self.toolchainDirPath = toolchainDirPath - self.executor = executor self.environment = environment + self.executor = executor } func makeToolChain(sdk: SDK) async throws -> UserToolchain {