cmake_minimum_required(VERSION 3.10.0)

project(test_eu_harmonic)
if(NOT DEFINED CMAKE_CXX_STANDARD)
    set(CMAKE_CXX_STANDARD 11)
endif()
if(NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif()
if(NOT DEFINED MY_ARCHIVE_OUTPUT_DIRECTORY)
    set(MY_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/../lib)
    set(EXAMPLE True)
endif()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${MY_ARCHIVE_OUTPUT_DIRECTORY})
if(MSVC)
    set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
    foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
        string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG_UPPER)
        if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER})
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${MY_ARCHIVE_OUTPUT_DIRECTORY})
        endif()
        if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER})
            set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${MY_ARCHIVE_OUTPUT_DIRECTORY})
        endif()
        if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER})
            set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG_UPPER} ${MY_ARCHIVE_OUTPUT_DIRECTORY})
        endif()
    endforeach()
endif()

function(add_custom_test test_name)
    add_executable(${test_name} ${test_name}.cpp)
    if(WIN32)
        target_link_libraries(${test_name} ${MY_ARCHIVE_OUTPUT_DIRECTORY}/eu_harmonic.lib winmm)
    elseif(UNIX)
        target_link_libraries(${test_name} ${MY_ARCHIVE_OUTPUT_DIRECTORY}/libeu_harmonic.so pthread)
    endif()
    if(NOT DEFINED EXAMPLE)
        add_dependencies(${test_name} eu_harmonic)
    endif()
endfunction()

add_custom_test(test_read)
add_custom_test(test_pp_mode)
add_custom_test(test_pv_mode)
add_custom_test(test_pt_mode)
add_custom_test(test_ip_mode)
add_custom_test(test_csp_mode)
add_custom_test(test_csv_mode)
add_custom_test(test_cst_mode)
add_custom_test(test_loop_pp_mode)
add_custom_test(test_two_device_read)
add_custom_test(test_two_device_ip_mode)
add_custom_test(test_two_device_pp_mode)
add_custom_test(test_pdo)
add_custom_test(test_can)
add_custom_test(test_canfd)
add_custom_test(test_read_canfd)
add_custom_test(test_two_motor_ip_mode)
add_custom_test(test_two_motor_csp_mode)