cmake_minimum_required(VERSION 3.20)
project(CBiTA LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(TRAFFICNET_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Source/DllProj/trafficNet")
set(TRAFFICDRIVER_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Source/ExeDriver/trafficDriver")

add_library(trafficNet STATIC
    "${TRAFFICNET_SOURCE_DIR}/stdafx.cpp"
    "${TRAFFICNET_SOURCE_DIR}/TNM.cpp"
    "${TRAFFICNET_SOURCE_DIR}/TNM_Algorithm.cpp"
    "${TRAFFICNET_SOURCE_DIR}/TNM_EnumIO.cpp"
    "${TRAFFICNET_SOURCE_DIR}/TNM_Net.cpp"
    "${TRAFFICNET_SOURCE_DIR}/TNM_utility.cpp"
)

target_include_directories(trafficNet
    PUBLIC
        "${TRAFFICNET_SOURCE_DIR}"
        "${CMAKE_CURRENT_SOURCE_DIR}/include/randlib"
)

if(MSVC)
    target_compile_definitions(trafficNet PRIVATE
        _TNM_DLL
        NOMINMAX
        _HAS_STD_BYTE=0
        _CRT_SECURE_NO_WARNINGS
    )

    if(EXISTS "${TRAFFICNET_SOURCE_DIR}/stdafx.h")
        target_precompile_headers(trafficNet PRIVATE "${TRAFFICNET_SOURCE_DIR}/stdafx.h")
    endif()
endif()

if(APPLE)
    target_compile_definitions(trafficNet PRIVATE _DARWIN_C_SOURCE)
endif()

target_compile_definitions(trafficNet PUBLIC TNM_EXT_CLASS=)

add_executable(trafficDriver
    "${TRAFFICDRIVER_SOURCE_DIR}/trafficDriver.cpp"
)

target_include_directories(trafficDriver
    PRIVATE
        "${TRAFFICNET_SOURCE_DIR}"
        "${CMAKE_CURRENT_SOURCE_DIR}/include/randlib"
)

target_link_libraries(trafficDriver PRIVATE trafficNet)

target_compile_definitions(trafficDriver PRIVATE TNM_EXT_CLASS=)