cmake_minimum_required(VERSION 3.21)

project(sand LANGUAGES CXX HIP)

find_package(OpenMP)

find_package(PkgConfig REQUIRED)
pkg_check_modules(LUAJIT REQUIRED luajit)

add_library(sand STATIC
  include/sand/sand.h
  include/sand/type.h
  include/sand/type_builder.h
  include/sand/type_range.h
  include/sand/rule.h
  include/sand/rule_builder.h

  src/type.cpp
  src/type_builder.cpp
  src/type_range.cpp
  src/rule.cpp
  src/rule_builder.cpp

  src/sand.hip
)

target_include_directories(sand PUBLIC include)
set_target_properties(sand PROPERTIES
  CXX_STANDARD 20
  CXX_STANDARD_REQUIRED ON
  POSITION_INDEPENDENT_CODE ON
)

if(OpenMP_FOUND)
  target_link_libraries(sand PRIVATE OpenMP::OpenMP_CXX)
endif()

if(EXISTS third/tracy/CMakeLists.txt)
  add_subdirectory(third/tracy)
  target_link_libraries(sand PUBLIC Tracy::TracyClient)
  if(NOT TRACY_ENABLE)
    target_compile_definitions(sand PUBLIC FrameMark= ZoneScoped=)
  endif()
else()
  target_compile_definitions(sand PUBLIC FrameMark= ZoneScoped=)
endif()

find_package(SDL3 CONFIG REQUIRED)

add_executable(sandtest
  src/main.cpp
)
target_link_libraries(sandtest PRIVATE sand SDL3)
set_target_properties(sandtest PROPERTIES
  CXX_STANDARD 20
  CXX_STANDARD_REQUIRED ON
)
