Make TreeArtifactOutputs optional based on a config setting.
PiperOrigin-RevId: 244714749
diff --git a/src/TulsiGenerator/BazelBuildSettingsFeatures.swift b/src/TulsiGenerator/BazelBuildSettingsFeatures.swift
index 443e8f9..11e95d4 100644
--- a/src/TulsiGenerator/BazelBuildSettingsFeatures.swift
+++ b/src/TulsiGenerator/BazelBuildSettingsFeatures.swift
@@ -56,6 +56,9 @@
if options[.SwiftForcesdSYMs].commonValueAsBool ?? true {
features.insert(.SwiftForcesdSYMs)
}
+ if options[.TreeArtifactOutputs].commonValueAsBool ?? true {
+ features.insert(.TreeArtifactOutputs)
+ }
return features
}
}
diff --git a/src/TulsiGenerator/BazelSettingsProvider.swift b/src/TulsiGenerator/BazelSettingsProvider.swift
index d730f09..efd0ed9 100644
--- a/src/TulsiGenerator/BazelSettingsProvider.swift
+++ b/src/TulsiGenerator/BazelSettingsProvider.swift
@@ -34,6 +34,12 @@
/// See https://forums.swift.org/t/improving-swift-lldb-support-for-path-remappings/22694.
case SwiftForcesdSYMs
+ /// Build using tree artifact outputs (--define=apple.experimental.tree_artifact_outputs=1).
+ /// Should only be disabled if it causes errors.
+ /// Known issues:
+ /// - Bundles with spaces in the name
+ case TreeArtifactOutputs
+
/// TODO(b/111928007): Remove this and/or BazelSettingFeature once DebugPathNormalization is
/// supported by all builds.
public var stringValue: String {
@@ -42,6 +48,8 @@
return "DebugPathNormalization"
case .SwiftForcesdSYMs:
return "SwiftForcesdSYMs"
+ case .TreeArtifactOutputs:
+ return "TreeArtifactOutputs"
}
}
@@ -61,6 +69,8 @@
return true
case .SwiftForcesdSYMs:
return true
+ case .TreeArtifactOutputs:
+ return true
}
}
@@ -70,6 +80,8 @@
return true
case .SwiftForcesdSYMs:
return false
+ case .TreeArtifactOutputs:
+ return true
}
}
@@ -83,6 +95,7 @@
switch self {
case .DebugPathNormalization: return ["--features=debug_prefix_map_pwd_is_dot"]
case .SwiftForcesdSYMs: return ["--apple_generate_dsym"]
+ case .TreeArtifactOutputs: return ["--define=apple.experimental.tree_artifact_outputs=1"]
}
}
@@ -122,7 +135,6 @@
static let tulsiCommonNonCacheableFlags = BazelFlags(build: [
"--define=apple.add_debugger_entitlement=1",
"--define=apple.propagate_embedded_extra_outputs=1",
- "--define=apple.experimental.tree_artifact_outputs=1",
])
/// Cache-able flags added by Tulsi for builds.
diff --git a/src/TulsiGenerator/TulsiOptionSet.swift b/src/TulsiGenerator/TulsiOptionSet.swift
index cdf972b..8642bad 100644
--- a/src/TulsiGenerator/TulsiOptionSet.swift
+++ b/src/TulsiGenerator/TulsiOptionSet.swift
@@ -34,6 +34,10 @@
SuppressSwiftUpdateCheck,
// Whether or not containing a Swift dependency forces dSYM generation (used for debugging).
SwiftForcesdSYMs,
+ // Whether or not to use tree artifact outputs. Should only be disabled if it causes errors.
+ // Known issues:
+ // - Bundles with spaces in the name
+ TreeArtifactOutputs,
// The path from a config file to its associated workspace root.
WorkspaceRootPath,
@@ -318,6 +322,7 @@
addBoolOption(.ProjectPrioritizesSwift, .Generic, false)
addBoolOption(.UseArm64_32, .Generic, false)
addBoolOption(.SwiftForcesdSYMs, .Generic, true)
+ addBoolOption(.TreeArtifactOutputs, .Generic, true)
let defaultIdentifier = PlatformConfiguration.defaultConfiguration.identifier
let platformCPUIdentifiers = PlatformConfiguration.allValidConfigurations.map { $0.identifier }
diff --git a/src/TulsiGenerator/en.lproj/Options.strings b/src/TulsiGenerator/en.lproj/Options.strings
index 15242aa..83b0594 100644
--- a/src/TulsiGenerator/en.lproj/Options.strings
+++ b/src/TulsiGenerator/en.lproj/Options.strings
@@ -55,6 +55,7 @@
"PostBuildPhaseRunScript_DESC" = "Build phase run script that runs after the bazel_build.py script (i.e. `exec ${PATH_TO_SCRIPT}')";
"SwiftForcesdSYMs" = "Swift code dependency enables dSYMs (required for debugging).";
+"TreeArtifactOutputs" = "Enable tree artifact outputs (--define=apple.experimental.tree_artifact_outputs=1). Disable if you're having issues.";
"SuppressSwiftUpdateCheck" = "Suppress Xcode Swift update check";
"SuppressSwiftUpdateCheck_DESC" = "Suppresses Xcode's update notification for projects containing Swift code. This asserts that the Swift code is at least version 2.1.";