@@ -7,15 +7,15 @@ set ( CMAKE_BUILD_TYPE "Release"
7
7
set_property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${CMAKE_CONFIGURATION_TYPES} )
8
8
9
9
#Name project and specify source languages
10
- project (opencoarrays VERSION 1.6.3 LANGUAGES C Fortran )
10
+ project (opencoarrays VERSION 1.7.5 LANGUAGES C Fortran )
11
11
12
12
#Print an error message on an attempt to build inside the source directory tree:
13
13
if ("${CMAKE_CURRENT_SOURCE_DIR} " STREQUAL "${CMAKE_CURRENT_BINARY_DIR} " )
14
14
message (FATAL_ERROR "ERROR! "
15
15
"CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} "
16
16
" == CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} "
17
17
"\n This archive does not support in-source builds:\n "
18
- "You must now delete the CMakeCache.txt file and the CMakeFiles/ directory under"
18
+ "You must now delete the CMakeCache.txt file and the CMakeFiles/ directory under "
19
19
"the 'src' source directory or you will not be able to configure correctly!"
20
20
"\n You must now run something like:\n "
21
21
" $ rm -r CMakeCache.txt CMakeFiles/"
88
88
endif ()
89
89
90
90
if (gfortran_compiler )
91
+ set (OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} )
91
92
set (CMAKE_REQUIRED_FLAGS "-fcoarray=single -ffree-form" )
92
93
endif ()
93
94
include (CheckFortranSourceCompiles )
@@ -99,9 +100,180 @@ CHECK_Fortran_SOURCE_COMPILES("
99
100
end program
100
101
" Check_Simple_Coarray_Fortran_Source_Compiles )
101
102
if (gfortran_compiler )
102
- unset (CMAKE_REQUIRED_FLAGS )
103
+ set (CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS} )
104
+ unset (OLD_REQUIRED_FLAGS )
103
105
endif ()
104
106
107
+
108
+ #----------------------------------------------------------------------------
109
+ # Find MPI and set some flags so that FC and CC can point to gfortran and gcc
110
+ #----------------------------------------------------------------------------
111
+
112
+ # If the user passes FC=mpif90 etc. check and prefer that location
113
+ get_filename_component ( FTN_COMPILER_NAME "${CMAKE_Fortran_COMPILER} "
114
+ NAME )
115
+ get_filename_component ( C_COMPILER_NAME "${CMAKE_C_COMPILER} "
116
+ NAME )
117
+ get_filename_component ( FTN_COMPILER_DIR "${CMAKE_Fortran_COMPILER} "
118
+ REALPATH )
119
+ get_filename_component ( C_COMPILER_DIR "${CMAKE_C_COMPILER} "
120
+ REALPATH )
121
+
122
+ if (FTN_COMPILER_NAME MATCHES '^[mM][pP][iI]' )
123
+ set (MPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER} " )
124
+ endif ()
125
+ if (C_COMPILER_NAME MATCHES '^[mM][pP][iI]' )
126
+ set (MPI_C_COMPILER "${CMAKE_C_COMPILER} " )
127
+ endif ()
128
+
129
+ find_package ( MPI )
130
+
131
+ if ( (NOT MPI_C_FOUND ) OR (NOT MPI_Fortran_FOUND ) )
132
+ find_program (MY_MPI_EXEC NAMES mpirun mpiexec lamexec srun
133
+ PATHS "${CMAKE_SOURCE_DIR/prerequisites/installations/mpich/3.1.4}" "${CMAKE_SOURCE_DIR} /prerequisites/installations/mpich/*" ENV PATH
134
+ HINTS "${FTN_COMPILER_DIR} " "${C_COMPILER_DIR} "
135
+ PATH_SUFFIXES bin )
136
+ set ( MPI_HOME "${MPI_HOME} " "${MY_MPI_EXEC} " "${MY_MPI_EXEC} /.." )
137
+ find_package ( MPI REQUIRED )
138
+ endif ()
139
+
140
+ #--------------------------------------------------------
141
+ # Make sure a simple "hello world" C mpi program compiles
142
+ #--------------------------------------------------------
143
+ set (OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} )
144
+ set (CMAKE_REQUIRED_FLAGS ${MPI_C_COMPILE_FLAGS} ${MPI_C_LINK_FLAGS} )
145
+ set (OLD_INCLUDES ${CMAKE_REQUIRED_INCLUDES} )
146
+ set (CMAKE_REQUIRED_INCLUDES ${MPI_C_INCLUDE_PATH} )
147
+ set (OLD_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} )
148
+ set (CMAKE_REQUIRED_LIBRARIES ${MPI_C_LIBRARIES} )
149
+ include (CheckCSourceCompiles )
150
+ CHECK_C_SOURCE_COMPILES ("
151
+ #include <mpi.h>
152
+ #include <stdio.h>
153
+ int main(int argc, char** argv) {
154
+ MPI_Init(NULL, NULL);
155
+ int world_size;
156
+ MPI_Comm_size(MPI_COMM_WORLD, &world_size);
157
+ int world_rank;
158
+ MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
159
+ char processor_name[MPI_MAX_PROCESSOR_NAME];
160
+ int name_len;
161
+ MPI_Get_processor_name(processor_name, &name_len);
162
+ printf('Hello world from processor %s, rank %d out of %d processors',
163
+ processor_name, world_rank, world_size);
164
+ MPI_Finalize();
165
+ }"
166
+ MPI_C_COMPILES )
167
+ set (CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS} )
168
+ set (CMAKE_REQUIRED_INCLUDES ${OLD_INCLUDES} )
169
+ set (CMAKE_REQUIRED_LIBRARIES ${OLD_LIBRARIES} )
170
+ unset (OLD_REQUIRED_FLAGS )
171
+ unset (OLD_INCLUDES )
172
+ unset (OLD_LIBRARIES )
173
+
174
+ if (NOT MPI_C_COMPILES )
175
+ message (FATAL_ERROR "MPI_C is missing! "
176
+ "Try setting MPI_C_COMPILER to the appropriate C compiler wrapper script and reconfigure. "
177
+ "i.e., `cmake -DMPI_C_COMPILER=/path/to/mpicc ..` or set it by editing the cache using "
178
+ "cmake-gui or ccmake."
179
+ )
180
+ endif ()
181
+
182
+ #--------------------------------------------------------------
183
+ # Make sure a simple "hello world" Fortran mpi program compiles
184
+ # Try using mpi.mod first then fall back on includ 'mpif.h'
185
+ #--------------------------------------------------------------
186
+ set (OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} )
187
+ set (CMAKE_REQUIRED_FLAGS "-ffree-form" ${MPI_Fortran_COMPILE_FLAGS} ${MPI_Fortran_LINK_FLAGS} )
188
+ set (OLD_INCLUDES ${CMAKE_REQUIRED_INCLUDES} )
189
+ set (CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_PATH} )
190
+ set (OLD_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} )
191
+ set (CMAKE_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES} )
192
+ include (CheckCSourceCompiles )
193
+ CHECK_Fortran_SOURCE_COMPILES ("
194
+ program mpi_hello
195
+ use mpi
196
+ implicit none
197
+ integer :: ierr, mpi_world_size, mpi_world_rank, res_len
198
+ character*(MPI_MAX_PROCESSOR_NAME) :: proc
199
+ call mpi_init(ierr)
200
+ call mpi_comm_size(MPI_COMM_WORLD,mpi_world_size,ierr)
201
+ call mpi_comm_rank(MPI_COMM_WORLD,mpi_world_rank,ierr)
202
+ call mpi_get_processor_name(proc,res_len,ierr)
203
+ write(*,*) 'Hello from processor ', trim(proc), ' rank ', mpi_world_rank, ' out of ', mpi_world_size, '.'
204
+ call mpi_finalize(ierr)
205
+ end program
206
+ "
207
+ MPI_Fortran_MODULE_COMPILES )
208
+ set (CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS} )
209
+ set (CMAKE_REQUIRED_INCLUDES ${OLD_INCLUDES} )
210
+ set (CMAKE_REQUIRED_LIBRARIES ${OLD_LIBRARIES} )
211
+ unset (OLD_REQUIRED_FLAGS )
212
+ unset (OLD_INCLUDES )
213
+ unset (OLD_LIBRARIES )
214
+
215
+ #--------------------------------
216
+ # If that failed try using mpif.h
217
+ #--------------------------------
218
+ set (OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} )
219
+ set (CMAKE_REQUIRED_FLAGS "-ffree-form" ${MPI_Fortran_COMPILE_FLAGS} ${MPI_Fortran_LINK_FLAGS} )
220
+ set (OLD_INCLUDES ${CMAKE_REQUIRED_INCLUDES} )
221
+ set (CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_PATH} )
222
+ set (OLD_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} )
223
+ set (CMAKE_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES} )
224
+ include (CheckCSourceCompiles )
225
+ CHECK_Fortran_SOURCE_COMPILES ("
226
+ program mpi_hello
227
+ implicit none
228
+ include 'mpif.h'
229
+ integer :: ierr, mpi_world_size, mpi_world_rank, res_len
230
+ character*(MPI_MAX_PROCESSOR_NAME) :: proc
231
+ call mpi_init(ierr)
232
+ call mpi_comm_size(MPI_COMM_WORLD,mpi_world_size,ierr)
233
+ call mpi_comm_rank(MPI_COMM_WORLD,mpi_world_rank,ierr)
234
+ call mpi_get_processor_name(proc,res_len,ierr)
235
+ write(*,*) 'Hello from processor ', trim(proc), ' rank ', mpi_world_rank, ' out of ', mpi_world_size, '.'
236
+ call mpi_finalize(ierr)
237
+ end program
238
+ "
239
+ MPI_Fortran_INCLUDE_COMPILES )
240
+ set (CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS} )
241
+ set (CMAKE_REQUIRED_INCLUDES ${OLD_INCLUDES} )
242
+ set (CMAKE_REQUIRED_LIBRARIES ${OLD_LIBRARIES} )
243
+ unset (OLD_REQUIRED_FLAGS )
244
+ unset (OLD_INCLUDES )
245
+ unset (OLD_LIBRARIES )
246
+
247
+ if ( (NOT MPI_Fortran_MODULE_COMPILES ) AND (NOT MPI_Fortran_INCLUDE_COMPILES ) )
248
+ message ( WARNING "It appears that the Fortran MPI compiler is not working. "
249
+ "For OpenCoarrays Aware compilers, this may be irrelavent: "
250
+ " The src/extensions/opencoarrays.F90 module will be disabled, but it is "
251
+ " possible that the build will succeed, despite this fishy circumstance."
252
+ )
253
+ endif ()
254
+
255
+ if ( MPI_Fortran_MODULE_COMPILES )
256
+ add_definitions (-DMPI_WORKING_MODULE )
257
+ else ()
258
+ message ( WARNING "It appears that MPI was built with a different Fortran compiler. "
259
+ "It is possible that this may cause unpredictable behavior. The build will continue "
260
+ "using `mpif.h` BUT please report any suspicious behavior to the OpenCoarrays "
261
+ "developers."
262
+ )
263
+ endif ()
264
+
265
+ #----------------
266
+ # Setup MPI flags
267
+ #----------------
268
+ set (CMAKE_C_COMPILE_FLAGS ${CMAKE_C_COMPILE_FLAGS} ${MPI_C_COMPILE_FLAGS} )
269
+ set (CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS} ${MPI_C_LINK_FLAGS} )
270
+ set (CMAKE_Fortran_COMPILE_FLAGS ${CMAKE_Fortran_COMPILE_FLAGS} ${MPI_Fortran_COMPILE_FLAGS} )
271
+ set (CMAKE_Fortran_LINK_FLAGS ${CMAKE_Fortran_LINK_FLAGS} ${MPI_Fortran_LINK_FLAGS} )
272
+ include_directories (BEFORE ${MPI_C_INCLUDE_PATH} ${MPI_Fortran_INCLUDE_PATH} )
273
+
274
+ #-------------------------------
275
+ # Recurse into the src directory
276
+ #-------------------------------
105
277
include_directories (${CMAKE_CURRENT_SOURCE_DIR} /src )
106
278
107
279
add_subdirectory (src )
@@ -148,9 +320,12 @@ configure_file ( "${CMAKE_SOURCE_DIR}/cmake/uninstall.cmake.in" "${CMAKE_BINARY_
148
320
add_custom_target ( uninstall
149
321
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR} /uninstall.cmake" )
150
322
151
-
152
323
enable_testing ()
153
324
325
+ add_custom_target (check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure )
326
+ # See JSON-Fortran's CMakeLists.txt file to find out how to get the check target to depend
327
+ # on the test executables
328
+
154
329
# Determine if we're using Open MPI
155
330
execute_process (COMMAND ${MPIEXEC} --version
156
331
OUTPUT_VARIABLE mpi_version_out )
@@ -167,7 +342,7 @@ function(add_mpi_test name num_mpi_proc path)
167
342
if ( openmpi )
168
343
if ( N LESS 2 )
169
344
set ( num_mpi_proc 2 )
170
- set (test_parameters --oversubscribed )
345
+ set (test_parameters --oversubscribe )
171
346
else ()
172
347
set ( num_mpi_proc ${N} )
173
348
endif ()
@@ -185,31 +360,44 @@ if(opencoarrays_aware_compiler)
185
360
# Unit tests targeting each libcaf_mpi function, argument, and branch of code
186
361
add_mpi_test (initialize_mpi 2 ${tests_root} /unit/init_register/initialize_mpi )
187
362
add_mpi_test (register 2 ${tests_root} /unit/init_register/register )
188
- add_mpi_test (register_rename_me 2 ${tests_root} /unit/init_register/register_rename_me )
189
- add_mpi_test (register_rename_me_too 2 ${tests_root} /unit/init_register/register_rename_me_too )
363
+ add_mpi_test (register_vector 2 ${tests_root} /unit/init_register/register_vector )
364
+ add_mpi_test (register_alloc_vector 2 ${tests_root} /unit/init_register/register_alloc_vector )
190
365
add_mpi_test (allocate_as_barrier 2 ${tests_root} /unit/init_register/allocate_as_barrier )
191
366
add_mpi_test (allocate_as_barrier_proc 32 ${tests_root} /unit/init_register/allocate_as_barrier_proc )
367
+ if (gfortran_compiler AND (NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 7 ))
368
+ add_mpi_test (register_alloc_comp_1 2 ${tests_root} /unit/init_register/register_alloc_comp_1 )
369
+ add_mpi_test (register_alloc_comp_2 2 ${tests_root} /unit/init_register/register_alloc_comp_2 )
370
+ add_mpi_test (register_alloc_comp_3 2 ${tests_root} /unit/init_register/register_alloc_comp_3 )
371
+ add_mpi_test (check_remote_alloced_comp_1 6 ${tests_root} /unit/init_register/check_remote_alloced_comp_1 )
372
+ endif ()
192
373
add_mpi_test (get_array 2 ${tests_root} /unit/send-get/get_array )
374
+ add_mpi_test (get_self 2 ${tests_root} /unit/send-get/get_self )
193
375
add_mpi_test (send_array 2 ${tests_root} /unit/send-get/send_array )
194
376
add_mpi_test (get_with_offset_1d 2 ${tests_root} /unit/send-get/get_with_offset_1d )
195
377
add_mpi_test (whole_get_array 2 ${tests_root} /unit/send-get/whole_get_array )
196
378
add_mpi_test (strided_get 2 ${tests_root} /unit/send-get/strided_get )
379
+ add_mpi_test (strided_sendget 3 ${tests_root} /unit/send-get/strided_sendget )
197
380
add_mpi_test (co_sum 4 ${tests_root} /unit/collectives/co_sum_test )
198
381
add_mpi_test (co_broadcast 4 ${tests_root} /unit/collectives/co_broadcast_test )
199
382
add_mpi_test (co_min 4 ${tests_root} /unit/collectives/co_min_test )
200
383
add_mpi_test (co_max 4 ${tests_root} /unit/collectives/co_max_test )
201
384
add_mpi_test (syncall 32 ${tests_root} /unit/sync/syncall )
202
385
add_mpi_test (syncimages 32 ${tests_root} /unit/sync/syncimages )
386
+ add_mpi_test (syncimages2 32 ${tests_root} /unit/sync/syncimages2 )
203
387
add_mpi_test (duplicate_syncimages 8 ${tests_root} /unit/sync/duplicate_syncimages )
204
388
add_mpi_test (co_reduce 4 ${tests_root} /unit/collectives/co_reduce_test )
205
389
add_mpi_test (syncimages_status 32 ${tests_root} /unit/sync/syncimages_status )
390
+ add_mpi_test (simpleatomics 32 ${tests_root} /unit/simple/atomics )
391
+ # possible logic error in the following test
392
+ # add_mpi_test(increment_my_neighbor 32 ${tests_root}/unit/simple/increment_my_neighbor)
206
393
207
394
# Integration tests verifying the use of libcaf_mpi in applications
208
395
add_mpi_test (hello_multiverse 2 ${tests_root} /integration/coarrayHelloWorld/hello_multiverse )
209
396
add_mpi_test (coarray_burgers_pde 2 ${tests_root} /integration/pde_solvers/coarrayBurgers/coarray_burgers_pde )
210
397
add_mpi_test (co_heat 2 ${tests_root} /integration/pde_solvers/coarrayHeatSimplified/co_heat )
398
+ add_mpi_test (asynchronous_hello_world 2 ${tests_root} /integration/events/asynchronous_hello_world )
211
399
if ( ("${CMAKE_SYSTEM_PROCESSOR} " MATCHES "x86_64" ) AND ("${CMAKE_SYSTEM_NAME} " MATCHES "Linux" ) )
212
- if ( NOT (DEFINED ENV{TRAVIS} ))
400
+ if ( ( NOT (DEFINED ENV{TRAVIS} )) AND ( NOT SKIP_ASSEMBLY_DEPS ) )
213
401
add_mpi_test (coarray_navier_stokes 2 ${tests_root} /integration/pde_solvers/navier-stokes/coarray_navier_stokes )
214
402
set_property (TEST coarray_navier_stokes PROPERTY PASS_REGULAR_EXPRESSION "Test passed." )
215
403
endif ()
@@ -230,3 +418,6 @@ else()
230
418
add_test (co_reduce_extension ${tests_root} /unit/extensions/test-co_reduce-extension.sh )
231
419
set_property (TEST co_reduce_extension PROPERTY PASS_REGULAR_EXPRESSION "Test passed." )
232
420
endif ()
421
+
422
+ include (AddInstallationScriptTest.cmake )
423
+ add_installation_script_test (installation-scripts.sh src/tests/installation/ )
0 commit comments