if (TARGET mpi_target) add_library(amgcl_mpi_example INTERFACE) target_link_libraries(amgcl_mpi_example INTERFACE amgcl mpi_target ${Boost_PROGRAM_OPTIONS_LIBRARY}) target_compile_definitions(amgcl_mpi_example INTERFACE "AMGCL_BLOCK_SIZES=${AMGCL_BLOCK_SIZES_SEQ}") if (TARGET eigen_target) target_link_libraries(amgcl_mpi_example INTERFACE eigen_target) endif() if (TARGET pastix_target) target_link_libraries(amgcl_mpi_example INTERFACE pastix_target) endif() if (TARGET scotch_target) target_link_libraries(amgcl_mpi_example INTERFACE scotch_target) endif() if (TARGET Metis::metis) target_link_libraries(amgcl_mpi_example INTERFACE Metis::metis) endif() function(add_mpi_example example sources) add_executable(${example} ${sources}) target_link_libraries(${example} amgcl_mpi_example) endfunction() add_mpi_example(check_direct check_direct.cpp) add_mpi_example(runtime_sdd runtime_sdd.cpp) add_mpi_example(runtime_sdd_3d runtime_sdd_3d.cpp) add_mpi_example(runtime_bp runtime_bp.cpp) add_mpi_example(schur_pc_mpi schur_pc_mpi.cpp) add_mpi_example(solve_mm_mpi solve_mm_mpi.cpp) add_mpi_example(call_mpi_lib call_mpi_lib.cpp) add_mpi_example(test_transpose test_transpose.cpp) add_mpi_example(test_spmm test_spmm.cpp) add_mpi_example(spmm_scaling spmm_scaling.cpp) add_mpi_example(mpi_solver mpi_solver.cpp) add_mpi_example(mpi_complex mpi_complex.cpp) add_mpi_example(cpr_mpi cpr_mpi.cpp) if (TARGET Metis::metis) add_executable(partition partition.cpp) target_link_libraries(partition amgcl Metis::metis ${Boost_PROGRAM_OPTIONS_LIBRARY} ) endif() target_link_libraries(call_mpi_lib libamgcl_mpi) if (TARGET cuda_target) foreach(example runtime_sdd runtime_sdd_3d schur_pc_mpi mpi_solver) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/${example}.cpp ${CMAKE_CURRENT_BINARY_DIR}/${example}.cu COPYONLY ) cuda_add_executable(${example}_cuda ${CMAKE_CURRENT_BINARY_DIR}/${example}.cu OPTIONS -DSOLVER_BACKEND_CUDA) target_include_directories(${example}_cuda PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(${example}_cuda amgcl_example cuda_target mpi_target) endforeach() endif() if (VexCL_FOUND) foreach(example runtime_sdd runtime_sdd_3d schur_pc_mpi mpi_solver) vexcl_add_executables(${example}_vexcl ${example}.cpp) target_compile_definitions(${example}_vexcl INTERFACE SOLVER_BACKEND_VEXCL) target_link_libraries(${example}_vexcl INTERFACE amgcl_mpi_example) endforeach() endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/plot_result ${CMAKE_CURRENT_BINARY_DIR}/plot_result COPYONLY ) endif()