CMakeLists.txt 9.84 KB
Newer Older
Umang Yadav's avatar
Umang Yadav committed
1
# ####################################################################################
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# The MIT License (MIT)
#
# Copyright (c) 2015-2022 Advanced Micro Devices, Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
Umang Yadav's avatar
Umang Yadav committed
23
# ####################################################################################
Paul's avatar
Paul committed
24
25
26

cmake_policy(SET CMP0057 NEW)

Paul's avatar
Paul committed
27
28
29
include(ProcessorCount)
ProcessorCount(N)
set(CTEST_PARALLEL_LEVEL ${N} CACHE STRING "CTest parallel level")
Paul Fultz II's avatar
Paul Fultz II committed
30
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
31
32
add_custom_target(tests)

Artur Wojcik's avatar
Artur Wojcik committed
33
if(WIN32)
Paul's avatar
Paul committed
34
    set(MIGRAPHX_TEST_GDB Off CACHE BOOL "")
Artur Wojcik's avatar
Artur Wojcik committed
35
36
37
38
39
40
41
else()
    find_program(MIGRAPHX_GDB gdb)
    if(MIGRAPHX_GDB)
        set(MIGRAPHX_TEST_GDB On CACHE BOOL "")
    else()
        set(MIGRAPHX_TEST_GDB Off CACHE BOOL "")
    endif()
Paul's avatar
Paul committed
42
endif()
Paul's avatar
Paul committed
43

Paul's avatar
Paul committed
44
45
46
47
48
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)
Artur Wojcik's avatar
Artur Wojcik committed
49
        add_test(NAME ${NAME} COMMAND $<TARGET_FILE:${EXE}> ${ARGN})
Paul's avatar
Paul committed
50
    else()
Paul's avatar
Paul committed
51
        if(MIGRAPHX_TEST_GDB)
Umang Yadav's avatar
Umang Yadav committed
52
53
54
55
56
57
58
            # add_test(NAME ${NAME} COMMAND ${MIGRAPHX_GDB}
            # --batch
            # --return-child-result
            # -ex "set disable-randomization off"
            # -ex run
            # -ex backtrace
            # --args $<TARGET_FILE:${EXE}> ${ARGN})
Paul's avatar
Paul committed
59
60
            set(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/gdb/test_${NAME})
            file(MAKE_DIRECTORY ${TEST_DIR})
Umang Yadav's avatar
Umang Yadav committed
61
62

            if(NOT EXISTS ${TEST_DIR})
63
64
                message(FATAL_ERROR "Failed to create test directory: ${TEST_DIR}")
            endif()
Umang Yadav's avatar
Umang Yadav committed
65

Paul's avatar
Paul committed
66
            file(GENERATE OUTPUT "${TEST_DIR}/run.cmake"
Paul's avatar
Paul committed
67
                CONTENT "
Paul's avatar
Paul committed
68
69
                # Remove previous core dump
                file(REMOVE ${TEST_DIR}/core)
Paul's avatar
Paul committed
70
                execute_process(COMMAND $<TARGET_FILE:${EXE}> ${ARGN} WORKING_DIRECTORY ${TEST_DIR} RESULT_VARIABLE RESULT)
Paul's avatar
Paul committed
71
72
                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
73
                    if(EXISTS ${TEST_DIR}/core)
74
75
                        set(\$ENV{UBSAN_OPTIONS} print_stacktrace=1)
                        set(\$ENV{ASAN_OPTIONS} print_stacktrace=1)
Paul's avatar
Paul committed
76
                        execute_process(COMMAND ${MIGRAPHX_GDB} $<TARGET_FILE:${EXE}> ${TEST_DIR}/core -batch -ex bt)
Paul's avatar
Paul committed
77
78
79
80
                    endif()
                    message(FATAL_ERROR \"Test failed\")
                endif()
            ")
Paul's avatar
Paul committed
81
            add_test(NAME ${NAME} COMMAND ${CMAKE_COMMAND} -P "${TEST_DIR}/run.cmake")
Paul's avatar
Paul committed
82
83
84
85
        else()
            add_test(NAME ${NAME} COMMAND ${EXE} ${ARGN})
        endif()
    endif()
Umang Yadav's avatar
Umang Yadav committed
86

87
    set_tests_properties(${NAME} PROPERTIES FAIL_REGULAR_EXPRESSION "FAILED")
Paul's avatar
Paul committed
88
89
90
endfunction()

function(add_test_executable TEST_NAME)
Umang Yadav's avatar
Umang Yadav committed
91
    add_executable(${TEST_NAME} EXCLUDE_FROM_ALL ${ARGN})
92
    set(TEST_COMMAND ${TEST_NAME})
Paul's avatar
Paul committed
93
94
95
    add_test_command(${TEST_NAME} ${TEST_COMMAND})
    add_dependencies(tests ${TEST_NAME})
    add_dependencies(check ${TEST_NAME})
Artur Wojcik's avatar
Artur Wojcik committed
96
    target_compile_features(${TEST_NAME} PRIVATE cxx_std_17)
97
    target_link_libraries(${TEST_NAME} Threads::Threads migraphx migraphx_onnx migraphx_ref)
Paul's avatar
Paul committed
98
    target_include_directories(${TEST_NAME} PUBLIC include)
Artur Wojcik's avatar
Artur Wojcik committed
99
100
    target_compile_options(${TEST_NAME} PRIVATE -Wno-ignored-attributes)
endfunction()
Paul's avatar
Paul committed
101

102
file(GLOB TESTS CONFIGURE_DEPENDS *.cpp)
Paul's avatar
Paul committed
103
104
105
106

foreach(TEST ${TESTS})
    get_filename_component(BASE_NAME ${TEST} NAME_WE)
    add_test_executable(test_${BASE_NAME} ${TEST})
Paul's avatar
Paul committed
107
    rocm_clang_tidy_check(test_${BASE_NAME})
Paul's avatar
Paul committed
108
endforeach()
Paul's avatar
Paul committed
109

Paul's avatar
Paul committed
110
if(MIGRAPHX_ENABLE_GPU)
Artur Wojcik's avatar
Artur Wojcik committed
111
112
113
114
115
116
117
118
119
120
121
122
    set(GPU_TESTS
        gpu/adjust_allocation.cpp
        gpu/context_serialize.cpp
        gpu/hip.cpp
        gpu/jit.cpp
        gpu/literal.cpp
        gpu/manage_host_buffer.cpp
        gpu/mlir.cpp
        gpu/pack_args.cpp
        gpu/pack_int8_args.cpp
        gpu/quantization.cpp
        gpu/stream_sync.cpp)
Paul's avatar
Paul committed
123

Paul's avatar
Paul committed
124
    foreach(TEST ${GPU_TESTS})
Paul's avatar
Paul committed
125
        get_filename_component(BASE_NAME ${TEST} NAME_WE)
Paul's avatar
Paul committed
126
        add_test_executable(test_gpu_${BASE_NAME} ${TEST})
Paul's avatar
Paul committed
127
        rocm_clang_tidy_check(test_gpu_${BASE_NAME})
Umang Yadav's avatar
Umang Yadav committed
128
129
        set_tests_properties(test_gpu_${BASE_NAME} PROPERTIES
            COST 10
Paul's avatar
Paul committed
130
131
            RESOURCE_LOCK gpu
        )
Artur Wojcik's avatar
Artur Wojcik committed
132
133
134
135
136
        if(WIN32)
            target_include_directories(test_gpu_${BASE_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src/targets/gpu/kernels)
        else()
            target_link_libraries(test_gpu_${BASE_NAME} migraphx_kernels)
        endif()
137
138
139
        if(MIGRAPHX_USE_HIPRTC)
        target_compile_definitions(test_gpu_${BASE_NAME} PUBLIC -DMIGRAPHX_USE_HIPRTC)
        endif()
Artur Wojcik's avatar
Artur Wojcik committed
140
        target_link_libraries(test_gpu_${BASE_NAME} migraphx_gpu)
Paul's avatar
Paul committed
141
142
    endforeach()
endif()
Scott Thornton's avatar
Scott Thornton committed
143

varunsh's avatar
varunsh committed
144
if(MIGRAPHX_ENABLE_FPGA)
Artur Wojcik's avatar
Artur Wojcik committed
145
146
147
    set(FPGA_TESTS
            fpga/get_target_assignments.cpp
            fpga/test_compile.cpp)
varunsh's avatar
varunsh committed
148
149
150
151
152

    foreach(TEST ${FPGA_TESTS})
        get_filename_component(BASE_NAME ${TEST} NAME_WE)
        add_test_executable(test_fpga_${BASE_NAME} ${TEST})
        rocm_clang_tidy_check(test_fpga_${BASE_NAME})
Umang Yadav's avatar
Umang Yadav committed
153
154
        set_tests_properties(test_fpga_${BASE_NAME} PROPERTIES
            COST 10
varunsh's avatar
varunsh committed
155
156
157
158
159
160
            RESOURCE_LOCK fpga
        )
        target_link_libraries(test_fpga_${BASE_NAME} migraphx_fpga)
    endforeach()
endif()

Paul's avatar
Paul committed
161
# Onnx test
Paul's avatar
Paul committed
162
set(TEST_ONNX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/onnx)
Artur Wojcik's avatar
Artur Wojcik committed
163
164
165
166
set(ONNX_TESTS
    onnx/onnx_rnn_test.cpp
    onnx/onnx_test.cpp
    onnx/verify_onnx.cpp)
Umang Yadav's avatar
Umang Yadav committed
167

168
169
foreach(ONNX_TEST ${ONNX_TESTS})
    get_filename_component(BASE_NAME ${ONNX_TEST} NAME_WE)
170
    set(TEST_NAME test_${BASE_NAME})
171
    add_executable(${TEST_NAME} ${ONNX_TEST})
172
    rocm_clang_tidy_check(${TEST_NAME})
173
    target_link_libraries(${TEST_NAME} migraphx_onnx migraphx_ref)
174
    target_include_directories(${TEST_NAME} PUBLIC include)
Umang Yadav's avatar
Umang Yadav committed
175
    add_test(NAME ${TEST_NAME} COMMAND $<TARGET_FILE:${TEST_NAME}> WORKING_DIRECTORY ${TEST_ONNX_DIR})
176
177
    add_dependencies(tests ${TEST_NAME})
    add_dependencies(check ${TEST_NAME})
178
endforeach()
Paul's avatar
Paul committed
179

180
# tf test
kahmed10's avatar
kahmed10 committed
181
set(TEST_TF_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tf)
182
183
add_executable(test_tf tf/tf_test.cpp)
rocm_clang_tidy_check(test_tf)
184
target_link_libraries(test_tf migraphx_tf)
185
target_include_directories(test_tf PUBLIC include)
Umang Yadav's avatar
Umang Yadav committed
186
add_test(NAME test_tf COMMAND $<TARGET_FILE:test_tf> WORKING_DIRECTORY ${TEST_TF_DIR})
187
188
189
add_dependencies(tests test_tf)
add_dependencies(check test_tf)

Paul Fultz II's avatar
Paul Fultz II committed
190
add_subdirectory(api)
191
add_subdirectory(verify)
Umang Yadav's avatar
Umang Yadav committed
192

193
if(MIGRAPHX_ENABLE_PYTHON)
Umang Yadav's avatar
Umang Yadav committed
194
    add_subdirectory(py)
195
endif()
Paul's avatar
Paul committed
196

197
198
199
# multitarget test
if(MIGRAPHX_ENABLE_GPU AND MIGRAPHX_ENABLE_CPU AND MIGRAPHX_ENABLE_FPGA)
    set(TEST_MULTI_TARGET_DIR ${CMAKE_CURRENT_SOURCE_DIR}/multi_target)
200
    file(GLOB MULTI_TARGET_TESTS CONFIGURE_DEPENDS ${TEST_MULTI_TARGET_DIR}/*.cpp)
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215

    foreach(MULTI_TARGET_TEST ${MULTI_TARGET_TESTS})
        get_filename_component(BASE_NAME ${MULTI_TARGET_TEST} NAME_WE)
        set(TEST_NAME test_${BASE_NAME})
        add_executable(${TEST_NAME} ${MULTI_TARGET_TEST})
        rocm_clang_tidy_check(${TEST_NAME})
        target_link_libraries(${TEST_NAME} migraphx migraphx_onnx migraphx_tf migraphx_all_targets)
        target_include_directories(${TEST_NAME} PUBLIC include)
        add_test(NAME ${TEST_NAME} COMMAND $<TARGET_FILE:${TEST_NAME}> WORKING_DIRECTORY ${TEST_MULTI_TARGET_DIR})
        add_dependencies(tests ${TEST_NAME})
        add_dependencies(check ${TEST_NAME})
    endforeach()
endif()


Paul's avatar
Paul committed
216
function(test_header NAME HEADER)
217
218
219
    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${NAME}.cpp "
#include <${HEADER}>
int main() {}\n"
Paul's avatar
Paul committed
220
    )
221
222
223
224
225
226
    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${NAME}.cpp "
#include <${HEADER}>
#if defined(min) || defined(max) || defined(near) || defined(far)
#error \"Do not include windows.h in header files\"
#endif
\n"
Paul's avatar
Paul committed
227
228
    )
    add_test_executable(${NAME}
Umang Yadav's avatar
Umang Yadav committed
229
        ${CMAKE_CURRENT_BINARY_DIR}/header-main-include-${NAME}.cpp
Paul's avatar
Paul committed
230
231
232
233
        ${CMAKE_CURRENT_BINARY_DIR}/header-static-include-${NAME}.cpp
    )
endfunction()

234
function(test_headers PREFIX)
235
    file(GLOB HEADERS CONFIGURE_DEPENDS ${ARGN})
236
237
238
239
240
241

    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)
242
        target_link_libraries(header_${TEST_NAME} migraphx migraphx_onnx migraphx_tf migraphx_all_targets)
243
244
    endforeach()
endfunction()
Paul's avatar
Paul committed
245

Paul's avatar
Paul committed
246
test_headers(migraphx ${CMAKE_SOURCE_DIR}/src/include/migraphx/*.hpp)
247
test_headers(migraphx/ref ${CMAKE_SOURCE_DIR}/src/targets/ref/include/migraphx/ref/*.hpp)
Umang Yadav's avatar
Umang Yadav committed
248

Paul's avatar
Paul committed
249
if(MIGRAPHX_ENABLE_GPU)
Umang Yadav's avatar
Umang Yadav committed
250
    test_headers(migraphx/gpu ${CMAKE_SOURCE_DIR}/src/targets/gpu/include/migraphx/gpu/*.hpp)
251
endif()
252
253
254
255
256
257
258
if(MIGRAPHX_ENABLE_CPU)
    test_headers(migraphx/cpu ${CMAKE_SOURCE_DIR}/src/targets/cpu/include/migraphx/cpu/*.hpp)
endif()
if(MIGRAPHX_ENABLE_FPGA)
    test_headers(migraphx/fpga ${CMAKE_SOURCE_DIR}/src/targets/fpga/include/migraphx/fpga/*.hpp)
endif()

259