diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f640b008b70771efe603f4b1793e763db11a01c7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 3.8.2 FATAL_ERROR) + +project(pairs CXX) +#enable_testing() + +set(TESTCASE ${TESTCASE} CACHE STRING "Select the testcase from the following: md, dem") + +if(NOT TESTCASE) + set(TESTCASE md CACHE STRING "Select the testcase from the following: md, dem" FORCE) +endif() + +string(TOLOWER "${TESTCASE}" TESTCASE) +message(STATUS "Selected testcase: ${TESTCASE}") + +option(USE_WALBERLA "USE_WALBERLA" OFF) +option(COMPILE_CUDA "COMPILE_CUDA" OFF) + +set(CPU_SRC "${TESTCASE}.cpp") +set(GPU_SRC "${TESTCASE}.cu") +set(CPU_BIN "${TESTCASE}_cpu") +set(GPU_BIN "${TESTCASE}_gpu") + +set(RUNTIME_COMMON_FILES + runtime/pairs.cpp + runtime/domain/block_forest.cpp + runtime/domain/regular_6d_stencil.cpp) + +if(USE_MPI) + find_package(MPI REQUIRED) + include_directories(SYSTEM ${MPI_INCLUDE_PATH}) + target_link_libraries(pairs ${MPI_LIBRARIES}) +endif() + +if(LIKWID_DIR) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLIKWID_PERFMON -llikwid -pthread ") + target_link_libraries(pairs -I${LIKWID_DIR}/include -L${LIKWID_DIR}/lib -llikwid) + include_directories(${LIKWID_DIR}/include) +endif() + +if(USE_WALBERLA) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_WALBERLA_LOAD_BALANCING ") + find_package(waLBerla REQUIRED) + add_subdirectory(${walberla_SOURCE_DIR} ${walberla_BINARY_DIR} EXCLUDE_FROM_ALL) + waLBerla_import() + + waLBerla_add_executable( + NAME ${CPU_BIN} + FILES ${CPU_SRC} ${RUNTIME_COMMON_FILES} ${RUNTIME_CPU_FILES} + DEPENDS blockforest core pe) +else() + add_executable(${CPU_BIN} ${CPU_SRC} ${RUNTIME_COMMON_FILES} ${RUNTIME_CPU_FILES}) +endif() + +add_library(runtime_cpu STATIC runtime/devices/dummy.cpp) +target_link_libraries(${CPU_BIN} PRIVATE runtime_cpu) + +add_custom_command(OUTPUT ${CPU_SRC} COMMAND python examples/${TESTCASE}.py cpu) +target_link_libraries(${CPU_BIN} ${CMAKE_EXE_LINKER_FLAGS}) +set_target_properties(${CPU_BIN} PROPERTIES CXX_STANDARD_REQUIRED ON) +set_target_properties(${CPU_BIN} PROPERTIES CXX_STANDARD 14) + +if(COMPILE_CUDA) + find_package(CUDA REQUIRED) + + add_library(runtime_gpu STATIC runtime/devices/cuda.cu}) + target_compile_features(runtime_gpu PUBLIC cxx_std_11) + set_target_properties(runtime_gpu PROPERTIES CUDA_SEPARABLE_COMPILATION ON) + + #set_property(TARGET ${GPU_BIN} PROPERTY CUDA_SEPARABLE_COMPILATION ON) + target_link_libraries(${GPU_BIN} PRIVATE particles) + + if(USE_WALBERLA) + waLBerla_add_executable( + NAME ${GPU_BIN} + FILES ${GPU_SRC} ${RUNTIME_COMMON_FILES} + DEPENDS blockforest core pe) + else() + add_executable(${GPU_BIN} ${GPU_SRC} ${RUNTIME_COMMON_FILES} ${RUNTIME_GPU_FILES}) + endif() + + add_custom_command(OUTPUT ${GPU_SRC} COMMAND python examples/${TESTCASE}.py gpu) +endif()