mirror of
https://github.com/ml-explore/mlx.git
synced 2025-06-25 01:41:17 +08:00
Use osx deployment target to pick Metal version (#1595)
* choose metal based on deployment target rather than system version * nit * unused compile def
This commit is contained in:
parent
073076ac7d
commit
9d7fa6b8e6
@ -89,25 +89,32 @@ elseif(MLX_BUILD_METAL)
|
|||||||
# Throw an error if xcrun not found
|
# Throw an error if xcrun not found
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND zsh "-c" "/usr/bin/xcrun -sdk macosx --show-sdk-version"
|
COMMAND zsh "-c" "/usr/bin/xcrun -sdk macosx --show-sdk-version"
|
||||||
OUTPUT_VARIABLE MACOS_VERSION COMMAND_ERROR_IS_FATAL ANY)
|
OUTPUT_VARIABLE MACOS_SDK_VERSION COMMAND_ERROR_IS_FATAL ANY)
|
||||||
|
|
||||||
if(${MACOS_VERSION} LESS 14.0)
|
if(${MACOS_SDK_VERSION} LESS 14.0)
|
||||||
message(
|
message(
|
||||||
FATAL_ERROR
|
FATAL_ERROR
|
||||||
"MLX requires macOS SDK >= 14.0 to be built with MLX_BUILD_METAL=ON")
|
"MLX requires macOS SDK >= 14.0 to be built with MLX_BUILD_METAL=ON")
|
||||||
endif()
|
endif()
|
||||||
message(STATUS "Building with SDK for macOS version ${MACOS_VERSION}")
|
message(STATUS "Building with macOS SDK version ${MACOS_SDK_VERSION}")
|
||||||
|
|
||||||
set(METAL_CPP_URL
|
set(METAL_CPP_URL
|
||||||
https://developer.apple.com/metal/cpp/files/metal-cpp_macOS15_iOS18-beta.zip
|
https://developer.apple.com/metal/cpp/files/metal-cpp_macOS15_iOS18-beta.zip
|
||||||
)
|
)
|
||||||
# Get the metal version
|
# Get the metal version. The mapping is maintained in section 1.6.10 of the
|
||||||
execute_process(
|
# Metal Shading Language Specification.
|
||||||
COMMAND
|
# https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf
|
||||||
zsh "-c"
|
if(${CMAKE_OSX_DEPLOYMENT_TARGET} GREATER_EQUAL 15.0)
|
||||||
"echo \"__METAL_VERSION__\" | xcrun -sdk macosx metal -E -x metal -P - | tail -1 | tr -d '\n'"
|
set(MLX_METAL_VERSION "3.2")
|
||||||
OUTPUT_VARIABLE MLX_METAL_VERSION COMMAND_ERROR_IS_FATAL ANY)
|
elseif(${CMAKE_OSX_DEPLOYMENT_TARGET} GREATER_EQUAL 14.0)
|
||||||
|
set(MLX_METAL_VERSION "3.1")
|
||||||
|
elseif(${CMAKE_OSX_DEPLOYMENT_TARGET} GREATER_EQUAL 13.5)
|
||||||
|
set(MLX_METAL_VERSION "3.0")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "MLX requires macOS 13.5 or higher to build.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "METAL VERSION" ${MLX_METAL_VERSION})
|
||||||
FetchContent_Declare(metal_cpp URL ${METAL_CPP_URL})
|
FetchContent_Declare(metal_cpp URL ${METAL_CPP_URL})
|
||||||
|
|
||||||
FetchContent_MakeAvailable(metal_cpp)
|
FetchContent_MakeAvailable(metal_cpp)
|
||||||
@ -115,8 +122,6 @@ elseif(MLX_BUILD_METAL)
|
|||||||
mlx PUBLIC $<BUILD_INTERFACE:${metal_cpp_SOURCE_DIR}>
|
mlx PUBLIC $<BUILD_INTERFACE:${metal_cpp_SOURCE_DIR}>
|
||||||
$<INSTALL_INTERFACE:include/metal_cpp>)
|
$<INSTALL_INTERFACE:include/metal_cpp>)
|
||||||
target_link_libraries(mlx PUBLIC ${METAL_LIB} ${FOUNDATION_LIB} ${QUARTZ_LIB})
|
target_link_libraries(mlx PUBLIC ${METAL_LIB} ${FOUNDATION_LIB} ${QUARTZ_LIB})
|
||||||
|
|
||||||
add_compile_definitions("MLX_METAL_VERSION=${MLX_METAL_VERSION}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MLX_BUILD_CPU)
|
if(MLX_BUILD_CPU)
|
||||||
|
@ -14,7 +14,7 @@ function(make_jit_source SRC_FILE)
|
|||||||
COMMAND
|
COMMAND
|
||||||
/bin/bash ${CMAKE_CURRENT_SOURCE_DIR}/make_compiled_preamble.sh
|
/bin/bash ${CMAKE_CURRENT_SOURCE_DIR}/make_compiled_preamble.sh
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/jit ${CMAKE_C_COMPILER} ${PROJECT_SOURCE_DIR}
|
${CMAKE_CURRENT_BINARY_DIR}/jit ${CMAKE_C_COMPILER} ${PROJECT_SOURCE_DIR}
|
||||||
${SRC_FILE} "-DMLX_METAL_VERSION=${MLX_METAL_VERSION}"
|
${SRC_FILE}
|
||||||
DEPENDS make_compiled_preamble.sh kernels/${SRC_FILE}.h ${ARGN})
|
DEPENDS make_compiled_preamble.sh kernels/${SRC_FILE}.h ${ARGN})
|
||||||
add_custom_target(${SRC_NAME} DEPENDS jit/${SRC_NAME}.cpp)
|
add_custom_target(${SRC_NAME} DEPENDS jit/${SRC_NAME}.cpp)
|
||||||
add_dependencies(mlx ${SRC_NAME})
|
add_dependencies(mlx ${SRC_NAME})
|
||||||
|
Loading…
Reference in New Issue
Block a user