Skip to content

Commit

Permalink
Fixup merge conflicts.
Browse files Browse the repository at this point in the history
Signed-off-by: furby™ <[email protected]>
  • Loading branch information
furby-tm committed Nov 27, 2024
1 parent 1e482bc commit d11caf7
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,36 @@ enum SwiftPackageManager {
product: product,
buildContext: buildContext
).flatMap { arguments in
let process = Process.create(

let pipe = Pipe()
let process: Process

var xcbeautify: Process?
let xcbeautifyCmd = Process.locate("xcbeautify")
switch xcbeautifyCmd
{
case .success(let cmd):
xcbeautify = Process.create(
cmd,
arguments: [
"--disable-logging"
],
directory: buildContext.packageDirectory,
runSilentlyWhenNotVerbose: false
)
case .failure(_):
#if os(macOS)
let helpMsg = "brew install xcbeautify"
#else
let helpMsg = "mint install cpisciotta/xcbeautify"
#endif
log.warning("""
xcbeautify was not found, for pretty build output please intall it with:\n
\(helpMsg)
""")
}

process = Process.create(
"swift",
arguments: arguments,
directory: buildContext.packageDirectory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,13 @@ enum XcodeBuildManager {
/// Builds the specified product using a Swift package target as an xcodebuild scheme.
/// - Parameters:
/// - product: The product to build.
/// - packageDirectory: The root directory of the package containing the product.
/// - configuration: The build configuration to use.
/// - architectures: The set of architectures to build for.
/// - platform: The platform to build for.
/// - platformVersion: The platform version to build for.
/// - hotReloadingEnabled: Controls whether the hot reloading environment variables
/// are added to the build command or not.
/// - buildContext: The context to build in.
/// - Returns: If an error occurs, returns a failure.
static func build(
product: String,
packageDirectory: URL,
configuration: BuildConfiguration,
architectures: [BuildArchitecture],
platform: Platform,
platformVersion: String,
hotReloadingEnabled: Bool = false
buildContext: SwiftPackageManager.BuildContext
) -> Result<Void, XcodeBuildManagerError> {
log.info("Starting \(configuration.rawValue) build")
log.info("Starting \(buildContext.configuration.rawValue) build")

let pipe = Pipe()
let process: Process
Expand All @@ -42,7 +31,7 @@ enum XcodeBuildManager {
arguments: [
"--disable-logging"
],
directory: packageDirectory,
directory: buildContext.packageDirectory,
runSilentlyWhenNotVerbose: false
)
case .failure(_):
Expand All @@ -57,12 +46,12 @@ enum XcodeBuildManager {
""")
}

let archString = architectures.compactMap({ $0.rawValue }).joined(separator: "_")
let archString = buildContext.architectures.compactMap({ $0.rawValue }).joined(separator: "_")

var additionalArgs: [String] = []
if platform != .macOS {
if buildContext.platform != .macOS {
// retrieving simulators for the -destination argument is only relevant for non-macOS platforms.
guard let simulators = try? SimulatorManager.listAvailableOSSimulators(for: platform).unwrap() else {
guard let simulators = try? SimulatorManager.listAvailableOSSimulators(for: buildContext.platform).unwrap() else {
return .failure(.failedToRunXcodeBuild(
command: "xcodebuild: could not retrieve list of available destinations.",
.nonZeroExitStatus(-1)
Expand All @@ -76,7 +65,7 @@ enum XcodeBuildManager {
destinations.append(
XcodeBuildDestination(
name: simulator.name,
platform: platform.name.replacingOccurrences(of: "Simulator", with: " Simulator"),
platform: buildContext.platform.name.replacingOccurrences(of: "Simulator", with: " Simulator"),
OS: os
)
)
Expand All @@ -88,7 +77,7 @@ enum XcodeBuildManager {

// we only care about matching the specifed platform name.
let forPlatform: (XcodeBuildDestination) -> Bool = { simulator in
return simulator.platform.contains(platform.name.replacingOccurrences(of: "Simulator", with: " Simulator"))
return simulator.platform.contains(buildContext.platform.name.replacingOccurrences(of: "Simulator", with: " Simulator"))
}
// we prefer to ignore iPhone SE models.
let removeBlacklisted: (XcodeBuildDestination) -> Bool = { simulator in
Expand Down Expand Up @@ -127,15 +116,15 @@ enum XcodeBuildManager {
"xcodebuild",
arguments: [
"-scheme", product,
"-configuration", configuration.rawValue.capitalized,
"-configuration", buildContext.configuration.rawValue.capitalized,
"-usePackageSupportBuiltinSCM",
"-derivedDataPath", packageDirectory.appendingPathComponent(".build/\(archString)-apple-\(platform.sdkName)").path
"-derivedDataPath", buildContext.packageDirectory.appendingPathComponent(".build/\(archString)-apple-\(buildContext.platform.sdkName)").path
] + additionalArgs,
directory: packageDirectory,
directory: buildContext.packageDirectory,
runSilentlyWhenNotVerbose: false
)

if hotReloadingEnabled {
if buildContext.hotReloadingEnabled {
process.addEnvironmentVariables([
"SWIFT_BUNDLER_HOT_RELOADING": "1"
])
Expand Down
43 changes: 28 additions & 15 deletions Sources/swift-bundler/Commands/BundleCommand.swift
Original file line number Diff line number Diff line change
Expand Up @@ -244,25 +244,38 @@ struct BundleCommand: AsyncCommand {
)

// Get build output directory
let productsDirectory =
try arguments.productsDirectory
?? SwiftPackageManager.getProductsDirectory(buildContext).unwrap()

// For all apple platforms (not including macOS), we generate xcode
// support, because macOS cannot cross-compile for any of the other
// darwin platforms like it can with linux, and thus we need to use
// xcodebuild to build for these platforms (ex. visionOS, iOS, etc)
if forceUsingXcodeBuild || ![Platform.linux, Platform.macOS].contains(arguments.platform) {
forceUsingXcodeBuild = true
let productsDirectory: URL

if !forceUsingXcodeBuild {
productsDirectory = try arguments.productsDirectory
?? SwiftPackageManager.getProductsDirectory(buildContext).unwrap()
} else {
let archString = architectures.compactMap({ $0.rawValue }).joined(separator: "_")
// for some reason xcodebuild adds a platform suffix like Release-xrsimulator for visionOS
// however; for macOS there is no platform suffix at all.
let platformSuffix = arguments.platform == .macOS ? "" : "-\(arguments.platform.sdkName)"
productsDirectory = arguments.productsDirectory
?? packageDirectory.appendingPathComponent(
".build/\(archString)-apple-\(arguments.platform.sdkName)/Build/Products/\(arguments.buildConfiguration.rawValue.capitalized)\(platformSuffix)"
)
}

// Create build job
let build: () async -> Result<Void, Error> = {
SwiftPackageManager.build(
product: appConfiguration.product,
buildContext: buildContext
).mapError { error in
return error
if forceUsingXcodeBuild {
XcodeBuildManager.build(
product: appConfiguration.product,
buildContext: buildContext
).mapError { error in
return error
}
} else {
SwiftPackageManager.build(
product: appConfiguration.product,
buildContext: buildContext
).mapError { error in
return error
}
}
}

Expand Down

0 comments on commit d11caf7

Please sign in to comment.