From bd10f7faab067aa0356538ff3f0b8b89d7061999 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Fri, 13 Jun 2025 11:35:09 +0700 Subject: [PATCH] Build action to create universal uv binary --- build/configure/src/main.rs | 2 ++ build/ninja_gen/src/python.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/build/configure/src/main.rs b/build/configure/src/main.rs index 0d9b7f24c..d165f767d 100644 --- a/build/configure/src/main.rs +++ b/build/configure/src/main.rs @@ -19,6 +19,7 @@ use ninja_gen::inputs; use ninja_gen::protobuf::check_proto; use ninja_gen::protobuf::setup_protoc; use ninja_gen::python::setup_uv; +use ninja_gen::python::setup_uv_universal; use ninja_gen::Build; use platform::overriden_python_target_platform; use pylib::build_pylib; @@ -61,6 +62,7 @@ fn main() -> Result<()> { build_and_check_aqt(build)?; if env::var("OFFLINE_BUILD").is_err() { + setup_uv_universal(build)?; build_bundle(build)?; } diff --git a/build/ninja_gen/src/python.rs b/build/ninja_gen/src/python.rs index 481e0944c..f42c3112f 100644 --- a/build/ninja_gen/src/python.rs +++ b/build/ninja_gen/src/python.rs @@ -12,6 +12,7 @@ use crate::archives::download_and_extract; use crate::archives::with_exe; use crate::archives::OnlineArchive; use crate::archives::Platform; +use crate::command::RunCommand; use crate::hash::simple_hash; use crate::input::BuildInput; use crate::inputs; @@ -80,6 +81,16 @@ pub fn setup_uv(build: &mut Build, platform: Platform) -> Result<()> { }; build.add_dependency("uv_binary", uv_binary); + // Our macOS packaging needs access to the x86 binary on ARM. + download_and_extract( + build, + "uv_mac_x86", + uv_archive(Platform::MacX64), + hashmap! { "bin" => [ + with_exe("uv") + ] }, + )?; + Ok(()) } @@ -269,3 +280,20 @@ impl BuildAction for PythonTest { true } } + +pub fn setup_uv_universal(build: &mut Build) -> Result<()> { + build.add_action( + "bundle:uv_universal", + RunCommand { + command: "/usr/bin/lipo", + args: "-create -output $out $arm_bin $x86_bin", + inputs: hashmap! { + "arm_bin" => inputs![":extract:uv:bin"], + "x86_bin" => inputs![":extract:uv_mac_x86:bin"], + }, + outputs: hashmap! { + "out" => vec!["bundle/uv"], + }, + }, + ) +}