You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.1 KiB
92 lines
3.1 KiB
#
|
|
# 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()
|