diff options
Diffstat (limited to 'Tests/RunCMake/ParseImplicitData/CMakeLists.txt')
-rw-r--r-- | Tests/RunCMake/ParseImplicitData/CMakeLists.txt | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/Tests/RunCMake/ParseImplicitData/CMakeLists.txt b/Tests/RunCMake/ParseImplicitData/CMakeLists.txt new file mode 100644 index 0000000..7a8570b --- /dev/null +++ b/Tests/RunCMake/ParseImplicitData/CMakeLists.txt @@ -0,0 +1,91 @@ +# +# helper CMakeLists.txt file that can be used to generate input files +# for the Tests/RunCMake/ParseImplicit[Include|Lib]Info tests. +# +# usage: +# [create a temporary build directory and chdir to it] +# cmake [-D options] $CMAKE_SRC/Tests/RunCMake/ParseImplicitIncludeInfo/data +# +# where useful -D options include: +# -DLANGUAGES="C;CXX" -- list of languages to generate inputs for +# -DUNAME="Darwin" -- operating system name (def: CMAKE_SYSTEM_NAME) +# + +cmake_minimum_required(VERSION 3.3) +if(POLICY CMP0089) + cmake_policy(SET CMP0089 NEW) +endif() + +set(lngs C CXX) +set(LANGUAGES "${lngs}" CACHE STRING "List of languages to generate inputs for") + +project(gen_implicit_include_data ${LANGUAGES}) + +set(UNAME "${CMAKE_SYSTEM_NAME}" CACHE STRING "System uname") +string(TOLOWER "${UNAME}" UNAME) +message("Generate input for system type: ${UNAME}") + +# CMAKE_<LANG>_COMPILER_* variables we save in the resultfile +set(compvars ABI AR ARCHITECTURE_ID EXTERNAL_TOOLCHAIN ID LAUNCHER LOADED + RANLIB TARGET VERSION VERSION_INTERAL) + +foreach(lang IN ITEMS ${LANGUAGES}) + + if("${lang}" STREQUAL "C") + set(file ${CMAKE_ROOT}/Modules/CMakeCCompilerABI.c) + elseif("${lang}" STREQUAL "CXX") + set(file ${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp) + elseif("${lang}" STREQUAL "CUDA") + set(file ${CMAKE_ROOT}/Modules/CMakeCUDACompilerABI.cu) + elseif("${lang}" STREQUAL "Fortran") + set(file ${CMAKE_ROOT}/Modules/CMakeFortranCompilerABI.F) + else() + message(FATAL_ERROR "unknown language ${lang}") + endif() + + set(resultfile "${CMAKE_BINARY_DIR}/") + string(APPEND resultfile ${UNAME}-${lang}-${CMAKE_${lang}_COMPILER_ID}) + string(APPEND resultfile -${CMAKE_${lang}_COMPILER_VERSION}) + string(APPEND resultfile .input) + message("Generate input for language ${lang}") + message("Input file: ${file}") + message("Result file: ${resultfile}") + + # replicate logic from CMakeDetermineCompilerABI + set(outfile "${CMAKE_PLATFORM_INFO_DIR}/test${lang}.out") + set(CMAKE_FLAGS ) + set(COMPILE_DEFINITIONS ) + if(DEFINED CMAKE_${lang}_VERBOSE_FLAG) + set(CMAKE_FLAGS "-DEXE_LINKER_FLAGS=${CMAKE_${lang}_VERBOSE_FLAG}") + set(COMPILE_DEFINITIONS "${CMAKE_${lang}_VERBOSE_FLAG}") + endif() + if(DEFINED CMAKE_${lang}_VERBOSE_COMPILE_FLAG) + set(COMPILE_DEFINITIONS "${CMAKE_${lang}_VERBOSE_COMPILE_FLAG}") + endif() + if(NOT "x${CMAKE_${lang}_COMPILER_ID}" STREQUAL "xMSVC") + # Avoid adding our own platform standard libraries for compilers + # from which we might detect implicit link libraries. + list(APPEND CMAKE_FLAGS "-DCMAKE_${lang}_STANDARD_LIBRARIES=") + endif() + + try_compile(rv ${CMAKE_BINARY_DIR} ${file} + CMAKE_FLAGS ${CMAKE_FLAGS} + COMPILE_DEFINITIONS ${COMPILE_DEFINITIONS} + CMAKE_FLAGS ${CMAKE_FLAGS} + OUTPUT_VARIABLE output + COPY_FILE "${outfile}" + COPY_FILE_ERROR copy_error) + + if(NOT rv) + message(FATAL_ERROR "${lang} compile failed!!") + endif() + + set(result "CMAKE_LANG=${lang}\n") + list(APPEND result "CMAKE_LINKER=${CMAKE_LINKER}\n") + foreach(var IN ITEMS ${compvars}) + list(APPEND result + "CMAKE_${lang}_COMPILER_${var}=${CMAKE_${lang}_COMPILER_${var}}\n") + endforeach() + + file(WRITE ${resultfile} ${result} ${output}) +endforeach() |