include(FetchContent) set(MLX_C_BUILD_EXAMPLES OFF) set(MLX_BUILD_GGUF OFF) set(MLX_BUILD_SAFETENSORS ON) function(set_target_output_directory _target) if(TARGET ${_target}) set_target_properties(${_target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${OLLAMA_BUILD_DIR} LIBRARY_OUTPUT_DIRECTORY ${OLLAMA_BUILD_DIR} ARCHIVE_OUTPUT_DIRECTORY ${OLLAMA_BUILD_DIR} ) endif() endfunction() # Check for Metal support (macOS only) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") execute_process( COMMAND zsh "-c" "echo \"__METAL_VERSION__\" | xcrun -sdk macosx metal ${XCRUN_FLAGS} -E -x metal -P - | tail -1 | tr -d '\n'" OUTPUT_VARIABLE MLX_METAL_VERSION COMMAND_ERROR_IS_FATAL ANY) if(NOT MLX_METAL_VERSION) message(STATUS "`xcrun metal` error. Setting MLX_BUILD_METAL=OFF") set(MLX_BUILD_METAL OFF) endif() else() # On Linux, disable Metal backend message(STATUS "Non-macOS platform detected. Setting MLX_BUILD_METAL=OFF") set(MLX_BUILD_METAL OFF) endif() # Map CMAKE_CUDA_ARCHITECTURES to MLX_CUDA_ARCHITECTURES if not explicitly set if(NOT MLX_CUDA_ARCHITECTURES AND CMAKE_CUDA_ARCHITECTURES) set(MLX_CUDA_ARCHITECTURES ${CMAKE_CUDA_ARCHITECTURES}) message(STATUS "Using CMAKE_CUDA_ARCHITECTURES for MLX: ${MLX_CUDA_ARCHITECTURES}") endif() # Enable CUDA backend if CUDA architectures are specified and CUDA compiler is available if(MLX_CUDA_ARCHITECTURES AND CMAKE_CUDA_COMPILER) set(MLX_BUILD_CUDA ON CACHE BOOL "Build CUDA backend for MLX" FORCE) message(STATUS "Enabling MLX CUDA backend with architectures: ${MLX_CUDA_ARCHITECTURES}") elseif(MLX_CUDA_ARCHITECTURES) message(WARNING "MLX_CUDA_ARCHITECTURES specified but CUDA compiler not found, CUDA backend will be disabled") endif() FetchContent_Declare( mlx-c GIT_REPOSITORY "https://github.com/ml-explore/mlx-c.git" GIT_TAG v0.4.1) FetchContent_MakeAvailable(mlx-c) set_target_output_directory(mlx) set_target_output_directory(mlxc)