diff --git a/CMakeLists.txt b/CMakeLists.txt index feb7ce5ebb..d2736d3067 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ option(MLX_BUILD_SAFETENSORS "Include support for safetensors format" ON) option(MLX_BUILD_PYTHON_STUBS "Build stub files for python bindings" ON) option(MLX_METAL_JIT "Use JIT compilation for Metal kernels" OFF) option(MLX_USE_CCACHE "Use CCache for compilation cache when available" ON) +option(MLX_EXPORT_ALL_SYMBOLS "Export all symbols in the library" OFF) option(BUILD_SHARED_LIBS "Build mlx as a shared library" OFF) option(USE_SYSTEM_FMT "Use system's provided fmt library" OFF) option(USE_ASAN "Enable AddressSanitizer (ASan)" OFF) diff --git a/examples/extensions/CMakeLists.txt b/examples/extensions/CMakeLists.txt index eedc3a7dab..5aa4e931c7 100644 --- a/examples/extensions/CMakeLists.txt +++ b/examples/extensions/CMakeLists.txt @@ -10,15 +10,23 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) option(BUILD_SHARED_LIBS "Build extensions as a shared library" ON) # ----------------------------- Dependencies ----------------------------- + +include(FetchContent) + +# Avoid warning about DOWNLOAD_EXTRACT_TIMESTAMP in CMake 3.24: +cmake_policy(SET CMP0135 NEW) + find_package( - Python 3.8 + Python 3.10 COMPONENTS Interpreter Development.Module REQUIRED) -execute_process( - COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir - OUTPUT_STRIP_TRAILING_WHITESPACE - OUTPUT_VARIABLE nanobind_ROOT) -find_package(nanobind CONFIG REQUIRED) +FetchContent_Declare( + nanobind + GIT_REPOSITORY https://github.com/wjakob/nanobind.git + GIT_TAG v2.15.0 + GIT_SHALLOW TRUE + EXCLUDE_FROM_ALL) +FetchContent_MakeAvailable(nanobind) execute_process( COMMAND "${Python_EXECUTABLE}" -m mlx --cmake-dir diff --git a/examples/extensions/pyproject.toml b/examples/extensions/pyproject.toml index 560a58bc28..2386c9ec46 100644 --- a/examples/extensions/pyproject.toml +++ b/examples/extensions/pyproject.toml @@ -2,7 +2,6 @@ requires = [ "setuptools>=42", "cmake>=3.25", - "mlx>=0.18.0", - "nanobind==2.15.0", + "mlx>=0.31.2", ] build-backend = "setuptools.build_meta" diff --git a/examples/extensions/requirements.txt b/examples/extensions/requirements.txt index 917d125eea..41dce3ca7c 100644 --- a/examples/extensions/requirements.txt +++ b/examples/extensions/requirements.txt @@ -1,4 +1,3 @@ setuptools>=42 cmake>=3.25 mlx>=0.31.2 -nanobind==2.15.0 diff --git a/mlx/CMakeLists.txt b/mlx/CMakeLists.txt index 0df4f42349..889a9a1200 100644 --- a/mlx/CMakeLists.txt +++ b/mlx/CMakeLists.txt @@ -27,11 +27,13 @@ target_include_directories(mlx_version PRIVATE ${PROJECT_SOURCE_DIR}) target_link_libraries(mlx PRIVATE $) # Do not export symbols by default. -set_target_properties( - mlx mlx_version - PROPERTIES VISIBILITY_INLINES_HIDDEN ON - CXX_VISIBILITY_PRESET hidden - CUDA_VISIBILITY_PRESET hidden) +if(NOT MLX_EXPORT_ALL_SYMBOLS) + set_target_properties( + mlx mlx_version + PROPERTIES VISIBILITY_INLINES_HIDDEN ON + CXX_VISIBILITY_PRESET hidden + CUDA_VISIBILITY_PRESET hidden) +endif() # Define MLX_EXPORT for shared libraries, MLX_STATIC for static libraries. set_target_properties(mlx PROPERTIES DEFINE_SYMBOL MLX_EXPORT)