cmake_minimum_required(VERSION 3.17) project(lattice_boltzmann C) set(CMAKE_C_STANDARD 11) if (CMAKE_BUILD_TYPE MATCHES Debug) set(GCC_COMPILE_FLAGS "-Wall -Wextra -Wconversion -pedantic") elseif (CMAKE_BUILD_TYPE MATCHES Release) set(GCC_COMPILE_FLAGS "-O3") endif () find_package(MPI REQUIRED) include_directories(${MPI_C_INCLUDE_PATH}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}") add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/lbm_seq.h ${CMAKE_CURRENT_SOURCE_DIR}/lbm_seq.c COMMAND futhark c ${CMAKE_CURRENT_SOURCE_DIR}/lbm.fut --library DEPENDS lbm.fut ) add_custom_target(futhark_lbm_seq DEPENDS lbm_seq.h lbm_seq.c) add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/lbm_cda.h ${CMAKE_CURRENT_SOURCE_DIR}/lbm_cda.c COMMAND futhark cuda ${CMAKE_CURRENT_SOURCE_DIR}/lbm.fut --library DEPENDS lbm.fut ) add_custom_target(futhark_lbm_cuda DEPENDS lbm_cda.h lbm_cda.c) add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/lbm_ocl.h ${CMAKE_CURRENT_SOURCE_DIR}/lbm_ocl.c COMMAND futhark opencl ${CMAKE_CURRENT_SOURCE_DIR}/lbm.fut --library DEPENDS lbm.fut ) add_custom_target(futhark_lbm_opencl DEPENDS lbm_ocl.h lbm_ocl.c) add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/lbm_mc.h ${CMAKE_CURRENT_SOURCE_DIR}/lbm_mc.c COMMAND futhark multicore ${CMAKE_CURRENT_SOURCE_DIR}/lbm.fut --library DEPENDS lbm.fut ) add_custom_target(futhark_lbm_multicore DEPENDS lbm_mc.h lbm_mc.c) ########## Lattice-Boltzmann ########## ## Sequential add_executable(lattice_boltzmann_seq main.c lbm.h lbm.c ../futhark_mpi/dispatch.h ../futhark_mpi/dispatch.c ../futhark_mpi/chunk_info.c ../futhark_mpi/chunk_info.h) add_dependencies(lattice_boltzmann_seq futhark_lbm_seq) target_link_libraries(lattice_boltzmann_seq m ${MPI_C_LIBRARIES}) ## CUDA if (CMAKE_SYSTEM_NAME MATCHES "Linux") add_executable(lattice_boltzmann_cuda main.c lbm.h lbm.c ../futhark_mpi/dispatch.h ../futhark_mpi/dispatch.c ../futhark_mpi/chunk_info.c ../futhark_mpi/chunk_info.h) add_dependencies(lattice_boltzmann_cuda futhark_lbm_cuda) target_link_libraries(lattice_boltzmann_cuda cuda cudart nvrtc m ${MPI_C_LIBRARIES}) endif () ## OpenCL add_executable(lattice_boltzmann_opencl main.c lbm.h lbm.c ../futhark_mpi/dispatch.h ../futhark_mpi/dispatch.c ../futhark_mpi/chunk_info.c ../futhark_mpi/chunk_info.h) add_dependencies(lattice_boltzmann_opencl futhark_lbm_opencl) if (CMAKE_SYSTEM_NAME MATCHES "Darwin") target_link_libraries(lattice_boltzmann_opencl "-framework OpenCL" m ${MPI_C_LIBRARIES}) endif () if (CMAKE_SYSTEM_NAME MATCHES "Linux") target_link_libraries(lattice_boltzmann_opencl OpenCL m ${MPI_C_LIBRARIES}) endif () ## Multicore add_executable(lattice_boltzmann_mc main.c lbm.h lbm.c ../futhark_mpi/dispatch.h ../futhark_mpi/dispatch.c ../futhark_mpi/chunk_info.c ../futhark_mpi/chunk_info.h) add_dependencies(lattice_boltzmann_mc futhark_lbm_multicore) target_link_libraries(lattice_boltzmann_mc pthread m ${MPI_C_LIBRARIES})