From 651c39cf95efdf057cd62a71cfaaa988c721212e Mon Sep 17 00:00:00 2001 From: Ryan Govostes Date: Sun, 9 Nov 2025 15:10:58 -0800 Subject: [PATCH] Add --rosetta option for arm64 images (#846) `container` automatically enables Rosetta for amd64 containers. This change allows Rosetta to be enabled for arm64 containers by passing the `--rosetta` flag. This allows native containers to benefit from being able to execute the occasional amd64 executable in niche situations, e.g., containers used for cross-compilation. Resolves #391. I considered adding a warning for passing `--rosetta` when it is not necessary, but there wasn't obvious infrastructure for conveying the --- Sources/ContainerClient/Flags.swift | 3 +++ Sources/ContainerClient/Utility.swift | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Sources/ContainerClient/Flags.swift b/Sources/ContainerClient/Flags.swift index 91d50498..939a5504 100644 --- a/Sources/ContainerClient/Flags.swift +++ b/Sources/ContainerClient/Flags.swift @@ -184,6 +184,9 @@ public struct Flags { @Flag(name: [.customLong("rm"), .long], help: "Remove the container after it stops") public var remove = false + @Flag(name: .long, help: "Enable Rosetta in the container") + public var rosetta = false + @Flag(name: .long, help: "Forward SSH agent socket to container") public var ssh = false diff --git a/Sources/ContainerClient/Utility.swift b/Sources/ContainerClient/Utility.swift index ed4fc7e7..9e230f3f 100644 --- a/Sources/ContainerClient/Utility.swift +++ b/Sources/ContainerClient/Utility.swift @@ -213,8 +213,10 @@ public struct Utility { ) } - if Platform.current.architecture == "arm64" && requestedPlatform.architecture == "amd64" { - config.rosetta = true + config.rosetta = management.rosetta || (Platform.current.architecture == "arm64" && requestedPlatform.architecture == "amd64") + + if management.rosetta && Platform.current.architecture != "arm64" { + throw ContainerizationError(.unsupported, message: "--rosetta flag requires an arm64 host") } config.labels = try Parser.labels(management.labels)