CMakeLists.txt 4.01 KB
Newer Older
Paul's avatar
Paul committed
1
2
3
4
5
6

cmake_policy(SET CMP0057 NEW)

include(CTest)

find_package(Threads REQUIRED)
Paul's avatar
Paul committed
7
8
9
10
include(ProcessorCount)
ProcessorCount(N)
set(CTEST_PARALLEL_LEVEL ${N} CACHE STRING "CTest parallel level")
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -j ${CTEST_PARALLEL_LEVEL} -C ${CMAKE_CFG_INTDIR})
Paul's avatar
Paul committed
11
12
add_custom_target(tests)

Paul's avatar
Paul committed
13
find_program(MIGRAPH_GDB gdb)
Paul's avatar
Paul committed
14

Paul's avatar
Paul committed
15
16
if(MIGRAPH_GDB)
    set(MIGRAPH_TEST_GDB On CACHE BOOL "")
Paul's avatar
Paul committed
17
else()
Paul's avatar
Paul committed
18
    set(MIGRAPH_TEST_GDB Off CACHE BOOL "")
Paul's avatar
Paul committed
19
endif()
Paul's avatar
Paul committed
20

Paul's avatar
Paul committed
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
set(SKIP_TESTS)

function(add_test_command NAME EXE)
    if(NAME IN_LIST SKIP_TESTS)
        add_test(NAME ${NAME} COMMAND echo skipped)
        set_tests_properties(${NAME} PROPERTIES DISABLED On)
    elseif(WIN32)
        set(WINPATH)
        foreach(PATH ${CMAKE_FIND_ROOT_PATH})
            list(APPEND WINPATH ${PATH}/bin)
        endforeach()
        file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/test_${NAME}.cmd"
            CONTENT "set PATH=${WINPATH};%PATH%
                    %1 ${ARGN}")
        add_test(NAME ${NAME} COMMAND ${WINE_CMD} cmd /c "${CMAKE_CURRENT_BINARY_DIR}/test_${NAME}.cmd" $<TARGET_FILE:${EXE}>)
    else()
Paul's avatar
Paul committed
37
38
        if(MIGRAPH_TEST_GDB)
            # add_test(NAME ${NAME} COMMAND ${MIGRAPH_GDB} 
Paul's avatar
Paul committed
39
40
41
42
43
44
            #     --batch
            #     --return-child-result
            #     -ex "set disable-randomization off"
            #     -ex run
            #     -ex backtrace
            #     --args $<TARGET_FILE:${EXE}> ${ARGN})
Paul's avatar
Paul committed
45
46
47
            set(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/gdb/test_${NAME})
            file(MAKE_DIRECTORY ${TEST_DIR})
            file(GENERATE OUTPUT "${TEST_DIR}/run.cmake"
Paul's avatar
Paul committed
48
                CONTENT "
Paul's avatar
Paul committed
49
50
                # Remove previous core dump
                file(REMOVE ${TEST_DIR}/core)
Paul's avatar
Paul committed
51
                execute_process(COMMAND $<TARGET_FILE:${EXE}> ${ARGN} WORKING_DIRECTORY ${TEST_DIR} RESULT_VARIABLE RESULT)
Paul's avatar
Paul committed
52
53
                if(NOT RESULT EQUAL 0)
                    # TODO: check for core files based on pid when setting /proc/sys/kernel/core_uses_pid
Paul's avatar
Paul committed
54
                    if(EXISTS ${TEST_DIR}/core)
Paul's avatar
Paul committed
55
                        execute_process(COMMAND ${MIGRAPH_GDB} $<TARGET_FILE:${EXE}> ${TEST_DIR}/core -batch -ex bt)
Paul's avatar
Paul committed
56
57
58
59
                    endif()
                    message(FATAL_ERROR \"Test failed\")
                endif()
            ")
Paul's avatar
Paul committed
60
            add_test(NAME ${NAME} COMMAND ${CMAKE_COMMAND} -P "${TEST_DIR}/run.cmake")
Paul's avatar
Paul committed
61
62
63
64
65
66
67
68
        else()
            add_test(NAME ${NAME} COMMAND ${EXE} ${ARGN})
        endif()
    endif()
endfunction()

function(add_test_executable TEST_NAME)
    add_executable (${TEST_NAME} EXCLUDE_FROM_ALL ${ARGN})
Paul's avatar
Paul committed
69
    rocm_clang_tidy_check(${TEST_NAME})
Paul's avatar
Paul committed
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
    target_link_libraries(${TEST_NAME} ${CMAKE_THREAD_LIBS_INIT})
    # Cmake does not add flags correctly for gcc
    if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") 
        set_target_properties(${TEST_NAME} PROPERTIES COMPILE_FLAGS -pthread LINK_FLAGS -pthread)
    endif()
    separate_arguments(MIOPEN_TEST_FLAGS_ARGS UNIX_COMMAND ${MIOPEN_TEST_FLAGS})
    if(MIOPEN_TEST_ALL)
        set(TEST_COMMAND ${TEST_NAME} ${MIOPEN_TEST_FLOAT_ARG} --all ${MIOPEN_TEST_FLAGS_ARGS})
    else()
        set(TEST_COMMAND ${TEST_NAME} ${MIOPEN_TEST_FLOAT_ARG} ${MIOPEN_TEST_FLAGS_ARGS})
    endif()
    add_test_command(${TEST_NAME} ${TEST_COMMAND})
    add_dependencies(tests ${TEST_NAME})
    add_dependencies(check ${TEST_NAME})
    set_tests_properties(${TEST_NAME} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
Paul's avatar
Paul committed
85
    target_link_libraries(${TEST_NAME} migraph migraph_cpu)
Paul's avatar
Paul committed
86
    target_include_directories(${TEST_NAME} PUBLIC include)
Paul's avatar
Paul committed
87
88
89
90
91
92
93
94
endfunction(add_test_executable)

file(GLOB TESTS *.cpp)

foreach(TEST ${TESTS})
    get_filename_component(BASE_NAME ${TEST} NAME_WE)
    add_test_executable(test_${BASE_NAME} ${TEST})
endforeach()
Paul's avatar
Paul committed
95

Paul's avatar
Paul committed
96
if(MIGRAPH_ENABLE_MIOPEN)
Paul's avatar
Paul committed
97
98
99
100
101
102
    # miopen tests
    file(GLOB MIOPEN_TESTS miopen/*.cpp)

    foreach(TEST ${MIOPEN_TESTS})
        get_filename_component(BASE_NAME ${TEST} NAME_WE)
        add_test_executable(test_miopen_${BASE_NAME} ${TEST})
Paul's avatar
Paul committed
103
        target_link_libraries(test_miopen_${BASE_NAME} migraph_miopen)
Paul's avatar
Paul committed
104
105
    endforeach()
endif()