diff --git a/cmake/toolchains/darwin-arm64.cmake b/cmake/toolchains/darwin-arm64.cmake new file mode 100644 index 0000000000..688ccb3eaf --- /dev/null +++ b/cmake/toolchains/darwin-arm64.cmake @@ -0,0 +1,24 @@ +# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +# ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +# ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +# ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +# ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +# ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +# ┃ Copyright (c) 2017, the Perspective Authors. ┃ +# ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +# ┃ This file is part of the Perspective library, distributed under the terms ┃ +# ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +# Minimal toolchain file to ensure that Arrow's bundled dependency builds use +# the correct architecture for Mac builds. + +# (Arrow does not as of Oct 2024 pass on CMAKE_OSX_ARCHITECTURES to its +# dependencies if it is set, but does pass on a toolchain file) + +set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Target architecture for Mac builds") +# Arrow uses this to choose a `-march` flag +set(CMAKE_SYSTEM_PROCESSOR "arm64") +# Prevent cmake from overwriting CMAKE_SYSTEM_PROCESSOR +# https://github.com/apache/arrow/issues/44448#issuecomment-2418649378 +set(CMAKE_SYSTEM_NAME "Darwin") diff --git a/cmake/toolchains/darwin-x86_64.cmake b/cmake/toolchains/darwin-x86_64.cmake new file mode 100644 index 0000000000..0d26dda283 --- /dev/null +++ b/cmake/toolchains/darwin-x86_64.cmake @@ -0,0 +1,24 @@ +# ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +# ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +# ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +# ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +# ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +# ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +# ┃ Copyright (c) 2017, the Perspective Authors. ┃ +# ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +# ┃ This file is part of the Perspective library, distributed under the terms ┃ +# ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +# ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +# Minimal toolchain file to ensure that Arrow's bundled dependency builds use +# the correct architecture for Mac builds. + +# (Arrow does not as of Oct 2024 pass on CMAKE_OSX_ARCHITECTURES to its +# dependencies if it is set, but does pass on a toolchain file) + +set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Target architecture for Mac builds") +# Arrow uses this to choose a `-march` flag +set(CMAKE_SYSTEM_PROCESSOR "x86_64") +# Prevent cmake from overwriting CMAKE_SYSTEM_PROCESSOR +# https://github.com/apache/arrow/issues/44448#issuecomment-2418649378 +set(CMAKE_SYSTEM_NAME "Darwin") diff --git a/rust/perspective-server/build/psp.rs b/rust/perspective-server/build/psp.rs index d22a29c0ba..3ac67fc1ae 100644 --- a/rust/perspective-server/build/psp.rs +++ b/rust/perspective-server/build/psp.rs @@ -26,10 +26,24 @@ pub fn cmake_build() -> Result, std::io::Error> { let profile = std::env::var("PROFILE").unwrap(); dst.always_configure(true); dst.define("CMAKE_BUILD_TYPE", profile.as_str()); - if std::env::var("PSP_ARCH").as_deref() == Ok("x86_64") { - dst.define("CMAKE_OSX_ARCHITECTURES", "x86_64"); - } else if std::env::var("PSP_ARCH").as_deref() == Ok("arm64") { - dst.define("CMAKE_OSX_ARCHITECTURES", "arm64"); + + if cfg!(target_os = "macos") { + // Set CMAKE_OSX_ARCHITECTURES et al. for Mac builds. Arrow does not forward on + // CMAKE_OSX_ARCHITECTURES and but it does forward on a + // CMAKE_TOOLCHAIN_FILE. In Conda builds, the environment sets + // `CMAKE_ARGS` up with various toolchain arguments. This block may need + // to be patched out or adjusted for Conda. + let toolchain_file = match std::env::var("PSP_ARCH").as_deref() { + Ok("x86_64") => "./cmake/toolchains/darwin-x86_64.cmake", + Ok("aarch64") => "./cmake/toolchains/darwin-arm64.cmake", + arch @ Ok(_) | arch @ Err(_) => { + panic!("Unknown PSP_ARCH value: {:?}", arch) + }, + }; + dst.define( + "CMAKE_TOOLCHAIN_FILE", + std::fs::canonicalize(toolchain_file).expect("Failed to canonicalize toolchain file."), + ); } if std::env::var("TARGET")