set(GLDOZE_PROFILER_APP_DIR "${CMAKE_BINARY_DIR}/apps/profiler")

add_library(gldoze_profiler MODULE profiler_plugin.cpp gpu_optimizer_model.cpp)
target_link_libraries(gldoze_profiler PRIVATE gldoze_sdk gldoze_desktop_profiler)
set_target_properties(gldoze_profiler PROPERTIES
  LIBRARY_OUTPUT_DIRECTORY "${GLDOZE_PROFILER_APP_DIR}"
  PREFIX "lib"
  OUTPUT_NAME "gldoze_profiler"
  CXX_VISIBILITY_PRESET hidden
  VISIBILITY_INLINES_HIDDEN YES
)

file(MAKE_DIRECTORY "${GLDOZE_PROFILER_APP_DIR}")
configure_file(app.json.in "${GLDOZE_PROFILER_APP_DIR}/app.json" @ONLY)
configure_file("${GLDOZE_REPO_ROOT}/assets/desktop/icons/gltop.svg"
  "${GLDOZE_PROFILER_APP_DIR}/icon.svg" COPYONLY)

install(TARGETS gldoze_profiler
  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/profiler"
  COMPONENT GLDozeDesktop)
install(FILES
  "${GLDOZE_PROFILER_APP_DIR}/app.json"
  "${GLDOZE_PROFILER_APP_DIR}/icon.svg"
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/profiler"
  COMPONENT GLDozeDesktop)

if(BUILD_TESTING)
  add_executable(profiler_plugin_test profiler_plugin_test.cpp)
  target_link_libraries(profiler_plugin_test PRIVATE gldoze_plugin_runtime)
  add_dependencies(profiler_plugin_test gldoze_profiler)
  add_test(NAME profiler_plugin
    COMMAND profiler_plugin_test "${GLDOZE_PROFILER_APP_DIR}/app.json")

  add_executable(gpu_optimizer_model_test
    gpu_optimizer_model_test.cpp gpu_optimizer_model.cpp)
  target_link_libraries(gpu_optimizer_model_test PRIVATE
    gldoze_project_options gldoze_sdk Threads::Threads)
  add_test(NAME gpu_optimizer_model COMMAND gpu_optimizer_model_test)
endif()
