blob: e5b2b8599127021e0e48e3c17ea742fd9b69ff30 [file] [edit]
include(RunCMake)
if(CMake_TEST_SYCL)
list(APPEND RunCMake_TEST_OPTIONS -Wno-experimental)
endif()
function(run_toolchain_wrappers case)
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${case}-build")
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
run_cmake(${case})
if(RunCMake_GENERATOR MATCHES "Ninja")
set(verbose_args -- -v)
endif()
run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . ${verbose_args})
endfunction()
set(langs C CXX)
if(CMake_TEST_CUDA)
list(APPEND langs CUDA)
endif()
if(CMake_TEST_SYCL)
list(APPEND langs SYCL)
endif()
if(CMake_TEST_Fortran)
list(APPEND langs Fortran)
endif()
if(CMake_TEST_HIP)
list(APPEND langs HIP)
endif()
if(CMake_TEST_ISPC)
list(APPEND langs ISPC)
endif()
if(CMake_TEST_OBJC)
list(APPEND langs OBJC OBJCXX)
endif()
foreach(lang ${langs})
run_toolchain_wrappers(${lang})
endforeach()
run_cmake(DNE)
run_cmake(InterfaceDNE)
run_cmake(DebugProps)
run_toolchain_wrappers(NoWrappers)
# $<COMPILE_LANGUAGE:...>/$<LINK_LANGUAGE:...> generator expressions.
run_toolchain_wrappers(WrapperGenex)
run_toolchain_wrappers(InterfaceGenex)
block()
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/SelectorGenex-build")
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
run_cmake(SelectorGenex)
if(RunCMake_GENERATOR MATCHES "Ninja")
set(verbose_args -- -v)
endif()
set(RunCMake_TEST_NOT_EXPECT_stdout "SELECTOR")
run_cmake_command(SelectorGenex-build-mainc
${CMAKE_COMMAND} --build . --target mainc ${verbose_args})
unset(RunCMake_TEST_NOT_EXPECT_stdout)
run_cmake_command(SelectorGenex-build-maincxx
${CMAKE_COMMAND} --build . --target maincxx ${verbose_args})
endblock()
# Compile wrappers of a `$<LINK_ONLY:...>` dependency must not be used.
set(RunCMake_TEST_NOT_EXPECT_stdout "CW_")
run_toolchain_wrappers(LinkOnly)
unset(RunCMake_TEST_NOT_EXPECT_stdout)
run_toolchain_wrappers(SpecialArgs)
# Wrappers are placed outside of launchers.
run_toolchain_wrappers(Launcher)
run_toolchain_wrappers(LauncherEmpty)
run_toolchain_wrappers(LauncherLint)
if(NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
run_toolchain_wrappers(CTestLaunch)
endif()
# On most compilers, static libraries are created by an archiver, so link
# wrappers and the linker launcher do not apply. A few toolchains instead
# define CMAKE_<LANG>_CREATE_STATIC_LIBRARY to invoke the compiler driver
# directly, in which case static library creation goes through the normal
# link-command path and link wrappers/launcher *do* apply.
if(NOT CMAKE_C_COMPILER_ID STREQUAL "OrangeC" AND
NOT (WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "IntelLLVM"))
set(RunCMake_TEST_NOT_EXPECT_stdout "(LW|LL)_")
endif()
run_toolchain_wrappers(StaticLibrary)
unset(RunCMake_TEST_NOT_EXPECT_stdout)
function(run_toolchain_wrappers_per_config case)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
if(RunCMake_GENERATOR MATCHES "Ninja")
set(verbose_args -- -v)
endif()
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${case}-build")
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
run_cmake(${case})
set(marker_Debug "(CW|LW)_OUTER=1")
set(marker_Release "(CW|LW)_INNER=2")
foreach(config IN ITEMS Debug Release)
# Wrappers for the other config must not leak into this config's commands.
set(RunCMake_TEST_NOT_EXPECT_stdout "${marker_${config}}")
run_cmake_command(${case}-${config}-build
${CMAKE_COMMAND} --build . --config ${config} ${verbose_args})
endforeach()
endfunction()
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
run_toolchain_wrappers_per_config(PerConfig)
endif()