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 -----------------------------
|
2024-09-17 03:53:01 +08:00
|
|
|
find_package(
|
|
|
|
Python 3.8
|
|
|
|
COMPONENTS Interpreter Development.Module
|
|
|
|
REQUIRED)
|
2024-04-09 23:50:36 +08:00
|
|
|
execute_process(
|
|
|
|
COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir
|
2024-09-17 03:53:01 +08:00
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
2024-12-18 02:57:54 +08:00
|
|
|
OUTPUT_VARIABLE nanobind_ROOT)
|
2024-04-09 23:50:36 +08:00
|
|
|
find_package(nanobind CONFIG REQUIRED)
|
2023-11-30 02:30:41 +08:00
|
|
|
|
2025-03-07 11:23:38 +08:00
|
|
|
execute_process(
|
|
|
|
COMMAND "${Python_EXECUTABLE}" -m mlx --cmake-dir
|
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
OUTPUT_VARIABLE MLX_ROOT)
|
|
|
|
find_package(MLX CONFIG REQUIRED)
|
|
|
|
|
2023-11-30 02:30:41 +08:00
|
|
|
# ----------------------------- Extensions -----------------------------
|
|
|
|
|
|
|
|
# Add library
|
|
|
|
add_library(mlx_ext)
|
|
|
|
|
|
|
|
# Add sources
|
2024-09-17 03:53:01 +08:00
|
|
|
target_sources(mlx_ext PUBLIC ${CMAKE_CURRENT_LIST_DIR}/axpby/axpby.cpp)
|
2023-11-30 02:30:41 +08:00
|
|
|
|
|
|
|
# Add include headers
|
2024-09-17 03:53:01 +08:00
|
|
|
target_include_directories(mlx_ext PUBLIC ${CMAKE_CURRENT_LIST_DIR})
|
2023-11-30 02:30:41 +08:00
|
|
|
|
|
|
|
# Link to mlx
|
|
|
|
target_link_libraries(mlx_ext PUBLIC mlx)
|
|
|
|
|
|
|
|
# ----------------------------- Metal -----------------------------
|
|
|
|
|
|
|
|
# Build metallib
|
|
|
|
if(MLX_BUILD_METAL)
|
|
|
|
mlx_build_metallib(
|
2024-09-17 03:53:01 +08:00
|
|
|
TARGET
|
2023-11-30 02:30:41 +08:00
|
|
|
mlx_ext_metallib
|
2024-09-17 03:53:01 +08:00
|
|
|
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)
|
2023-11-30 02:30:41 +08:00
|
|
|
|
|
|
|
endif()
|
|
|
|
|
2024-04-09 23:50:36 +08:00
|
|
|
# ----------------------------- Python Bindings -----------------------------
|
|
|
|
nanobind_add_module(
|
|
|
|
_ext
|
2024-09-17 03:53:01 +08:00
|
|
|
NB_STATIC
|
|
|
|
STABLE_ABI
|
|
|
|
LTO
|
|
|
|
NOMINSIZE
|
|
|
|
NB_DOMAIN
|
|
|
|
mlx
|
|
|
|
${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()
|