cmake_minimum_required(VERSION 3.24)
project(NimbyKotlinMod LANGUAGES CXX)
find_package(NimbyRailsFranceSDK 0.8.0 CONFIG REQUIRED)
if(NOT NRF_MODULE_NAME OR NOT NRF_KOTLIN_LIBRARY)
  message(FATAL_ERROR "SDK maintainers: set NRF_MODULE_NAME and NRF_KOTLIN_LIBRARY. Mod authors use the fr.nimbyrails.mod Gradle plugin.")
endif()
add_library(kotlin_mod SHARED adapter.cpp)
target_compile_features(kotlin_mod PRIVATE cxx_std_20)
target_link_libraries(kotlin_mod PRIVATE NimbyRailsFranceSDK::Mod)
target_compile_definitions(kotlin_mod PRIVATE NIMBY_KOTLIN_LIBRARY="${NRF_KOTLIN_LIBRARY}")
set_target_properties(kotlin_mod PROPERTIES PREFIX "" OUTPUT_NAME "${NRF_MODULE_NAME}"
    RUNTIME_OUTPUT_DIRECTORY "${NRF_OUTPUT_DIRECTORY}" LIBRARY_OUTPUT_DIRECTORY "${NRF_OUTPUT_DIRECTORY}")
if(MINGW)
  target_link_options(kotlin_mod PRIVATE -static-libgcc -static-libstdc++)
endif()
add_custom_command(TARGET kotlin_mod POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different
  ${NimbyRailsFranceSDK_RUNTIME_FILES} "${NRF_OUTPUT_DIRECTORY}" COMMAND_EXPAND_LISTS)
enable_testing()
add_executable(kotlin_loader_test loader_test.cpp)
target_link_libraries(kotlin_loader_test PRIVATE NimbyRailsFranceSDK::SDK)
target_link_libraries(kotlin_loader_test PRIVATE ${CMAKE_DL_LIBS})
target_compile_features(kotlin_loader_test PRIVATE cxx_std_20)
target_compile_definitions(kotlin_loader_test PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN NIMBY_KOTLIN_LIBRARY="${NRF_KOTLIN_LIBRARY}")
set_target_properties(kotlin_loader_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${NRF_OUTPUT_DIRECTORY}")
if(MINGW)
  target_link_options(kotlin_loader_test PRIVATE -static-libgcc -static-libstdc++)
endif()
add_test(NAME kotlin_loader_lifecycle COMMAND kotlin_loader_test "$<TARGET_FILE:kotlin_mod>")
add_executable(nrf_kotlin_inspect inspect.cpp adapter.cpp)
target_link_libraries(nrf_kotlin_inspect PRIVATE NimbyRailsFranceSDK::Mod)
target_compile_features(nrf_kotlin_inspect PRIVATE cxx_std_20)
target_compile_definitions(nrf_kotlin_inspect PRIVATE NIMBY_KOTLIN_LIBRARY="${NRF_KOTLIN_LIBRARY}")
set_target_properties(nrf_kotlin_inspect PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${NRF_OUTPUT_DIRECTORY}")
if(MINGW)
  target_link_options(nrf_kotlin_inspect PRIVATE -static-libgcc -static-libstdc++)
endif()
