CMakeLists.txt 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. cmake_minimum_required(VERSION 3.8)
  2. project(TestFindMPI NONE)
  3. include(CTest)
  4. macro(source_code_mapper_helper LANG_NAME)
  5. if("${LANG_NAME}" STREQUAL "C")
  6. set(MPITEST_SOURCE_FILE "main.c")
  7. elseif("${LANG_NAME}" STREQUAL "CXX")
  8. configure_file("main.c" "main.cxx" COPYONLY)
  9. set(MPITEST_SOURCE_FILE "main.cxx")
  10. elseif("${LANG_NAME}" STREQUAL "Fortran")
  11. set(MPITEST_SOURCE_FILE "main.f90")
  12. endif()
  13. endmacro()
  14. foreach(c C CXX Fortran)
  15. if("${MPI_TEST_${c}}")
  16. message("Testing ${c}")
  17. enable_language(${c})
  18. endif()
  19. endforeach()
  20. set(MPI_CXX_SKIP_MPICXX TRUE)
  21. set(MPI_CXX_VALIDATE_SKIP_MPICXX TRUE)
  22. find_package(MPI REQUIRED)
  23. foreach(c C CXX Fortran)
  24. if(NOT "${MPI_TEST_${c}}")
  25. continue()
  26. endif()
  27. if(${c} STREQUAL CXX AND MPI_MPICXX_FOUND)
  28. message(FATAL_ERROR "Could not suppress MPI-2 C++ bindings for this MPI.")
  29. endif()
  30. source_code_mapper_helper(${c})
  31. add_executable(test_tgt_${c} ${MPITEST_SOURCE_FILE})
  32. target_link_libraries(test_tgt_${c} MPI::MPI_${c})
  33. add_test(NAME test_tgt_${c} COMMAND test_tgt_${c})
  34. add_executable(test_var_${c} ${MPITEST_SOURCE_FILE})
  35. target_include_directories(test_var_${c} PRIVATE "${MPI_${c}_INCLUDE_PATH}")
  36. target_link_libraries(test_var_${c} PRIVATE "${MPI_${c}_LINK_FLAGS}" "${MPI_${c}_LIBRARIES}")
  37. set(copied_MPI_${c}_OPTIONS "${MPI_${c}_COMPILE_FLAGS}")
  38. separate_arguments(copied_MPI_${c}_OPTIONS)
  39. target_compile_options(test_var_${c} PRIVATE "${copied_MPI_${c}_OPTIONS}")
  40. add_test(NAME test_var_${c} COMMAND test_var_${c})
  41. endforeach()