2024-02-03 03:48:35 +08:00
|
|
|
cmake_minimum_required(VERSION 3.27)
|
2023-11-30 02:30:41 +08:00
|
|
|
|
2024-04-09 23:50:36 +08:00
|
|
|
project(_ext LANGUAGES CXX)
|
2023-11-30 02:30:41 +08:00
|
|
|
|
|
|
|
# ----------------------------- Setup -----------------------------
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
|
|
|
option(BUILD_SHARED_LIBS "Build extensions as a shared library" ON)
|
|
|
|
|
|
|
|
# ----------------------------- Dependencies -----------------------------
|
|
|
|
find_package(MLX CONFIG REQUIRED)
|
2024-04-09 23:50:36 +08:00
|
|
|
find_package(Python 3.8 COMPONENTS Interpreter Development.Module REQUIRED)
|
|
|
|
execute_process(
|
|
|
|
COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE NB_DIR)
|
|
|
|
list(APPEND CMAKE_PREFIX_PATH "${NB_DIR}")
|
|
|
|
find_package(nanobind CONFIG REQUIRED)
|
2023-11-30 02:30:41 +08:00
|
|
|
|
|
|
|
# ----------------------------- Extensions -----------------------------
|
|
|
|
|
|
|
|
# Add library
|
|
|
|
add_library(mlx_ext)
|
|
|
|
|
|
|
|
# Add sources
|
|
|
|
target_sources(
|
|
|
|
mlx_ext
|
|
|
|
PUBLIC
|
|
|
|
${CMAKE_CURRENT_LIST_DIR}/axpby/axpby.cpp
|
|
|
|
)
|
|
|
|
|
|
|
|
# Add include headers
|
|
|
|
target_include_directories(
|
|
|
|
mlx_ext PUBLIC ${CMAKE_CURRENT_LIST_DIR}
|
|
|
|
)
|
|
|
|
|
|
|
|
# Link to mlx
|
|
|
|
target_link_libraries(mlx_ext PUBLIC mlx)
|
|
|
|
|
|
|
|
# ----------------------------- Metal -----------------------------
|
|
|
|
|
|
|
|
# Build metallib
|
|
|
|
if(MLX_BUILD_METAL)
|
|
|
|
mlx_build_metallib(
|
|
|
|
TARGET mlx_ext_metallib
|
|
|
|
TITLE mlx_ext
|
|
|
|
SOURCES ${CMAKE_CURRENT_LIST_DIR}/axpby/axpby.metal
|
|
|
|
INCLUDE_DIRS ${PROJECT_SOURCE_DIR} ${MLX_INCLUDE_DIRS}
|
|
|
|
OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
|
|
|
|
)
|
|
|
|
|
|
|
|
add_dependencies(
|
|
|
|
mlx_ext
|
|
|
|
mlx_ext_metallib
|
|
|
|
)
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
2024-04-09 23:50:36 +08:00
|
|
|
# ----------------------------- Python Bindings -----------------------------
|
|
|
|
nanobind_add_module(
|
|
|
|
_ext
|
|
|
|
NB_STATIC STABLE_ABI LTO NOMINSIZE
|
|
|
|
NB_DOMAIN mlx
|
2023-11-30 02:30:41 +08:00
|
|
|
${CMAKE_CURRENT_LIST_DIR}/bindings.cpp
|
|
|
|
)
|
2024-04-09 23:50:36 +08:00
|
|
|
target_link_libraries(_ext PRIVATE mlx_ext)
|
2023-11-30 02:30:41 +08:00
|
|
|
|
|
|
|
if(BUILD_SHARED_LIBS)
|
2024-04-09 23:50:36 +08:00
|
|
|
target_link_options(_ext PRIVATE -Wl,-rpath,@loader_path)
|
2024-02-03 03:48:35 +08:00
|
|
|
endif()
|