# C A T A L Y S T
# https://magister.ai/catalyst
# Copyright 2020-2026 Magister, LLC

cmake_minimum_required(VERSION 3.24)
project(CatalystExamples LANGUAGES CXX)
find_package(Catalyst CONFIG REQUIRED)
add_custom_target(catalyst_examples)

file(GLOB example_sources CONFIGURE_DEPENDS "[0-9][0-9]-*/main.cc")
foreach(source IN LISTS example_sources)
  get_filename_component(directory "${source}" DIRECTORY)
  get_filename_component(name "${directory}" NAME)
  string(REGEX REPLACE "^[0-9][0-9]-" "" name "${name}")
  add_executable(example-${name} "${source}")
  target_link_libraries(example-${name} PRIVATE Catalyst::Shared)
  catalyst_debug_symbols(example-${name})
  add_dependencies(catalyst_examples example-${name})
  if(name MATCHES "^(drawing|rendering|plotting|compute)$")
    target_link_libraries(example-${name} PRIVATE Catalyst::MacShared)
  endif()
endforeach()

set(kernel "${CMAKE_CURRENT_BINARY_DIR}/scale.metallib")
file(GLOB metal_headers CONFIGURE_DEPENDS "${Catalyst_ROOT}/resources/cosmic/*.metal")
add_custom_command(OUTPUT "${kernel}"
  COMMAND "$<TARGET_FILE:mc-cosmic>" --metallib -o "${kernel}"
    "${CMAKE_CURRENT_SOURCE_DIR}/27-compute/main.cc"
  DEPENDS mc-cosmic "27-compute/main.cc" ${metal_headers}
  VERBATIM)
add_custom_target(example-kernel DEPENDS "${kernel}")
add_dependencies(example-compute example-kernel)
target_compile_definitions(example-compute PRIVATE EXAMPLE_METALLIB="${kernel}")
catalyst_cosmic_directory("${CMAKE_CURRENT_SOURCE_DIR}")
