cmake_minimum_required(VERSION 3.21 FATAL_ERROR)

project(rocprofiler-systems-causal-example LANGUAGES CXX)

if(ROCPROFSYS_DISABLE_EXAMPLES)
    get_filename_component(_DIR ${CMAKE_CURRENT_LIST_DIR} NAME)

    if(
        ${PROJECT_NAME} IN_LIST ROCPROFSYS_DISABLE_EXAMPLES
        OR ${_DIR} IN_LIST ROCPROFSYS_DISABLE_EXAMPLES
    )
        return()
    endif()
endif()

set(CMAKE_BUILD_TYPE "Release")
find_package(Threads REQUIRED)
if(NOT TARGET rocprofiler-systems::rocprofiler-systems-user-library)
    find_package(rocprofiler-systems REQUIRED COMPONENTS user)
endif()

add_library(causal-interface-library INTERFACE)
target_compile_options(
    causal-interface-library
    INTERFACE -g3 -gdwarf-3 -fno-omit-frame-pointer
)
target_link_libraries(
    causal-interface-library
    INTERFACE Threads::Threads ${CMAKE_DL_LIBS}
)

rocprofiler_systems_causal_example_executable(
    "causal-both"
    SOURCES causal.cpp impl.cpp
    LINK_LIBRARIES causal-interface-library
    DEFINITIONS USE_RNG=1 USE_CPU=1
)

rocprofiler_systems_causal_example_executable(
    "causal-rng"
    SOURCES causal.cpp impl.cpp
    LINK_LIBRARIES causal-interface-library
    DEFINITIONS USE_RNG=1 USE_CPU=0
)

rocprofiler_systems_causal_example_executable(
    "causal-cpu"
    SOURCES causal.cpp impl.cpp
    LINK_LIBRARIES causal-interface-library
    DEFINITIONS USE_RNG=0 USE_CPU=1
)
