cmake_minimum_required(VERSION 3.25)
project(mlx_median_range_audit LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(NOT APPLE)
  message(FATAL_ERROR "This reproduction entry point is validated on macOS arm64 only.")
endif()
add_subdirectory("${MLX_SOURCE_DIR}" mlx-build)
set(original_ops "${CMAKE_BINARY_DIR}/mlx-build/CMakeFiles/mlx.dir/mlx/ops.cpp.o")
set(candidate_ops "${CMAKE_BINARY_DIR}/candidate-ops.o")
set_source_files_properties("${candidate_ops}" "${original_ops}"
  PROPERTIES EXTERNAL_OBJECT TRUE GENERATED TRUE)
foreach(probe minimal grid controls)
  foreach(variant baseline candidate mutation)
    add_executable(median_${probe}_${variant} "${CMAKE_CURRENT_LIST_DIR}/${probe}.cpp")
    if(variant STREQUAL "candidate")
      target_sources(median_${probe}_${variant} PRIVATE "${candidate_ops}")
    elseif(variant STREQUAL "mutation")
      target_sources(median_${probe}_${variant} PRIVATE "${original_ops}")
    endif()
    target_link_libraries(median_${probe}_${variant} PRIVATE mlx)
  endforeach()
endforeach()
