Skip to content

Commit 459b0ad

Browse files
authored
Revert "Updates to get executables building and running on windows (#9130)"
This reverts commit a112ab8.
1 parent a112ab8 commit 459b0ad

File tree

8 files changed

+148
-92
lines changed

8 files changed

+148
-92
lines changed

Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,16 +1001,18 @@ extension ProjectModel.BuildSettings {
10011001
mutating func configureDynamicSettings(
10021002
productName: String,
10031003
targetName: String,
1004+
executableName: String,
10041005
packageIdentity: PackageIdentity,
10051006
packageName: String?,
10061007
createDylibForDynamicProducts: Bool,
10071008
installPath: String,
1008-
delegate: PackagePIFBuilder.BuildDelegate,
1009+
delegate: PackagePIFBuilder.BuildDelegate
10091010
) {
10101011
self[.TARGET_NAME] = targetName
1011-
self[.PRODUCT_NAME] = productName
1012+
self[.PRODUCT_NAME] = createDylibForDynamicProducts ? productName : executableName
10121013
self[.PRODUCT_MODULE_NAME] = productName
10131014
self[.PRODUCT_BUNDLE_IDENTIFIER] = "\(packageIdentity).\(productName)".spm_mangledToBundleIdentifier()
1015+
self[.EXECUTABLE_NAME] = executableName
10141016
self[.CLANG_ENABLE_MODULES] = "YES"
10151017
self[.SWIFT_PACKAGE_NAME] = packageName ?? nil
10161018

Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -237,25 +237,31 @@ extension PackagePIFProjectBuilder {
237237
) throws -> (PackagePIFBuilder.ModuleOrProduct, resourceBundleName: String?) {
238238
precondition(sourceModule.isSourceModule)
239239

240+
let pifProductName: String
241+
let executableName: String
240242
let productType: ProjectModel.Target.ProductType
241243

242244
switch desiredModuleType {
243245
case .dynamicLibrary:
244246
// We are re-using this default for dynamic targets as well.
245247
if pifBuilder.createDylibForDynamicProducts {
248+
pifProductName = "lib\(sourceModule.name).dylib"
249+
executableName = pifProductName
246250
productType = .dynamicLibrary
247251
} else {
252+
pifProductName = sourceModule.name + ".framework"
253+
executableName = sourceModule.name
248254
productType = .framework
249255
}
250256

251257
case .staticLibrary, .executable:
252-
#if os(Windows) // Temporary until we get a new productType in swift-build
253-
productType = .staticArchive
254-
#else
258+
pifProductName = "\(sourceModule.name).o"
259+
executableName = pifProductName
255260
productType = .objectFile
256-
#endif
257261

258262
case .macro:
263+
pifProductName = sourceModule.name
264+
executableName = pifProductName
259265
productType = .hostBuildTool
260266
}
261267

@@ -274,8 +280,8 @@ extension PackagePIFProjectBuilder {
274280
ProjectModel.Target(
275281
id: sourceModule.pifTargetGUID(suffix: targetSuffix),
276282
productType: productType,
277-
name: sourceModule.name,
278-
productName: "$(EXECUTABLE_NAME)",
283+
name: "\(sourceModule.name)",
284+
productName: pifProductName,
279285
approvedByUser: approvedByUser
280286
)
281287
}
@@ -401,22 +407,35 @@ extension PackagePIFProjectBuilder {
401407
settings.configureDynamicSettings(
402408
productName: sourceModule.name,
403409
targetName: sourceModule.name,
410+
executableName: executableName,
404411
packageIdentity: package.identity,
405412
packageName: sourceModule.packageName,
406413
createDylibForDynamicProducts: pifBuilder.createDylibForDynamicProducts,
407414
installPath: "/usr/local/lib",
408-
delegate: pifBuilder.delegate,
415+
delegate: pifBuilder.delegate
409416
)
410417
} else {
411418
settings[.TARGET_NAME] = sourceModule.name
412419
settings[.PRODUCT_NAME] = "$(TARGET_NAME)"
413420
settings[.PRODUCT_MODULE_NAME] = sourceModule.c99name
414421
settings[.PRODUCT_BUNDLE_IDENTIFIER] = "\(self.package.identity).\(sourceModule.name)"
415422
.spm_mangledToBundleIdentifier()
423+
settings[.EXECUTABLE_NAME] = executableName
416424
settings[.CLANG_ENABLE_MODULES] = "YES"
417425
settings[.GENERATE_PRELINK_OBJECT_FILE] = "NO"
418426
settings[.STRIP_INSTALLED_PRODUCT] = "NO"
419427

428+
// Macros build as executables, so they need slightly different
429+
// build settings from other module types which build a "*.o".
430+
if desiredModuleType == .macro {
431+
settings[.MACH_O_TYPE] = "mh_execute"
432+
} else {
433+
settings[.MACH_O_TYPE] = "mh_object"
434+
// Disable code coverage linker flags since we're producing .o files.
435+
// Otherwise, we will run into duplicated symbols when there are more than one targets that produce .o
436+
// as their product.
437+
settings[.CLANG_COVERAGE_MAPPING_LINKER_ARGS] = "NO"
438+
}
420439
settings[.SWIFT_PACKAGE_NAME] = sourceModule.packageName
421440

422441
if desiredModuleType == .executable {

Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ extension PackagePIFProjectBuilder {
7878
id: product.pifTargetGUID,
7979
productType: pifProductType,
8080
name: product.targetName(),
81-
productName: "$(EXECUTABLE_NAME)"
81+
productName: product.name
8282
)
8383
}
8484
do {
@@ -116,6 +116,7 @@ extension PackagePIFProjectBuilder {
116116
settings[.PRODUCT_MODULE_NAME] = product.c99name
117117
settings[.PRODUCT_BUNDLE_IDENTIFIER] = "\(self.package.identity).\(product.name)"
118118
.spm_mangledToBundleIdentifier()
119+
settings[.EXECUTABLE_NAME] = product.name
119120
settings[.CLANG_ENABLE_MODULES] = "YES"
120121
settings[.SWIFT_PACKAGE_NAME] = mainModule.packageName
121122

@@ -607,15 +608,35 @@ extension PackagePIFProjectBuilder {
607608

608609
// FIXME: Cleanup this mess with <rdar://56889224>
609610

611+
let pifProductName: String
612+
let executableName: String
610613
let productType: ProjectModel.Target.ProductType
611614

612615
if desiredProductType == .dynamic {
613616
if pifBuilder.createDylibForDynamicProducts {
617+
pifProductName = "lib\(product.name).dylib"
618+
executableName = pifProductName
614619
productType = .dynamicLibrary
615620
} else {
621+
// If a product is explicitly declared dynamic, we preserve its name,
622+
// otherwise we will compute an automatic one.
623+
if product.libraryType == .dynamic {
624+
if let customExecutableName = pifBuilder.delegate
625+
.customExecutableName(product: product.underlying)
626+
{
627+
executableName = customExecutableName
628+
} else {
629+
executableName = product.name
630+
}
631+
} else {
632+
executableName = PackagePIFBuilder.computePackageProductFrameworkName(productName: product.name)
633+
}
634+
pifProductName = "\(executableName).framework"
616635
productType = .framework
617636
}
618637
} else {
638+
pifProductName = "lib\(product.name).a"
639+
executableName = pifProductName
619640
productType = .packageProduct
620641
}
621642

@@ -628,7 +649,7 @@ extension PackagePIFProjectBuilder {
628649
id: product.pifTargetGUID(suffix: targetSuffix),
629650
productType: productType,
630651
name: product.targetName(suffix: targetSuffix),
631-
productName: product.name
652+
productName: pifProductName
632653
)
633654
}
634655
do {
@@ -697,6 +718,7 @@ extension PackagePIFProjectBuilder {
697718
settings.configureDynamicSettings(
698719
productName: product.name,
699720
targetName: product.targetName(),
721+
executableName: executableName,
700722
packageIdentity: package.identity,
701723
packageName: package.identity.c99name,
702724
createDylibForDynamicProducts: pifBuilder.createDylibForDynamicProducts,
@@ -1027,6 +1049,7 @@ extension PackagePIFProjectBuilder {
10271049
settings[.PRODUCT_MODULE_NAME] = moduleName
10281050
settings[.PRODUCT_BUNDLE_IDENTIFIER] = "\(self.package.identity).\(name)"
10291051
.spm_mangledToBundleIdentifier()
1052+
settings[.EXECUTABLE_NAME] = name
10301053
settings[.SKIP_INSTALL] = "NO"
10311054
settings[.SWIFT_VERSION] = "5.0"
10321055
// This should eventually be set universally for all package targets/products.

Sources/SwiftBuildSupport/PackagePIFProjectBuilder.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ struct PackagePIFProjectBuilder {
211211
settings[.PRODUCT_MODULE_NAME] = bundleName
212212
settings[.PRODUCT_BUNDLE_IDENTIFIER] = "\(self.package.identity).\(module.name).resources"
213213
.spm_mangledToBundleIdentifier()
214+
settings[.EXECUTABLE_NAME] = ""
214215
settings[.GENERATE_INFOPLIST_FILE] = "YES"
215216
settings[.PACKAGE_RESOURCE_TARGET_KIND] = "resource"
216217

Sources/SwiftBuildSupport/SwiftBuildSystem.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -727,19 +727,16 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
727727

728728
settings["LIBRARY_SEARCH_PATHS"] = try "$(inherited) \(buildParameters.toolchain.toolchainLibDir.pathString)"
729729
settings["OTHER_CFLAGS"] = (
730-
verboseFlag +
731730
["$(inherited)"]
732731
+ buildParameters.toolchain.extraFlags.cCompilerFlags.map { $0.shellEscaped() }
733732
+ buildParameters.flags.cCompilerFlags.map { $0.shellEscaped() }
734733
).joined(separator: " ")
735734
settings["OTHER_CPLUSPLUSFLAGS"] = (
736-
verboseFlag +
737735
["$(inherited)"]
738736
+ buildParameters.toolchain.extraFlags.cxxCompilerFlags.map { $0.shellEscaped() }
739737
+ buildParameters.flags.cxxCompilerFlags.map { $0.shellEscaped() }
740738
).joined(separator: " ")
741739
settings["OTHER_SWIFT_FLAGS"] = (
742-
verboseFlag +
743740
["$(inherited)"]
744741
+ buildParameters.toolchain.extraFlags.swiftCompilerFlags.map { $0.shellEscaped() }
745742
+ buildParameters.flags.swiftCompilerFlags.map { $0.shellEscaped() }

Tests/CommandsTests/BuildCommandTests.swift

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -554,14 +554,19 @@ struct BuildCommandTestCases {
554554
func nonReachableProductsAndTargetsFunctional(
555555
buildSystem: BuildSystemProvider.Kind,
556556
) async throws {
557-
try await fixture(name: "Miscellaneous/UnreachableTargets") { fixturePath in
558-
let aPath = fixturePath.appending("A")
559-
560-
let result = try await build([], packagePath: aPath, buildSystem: buildSystem)
561-
#expect(!result.binContents.contains("bexec"))
562-
#expect(!result.binContents.contains("BTarget2.build"))
563-
#expect(!result.binContents.contains("cexec"))
564-
#expect(!result.binContents.contains("CTarget.build"))
557+
// skipped on Xcode
558+
try await withKnownIssue {
559+
try await fixture(name: "Miscellaneous/UnreachableTargets") { fixturePath in
560+
let aPath = fixturePath.appending("A")
561+
562+
let result = try await build([], packagePath: aPath, buildSystem: buildSystem)
563+
#expect(!result.binContents.contains("bexec"))
564+
#expect(!result.binContents.contains("BTarget2.build"))
565+
#expect(!result.binContents.contains("cexec"))
566+
#expect(!result.binContents.contains("CTarget.build"))
567+
}
568+
} when: {
569+
buildSystem == .swiftbuild && ProcessInfo.hostOperatingSystem == .windows
565570
}
566571
}
567572

0 commit comments

Comments
 (0)