Toolchain: Test compiler initial settings

This commit is contained in:
Fred Baksik
2020-07-20 09:45:32 -04:00
parent db486da265
commit f76c20da63
10 changed files with 93 additions and 0 deletions

View File

@@ -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

View File

@@ -0,0 +1,3 @@
enable_language(C)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
add_executable(main main.c)

View File

@@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 3.2)
project(${RunCMake_TEST} NONE)
include(${RunCMake_TEST}.cmake)

View File

@@ -0,0 +1,3 @@
enable_language(CXX)
set(CMAKE_VERBOSE_MAKEFILE TRUE)
add_executable(main main.cxx)

View 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")

View 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")

View 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()

View File

@@ -0,0 +1,10 @@
#ifndef FOO1
# error Missing FOO1
#endif
#ifndef FOO2
# error Missing FOO2
#endif
int main(void)
{
return 0;
}

View File

@@ -0,0 +1,10 @@
#ifndef FOO1
# error Missing FOO1
#endif
#ifndef FOO2
# error Missing FOO2
#endif
int main()
{
return 0;
}

View File

@@ -0,0 +1 @@
set(@__test_compiler_var@ "@__test_compiler@" -DFOO1 -DFOO2)