mirror of
https://github.com/ollama/ollama.git
synced 2026-01-12 00:06:57 +08:00
* WIP - MLX backend with gemma3 * MLX: add cmake and go tag build toggles To build the new MLX backend code: cmake --preset MLX cmake --build --preset MLX --parallel cmake --install build --component MLX go build -tags mlx . Note: the main.go entrypoint for the MLX engine will change in a follow up commit. * add experimental image generation runtime * add experimental image generation runtime * MLX: wire up cuda build for linux * MLX: get dependencies correct and dedup This is still too large for a unified github artifact, but is now "correct" for the mlx_cuda_v13 directory. * fix relative link bug in dedup * Add darwin build and readme * add go build tag for mlx dependent code and wire up build_darwin.sh * lint cleanup * macos: build mlx for x86 This will be CPU only. * cuda build instructions and fix drift from mlx bump * stale comment * Delete agent helper doc * Clean up readme.md * Revise README for tokenizer clarity and details Updated README to clarify tokenizer functionality and removed correctness section. --------- Co-authored-by: jmorganca <jmorganca@gmail.com>
58 lines
2.0 KiB
CMake
58 lines
2.0 KiB
CMake
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)
|