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)
|
Absoft = Absoft Fortran (absoft.com)
|
||||||
ADSP = Analog VisualDSP++ (analog.com)
|
ADSP = Analog VisualDSP++ (analog.com)
|
||||||
AppleClang = Apple Clang (apple.com)
|
AppleClang = Apple Clang (apple.com)
|
||||||
|
CCur = Concurrent Fortran (ccur.com)
|
||||||
Clang = LLVM Clang (clang.llvm.org)
|
Clang = LLVM Clang (clang.llvm.org)
|
||||||
Cray = Cray Compiler (cray.com)
|
Cray = Cray Compiler (cray.com)
|
||||||
Embarcadero, Borland = Embarcadero (embarcadero.com)
|
Embarcadero, Borland = Embarcadero (embarcadero.com)
|
||||||
|
|
|
@ -80,6 +80,7 @@ else()
|
||||||
# Each entry in this list is a set of extra flags to try
|
# Each entry in this list is a set of extra flags to try
|
||||||
# adding to the compile line to see if it helps produce
|
# adding to the compile line to see if it helps produce
|
||||||
# a valid identification file.
|
# a valid identification file.
|
||||||
|
set(CMAKE_C_COMPILER_ID_TEST_FLAGS_FIRST)
|
||||||
set(CMAKE_C_COMPILER_ID_TEST_FLAGS
|
set(CMAKE_C_COMPILER_ID_TEST_FLAGS
|
||||||
# Try compiling to an object file only.
|
# Try compiling to an object file only.
|
||||||
"-c"
|
"-c"
|
||||||
|
|
|
@ -78,6 +78,7 @@ else()
|
||||||
# Each entry in this list is a set of extra flags to try
|
# Each entry in this list is a set of extra flags to try
|
||||||
# adding to the compile line to see if it helps produce
|
# adding to the compile line to see if it helps produce
|
||||||
# a valid identification file.
|
# a valid identification file.
|
||||||
|
set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS_FIRST)
|
||||||
set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS
|
set(CMAKE_CXX_COMPILER_ID_TEST_FLAGS
|
||||||
# Try compiling to an object file only.
|
# Try compiling to an object file only.
|
||||||
"-c"
|
"-c"
|
||||||
|
|
|
@ -34,12 +34,19 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
|
||||||
|
|
||||||
# Try building with no extra flags and then try each set
|
# Try building with no extra flags and then try each set
|
||||||
# of helper flags. Stop when the compiler is identified.
|
# of helper flags. Stop when the compiler is identified.
|
||||||
foreach(flags "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
foreach(flags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST}
|
||||||
if(NOT CMAKE_${lang}_COMPILER_ID)
|
""
|
||||||
CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}")
|
${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS})
|
||||||
foreach(file ${COMPILER_${lang}_PRODUCED_FILES})
|
CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${flags}" "${src}")
|
||||||
CMAKE_DETERMINE_COMPILER_ID_CHECK("${lang}" "${CMAKE_${lang}_COMPILER_ID_DIR}/${file}" "${src}")
|
CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}")
|
||||||
endforeach()
|
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()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
@ -355,6 +362,7 @@ ${CMAKE_${lang}_COMPILER_ID_OUTPUT}
|
||||||
|
|
||||||
# No output files should be inspected.
|
# No output files should be inspected.
|
||||||
set(COMPILER_${lang}_PRODUCED_FILES)
|
set(COMPILER_${lang}_PRODUCED_FILES)
|
||||||
|
set(COMPILER_${lang}_PRODUCED_OUTPUT)
|
||||||
else()
|
else()
|
||||||
# Compilation succeeded.
|
# Compilation succeeded.
|
||||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
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 \""
|
"${src}\" did not produce an executable in \""
|
||||||
"${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n")
|
"${CMAKE_${lang}_COMPILER_ID_DIR}\".\n\n")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(COMPILER_${lang}_PRODUCED_OUTPUT "${CMAKE_${lang}_COMPILER_ID_OUTPUT}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Return the files produced by the compilation.
|
# Return the files produced by the compilation.
|
||||||
set(COMPILER_${lang}_PRODUCED_FILES "${COMPILER_${lang}_PRODUCED_FILES}" PARENT_SCOPE)
|
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()
|
endfunction()
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -98,6 +98,10 @@ else()
|
||||||
# Each entry in this list is a set of extra flags to try
|
# Each entry in this list is a set of extra flags to try
|
||||||
# adding to the compile line to see if it helps produce
|
# adding to the compile line to see if it helps produce
|
||||||
# a valid identification executable.
|
# 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
|
set(CMAKE_Fortran_COMPILER_ID_TEST_FLAGS
|
||||||
# Try compiling to an object file only.
|
# Try compiling to an object file only.
|
||||||
"-c"
|
"-c"
|
||||||
|
@ -111,6 +115,10 @@ endif()
|
||||||
if(NOT CMAKE_Fortran_COMPILER_ID_RUN)
|
if(NOT CMAKE_Fortran_COMPILER_ID_RUN)
|
||||||
set(CMAKE_Fortran_COMPILER_ID_RUN 1)
|
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.
|
# Table of per-vendor compiler id flags with expected output.
|
||||||
list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq)
|
list(APPEND CMAKE_Fortran_COMPILER_ID_VENDORS Compaq)
|
||||||
set(CMAKE_Fortran_COMPILER_ID_VENDOR_FLAGS_Compaq "-what")
|
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