CMakeLists.txt 6.81 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
include(ProcessorCount)
ProcessorCount(N)
set(CTEST_PARALLEL_LEVEL ${N} CACHE STRING "CTest parallel level")
Paul Fultz II's avatar
Paul Fultz II committed
10
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -j ${CTEST_PARALLEL_LEVEL} -C ${CMAKE_CFG_INTDIR} --timeout 5000)
Paul's avatar
Paul committed
11
12
add_custom_target(tests)

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

Paul's avatar
Paul committed
15
16
if(MIGRAPHX_GDB)
    set(MIGRAPHX_TEST_GDB On CACHE BOOL "")
Paul's avatar
Paul committed
17
else()
Paul's avatar
Paul committed
18
    set(MIGRAPHX_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(MIGRAPHX_TEST_GDB)
            # add_test(NAME ${NAME} COMMAND ${MIGRAPHX_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
            set(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/gdb/test_${NAME})
            file(MAKE_DIRECTORY ${TEST_DIR})
47
48
49
            if (NOT EXISTS ${TEST_DIR})
                message(FATAL_ERROR "Failed to create test directory: ${TEST_DIR}")
            endif()
Paul's avatar
Paul committed
50
            file(GENERATE OUTPUT "${TEST_DIR}/run.cmake"
Paul's avatar
Paul committed
51
                CONTENT "
Paul's avatar
Paul committed
52
53
                # Remove previous core dump
                file(REMOVE ${TEST_DIR}/core)
Paul's avatar
Paul committed
54
                execute_process(COMMAND $<TARGET_FILE:${EXE}> ${ARGN} WORKING_DIRECTORY ${TEST_DIR} RESULT_VARIABLE RESULT)
Paul's avatar
Paul committed
55
56
                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
57
                    if(EXISTS ${TEST_DIR}/core)
58
59
                        set(\$ENV{UBSAN_OPTIONS} print_stacktrace=1)
                        set(\$ENV{ASAN_OPTIONS} print_stacktrace=1)
Paul's avatar
Paul committed
60
                        execute_process(COMMAND ${MIGRAPHX_GDB} $<TARGET_FILE:${EXE}> ${TEST_DIR}/core -batch -ex bt)
Paul's avatar
Paul committed
61
62
63
64
                    endif()
                    message(FATAL_ERROR \"Test failed\")
                endif()
            ")
Paul's avatar
Paul committed
65
            add_test(NAME ${NAME} COMMAND ${CMAKE_COMMAND} -P "${TEST_DIR}/run.cmake")
Paul's avatar
Paul committed
66
67
68
69
        else()
            add_test(NAME ${NAME} COMMAND ${EXE} ${ARGN})
        endif()
    endif()
70
    set_tests_properties(${NAME} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
Paul's avatar
Paul committed
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
endfunction()

function(add_test_executable TEST_NAME)
    add_executable (${TEST_NAME} EXCLUDE_FROM_ALL ${ARGN})
    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})
89
    target_link_libraries(${TEST_NAME} migraphx migraphx_ref migraphx_onnx)
Paul's avatar
Paul committed
90
    target_include_directories(${TEST_NAME} PUBLIC include)
Paul's avatar
Paul committed
91
92
93
94
95
96
97
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})
Paul's avatar
Paul committed
98
    rocm_clang_tidy_check(test_${BASE_NAME})
Paul's avatar
Paul committed
99
endforeach()
Paul's avatar
Paul committed
100

Paul's avatar
Paul committed
101
if(MIGRAPHX_ENABLE_GPU)
Paul's avatar
Paul committed
102
103
    # gpu tests
    file(GLOB GPU_TESTS gpu/*.cpp)
Paul's avatar
Paul committed
104

Paul's avatar
Paul committed
105
    foreach(TEST ${GPU_TESTS})
Paul's avatar
Paul committed
106
        get_filename_component(BASE_NAME ${TEST} NAME_WE)
Paul's avatar
Paul committed
107
        add_test_executable(test_gpu_${BASE_NAME} ${TEST})
Paul's avatar
Paul committed
108
        rocm_clang_tidy_check(test_gpu_${BASE_NAME})
Paul's avatar
Paul committed
109
110
111
112
        set_tests_properties(test_gpu_${BASE_NAME} PROPERTIES 
            COST 10 
            RESOURCE_LOCK gpu
        )
Paul's avatar
Paul committed
113
        target_link_libraries(test_gpu_${BASE_NAME} migraphx_gpu)
Paul's avatar
Paul committed
114
115
    endforeach()
endif()
Scott Thornton's avatar
Scott Thornton committed
116

Paul's avatar
Paul committed
117
# Onnx test
Paul's avatar
Paul committed
118
set(TEST_ONNX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/onnx)
119
120
121
file (GLOB ONNX_TESTS ${TEST_ONNX_DIR}/*.cpp)
foreach(ONNX_TEST ${ONNX_TESTS})
    get_filename_component(BASE_NAME ${ONNX_TEST} NAME_WE)
122
123
124
    set(TEST_NAME test_${BASE_NAME})
    add_executable(${TEST_NAME} ${TES_ONNX_DIR}/${ONNX_TEST})
    rocm_clang_tidy_check(${TEST_NAME})
125
    target_link_libraries(${TEST_NAME} migraphx_onnx migraphx_ref)
126
127
128
129
    target_include_directories(${TEST_NAME} PUBLIC include)
    add_test(NAME ${TEST_NAME} COMMAND $<TARGET_FILE:${TEST_NAME}> WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/onnx) 
    add_dependencies(tests ${TEST_NAME})
    add_dependencies(check ${TEST_NAME})
130
endforeach()
Paul's avatar
Paul committed
131

132
133
134
# tf test
add_executable(test_tf tf/tf_test.cpp)
rocm_clang_tidy_check(test_tf)
135
target_link_libraries(test_tf migraphx_tf migraphx_ref)
136
137
138
139
140
target_include_directories(test_tf PUBLIC include)
add_test(NAME test_tf COMMAND $<TARGET_FILE:test_tf> WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tf) 
add_dependencies(tests test_tf)
add_dependencies(check test_tf)

Paul Fultz II's avatar
Paul Fultz II committed
141
add_subdirectory(api)
142
add_subdirectory(verify)
143
if(MIGRAPHX_ENABLE_PYTHON)
Paul's avatar
Paul committed
144
add_subdirectory(py)
145
endif()
Paul's avatar
Paul committed
146

Paul's avatar
Paul committed
147
148
149
150
151
152
153
154
155
156
157
158
159
160
function(test_header NAME HEADER)

    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${NAME}.cpp 
        "#include <${HEADER}>\nint main() {}\n"
    )
    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${NAME}.cpp 
        "#include <${HEADER}>\n"
    )
    add_test_executable(${NAME}
        ${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${NAME}.cpp 
        ${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${NAME}.cpp
    )
endfunction()

161
162
163
164
165
166
167
168
function(test_headers PREFIX)
    file(GLOB HEADERS ${ARGN})

    foreach(HEADER ${HEADERS})
        file(RELATIVE_PATH HEADER_REL ${CMAKE_SOURCE_DIR} ${HEADER})
        string(MAKE_C_IDENTIFIER ${HEADER_REL} TEST_NAME)
        get_filename_component(BASE_NAME ${HEADER} NAME_WE)
        test_header(header_${TEST_NAME} ${PREFIX}/${BASE_NAME}.hpp)
Paul's avatar
Paul committed
169
        if(MIGRAPHX_ENABLE_GPU)
Paul's avatar
Paul committed
170
            target_link_libraries(header_${TEST_NAME} migraphx_gpu)
171
172
173
        endif()
    endforeach()
endfunction()
Paul's avatar
Paul committed
174

Paul's avatar
Paul committed
175
test_headers(migraphx ${CMAKE_SOURCE_DIR}/src/include/migraphx/*.hpp)
176
test_headers(migraphx/ref ${CMAKE_SOURCE_DIR}/src/targets/ref/include/migraphx/ref/*.hpp)
Paul's avatar
Paul committed
177
if(MIGRAPHX_ENABLE_GPU)
Paul's avatar
Paul committed
178
test_headers(migraphx/gpu ${CMAKE_SOURCE_DIR}/src/targets/gpu/include/migraphx/gpu/*.hpp)
179
endif()