Fork for thermals request add-json-schema-dpeq
0

Configure Feed

Select the types of activity you want to include in your feed.

vmlx-swift / CMakeLists.txt
4.1 kB 116 lines
1cmake_minimum_required(VERSION 3.16) 2project(MLXSwift LANGUAGES C CXX Swift) 3 4# ----------------------------- Setup ----------------------------- 5# note: 1:1 mirror of MLX configs 6 7set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") 8set(CMAKE_CXX_STANDARD 17) 9set(CMAKE_CXX_STANDARD_REQUIRED ON) 10set(CMAKE_POSITION_INDEPENDENT_CODE ON) 11set(CMAKE_INSTALL_MESSAGE NEVER) 12set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 13 14# ----------------------------- Configuration ----------------------------- 15# note: mirrors a subset of MLX options exactly (1:1 mapping) 16 17option(MLX_BUILD_EXAMPLES "Build examples for mlx" ON) 18option(MLX_BUILD_METAL "Build metal backend" ON) 19option(MLX_BUILD_CUDA "Build cuda backend" OFF) 20 21# ----------------------------- Lib ----------------------------- 22 23include(FetchContent) 24# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24: 25if(POLICY CMP0135) 26 cmake_policy(SET CMP0135 NEW) 27endif() 28 29# mlx-c 30FetchContent_Declare( 31 mlx-c 32 GIT_REPOSITORY "https://github.com/ml-explore/mlx-c.git" 33 GIT_TAG "v0.6.0") 34FetchContent_MakeAvailable(mlx-c) 35 36# swift-numerics 37set(swift_numerics_patch git apply 38 ${CMAKE_CURRENT_SOURCE_DIR}/cmake/swift-numerics.patch) 39FetchContent_Declare( 40 swift-numerics 41 GIT_REPOSITORY "https://github.com/apple/swift-numerics.git" 42 GIT_TAG "1.0.2" 43 PATCH_COMMAND ${swift_numerics_patch} || true) 44FetchContent_MakeAvailable(swift-numerics) 45 46# MLX package 47if(MLX_BUILD_CUDA) 48 find_package(CUDAToolkit REQUIRED) 49 include(${cudnn_frontend_SOURCE_DIR}/cmake/cuDNN.cmake) 50 message(STATUS "Patching 'mlxc' target to add public CUDA dependencies.") 51 target_link_libraries( 52 mlxc 53 PUBLIC CUDA::cudart 54 CUDA::cublasLt # Promoted from PRIVATE, required by mlx 55 CUDA::nvrtc # Promoted from PRIVATE, required by mlx 56 CUDA::cuda_driver # Promoted from PRIVATE, required by mlx 57 CUDNN::cudnn_all # Promoted from PRIVATE, required by mlx 58 ) 59endif() 60file(GLOB MLX-src ${CMAKE_CURRENT_LIST_DIR}/Source/MLX/*.swift) 61 62if(NOT MLX_BUILD_METAL) 63 list(REMOVE_ITEM MLX-src ${CMAKE_CURRENT_LIST_DIR}/Source/MLX/GPU+Metal.swift 64 ${CMAKE_CURRENT_LIST_DIR}/Source/MLX/MLXArray+Metal.swift) 65endif() 66 67add_library(MLX STATIC ${MLX-src}) 68target_include_directories(MLX 69 PUBLIC ${CMAKE_CURRENT_LIST_DIR}/Source/Cmlx/include) 70# Note: mlxc is target name exported by mlx-c 71target_link_libraries(MLX PUBLIC mlxc Numerics) 72target_compile_options(MLX PRIVATE -package-name MLX) 73 74# MLXRandom package 75file(GLOB MLXRandom-src ${CMAKE_CURRENT_LIST_DIR}/Source/MLXRandom/*.swift) 76add_library(MLXRandom STATIC ${MLXRandom-src}) 77target_link_libraries(MLXRandom PRIVATE MLX) 78 79# MLXFast package 80file(GLOB MLXFast-src ${CMAKE_CURRENT_LIST_DIR}/Source/MLXFast/*.swift) 81add_library(MLXFast STATIC ${MLXFast-src}) 82target_link_libraries(MLXFast PRIVATE MLX) 83 84# MLXNN package 85file(GLOB MLXNN-src ${CMAKE_CURRENT_LIST_DIR}/Source/MLXNN/*.swift) 86add_library(MLXNN STATIC ${MLXNN-src}) 87target_link_libraries(MLXNN PRIVATE MLX MLXRandom MLXFast) 88 89# MLXOptimizers package 90file(GLOB MLXOptimizers-src 91 ${CMAKE_CURRENT_LIST_DIR}/Source/MLXOptimizers/*.swift) 92add_library(MLXOptimizers STATIC ${MLXOptimizers-src}) 93target_link_libraries(MLXOptimizers PRIVATE MLX MLXNN) 94 95# MLXFFT package 96file(GLOB MLXFFT-src ${CMAKE_CURRENT_LIST_DIR}/Source/MLXFFT/*.swift) 97add_library(MLXFFT STATIC ${MLXFFT-src}) 98target_link_libraries(MLXFFT PRIVATE MLX) 99 100# MLXLinalg package 101file(GLOB MLXLinalg-src ${CMAKE_CURRENT_LIST_DIR}/Source/MLXLinalg/*.swift) 102add_library(MLXLinalg STATIC ${MLXLinalg-src}) 103target_link_libraries(MLXLinalg PRIVATE MLX) 104 105# Examples 106if(MLX_BUILD_EXAMPLES) 107 add_executable(example1 108 ${CMAKE_CURRENT_LIST_DIR}/Source/Examples/Example1.swift) 109 target_link_libraries(example1 PRIVATE MLX) 110 target_compile_options(example1 PRIVATE -parse-as-library) 111 112 add_executable(tutorial 113 ${CMAKE_CURRENT_LIST_DIR}/Source/Examples/Tutorial.swift) 114 target_link_libraries(tutorial PRIVATE MLX) 115 target_compile_options(tutorial PRIVATE -parse-as-library) 116endif()