From 29542cecf14ff0d2905f98774f2669cd9ca3c3b1 Mon Sep 17 00:00:00 2001 From: Jagrit Digani Date: Wed, 26 Aug 2026 16:56:55 +0100 Subject: [PATCH 1/2] Add a CMake option to allow all symbols to be exported --- CMakeLists.txt | 1 + mlx/CMakeLists.txt | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) 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/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) From a3eb8ede7e48bbda77936cf302a04be18e16f439 Mon Sep 17 00:00:00 2001 From: Jagrit Digani Date: Wed, 26 Aug 2026 16:58:20 +0100 Subject: [PATCH 2/2] Update example extension to latest MLX --- examples/extensions/CMakeLists.txt | 20 ++++++++++++++------ examples/extensions/pyproject.toml | 3 +-- examples/extensions/requirements.txt | 1 - 3 files changed, 15 insertions(+), 9 deletions(-) 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