Merge topic 'ConcurrentFortran-compiler-id'
54676a0e
Help: Add notes for topic 'ConcurrentFortran-compiler-id'7cd539b1
Add support for Concurrent Fortran 77 Compiler0d204c1c
CMakeDetermineCompilerId: Try matching compiler output to detect id5f0dad75
CMakeDetermineCompilerId: Refactor id build/check loop logicc65a060e
CMakeDetermineCompilerId: Optionally try some flags before no flags
This commit is contained in:
commit
a53f1af79f
|
@ -0,0 +1,5 @@
|
|||
ConcurrentFortran-compiler-id
|
||||
-----------------------------
|
||||
|
||||
* The `Concurrent Fortran 77 <https://ccur.com>`__ compiler is now supported.
|
||||
Its :variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` is ``CCur``.
|
|
@ -11,6 +11,7 @@ include:
|
|||
Absoft = Absoft Fortran (absoft.com)
|
||||
ADSP = Analog VisualDSP++ (analog.com)
|
||||
AppleClang = Apple Clang (apple.com)
|
||||
CCur = Concurrent Fortran (ccur.com)
|
||||
Clang = LLVM Clang (clang.llvm.org)
|
||||
Cray = Cray Compiler (cray.com)
|
||||
Embarcadero, Borland = Embarcadero (embarcadero.com)
|
||||
|
|
|
@ -80,6 +80,7 @@ else()
|
|||
# Each entry in this list is a set of extra flags to try
|
||||
# adding to the compile line to see if it helps produce
|
||||
# a valid identification file.
|
||||
set(CMAKE_C_COMPILER_ID_TEST_FLAGS_FIRST)
|
||||
set(CMAKE_C_COMPILER_ID_TEST_FLAGS
|
||||
# Try compiling to an object file only.
|
||||
"-c"
|
||||
|
|
|
@ -78,6 +78,7 @@ else()
|
|||
# Each entry in this list is a set of extra flags to try
|
||||
# adding to the compile line to see if it helps produce
|
||||
# a valid identification file.
|
||||
set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS_FIRST)
|
||||
set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS
|
||||
# Try compiling to an object file only.
|
||||
"-c"
|
||||
|
|
|
@ -34,12 +34,19 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
|||
|
||||
# Try building with no extra flags and then try each set
|
||||
# of helper flags. Stop when the compiler is identified.
|
||||
foreach(flags "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
||||
if(NOT CMAKE_${lang}_COMPILER_ID)
|
||||
CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}")
|
||||
foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
|
||||
CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
|
||||
endforeach()
|
||||
foreach(flags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}
|
||||
""
|
||||
${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
||||
CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}")
|
||||
CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
|
||||
if(CMAKE_${lang}_COMPILER_ID)
|
||||
break()
|
||||
endif()
|
||||
foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
|
||||
CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
|
||||
endforeach()
|
||||
if(CMAKE_${lang}_COMPILER_ID)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
|
@ -355,6 +362,7 @@ ${CMAKE_${lang}_COMPILER_ID_OUTPUT}
|
|||
|
||||
# No output files should be inspected.
|
||||
set(COMPILER_${lang}_PRODUCED_FILES)
|
||||
set(COMPILER_${lang}_PRODUCED_OUTPUT)
|
||||
else()
|
||||
# Compilation succeeded.
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
|
@ -395,10 +403,24 @@ ${CMAKE_${lang}_COMPILER_ID_OUTPUT}
|
|||
"${src}\" did not produce an executable in \""
|
||||
"${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n")
|
||||
endif()
|
||||
|
||||
set(COMPILER_${lang}_PRODUCED_OUTPUT "${CMAKE_${lang}_COMPILER_ID_OUTPUT}")
|
||||
endif()
|
||||
|
||||
# Return the files produced by the compilation.
|
||||
set(COMPILER_${lang}_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
|
||||
set(COMPILER_${lang}_PRODUCED_OUTPUT "${COMPILER_${lang}_PRODUCED_OUTPUT}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Function to extract the compiler id from compiler output.
|
||||
function(CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR lang output)
|
||||
foreach(vendor ${CMAKE_${lang}_COMPILER_ID_MATCH_VENDORS})
|
||||
if(output MATCHES "${CMAKE_${lang}_COMPILER_ID_MATCH_VENDOR_REGEX_${vendor}}")
|
||||
set(CMAKE_${lang}_COMPILER_ID "${vendor}")
|
||||
endif()
|
||||
endforeach()
|
||||
set(CMAKE_${lang}_COMPILER_ID "${CMAKE_${lang}_COMPILER_ID}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
|
|
@ -98,6 +98,10 @@ else()
|
|||
# Each entry in this list is a set of extra flags to try
|
||||
# adding to the compile line to see if it helps produce
|
||||
# a valid identification executable.
|
||||
set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS_FIRST
|
||||
# Get verbose output to help distinguish compilers.
|
||||
"-v"
|
||||
)
|
||||
set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS
|
||||
# Try compiling to an object file only.
|
||||
"-c"
|
||||
|
@ -111,6 +115,10 @@ endif()
|
|||
if(NOT CMAKE_Fortran_COMPILER_ID_RUN)
|
||||
set(CMAKE_Fortran_COMPILER_ID_RUN 1)
|
||||
|
||||
# Table of per-vendor compiler output regular expressions.
|
||||
list(APPEND CMAKE_Fortran_COMPILER_ID_MATCH_VENDORS CCur)
|
||||
set(CMAKE_Fortran_COMPILER_ID_MATCH_VENDOR_REGEX_CCur "Concurrent Fortran [0-9]+ Compiler")
|
||||
|
||||
# Table of per-vendor compiler id flags with expected output.
|
||||
list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq)
|
||||
set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what")
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
include(Compiler/GNU-Fortran)
|
|
@ -0,0 +1 @@
|
|||
include(Platform/Linux-GNU-Fortran)
|
Loading…
Reference in New Issue