Skip to content

Commit 051a4de

Browse files
committed
Updates to get executables building and running on windows
- the also changes the source modules on Windows to be a static lib since pre-linked .o is not supported.
1 parent 2e81f26 commit 051a4de

File tree

5 files changed

+27
-56
lines changed

5 files changed

+27
-56
lines changed

Sources/SwiftBuildSupport/PackagePIFBuilder+Helpers.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,18 +1000,16 @@ extension ProjectModel.BuildSettings {
10001000
mutating func configureDynamicSettings(
10011001
productName: String,
10021002
targetName: String,
1003-
executableName: String,
10041003
packageIdentity: PackageIdentity,
10051004
packageName: String?,
10061005
createDylibForDynamicProducts: Bool,
10071006
installPath: String,
1008-
delegate: PackagePIFBuilder.BuildDelegate
1007+
delegate: PackagePIFBuilder.BuildDelegate,
10091008
) {
10101009
self[.TARGET_NAME] = targetName
1011-
self[.PRODUCT_NAME] = createDylibForDynamicProducts ? productName : executableName
1010+
self[.PRODUCT_NAME] = productName
10121011
self[.PRODUCT_MODULE_NAME] = productName
10131012
self[.PRODUCT_BUNDLE_IDENTIFIER] = "\(packageIdentity).\(productName)".spm_mangledToBundleIdentifier()
1014-
self[.EXECUTABLE_NAME] = executableName
10151013
self[.CLANG_ENABLE_MODULES] = "YES"
10161014
self[.SWIFT_PACKAGE_NAME] = packageName ?? nil
10171015

Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Modules.swift

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

240-
let pifProductName: String
241-
let executableName: String
242240
let productType: ProjectModel.Target.ProductType
243241

244242
switch desiredModuleType {
245243
case .dynamicLibrary:
246244
// We are re-using this default for dynamic targets as well.
247245
if pifBuilder.createDylibForDynamicProducts {
248-
pifProductName = "lib\(sourceModule.name).dylib"
249-
executableName = pifProductName
250246
productType = .dynamicLibrary
251247
} else {
252-
pifProductName = sourceModule.name + ".framework"
253-
executableName = sourceModule.name
254248
productType = .framework
255249
}
256250

257251
case .staticLibrary, .executable:
258-
pifProductName = "\(sourceModule.name).o"
259-
executableName = pifProductName
252+
#if os(Windows)
253+
productType = .staticArchive
254+
#else
260255
productType = .objectFile
256+
#endif
261257

262258
case .macro:
263-
pifProductName = sourceModule.name
264-
executableName = pifProductName
265259
productType = .hostBuildTool
266260
}
267261

@@ -280,8 +274,8 @@ extension PackagePIFProjectBuilder {
280274
ProjectModel.Target(
281275
id: sourceModule.pifTargetGUID(suffix: targetSuffix),
282276
productType: productType,
283-
name: "\(sourceModule.name)",
284-
productName: pifProductName,
277+
name: sourceModule.name,
278+
productName: "$(EXECUTABLE_NAME)",
285279
approvedByUser: approvedByUser
286280
)
287281
}
@@ -407,35 +401,22 @@ extension PackagePIFProjectBuilder {
407401
settings.configureDynamicSettings(
408402
productName: sourceModule.name,
409403
targetName: sourceModule.name,
410-
executableName: executableName,
411404
packageIdentity: package.identity,
412405
packageName: sourceModule.packageName,
413406
createDylibForDynamicProducts: pifBuilder.createDylibForDynamicProducts,
414407
installPath: "/usr/local/lib",
415-
delegate: pifBuilder.delegate
408+
delegate: pifBuilder.delegate,
416409
)
417410
} else {
418411
settings[.TARGET_NAME] = sourceModule.name
419412
settings[.PRODUCT_NAME] = "$(TARGET_NAME)"
420413
settings[.PRODUCT_MODULE_NAME] = sourceModule.c99name
421414
settings[.PRODUCT_BUNDLE_IDENTIFIER] = "\(self.package.identity).\(sourceModule.name)"
422415
.spm_mangledToBundleIdentifier()
423-
settings[.EXECUTABLE_NAME] = executableName
424416
settings[.CLANG_ENABLE_MODULES] = "YES"
425417
settings[.GENERATE_PRELINK_OBJECT_FILE] = "NO"
426418
settings[.STRIP_INSTALLED_PRODUCT] = "NO"
427419

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-
}
439420
settings[.SWIFT_PACKAGE_NAME] = sourceModule.packageName
440421

441422
if desiredModuleType == .executable {

Sources/SwiftBuildSupport/PackagePIFProjectBuilder+Products.swift

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ extension PackagePIFProjectBuilder {
7777
id: product.pifTargetGUID,
7878
productType: pifProductType,
7979
name: product.targetName(),
80-
productName: product.name
80+
productName: "$(EXECUTABLE_NAME)"
8181
)
8282
}
8383
do {
@@ -115,7 +115,6 @@ extension PackagePIFProjectBuilder {
115115
settings[.PRODUCT_MODULE_NAME] = product.c99name
116116
settings[.PRODUCT_BUNDLE_IDENTIFIER] = "\(self.package.identity).\(product.name)"
117117
.spm_mangledToBundleIdentifier()
118-
settings[.EXECUTABLE_NAME] = product.name
119118
settings[.CLANG_ENABLE_MODULES] = "YES"
120119
settings[.SWIFT_PACKAGE_NAME] = mainModule.packageName
121120

@@ -595,35 +594,15 @@ extension PackagePIFProjectBuilder {
595594

596595
// FIXME: Cleanup this mess with <rdar://56889224>
597596

598-
let pifProductName: String
599-
let executableName: String
600597
let productType: ProjectModel.Target.ProductType
601598

602599
if desiredProductType == .dynamic {
603600
if pifBuilder.createDylibForDynamicProducts {
604-
pifProductName = "lib\(product.name).dylib"
605-
executableName = pifProductName
606601
productType = .dynamicLibrary
607602
} else {
608-
// If a product is explicitly declared dynamic, we preserve its name,
609-
// otherwise we will compute an automatic one.
610-
if product.libraryType == .dynamic {
611-
if let customExecutableName = pifBuilder.delegate
612-
.customExecutableName(product: product.underlying)
613-
{
614-
executableName = customExecutableName
615-
} else {
616-
executableName = product.name
617-
}
618-
} else {
619-
executableName = PackagePIFBuilder.computePackageProductFrameworkName(productName: product.name)
620-
}
621-
pifProductName = "\(executableName).framework"
622603
productType = .framework
623604
}
624605
} else {
625-
pifProductName = "lib\(product.name).a"
626-
executableName = pifProductName
627606
productType = .packageProduct
628607
}
629608

@@ -636,7 +615,7 @@ extension PackagePIFProjectBuilder {
636615
id: product.pifTargetGUID(suffix: targetSuffix),
637616
productType: productType,
638617
name: product.targetName(suffix: targetSuffix),
639-
productName: pifProductName
618+
productName: product.name
640619
)
641620
}
642621
do {
@@ -705,7 +684,6 @@ extension PackagePIFProjectBuilder {
705684
settings.configureDynamicSettings(
706685
productName: product.name,
707686
targetName: product.targetName(),
708-
executableName: executableName,
709687
packageIdentity: package.identity,
710688
packageName: package.identity.c99name,
711689
createDylibForDynamicProducts: pifBuilder.createDylibForDynamicProducts,
@@ -1036,7 +1014,6 @@ extension PackagePIFProjectBuilder {
10361014
settings[.PRODUCT_MODULE_NAME] = moduleName
10371015
settings[.PRODUCT_BUNDLE_IDENTIFIER] = "\(self.package.identity).\(name)"
10381016
.spm_mangledToBundleIdentifier()
1039-
settings[.EXECUTABLE_NAME] = name
10401017
settings[.SKIP_INSTALL] = "NO"
10411018
settings[.SWIFT_VERSION] = "5.0"
10421019
// This should eventually be set universally for all package targets/products.

Sources/SwiftBuildSupport/PackagePIFProjectBuilder.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,6 @@ 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] = ""
215214
settings[.GENERATE_INFOPLIST_FILE] = "YES"
216215
settings[.PACKAGE_RESOURCE_TARGET_KIND] = "resource"
217216

Sources/SwiftBuildSupport/SwiftBuildSystem.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,9 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
394394
do {
395395
let workspaceInfo = try await session.workspaceInfo()
396396

397+
#if !canImport(Darwin)
398+
try await session.setUserPreferences(enableDebugActivityLogs: self.logLevel.isVeryVerbose, enableBuildDebugging: self.logLevel.isVeryVerbose, enableBuildSystemCaching: false, activityTextShorteningLevel: 0, usePerConfigurationBuildLocations: nil, allowsExternalToolExecution: false)
399+
#endif
397400
configuredTargets = try [pifTargetName].map { targetName in
398401
// TODO we filter dynamic targets until Swift Build doesn't give them to us anymore
399402
let infos = workspaceInfo.targetInfos.filter { $0.targetName == targetName && !TargetSuffix.dynamic.hasSuffix(id: GUID($0.guid)) }
@@ -678,16 +681,19 @@ public final class SwiftBuildSystem: SPMBuildCore.BuildSystem {
678681

679682
settings["LIBRARY_SEARCH_PATHS"] = try "$(inherited) \(buildParameters.toolchain.toolchainLibDir.pathString)"
680683
settings["OTHER_CFLAGS"] = (
684+
verboseFlag +
681685
["$(inherited)"]
682686
+ buildParameters.toolchain.extraFlags.cCompilerFlags.map { $0.shellEscaped() }
683687
+ buildParameters.flags.cCompilerFlags.map { $0.shellEscaped() }
684688
).joined(separator: " ")
685689
settings["OTHER_CPLUSPLUSFLAGS"] = (
690+
verboseFlag +
686691
["$(inherited)"]
687692
+ buildParameters.toolchain.extraFlags.cxxCompilerFlags.map { $0.shellEscaped() }
688693
+ buildParameters.flags.cxxCompilerFlags.map { $0.shellEscaped() }
689694
).joined(separator: " ")
690695
settings["OTHER_SWIFT_FLAGS"] = (
696+
verboseFlag +
691697
["$(inherited)"]
692698
+ buildParameters.toolchain.extraFlags.swiftCompilerFlags.map { $0.shellEscaped() }
693699
+ buildParameters.flags.swiftCompilerFlags.map { $0.shellEscaped() }
@@ -924,6 +930,16 @@ extension String {
924930
}
925931
}
926932

933+
extension Basics.Diagnostic.Severity {
934+
var isVerbose: Bool {
935+
self <= .info
936+
}
937+
938+
var isVeryVerbose: Bool {
939+
self <= .debug
940+
}
941+
}
942+
927943
fileprivate extension SwiftBuild.SwiftBuildMessage.DiagnosticInfo.Location {
928944
var userDescription: String? {
929945
switch self {

0 commit comments

Comments
 (0)