Skip to content
Snippets Groups Projects
CMakeLists.txt 3.03 KiB
Newer Older
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 -fsanitize=address,undefined")
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(
baptiste.coudray's avatar
baptiste.coudray committed
        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 ##########
baptiste.coudray's avatar
baptiste.coudray committed
## 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
baptiste.coudray's avatar
baptiste.coudray committed
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")
baptiste.coudray's avatar
baptiste.coudray committed
    target_link_libraries(lattice_boltzmann_opencl "-framework OpenCL" m ${MPI_C_LIBRARIES})
endif ()

if (CMAKE_SYSTEM_NAME MATCHES "Linux")
baptiste.coudray's avatar
baptiste.coudray committed
    target_link_libraries(lattice_boltzmann_opencl OpenCL m ${MPI_C_LIBRARIES})
baptiste.coudray's avatar
baptiste.coudray committed

## 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})