mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 03:11:08 -06:00
Toolchain: Test compiler initial settings
This commit is contained in:
@@ -624,6 +624,7 @@ if("${CMAKE_GENERATOR}" MATCHES "Make|Ninja")
|
||||
set_property(TEST RunCMake.CompilerLauncher APPEND
|
||||
PROPERTY LABELS "CUDA")
|
||||
add_RunCMake_test(ctest_labels_for_subprojects)
|
||||
add_RunCMake_test(CompilerArgs)
|
||||
endif()
|
||||
|
||||
set(cpack_tests
|
||||
|
||||
3
Tests/RunCMake/CompilerArgs/C.cmake
Normal file
3
Tests/RunCMake/CompilerArgs/C.cmake
Normal file
@@ -0,0 +1,3 @@
|
||||
enable_language(C)
|
||||
set(CMAKE_VERBOSE_MAKEFILE TRUE)
|
||||
add_executable(main main.c)
|
||||
3
Tests/RunCMake/CompilerArgs/CMakeLists.txt
Normal file
3
Tests/RunCMake/CompilerArgs/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
project(${RunCMake_TEST} NONE)
|
||||
include(${RunCMake_TEST}.cmake)
|
||||
3
Tests/RunCMake/CompilerArgs/CXX.cmake
Normal file
3
Tests/RunCMake/CompilerArgs/CXX.cmake
Normal file
@@ -0,0 +1,3 @@
|
||||
enable_language(CXX)
|
||||
set(CMAKE_VERBOSE_MAKEFILE TRUE)
|
||||
add_executable(main main.cxx)
|
||||
2
Tests/RunCMake/CompilerArgs/FindCCompiler.cmake
Normal file
2
Tests/RunCMake/CompilerArgs/FindCCompiler.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
enable_language(C)
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/C_comp.cmake" "set(temp_CMAKE_C_COMPILER \"${CMAKE_C_COMPILER}\")\n")
|
||||
2
Tests/RunCMake/CompilerArgs/FindCXXCompiler.cmake
Normal file
2
Tests/RunCMake/CompilerArgs/FindCXXCompiler.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
enable_language(CXX)
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CXX_comp.cmake" "set(temp_CMAKE_CXX_COMPILER \"${CMAKE_CXX_COMPILER}\")\n")
|
||||
58
Tests/RunCMake/CompilerArgs/RunCMakeTest.cmake
Normal file
58
Tests/RunCMake/CompilerArgs/RunCMakeTest.cmake
Normal file
@@ -0,0 +1,58 @@
|
||||
include(RunCMake)
|
||||
|
||||
function(find_compiler lang)
|
||||
# Detect the compiler in use in the current environment.
|
||||
run_cmake(Find${lang}Compiler)
|
||||
# Use the detected compiler
|
||||
include(${RunCMake_BINARY_DIR}/Find${lang}Compiler-build/${lang}_comp.cmake)
|
||||
if(NOT temp_CMAKE_${lang}_COMPILER)
|
||||
message(FATAL_ERROR "FindCompiler provided no compiler!")
|
||||
endif()
|
||||
# Create a toolchain file
|
||||
set(__test_compiler_var CMAKE_${lang}_COMPILER)
|
||||
set(__test_compiler "${temp_CMAKE_${lang}_COMPILER}")
|
||||
configure_file(${RunCMake_SOURCE_DIR}/toolchain.cmake.in
|
||||
${RunCMake_BINARY_DIR}/Find${lang}Compiler-build/toolchain_${lang}_comp.cmake @ONLY)
|
||||
endfunction()
|
||||
|
||||
function(run_compiler_env lang)
|
||||
# Use the correct compiler
|
||||
include(${RunCMake_BINARY_DIR}/Find${lang}Compiler-build/${lang}_comp.cmake)
|
||||
|
||||
# Use a single build tree for tests without cleaning.
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${lang}-env-build)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||
|
||||
# Set the compiler
|
||||
if(lang STREQUAL "C")
|
||||
set(ENV{CC} "'${temp_CMAKE_${lang}_COMPILER}' -DFOO1 -DFOO2")
|
||||
else()
|
||||
set(ENV{${lang}} "'${temp_CMAKE_${lang}_COMPILER}' -DFOO1 -DFOO2")
|
||||
endif()
|
||||
|
||||
run_cmake(${lang})
|
||||
run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build . ${verbose_args})
|
||||
endfunction()
|
||||
|
||||
function(run_compiler_tc lang)
|
||||
# Use a single build tree for tests without cleaning.
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${lang}-tc-build)
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||
|
||||
set(RunCMake_TEST_OPTIONS
|
||||
-DCMAKE_TOOLCHAIN_FILE=${RunCMake_BINARY_DIR}/Find${lang}Compiler-build/toolchain_${lang}_comp.cmake)
|
||||
run_cmake(${lang})
|
||||
run_cmake_command(${lang}-Build ${CMAKE_COMMAND} --build . ${verbose_args})
|
||||
endfunction()
|
||||
|
||||
set(langs C CXX)
|
||||
|
||||
foreach(lang ${langs})
|
||||
find_compiler(${lang})
|
||||
run_compiler_env(${lang})
|
||||
run_compiler_tc(${lang})
|
||||
endforeach()
|
||||
10
Tests/RunCMake/CompilerArgs/main.c
Normal file
10
Tests/RunCMake/CompilerArgs/main.c
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef FOO1
|
||||
# error Missing FOO1
|
||||
#endif
|
||||
#ifndef FOO2
|
||||
# error Missing FOO2
|
||||
#endif
|
||||
int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
10
Tests/RunCMake/CompilerArgs/main.cxx
Normal file
10
Tests/RunCMake/CompilerArgs/main.cxx
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef FOO1
|
||||
# error Missing FOO1
|
||||
#endif
|
||||
#ifndef FOO2
|
||||
# error Missing FOO2
|
||||
#endif
|
||||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
1
Tests/RunCMake/CompilerArgs/toolchain.cmake.in
Normal file
1
Tests/RunCMake/CompilerArgs/toolchain.cmake.in
Normal file
@@ -0,0 +1 @@
|
||||
set(@__test_compiler_var@ "@__test_compiler@" -DFOO1 -DFOO2)
|
||||
Reference in New Issue
Block a user