1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
cmake_minimum_required(VERSION 3.28)
project(integration_tests CXX)
enable_testing()
##
# Single-linkage JIT integration tests.
##
foreach (bsl IN ITEMS "" "-DBUILD_SHARED_LIBS=NO" "-DBUILD_SHARED_LIBS=YES")
foreach (hsl IN ITEMS "" "-DHalide_SHARED_LIBS=NO" "-DHalide_SHARED_LIBS=YES")
foreach (comp IN ITEMS "" "-Djit_HALIDE_COMPONENTS=static" "-Djit_HALIDE_COMPONENTS=shared")
# Compute whether we expect to link to static or shared Halide given the relevant variables.
# Explicitly listing a component always wins. Then Halide_SHARED_LIBS takes over. If that's
# not available, it consults BUILD_SHARED_LIBS. If that's not defined, it defaults to shared,
# rather than static, because that's less likely to lead to pathologies with generators.
if (comp MATCHES "shared")
set(expect_shared TRUE)
elseif (comp MATCHES "static")
set(expect_shared FALSE)
elseif (hsl MATCHES "YES")
set(expect_shared TRUE)
elseif (hsl MATCHES "NO")
set(expect_shared FALSE)
else ()
set(expect_shared TRUE)
endif ()
set(test_name "${bsl} ${hsl} ${comp}")
string(REPLACE "-D" "" test_name "${test_name}")
string(STRIP "${test_name}" test_name)
string(MAKE_C_IDENTIFIER "jit_${test_name}" test_name)
set(build_step "check_builds_${test_name}")
set(check_link_step "check_linkage_${test_name}")
set(build_dir "${CMAKE_CURRENT_BINARY_DIR}/jit/${test_name}")
# This builds and runs the tiny example app.
add_test(NAME "${build_step}"
COMMAND
${CMAKE_CTEST_COMMAND}
--build-and-test "${CMAKE_CURRENT_LIST_DIR}/jit" "${build_dir}"
--build-generator Ninja
--build-options -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ${bsl} ${hsl} ${comp} -DCMAKE_BUILD_TYPE=Release
--test-command ${CMAKE_CTEST_COMMAND} --output-on-failure)
if (expect_shared)
# Run ldd on the output binary. The pass/fail regexes are set later.
add_test(NAME "${check_link_step}"
COMMAND ldd "${build_dir}/main")
# Make sure we don't run ldd before building...
set_tests_properties("${build_step}" PROPERTIES FIXTURES_SETUP "${test_name}")
set_tests_properties("${check_link_step}" PROPERTIES FIXTURES_REQUIRED "${test_name}")
set_tests_properties("${check_link_step}" PROPERTIES PASS_REGULAR_EXPRESSION "libHalide")
else ()
set_tests_properties("${build_step}"
PROPERTIES
WILL_FAIL TRUE
FAIL_REGULAR_EXPRESSION "Halide `static` libraries were requested but not found.")
endif ()
endforeach ()
endforeach ()
endforeach ()
##
# AOT integration tests
##
add_test(NAME aot_shared_generator
COMMAND
${CMAKE_CTEST_COMMAND}
--build-and-test "${CMAKE_CURRENT_LIST_DIR}/aot" "${CMAKE_CURRENT_BINARY_DIR}/aot-shared"
--build-generator Ninja
--build-options -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_BUILD_TYPE=Release
--test-command ${CMAKE_CTEST_COMMAND} --output-on-failure)
add_test(NAME aot_static_generator
COMMAND
${CMAKE_CTEST_COMMAND}
--build-and-test "${CMAKE_CURRENT_LIST_DIR}/aot" "${CMAKE_CURRENT_BINARY_DIR}/aot-static"
--build-generator Ninja
--build-options -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DHalide_SHARED_LIBS=NO -DCMAKE_BUILD_TYPE=Release
--test-command ${CMAKE_CTEST_COMMAND} --output-on-failure)
set_tests_properties(aot_static_generator
PROPERTIES
WILL_FAIL TRUE
FAIL_REGULAR_EXPRESSION "Halide `static` libraries were requested but not found.")
add_test(NAME aot_shared_generator_adams2019
COMMAND
${CMAKE_CTEST_COMMAND}
--build-and-test "${CMAKE_CURRENT_LIST_DIR}/aot" "${CMAKE_CURRENT_BINARY_DIR}/aot-shared-auto"
--build-generator Ninja
--build-options -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_BUILD_TYPE=Release -Daot_USE_AUTOSCHEDULER=YES
--test-command ${CMAKE_CTEST_COMMAND} --output-on-failure)
add_test(NAME aot_static_generator_adams2019
COMMAND
${CMAKE_CTEST_COMMAND}
--build-and-test "${CMAKE_CURRENT_LIST_DIR}/aot" "${CMAKE_CURRENT_BINARY_DIR}/aot-static-auto"
--build-generator Ninja
--build-options -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DHalide_SHARED_LIBS=NO -DCMAKE_BUILD_TYPE=Release -Daot_USE_AUTOSCHEDULER=YES
--test-command ${CMAKE_CTEST_COMMAND} --output-on-failure)
# Cannot use autoscheduler with generators linked to STATIC Halide
set_tests_properties(aot_static_generator_adams2019
PROPERTIES
WILL_FAIL TRUE
FAIL_REGULAR_EXPRESSION "Halide `static` libraries were requested but not found.")
##
# Cross compiling test
##
if (FALSE)
if (CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
add_test(NAME cross_compile_host
COMMAND
${CMAKE_CTEST_COMMAND}
--build-and-test "${CMAKE_CURRENT_LIST_DIR}/xc" "${CMAKE_CURRENT_BINARY_DIR}/xc-host"
--build-generator Ninja
--build-options -DCMAKE_BUILD_TYPE=Release
--test-command ${CMAKE_CTEST_COMMAND} --output-on-failure)
add_test(NAME cross_compile_aarch64
COMMAND
${CMAKE_CTEST_COMMAND}
--build-and-test "${CMAKE_CURRENT_LIST_DIR}/xc" "${CMAKE_CURRENT_BINARY_DIR}/xc-aarch64"
--build-generator Ninja
--build-options
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_CURRENT_LIST_DIR}/../../cmake/toolchain.linux-aarch64.cmake
-DCMAKE_BUILD_TYPE=Release
"-Dxc-halide_generators_ROOT=${CMAKE_CURRENT_BINARY_DIR}/xc-host"
--test-command ${CMAKE_CTEST_COMMAND} --output-on-failure)
set_tests_properties(cross_compile_host PROPERTIES FIXTURES_SETUP xc-host)
set_tests_properties(cross_compile_aarch64 PROPERTIES FIXTURES_REQUIRED xc-host)
endif ()
endif ()
|