cmake_minimum_required(VERSION 3.21)

# set the project name
project(controllerdetector VERSION 1.0 LANGUAGES CXX)

option(USE_SHARED_ILG "Create with shared ILGuard otherwise static" ON)
option(USE_PKGCONFIG "Use PkgConfig to connect the library" OFF)
# Обнаруживать утечки памяти, переполнение стека и кучи
option(BUILD_WITH_ASAN "Build with address sanitizer" $<$<CONFIG:Debug>:ON>$<$<CONFIG:Release>:OFF>)

# add the executable
add_executable(${PROJECT_NAME} 
    ${PROJECT_SOURCE_DIR}/main.cpp
    ../ilg_cpp_helpers.cpp)

# Find and link library
# find_library(ILGUARD NAMES ilguard PATHS ${CMAKE_BINARY_DIR})
if(USE_PKGCONFIG)
    if(PROJECT_IS_TOP_LEVEL)
        find_package(PkgConfig REQUIRED)

        if(USE_SHARED_ILG)
            pkg_check_modules(ILGUARD REQUIRED IMPORTED_TARGET ilguard)
        else()
            # pkg_check_modules(ILGUARD STATIC REQUIRED IMPORTED_TARGET ilguard)
            # Включаем режим статики для pkg_check_modules
            set(old_static ${PKG_CONFIG_ARGN})
            set(PKG_CONFIG_ARGN "--static") # Добавляет флаг --static ко всем вызовам
            pkg_check_modules(ILGUARD REQUIRED IMPORTED_TARGET ilguard)
            # Возвращаем настройки обратно
            set(PKG_CONFIG_ARGN ${old_static})
        endif(USE_SHARED_ILG)
    endif(PROJECT_IS_TOP_LEVEL)
    target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::ILGUARD)
else()
    if(PROJECT_IS_TOP_LEVEL)
        find_package(ilguard REQUIRED)
    endif()
    target_link_libraries(${PROJECT_NAME} ilguard::ilguard)
endif(USE_PKGCONFIG)

target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:DEBUG>:_DEBUG>)
if(NOT USE_SHARED_ILG)
    target_compile_definitions(${PROJECT_NAME} PRIVATE ILG_STATIC_DEFINE)
endif()

if(BUILD_WITH_ASAN)
    target_compile_options(${PROJECT_NAME} PUBLIC 
        -fsanitize=address
        -fno-omit-frame-pointer)
    target_link_options(${PROJECT_NAME} PUBLIC 
        -fsanitize=address)
endif(BUILD_WITH_ASAN)
