mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-04 12:49:36 -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
|
set_property(TEST RunCMake.CompilerLauncher APPEND
|
||||||
PROPERTY LABELS "CUDA")
|
PROPERTY LABELS "CUDA")
|
||||||
add_RunCMake_test(ctest_labels_for_subprojects)
|
add_RunCMake_test(ctest_labels_for_subprojects)
|
||||||
|
add_RunCMake_test(CompilerArgs)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(cpack_tests
|
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