mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-23 22:58:37 -05:00
2200bc068b
By sharing the information used by ParseImplicitIncludeInfo we can also verify the parsing of implicit link info such as directories.
92 lines
3.1 KiB
CMake
92 lines
3.1 KiB
CMake
#
|
|
# 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()
|