Skip to content

Commit 2b21cef

Browse files
committed
Merge branch 'windows-support' of github.com:sourceryinstitute/OpenCoarrays
2 parents 0382c9f + e8bc08e commit 2b21cef

File tree

10 files changed

+292
-121
lines changed

10 files changed

+292
-121
lines changed

CMakeLists.txt

Lines changed: 121 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
cmake_minimum_required(VERSION 3.10)
1+
cmake_minimum_required(VERSION 3.19)
22

3-
cmake_policy(VERSION 3.10...3.14)
3+
cmake_policy(VERSION 3.19...3.23)
44

55
if(DEFINED ENV{SOURCE_DATE_EPOCH})
66
set(SOURCE_DATE_EPOCH "$ENV{SOURCE_DATE_EPOCH}")
@@ -104,11 +104,11 @@ if(DEFINED CMAKE_BUILD_TYPE AND "${CMAKE_BUILD_TYPE}" MATCHES "[Rr][Ee][Ll]")
104104
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
105105
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fno-working-directory")
106106
endif()
107-
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.")
107+
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fdebug-prefix-map=\"${CMAKE_SOURCE_DIR}\"=.")
108108
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
109109
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-working-directory")
110110
endif()
111-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdebug-prefix-map=${CMAKE_SOURCE_DIR}=.")
111+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdebug-prefix-map=\"${CMAKE_SOURCE_DIR}\"=.")
112112
endif()
113113

114114
message( STATUS "Building OpenCoarrays version: ${full_git_describe}" )
@@ -139,6 +139,9 @@ endif()
139139
if(NOT CMAKE_REQUIRED_FLAGS)
140140
set(CMAKE_REQUIRED_FLAGS "")
141141
endif()
142+
if(NOT CMAKE_REQUIRED_DEFINITIONS)
143+
set(CMAKE_REQUIRED_DEFINITIONS "")
144+
endif()
142145
if(NOT CMAKE_REQUIRED_LIBRARIES)
143146
set(CMAKE_REQUIRED_LIBRARIES "")
144147
endif()
@@ -204,6 +207,9 @@ endif()
204207

205208
if(CMAKE_BUILD_TYPE MATCHES "Debug|DEBUG|debug")
206209
add_definitions(-DEXTRA_DEBUG_OUTPUT)
210+
set(IMPI_BUILD debug)
211+
else()
212+
set(IMPI_BUILD release)
207213
endif()
208214

209215
# We have populated CMAKE_Fortran_COMPILER_VERSION if it was missing
@@ -234,7 +240,7 @@ endif()
234240

235241
if(gfortran_compiler)
236242
set(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
237-
set(CMAKE_REQUIRED_FLAGS $<$<COMPILE_LANGUAGE:Fortran>:-fcoarray=single -ffree-form>)
243+
set(CMAKE_REQUIRED_FLAGS -fcoarray=single)
238244
endif()
239245
include(CheckFortranSourceCompiles)
240246
CHECK_Fortran_SOURCE_COMPILES("
@@ -243,7 +249,8 @@ CHECK_Fortran_SOURCE_COMPILES("
243249
integer :: i
244250
i = this_image()
245251
end program
246-
" Check_Simple_Coarray_Fortran_Source_Compiles)
252+
" Check_Simple_Coarray_Fortran_Source_Compiles
253+
SRC_EXT F90)
247254
if(gfortran_compiler)
248255
set (CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS})
249256
unset(OLD_REQUIRED_FLAGS)
@@ -273,102 +280,137 @@ if (C_COMPILER_NAME MATCHES "^[mM][pP][iI]")
273280
set (MPI_C_COMPILER "${CMAKE_C_COMPILER}")
274281
endif()
275282

283+
if(WIN32) # Only support building with GCC & GFortran using Intel MPI (OneAPI)
284+
# Here we assume Intel ONEAPI and the environment is loaded
285+
set( MPI_ASSUME_NO_BUILTIN_MPI TRUE )
286+
set( MPI_CXX_SKIP_MPICXX TRUE )
287+
cmake_path(SET MPI_ROOT NORMALIZE "$ENV{I_MPI_ROOT}")
288+
set (IMPI_LIB_DIR "${MPI_ROOT}/lib/${IMPI_BUILD}")
289+
set (IMPI_DLL_DIR "${MPI_ROOT}/bin/${IMPI_BUILD}")
290+
291+
find_library(IMPI_LIB
292+
"impi.lib"
293+
HINTS "${IMPI_LIB_DIR}"
294+
DOC "Location of the Intel MPI impi.lib file"
295+
REQUIRED
296+
NO_DEFAULT_PATH)
297+
298+
find_file(IMPI_DLL
299+
"impi.dll"
300+
HINTS "${IMPI_DLL_DIR}"
301+
DOC "Location of the Intel MPI impi.dll file"
302+
REQUIRED
303+
NO_DEFAULT_PATH)
304+
305+
306+
set( MPI_C_LIBRARIES ${IMPI_LIB};${IMPI_DLL} CACHE FILEPATH "MPI C libs to link" )
307+
set( MPI_C_LIB_NAMES impi CACHE FILEPATH "MPI lib names" )
308+
set( MPI_Fortran_LIBRARIES ${IMPI_LIB};${IMPI_DLL} CACHE FILEPATH "MPI Fortran libs to link" )
309+
set( MPI_Fortran_LIB_NAMES impi CACHE FILEPATH "MPI Fortran lib names" )
310+
set( MPI_impi_LIBRARY ${IMPI_LIB} CACHE FILEPATH "MPI lib to link" )
311+
312+
set(MPI_Fortran_HAVE_F90_MODULE FALSE)
313+
set(MPI_Fortran_HAVE_F08_MODULE FALSE)
314+
315+
endif()
276316
find_package( MPI )
277317

278-
if ( (NOT MPI_C_FOUND) OR (NOT MPI_Fortran_FOUND) OR (NOT MPIEXEC))
318+
if ( (NOT MPI_C_FOUND) OR (NOT MPI_Fortran_FOUND) OR (NOT MPIEXEC_EXECUTABLE))
279319
# Get default install location of MPICH from install.sh
280320
message(WARNING "Could not find all MPI components!")
281321
message(WARNING "
282322
MPI_C_FOUND = ${MPI_C_FOUND}
283323
MPI_Fortran_FOUND = ${MPI_Fortran_FOUND}
284-
MPIEXEC = ${MPIEXEC}
324+
MPIEXEC_EXECUTABLE = ${MPIEXEC_EXECUTABLE}
285325
")
286326
execute_process( COMMAND "./install.sh" -P mpich
287327
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
288328
OUTPUT_VARIABLE DEFAULT_MPICH_INSTALL_LOC
289329
OUTPUT_QUIET
290-
OUTPUT_STRIP_TRAILING_WHITESPACE
291-
)
330+
OUTPUT_STRIP_TRAILING_WHITESPACE)
292331
find_program (MY_MPI_EXEC NAMES mpirun mpiexec lamexec srun
293332
PATHS "${DEFAULT_MPICH_INSTALL_LOC}" ENV PATH
294333
HINTS "${FTN_COMPILER_DIR}" "${C_COMPILER_DIR}"
295334
PATH_SUFFIXES bin)
296335
set ( MPI_HOME "${MPI_HOME}" "${MY_MPI_EXEC}" "${MY_MPI_EXEC}/.." )
297336
find_package( MPI REQUIRED )
298337
endif()
299-
list(REMOVE_DUPLICATES MPI_Fortran_INCLUDE_PATH)
338+
list(REMOVE_DUPLICATES MPI_Fortran_INCLUDE_DIRS)
300339

301-
# Test for consistent MPI environment
302-
if (NOT MPIEXEC)
340+
# Test for consistent MPI environment but not on windows
341+
if (NOT MPIEXEC_EXECUTABLE)
303342
message ( ERROR "CMake failed to find `mpiexec` or similar. If building with `./install.sh` please
304343
report this bug to the OpenCoarrays developers at
305344
https://github.com/sourceryinstitute/opencoarrays/issues, otherwise point CMake
306345
to the desired MPI runtime.")
307346
else()
308347
add_definitions(-DHAVE_MPI)
309348
endif()
310-
311-
get_filename_component(MPIEXEC_RELATIVE_LOC "${MPIEXEC}"
312-
PROGRAM)
313-
get_filename_component(MPIEXEC_ABS_LOC "${MPIEXEC_RELATIVE_LOC}"
314-
REALPATH)
315-
get_filename_component(MPIEXEC_DIR "${MPIEXEC_ABS_LOC}"
316-
DIRECTORY)
317-
318-
get_filename_component(MPICC_RELATIVE_LOC "${MPI_C_COMPILER}"
319-
PROGRAM)
320-
get_filename_component(MPICC_ABS_LOC "${MPICC_RELATIVE_LOC}"
321-
REALPATH)
322-
get_filename_component(MPICC_DIR "${MPICC_ABS_LOC}"
323-
DIRECTORY)
324-
325-
get_filename_component(MPIFC_RELATIVE_LOC "${MPI_Fortran_COMPILER}"
326-
PROGRAM)
327-
get_filename_component(MPIFC_ABS_LOC "${MPIFC_RELATIVE_LOC}"
328-
REALPATH)
329-
get_filename_component(MPIFC_DIR "${MPIFC_ABS_LOC}"
330-
DIRECTORY)
331-
332-
if ((MPIEXEC_DIR STREQUAL MPICC_DIR) AND (MPIEXEC_DIR STREQUAL MPIFC_DIR))
333-
message ( STATUS "MPI runtime and compile time environments appear to be consistent")
334-
else()
335-
message ( WARNING "MPIEXEC is in \"${MPIEXEC_DIR},\"
349+
if(NOT WIN32)
350+
get_filename_component(MPIEXEC_RELATIVE_LOC "${MPIEXEC_EXECUTABLE}"
351+
PROGRAM)
352+
get_filename_component(MPIEXEC_ABS_LOC "${MPIEXEC_RELATIVE_LOC}"
353+
REALPATH)
354+
get_filename_component(MPIEXEC_DIR "${MPIEXEC_ABS_LOC}"
355+
DIRECTORY)
356+
357+
get_filename_component(MPICC_RELATIVE_LOC "${MPI_C_COMPILER}"
358+
PROGRAM)
359+
get_filename_component(MPICC_ABS_LOC "${MPICC_RELATIVE_LOC}"
360+
REALPATH)
361+
get_filename_component(MPICC_DIR "${MPICC_ABS_LOC}"
362+
DIRECTORY)
363+
364+
get_filename_component(MPIFC_RELATIVE_LOC "${MPI_Fortran_COMPILER}"
365+
PROGRAM)
366+
get_filename_component(MPIFC_ABS_LOC "${MPIFC_RELATIVE_LOC}"
367+
REALPATH)
368+
get_filename_component(MPIFC_DIR "${MPIFC_ABS_LOC}"
369+
DIRECTORY)
370+
371+
if ((MPIEXEC_DIR STREQUAL MPICC_DIR) AND (MPIEXEC_DIR STREQUAL MPIFC_DIR))
372+
message ( STATUS "MPI runtime and compile time environments appear to be consistent")
373+
else()
374+
message ( WARNING "MPIEXEC is in \"${MPIEXEC_DIR},\"
336375
which differs from the location of MPICC and/or MPIFC which are in
337376
\"${MPICC_DIR}\" and \"${MPIFC_DIR},\" respectively.
338377
This is likely indicative of a problem. If building with `./install.sh` please report
339378
this to the OpenCoarrays developers by filing a new issue at:
340379
https://github.com/sourceryinstitute/OpenCoarrays/issues/new")
341-
endif()
380+
endif()
342381

343-
#-----------------------------------------------
344-
# Work around bug #317 present on fedora systems
345-
#-----------------------------------------------
346-
if( (MPI_C_LINK_FLAGS MATCHES "noexecstack") OR (MPI_Fortran_LINK_FLAGS MATCHES "noexecstack") )
347-
message ( WARNING
348-
"The `noexecstack` linker flag was found in the MPI_<lang>_LINK_FLAGS variable. This is
382+
#-----------------------------------------------
383+
# Work around bug #317 present on fedora systems
384+
#-----------------------------------------------
385+
if( (MPI_C_LINK_FLAGS MATCHES "noexecstack") OR (MPI_Fortran_LINK_FLAGS MATCHES "noexecstack") )
386+
message ( WARNING
387+
"The `noexecstack` linker flag was found in the MPI_<lang>_LINK_FLAGS variable. This is
349388
known to cause segmentation faults for some Fortran codes. See, e.g.,
350389
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71729 or
351390
https://github.com/sourceryinstitute/OpenCoarrays/issues/317.
352391
353392
`noexecstack` is being replaced with `execstack`"
354-
)
355-
string(REPLACE "noexecstack"
356-
"execstack" MPI_C_LINK_FLAGS_FIXED ${MPI_C_LINK_FLAGS})
357-
string(REPLACE "noexecstack"
358-
"execstack" MPI_Fortran_LINK_FLAGS_FIXED ${MPI_Fortran_LINK_FLAGS})
359-
set(MPI_C_LINK_FLAGS "${MPI_C_LINK_FLAGS_FIXED}" CACHE STRING
360-
"MPI C linking flags" FORCE)
361-
set(MPI_Fortran_LINK_FLAGS "${MPI_Fortran_LINK_FLAGS_FIXED}" CACHE STRING
362-
"MPI Fortran linking flags" FORCE)
393+
)
394+
string(REPLACE "noexecstack"
395+
"execstack" MPI_C_LINK_FLAGS_FIXED ${MPI_C_LINK_FLAGS})
396+
string(REPLACE "noexecstack"
397+
"execstack" MPI_Fortran_LINK_FLAGS_FIXED ${MPI_Fortran_LINK_FLAGS})
398+
set(MPI_C_LINK_FLAGS "${MPI_C_LINK_FLAGS_FIXED}" CACHE STRING
399+
"MPI C linking flags" FORCE)
400+
set(MPI_Fortran_LINK_FLAGS "${MPI_Fortran_LINK_FLAGS_FIXED}" CACHE STRING
401+
"MPI Fortran linking flags" FORCE)
402+
endif()
363403
endif()
364404

365405
#--------------------------------------------------------
366406
# Make sure a simple "hello world" C mpi program compiles
367407
#--------------------------------------------------------
368408
set(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
369-
set(CMAKE_REQUIRED_FLAGS ${MPI_C_COMPILE_FLAGS} ${MPI_C_LINK_FLAGS})
409+
set(CMAKE_REQUIRED_FLAGS ${MPI_C_COMPILE_OPTIONS} ${MPI_C_LINK_FLAGS})
410+
set(OLD_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS})
411+
set(CMAKE_REQUIRED_DEFINITIONS ${MPI_C_COMPILE_DEFINITIONS})
370412
set(OLD_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
371-
set(CMAKE_REQUIRED_INCLUDES ${MPI_C_INCLUDE_PATH})
413+
set(CMAKE_REQUIRED_INCLUDES ${MPI_C_INCLUDE_DIRS})
372414
set(OLD_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
373415
set(CMAKE_REQUIRED_LIBRARIES ${MPI_C_LIBRARIES})
374416
include (CheckCSourceCompiles)
@@ -390,6 +432,7 @@ int main(int argc, char** argv) {
390432
}"
391433
MPI_C_COMPILES)
392434
set(CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS})
435+
set(CMAKE_REQUIRED_DEFINITIONS ${OLD_REQUIRED_DEFINITIONS})
393436
set(CMAKE_REQUIRED_INCLUDES ${OLD_INCLUDES})
394437
set(CMAKE_REQUIRED_LIBRARIES ${OLD_LIBRARIES})
395438
unset(OLD_REQUIRED_FLAGS)
@@ -409,9 +452,11 @@ endif()
409452
# Try using mpi.mod first then fall back on includ 'mpif.h'
410453
#--------------------------------------------------------------
411454
set(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
412-
set(CMAKE_REQUIRED_FLAGS "-ffree-form" ${MPI_Fortran_COMPILE_FLAGS} ${MPI_Fortran_LINK_FLAGS})
455+
set(CMAKE_REQUIRED_FLAGS "-ffree-form" ${MPI_Fortran_COMPILE_OPTIONS} ${MPI_Fortran_LINK_FLAGS})
456+
set(OLD_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS})
457+
set(CMAKE_REQUIRED_DEFINITIONS ${MPI_Fortran_COMPILE_DEFINITIONS})
413458
set(OLD_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
414-
set(CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_PATH})
459+
set(CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_DIRS})
415460
set(OLD_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
416461
set(CMAKE_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES})
417462
include (CheckFortranSourceCompiles)
@@ -431,6 +476,7 @@ end program
431476
"
432477
MPI_Fortran_MODULE_COMPILES)
433478
set(CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS})
479+
set(CMAKE_REQUIRED_DEFINITIONS ${OLD_REQUIRED_DEFINITIONS})
434480
set(CMAKE_REQUIRED_INCLUDES ${OLD_INCLUDES})
435481
set(CMAKE_REQUIRED_LIBRARIES ${OLD_LIBRARIES})
436482
unset(OLD_REQUIRED_FLAGS)
@@ -441,9 +487,11 @@ unset(OLD_LIBRARIES)
441487
# If that failed try using mpif.h
442488
#--------------------------------
443489
set(OLD_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
444-
set(CMAKE_REQUIRED_FLAGS "-ffree-form" ${MPI_Fortran_COMPILE_FLAGS} ${MPI_Fortran_LINK_FLAGS})
490+
set(CMAKE_REQUIRED_FLAGS "-ffree-form" ${MPI_Fortran_COMPILE_OPTIONS} ${MPI_Fortran_LINK_FLAGS})
491+
set(OLD_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS})
492+
set(CMAKE_REQUIRED_DEFINITIONS ${MPI_Fortra_COMPILE_DEFINITIONS})
445493
set(OLD_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
446-
set(CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_PATH})
494+
set(CMAKE_REQUIRED_INCLUDES ${MPI_Fortran_INCLUDE_DIRS})
447495
set(OLD_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES})
448496
set(CMAKE_REQUIRED_LIBRARIES ${MPI_Fortran_LIBRARIES})
449497
include (CheckFortranSourceCompiles)
@@ -463,6 +511,7 @@ end program
463511
"
464512
MPI_Fortran_INCLUDE_COMPILES)
465513
set(CMAKE_REQUIRED_FLAGS ${OLD_REQUIRED_FLAGS})
514+
set(CMAKE_REQUIRED_DEFINITIONS ${OLD_REQUIRED_DEFINITIONS})
466515
set(CMAKE_REQUIRED_INCLUDES ${OLD_INCLUDES})
467516
set(CMAKE_REQUIRED_LIBRARIES ${OLD_LIBRARIES})
468517
unset(OLD_REQUIRED_FLAGS)
@@ -487,26 +536,6 @@ else()
487536
)
488537
endif()
489538

490-
#----------------
491-
# Setup MPI flags
492-
#----------------
493-
if(NOT CMAKE_C_COMPILE_FLAGS)
494-
set(CMAKE_C_COMPILE_FLAGS "")
495-
endif()
496-
if(NOT CMAKE_C_LINK_FLAGS)
497-
set(CMAKE_C_LINK_FLAGS "")
498-
endif()
499-
if(NOT CMAKE_Fortran_COMPILE_FLAGS)
500-
set(CMAKE_Fortran_COMPILE_FLAGS "")
501-
endif()
502-
if(NOT CMAKE_Fortran_LINK_FLAGS)
503-
set(CMAKE_Fortran_LINK_FLAGS "")
504-
endif()
505-
set(CMAKE_C_COMPILE_FLAGS "${CMAKE_C_COMPILE_FLAGS} ${MPI_C_COMPILE_FLAGS}")
506-
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} ${MPI_C_LINK_FLAGS}")
507-
set(CMAKE_Fortran_COMPILE_FLAGS "${CMAKE_Fortran_COMPILE_FLAGS} ${MPI_Fortran_COMPILE_FLAGS}")
508-
set(CMAKE_Fortran_LINK_FLAGS "${CMAKE_Fortran_LINK_FLAGS} ${MPI_Fortran_LINK_FLAGS}")
509-
510539
#---------------------------------------------------
511540
# Use standardized GNU install directory conventions
512541
#---------------------------------------------------
@@ -531,9 +560,13 @@ if(APPLE)
531560
find_program(CODESIGN codesign)
532561
endif()
533562

563+
# We need bash, even on windows, for now at least. A light version like Git-Bash works best,
564+
# WSL dumps you into your home directory and there's nothing you can do about it.
565+
find_program(BASH_EXECUTABLE bash
566+
REQUIRED)
534567
function(caf_compile_executable target main_depend)
535568
set(includes "")
536-
foreach(includedir ${MPI_Fortran_INCLUDE_PATH})
569+
foreach(includedir ${MPI_Fortran_INCLUDE_DIRS})
537570
list(APPEND includes "-I${includedir}")
538571
endforeach()
539572
string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type)
@@ -544,7 +577,7 @@ function(caf_compile_executable target main_depend)
544577
list(APPEND localDefs "-D${d}")
545578
endforeach()
546579
add_custom_command(OUTPUT "${target}"
547-
COMMAND "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/caf"
580+
COMMAND "${BASH_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/caf"
548581
${includes} ${localDefs} ${config_Fortran_flags}
549582
-o "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target}"
550583
"${CMAKE_CURRENT_SOURCE_DIR}/${main_depend}"
@@ -588,10 +621,11 @@ endfunction()
588621
#-----------------------------------------------
589622

590623
find_program(style_pl style.pl "${CMAKE_SOURCE_DIR}/developer-scripts/")
624+
find_package(Perl)
591625
function(check_script_style script_full_path)
592-
if(style_pl)
626+
if(style_pl AND PERL_FOUND)
593627
add_test(NAME "style:${script_full_path}"
594-
COMMAND "${style_pl}" "${script_full_path}")
628+
COMMAND "${PERL_EXECUTABLE}" "${style_pl}" "${script_full_path}")
595629
endif()
596630
endfunction()
597631

@@ -703,9 +737,9 @@ function(add_caf_test name num_caf_img test_target)
703737
endif()
704738
set(test_parameters -np ${num_caf_img} ${test_parameters})
705739
if(DEFINED ARGN)
706-
add_test(NAME ${name} COMMAND "bash" "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/cafrun" ${test_parameters} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test_target}" ${ARGN})
740+
add_test(NAME ${name} COMMAND "${BASH_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/cafrun" ${test_parameters} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test_target}" ${ARGN})
707741
else()
708-
add_test(NAME ${name} COMMAND "bash" "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/cafrun" ${test_parameters} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test_target}")
742+
add_test(NAME ${name} COMMAND "${BASH_EXECUTABLE}" "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}/cafrun" ${test_parameters} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test_target}")
709743
endif()
710744
set_property(TEST ${name} PROPERTY PASS_REGULAR_EXPRESSION "Test passed.")
711745
endfunction(add_caf_test)

0 commit comments

Comments
 (0)