File: CMakeLists.txt

package info (click to toggle)
cmake 4.2.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 152,456 kB
  • sloc: ansic: 403,896; cpp: 303,920; sh: 4,105; python: 3,583; yacc: 3,106; lex: 1,279; f90: 538; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 111; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (154 lines) | stat: -rw-r--r-- 5,502 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
cmake_minimum_required(VERSION 3.10)
project(FortranModules Fortran)

if(CMAKE_GENERATOR MATCHES "FASTBuild")
  return()
endif()

if("${CMAKE_Fortran_COMPILER_ID};${CMAKE_Fortran_SIMULATE_ID}" MATCHES "^Intel(LLVM)?;MSVC$")
  string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -Z7")
  string(APPEND CMAKE_Fortran_FLAGS_RELWITHDEBINFO " -Z7")
endif()

if(NOT DEFINED CMake_TEST_NESTED_MAKE_PROGRAM AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
  set(CMake_TEST_NESTED_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}")
endif()

if(NOT DEFINED CMake_TEST_Fortran_SUBMODULES AND (
    # FIXME(#18925): We do not support Cray's module file names.
    CMAKE_Fortran_COMPILER_ID STREQUAL "Cray"
    ))
  set(CMake_TEST_Fortran_SUBMODULES 0)
endif()

if(NOT DEFINED CMake_TEST_Fortran_SUBMODULES)
  include(CheckFortranSourceCompiles)
  check_fortran_source_compiles([[
module parent
  interface
    module function id(x)
       real, intent(in) :: x
       real :: id
    end function id
  end interface
end module parent
submodule ( parent ) child
contains
  module procedure id
    id = x
  end procedure id
end submodule child
program main
end program
]] HAVE_SUBMODULES SRC_EXT F90)
  set(CMake_TEST_Fortran_SUBMODULES ${HAVE_SUBMODULES})
elseif(CMake_TEST_Fortran_SUBMODULES)
  message(STATUS "Enabling Fortran submodule tests by explicit request.")
endif()

add_executable(test_module
  test_module_main.f90
  test_module_implementation.f90
  test_module_interface.f90)

add_executable(test_multi_module
  # Place this first so that we do not get "lucky" and find the module provided
  # by compiling `test_multi_module.f90` first.
  test_multi_module_main.f90
  test_multi_module.f90)
set_property(TARGET test_multi_module PROPERTY
  JOB_POOL_COMPILE multi_module_serial)
set_property(GLOBAL APPEND PROPERTY
  JOB_POOLS multi_module_serial=1)

add_executable(test_use_in_comment_fixedform
  test_use_in_comment_fixedform.f)
set_property(SOURCE test_use_in_comment_fixedform.f PROPERTY Fortran_FORMAT FIXED)
add_executable(test_use_in_comment_freeform
  test_use_in_comment_freeform.f90)
set_property(SOURCE test_use_in_comment_freeform.f90 PROPERTY Fortran_FORMAT FREE)

add_executable(test_in_interface
  in_interface/main.f90
  in_interface/module.f90)

add_definitions(-DFOO -DBAR=1)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_executable(test_preprocess test_preprocess.F90 test_preprocess_module.F90)

add_executable(test_non_pp_include test_non_pp_include_main.f90 test_non_pp_include_module.f90)

# Build the external project separately using a custom target.
# Make sure it uses the same build configuration as this test.
get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(_isMultiConfig)
  set(External_CONFIG_TYPE -C "${CMAKE_CFG_INTDIR}")
  set(External_BUILD_TYPE)
else()
  set(External_CONFIG_TYPE)
  set(External_BUILD_TYPE -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE})
endif()
set(External_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/External")
set(External_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/External")
if("${CMAKE_CURRENT_BINARY_DIR}" MATCHES " ")
  # Our build tree has a space, so the build tool supports spaces.
  # Test using modules from a path with spaces.
  string(APPEND External_BINARY_DIR " Build")
endif()
add_custom_command(
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ExternalProject
  COMMAND ${CMAKE_CTEST_COMMAND}
  ARGS ${External_CONFIG_TYPE}
       --build-and-test
       ${External_SOURCE_DIR}
       ${External_BINARY_DIR}
       --build-noclean
       --build-two-config
       --build-project ExtFort
       --build-generator ${CMAKE_GENERATOR}
       --build-generator-platform "${CMAKE_GENERATOR_PLATFORM}"
       --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}"
       --build-options -DCMAKE_Fortran_COMPILER:STRING=${CMAKE_Fortran_COMPILER}
                       -DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS}
                       -DCMAKE_Fortran_FLAGS_DEBUG:STRING=${CMAKE_Fortran_FLAGS_DEBUG}
                       -DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE}
                       -DCMAKE_Fortran_FLAGS_MINSIZEREL:STRING=${CMAKE_Fortran_FLAGS_MINSIZEREL}
                       -DCMAKE_Fortran_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_Fortran_FLAGS_RELWITHDEBINFO}
                       -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMake_TEST_NESTED_MAKE_PROGRAM}
                       ${External_BUILD_TYPE}
  VERBATIM
  )
add_custom_target(ExternalTarget ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ExternalProject)

# Test module output directory if available.
if(CMAKE_Fortran_MODDIR_FLAG)
  set(Library_MODDIR "${CMAKE_CURRENT_BINARY_DIR}/Library/modules")
else()
  set(Library_MODDIR "${CMAKE_CURRENT_BINARY_DIR}/Library")
endif()

add_subdirectory(Library)
add_subdirectory(Subdir)
add_subdirectory(Executable)

if(CMake_TEST_Fortran_SUBMODULES)
  add_subdirectory(Submodules)
endif()

add_subdirectory(Issue25112)
add_subdirectory(Issue25223)
if( # Intel Fortran VS Integration breaks on custom targets with Fortran sources
    NOT CMAKE_GENERATOR MATCHES "Visual Studio")
  add_subdirectory(Issue25252)
  add_subdirectory(Issue25252-iface-target)
endif()
add_subdirectory(Issue25252-iface-sources)

add_subdirectory(Issue25365-target-objects)
add_subdirectory(Issue25365-target-objects-iface)

# Issue#25425
add_subdirectory(ModulesViaTargetObjectsSource)
add_subdirectory(ModulesViaSubdirTargetObjectsSource)
add_subdirectory(ModulesViaTargetObjectsLink)
add_subdirectory(ModulesViaSubdirTargetObjectsLink)