1010//
1111//===----------------------------------------------------------------------===//
1212import TSCBasic
13+ import SwiftOptions
1314
1415/// Toolchain for Windows.
1516public final class WindowsToolchain : Toolchain {
@@ -21,9 +22,6 @@ public final class WindowsToolchain: Toolchain {
2122 /// The file system to use for queries.
2223 public let fileSystem : FileSystem
2324
24- /// The suffix of executable files.
25- public let executableSuffix = " .exe "
26-
2725 /// Doubles as path cache and point for overriding normal lookup
2826 private var toolPaths = [ Tool: AbsolutePath] ( )
2927
@@ -33,7 +31,7 @@ public final class WindowsToolchain: Toolchain {
3331 case . arm: return " armv7 "
3432 case . x86: return " i386 "
3533 case nil , . x86_64: return " x86_64 "
36- default : fatalError ( " unknown arch \( triple. archName) on Windows " )
34+ default : fatalError ( " unknown arch \( triple. archName) for Windows " )
3735 }
3836 }
3937
@@ -75,9 +73,9 @@ public final class WindowsToolchain: Toolchain {
7573 case . clang:
7674 return try lookup ( executable: " clang " )
7775 case . swiftAutolinkExtract:
78- fatalError ( " Trying to look up \ "swift-autolink-extract \" on Windows " )
76+ return try lookup ( executable : " swift-autolink-extract " )
7977 case . dsymutil:
80- fatalError ( " Trying to look up \" dsymutil \" on Windows " )
78+ return try lookup ( executable : " llvm- dsymutil" )
8179 case . lldb:
8280 return try lookup ( executable: " lldb " )
8381 case . dwarfdump:
@@ -105,3 +103,30 @@ public final class WindowsToolchain: Toolchain {
105103 return " clang_rt. \( sanitizer. libraryName) - \( archName ( for: targetTriple) ) .lib "
106104 }
107105}
106+
107+ extension WindowsToolchain {
108+ public func validateArgs( _ parsedOptions: inout ParsedOptions ,
109+ targetTriple: Triple ,
110+ targetVariantTriple: Triple ? ,
111+ diagnosticsEngine: DiagnosticsEngine ) throws {
112+ // Windows executables should be profiled with ETW, whose support needs to be
113+ // implemented before we can enable the option.
114+ if parsedOptions. hasArgument ( . profileGenerate) {
115+ throw ToolchainValidationError . argumentNotSupported ( " -profile-generate " )
116+ }
117+ if parsedOptions. hasArgument ( . profileUse) {
118+ throw ToolchainValidationError . argumentNotSupported ( " -profile-use= " )
119+ }
120+ }
121+ }
122+
123+ public enum ToolchainValidationError : Error , DiagnosticData {
124+ case argumentNotSupported( String )
125+
126+ public var description : String {
127+ switch self {
128+ case . argumentNotSupported( let argument) :
129+ return " \( argument) is not supported for Windows "
130+ }
131+ }
132+ }
0 commit comments