Skip to content

Commit f681864

Browse files
committed
Add support for testable executables on Windows
This uses the /ALTERNATENAME flag to link.exe, which is roughly equivalent to -alias/--defsym. This has been verified to work in a sample project. See https://devblogs.microsoft.com/oldnewthing/20200731-00/ for more info. Closes #6367
1 parent 0b23073 commit f681864

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

Sources/Build/BuildPlan/BuildPlan.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ extension BuildParameters {
151151
args = ["-alias", "_\(target.c99name)_main", "_main"]
152152
case .elf:
153153
args = ["--defsym", "main=\(target.c99name)_main"]
154+
case .coff:
155+
args = ["/ALTERNATENAME:main=\(target.c99name)_main", "/SUBSYSTEM:CONSOLE"]
154156
default:
155157
return nil
156158
}

Tests/BuildTests/BuildPlanTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3875,7 +3875,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase {
38753875
observabilityScope: observability.topScope
38763876
))
38773877
}
3878-
let supportingTriples: [Basics.Triple] = [.x86_64Linux, .x86_64MacOS]
3878+
let supportingTriples: [Basics.Triple] = [.x86_64Linux, .x86_64MacOS, .x86_64Windows]
38793879
for triple in supportingTriples {
38803880
let result = try await createResult(for: triple)
38813881
let exe = try result.moduleBuildDescription(for: "exe").swift().compileArguments()
@@ -3884,7 +3884,7 @@ class BuildPlanTestCase: BuildSystemProviderTestCase {
38843884
XCTAssertMatch(linkExe, [.contains("exe_main")])
38853885
}
38863886

3887-
let unsupportingTriples: [Basics.Triple] = [.wasi, .windows]
3887+
let unsupportingTriples: [Basics.Triple] = [.wasi]
38883888
for triple in unsupportingTriples {
38893889
let result = try await createResult(for: triple)
38903890
let exe = try result.moduleBuildDescription(for: "exe").swift().compileArguments()

0 commit comments

Comments
 (0)