# # 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__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()