mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-01 20:00:51 -05:00
Merge topic 'lfortran'
aff38fed4fci: Add nightly jobs for LFortran on Fedoraa0def56402ci: Add lfortran to Fedora base image98d0f918baLFortran: Add support for this compilerc6f81bdacfTests/RunCMake: Pass Fortran compiler id into more testsfa1b748389Tests/RunCMake/DependencyGraph: Specify Fortran function return type Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: scivision <michael@scivision.dev> Acked-by: Matthew Thompson <fortran@gmail.com> Merge-request: !9188
This commit is contained in:
@@ -234,6 +234,26 @@ t:fedora39-hip-radeon:
|
||||
variables:
|
||||
CMAKE_CI_JOB_NIGHTLY: "true"
|
||||
|
||||
t:fedora40-makefiles-lfortran:
|
||||
extends:
|
||||
- .fedora40_makefiles_lfortran
|
||||
- .cmake_test_linux_release
|
||||
- .linux_x86_64_tags
|
||||
- .run_dependent
|
||||
- .needs_centos7_x86_64
|
||||
variables:
|
||||
CMAKE_CI_JOB_NIGHTLY: "true"
|
||||
|
||||
t:fedora40-ninja-lfortran:
|
||||
extends:
|
||||
- .fedora40_ninja_lfortran
|
||||
- .cmake_test_linux_release
|
||||
- .linux_x86_64_tags
|
||||
- .run_dependent
|
||||
- .needs_centos7_x86_64
|
||||
variables:
|
||||
CMAKE_CI_JOB_NIGHTLY: "true"
|
||||
|
||||
t:fedora40-ninja-clang:
|
||||
extends:
|
||||
- .fedora40_ninja_clang
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
set(CMAKE_Fortran_COMPILER "/usr/bin/lfortran" CACHE FILEPATH "")
|
||||
set(CMAKE_Fortran_COMPILER_ID "LFortran" CACHE STRING "")
|
||||
set(CMAKE_Fortran_COMPILER_SUPPORTS_F90 "1" CACHE BOOL "")
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
|
||||
@@ -0,0 +1 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common_lfortran.cmake")
|
||||
@@ -0,0 +1 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_fedora40_common_lfortran.cmake")
|
||||
@@ -13,6 +13,7 @@ compiler-rt
|
||||
flang
|
||||
gcc-c++
|
||||
git-core
|
||||
lfortran
|
||||
llvm-devel
|
||||
make
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export FC=/usr/bin/lfortran
|
||||
@@ -0,0 +1 @@
|
||||
. .gitlab/ci/env_fedora40_common_lfortran.sh
|
||||
@@ -0,0 +1 @@
|
||||
. .gitlab/ci/env_fedora40_common_lfortran.sh
|
||||
+20
-1
@@ -69,7 +69,7 @@
|
||||
### Fedora
|
||||
|
||||
.fedora40:
|
||||
image: "kitware/cmake:ci-fedora40-x86_64-2024-04-24"
|
||||
image: "kitware/cmake:ci-fedora40-x86_64-2024-07-23"
|
||||
|
||||
variables:
|
||||
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes"
|
||||
@@ -234,6 +234,25 @@
|
||||
CMAKE_CONFIGURATION: fedora40_makefiles_clang
|
||||
CMAKE_GENERATOR: "Unix Makefiles"
|
||||
|
||||
.fedora40_makefiles_lfortran:
|
||||
extends: .fedora40
|
||||
|
||||
variables:
|
||||
# FIXME(lfortran): -rpath flags with spaces not forwarded
|
||||
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
|
||||
CMAKE_CONFIGURATION: fedora40_makefiles_lfortran
|
||||
CMAKE_GENERATOR: "Unix Makefiles"
|
||||
CTEST_LABELS: "Fortran"
|
||||
|
||||
.fedora40_ninja_lfortran:
|
||||
extends: .fedora40
|
||||
|
||||
variables:
|
||||
# FIXME(lfortran): -rpath flags with spaces not forwarded
|
||||
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake-ci"
|
||||
CMAKE_CONFIGURATION: fedora40_ninja_lfortran
|
||||
CTEST_LABELS: "Fortran"
|
||||
|
||||
.fedora40_ninja_clang:
|
||||
extends: .fedora40
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
lfortran
|
||||
--------
|
||||
|
||||
* The LFortran compiler is now supported with
|
||||
:variable:`compiler id <CMAKE_<LANG>_COMPILER_ID>` ``LFortran``.
|
||||
@@ -32,6 +32,7 @@ Value Name
|
||||
``Intel`` Intel Classic Compiler
|
||||
``IntelLLVM`` `Intel LLVM-Based Compiler`_
|
||||
``LCC`` MCST Elbrus C/C++/Fortran Compiler
|
||||
``LFortran`` LFortran Fortran Compiler
|
||||
``MSVC`` `Microsoft Visual Studio`_
|
||||
``NVHPC`` `NVIDIA HPC Compiler`_
|
||||
``NVIDIA`` `NVIDIA CUDA Compiler`_
|
||||
|
||||
@@ -60,6 +60,7 @@ else()
|
||||
# ifx: Intel Fortran LLVM-based compiler
|
||||
# ifort: Intel Classic Fortran compiler
|
||||
# nagfor: NAG Fortran compiler
|
||||
# lfortran: LFortran Fortran Compiler
|
||||
#
|
||||
# GNU is last to be searched,
|
||||
# so if you paid for a compiler it is picked by default.
|
||||
@@ -108,6 +109,9 @@ else()
|
||||
|
||||
# Intel on windows does not preprocess by default.
|
||||
"-fpp"
|
||||
|
||||
# LFortran does not preprocess by default.
|
||||
"--cpp-infer"
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -179,6 +179,11 @@
|
||||
# elif defined(__FRT_version__)
|
||||
PRINT *, 'INFO:compiler_version['//__FRT_version__//']'
|
||||
# endif
|
||||
#elif defined(__LFORTRAN__)
|
||||
PRINT *, 'INFO:compiler[LFortran]'
|
||||
#define COMPILER_VERSION_MAJOR DEC(__LFORTRAN_MAJOR__)
|
||||
#define COMPILER_VERSION_MINOR DEC(__LFORTRAN_MINOR__)
|
||||
#define COMPILER_VERSION_PATCH DEC(__LFORTRAN_PATCHLEVEL__)
|
||||
#else
|
||||
PRINT *, 'INFO:compiler[]'
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
string(APPEND CMAKE_Fortran_FLAGS_DEBUG_INIT " -g")
|
||||
string(APPEND CMAKE_Fortran_FLAGS_MINSIZEREL_INIT " ")
|
||||
string(APPEND CMAKE_Fortran_FLAGS_RELEASE_INIT " -O3")
|
||||
string(APPEND CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT " -O2 -g")
|
||||
set(CMAKE_Fortran_MODDIR_FLAG "-J")
|
||||
set(CMAKE_Fortran_VERBOSE_FLAG "-v")
|
||||
set(CMAKE_Fortran_FORMAT_FIXED_FLAG "--fixed-form")
|
||||
set(CMAKE_Fortran_LINKER_WRAPPER_FLAG "-Wl,")
|
||||
set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_ON "--cpp")
|
||||
set(CMAKE_Fortran_COMPILE_OPTIONS_PREPROCESS_OFF "--no-cpp")
|
||||
set(CMAKE_Fortran_PREPROCESS_SOURCE "<CMAKE_Fortran_COMPILER> --cpp <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
|
||||
set(CMAKE_Fortran_COMPILE_OBJECT "<CMAKE_Fortran_COMPILER> --cpp-infer <DEFINES> <INCLUDES> <FLAGS> --generate-object-code -c <SOURCE> -o <OBJECT>")
|
||||
set(CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS "--shared")
|
||||
set(CMAKE_SHARED_LIBRARY_LINK_Fortran_FLAGS "-Wl,-export-dynamic")
|
||||
@@ -100,6 +100,10 @@ target_link_libraries(symbols PUBLIC myfort)
|
||||
# the C compiler produces PIC even if it is not its default.
|
||||
set_property(TARGET symbols PROPERTY POSITION_INDEPENDENT_CODE 1)
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran")
|
||||
add_compile_options(--implicit-interface)
|
||||
endif()
|
||||
|
||||
# Require symbols through Fortran.
|
||||
add_executable(FortranCInterface main.F call_sub.f ${call_mod})
|
||||
target_link_libraries(FortranCInterface PUBLIC symbols)
|
||||
|
||||
@@ -3335,7 +3335,10 @@ if(BUILD_TESTING)
|
||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Fortran")
|
||||
set_property(TEST Fortran APPEND PROPERTY LABELS "Fortran")
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_SUPPORTS_F90)
|
||||
if(CMAKE_Fortran_COMPILER_SUPPORTS_F90
|
||||
# FIXME(lfortran): The compiler fails on the test's modules.
|
||||
AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran"
|
||||
)
|
||||
add_test(FortranModules ${CMAKE_CTEST_COMMAND}
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/FortranModules"
|
||||
|
||||
@@ -37,6 +37,10 @@ if(WIN32 AND NOT CYGWIN)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran")
|
||||
add_compile_options(--implicit-interface)
|
||||
endif()
|
||||
|
||||
add_library(hello STATIC hello.f)
|
||||
add_library(world ${_SHARED} world.f ${world_def})
|
||||
add_executable(testf testf.f)
|
||||
|
||||
@@ -7,6 +7,10 @@ if("${CMAKE_Fortran_COMPILER_ID};${CMAKE_Fortran_SIMULATE_ID}" MATCHES "^Intel(L
|
||||
string(APPEND CMAKE_Fortran_FLAGS_RELWITHDEBINFO " -Z7")
|
||||
endif()
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran")
|
||||
add_compile_options(--implicit-interface)
|
||||
endif()
|
||||
|
||||
# create a library with hello and world functions
|
||||
add_library(FortranOnlylib hello.f world.f)
|
||||
set_property(TARGET FortranOnlylib PROPERTY Fortran_FORMAT FIXED)
|
||||
|
||||
@@ -3,6 +3,10 @@ project(CheckIPOSupported-Fortran LANGUAGES Fortran)
|
||||
|
||||
cmake_policy(SET CMP0069 NEW)
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran")
|
||||
add_compile_options(--implicit-interface)
|
||||
endif()
|
||||
|
||||
include(CheckIPOSupported)
|
||||
check_ipo_supported(RESULT ipo_supported OUTPUT ipo_output)
|
||||
if(ipo_supported)
|
||||
|
||||
@@ -68,7 +68,10 @@ if(NOT RunCMake_GENERATOR STREQUAL "Xcode")
|
||||
unset(run_BuildDepends_skip_step_2)
|
||||
endif()
|
||||
|
||||
if(CMake_TEST_Fortran)
|
||||
if(CMake_TEST_Fortran
|
||||
# FIXME(lfortran): The compiler fails on the test's includes.
|
||||
AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran"
|
||||
)
|
||||
run_BuildDepends(FortranInclude)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -217,7 +217,10 @@ if(CMAKE_GENERATOR MATCHES "Ninja")
|
||||
-DCMAKE_SHARED_LIBRARY_PREFIX=${CMAKE_SHARED_LIBRARY_PREFIX}
|
||||
-DCMAKE_SHARED_LIBRARY_SUFFIX=${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||
if(CMAKE_Fortran_COMPILER)
|
||||
list(APPEND Ninja_ARGS -DTEST_Fortran=1)
|
||||
list(APPEND Ninja_ARGS
|
||||
-DCMake_TEST_Fortran=1
|
||||
-DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
|
||||
)
|
||||
endif()
|
||||
if(ninja_test_with_qt_version)
|
||||
list(APPEND Ninja_ARGS
|
||||
@@ -333,7 +336,10 @@ if(NOT DEFINED CMake_TEST_BuildDepends_GNU_AS
|
||||
endif()
|
||||
|
||||
if(CMAKE_Fortran_COMPILER)
|
||||
list(APPEND BuildDepends_ARGS -DCMake_TEST_Fortran=1)
|
||||
list(APPEND BuildDepends_ARGS
|
||||
-DCMake_TEST_Fortran=1
|
||||
-DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
|
||||
)
|
||||
endif()
|
||||
|
||||
add_RunCMake_test(BuildDepends
|
||||
@@ -684,7 +690,13 @@ if(CMake_TEST_CUDA)
|
||||
set_property(TEST RunCMake.CUDA_architectures APPEND PROPERTY LABELS "CUDA")
|
||||
endif()
|
||||
|
||||
add_RunCMake_test(DependencyGraph -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER})
|
||||
if(CMAKE_Fortran_COMPILER)
|
||||
list(APPEND DependencyGraph_ARGS
|
||||
-DCMake_TEST_Fortran=1
|
||||
-DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}
|
||||
)
|
||||
endif()
|
||||
add_RunCMake_test(DependencyGraph)
|
||||
set_property(TEST RunCMake.DependencyGraph APPEND PROPERTY LABELS "Fortran")
|
||||
|
||||
# Add C++ Module tests.
|
||||
|
||||
@@ -60,7 +60,7 @@ run_cmake(Property)
|
||||
|
||||
run_optimize_test(OptimizeShared SharedTop)
|
||||
run_optimize_test(OptimizeStatic StaticTop)
|
||||
if(CMAKE_Fortran_COMPILER)
|
||||
if(CMake_TEST_Fortran)
|
||||
run_optimize_test(OptimizeFortran FortranTop)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
function mylib_fortran()
|
||||
integer :: mylib_fortran
|
||||
mylib_fortran = 42
|
||||
end function mylib_fortran
|
||||
|
||||
@@ -108,7 +108,10 @@ run_cmake(JobPoolUsesTerminal)
|
||||
|
||||
run_cmake(RspFileC)
|
||||
run_cmake(RspFileCXX)
|
||||
if(TEST_Fortran)
|
||||
if(CMake_TEST_Fortran
|
||||
# FIXME(lfortran): The compiler does not support response files.
|
||||
AND NOT CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran"
|
||||
)
|
||||
run_cmake(RspFileFortran)
|
||||
endif()
|
||||
|
||||
|
||||
@@ -25,6 +25,10 @@ target_link_libraries(sunq sunquad)
|
||||
set(${result} "${RESULT}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
if(CMAKE_Fortran_COMPILER_ID STREQUAL "LFortran")
|
||||
add_compile_options(--implicit-interface)
|
||||
endif()
|
||||
|
||||
# check for the fortran c interface mangling
|
||||
include(FortranCInterface)
|
||||
FortranCInterface_HEADER(HelloWorldFCMangle.h
|
||||
|
||||
Reference in New Issue
Block a user