You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
314 lines
9.1 KiB
314 lines
9.1 KiB
# The variable CMAKE_CXX_STANDARD and related were introduced in CMake v3.1
|
|
cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
set(CMAKE_COLOR_MAKEFILE ON)
|
|
set(VERBOSE_BUILD ON)
|
|
|
|
# Require C++14 and disable compiler-specific extensions
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
set(DEFAULT_BUILD_TYPE "Release")
|
|
|
|
include("./config/defaults.cmake")
|
|
|
|
message(CUDA_ARCH = ${CUDA_ARCH})
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Project name and version
|
|
#-------------------------------------------------------------------------------
|
|
project(DGTD LANGUAGES CXX)
|
|
set(${PROJECT_NAME}_VERSION 0.0.0)
|
|
|
|
# Prohibit in-source build
|
|
if (${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR})
|
|
message(FATAL_ERROR
|
|
"DGTD does not support in-source CMake builds at this time.")
|
|
endif (${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR})
|
|
|
|
# Enable languages.
|
|
enable_language(CXX)
|
|
|
|
|
|
|
|
if (CUDA_NON_HEAVY)
|
|
message("CUDA_NON_HEAVY is ON")
|
|
else()
|
|
if (NOT CUDA_GPU_ZERO_COPY)
|
|
message("CUDA HEAVY MODE 1 is ON")
|
|
else()
|
|
message("CUDA HEAVY MODE 2 ZERO COPY is ON")
|
|
endif()
|
|
endif()
|
|
|
|
|
|
message(CUDA_ARCH = ${CUDA_ARCH})
|
|
|
|
|
|
if (DGTD_USE_CUDA OR DGTD_USE_CUDA_OPENCL)
|
|
# DGTD_USE_CUDA requires CMake 3.8 or newer (for direct CUDA support)
|
|
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
|
|
# Use ${CMAKE_CXX_COMPILER} as the cuda host compiler.
|
|
if (NOT CMAKE_CUDA_HOST_COMPILER)
|
|
set(CMAKE_CUDA_HOST_COMPILER ${CMAKE_CXX_COMPILER})
|
|
endif()
|
|
enable_language(CUDA)
|
|
set(CMAKE_CUDA_STANDARD 14)
|
|
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CUDA_EXTENSIONS OFF)
|
|
|
|
# Find CUDA ARCH VERSION
|
|
include(FindCUDA/select_compute_arch)
|
|
CUDA_DETECT_INSTALLED_GPUS(INSTALLED_GPU_CCS)
|
|
set(INSTALLED_GPU_CCS "60;61;70;75;80;86")
|
|
|
|
list(GET INSTALLED_GPU_CCS 0 ARCH_NUMBER)
|
|
|
|
set(CUDA_ARCH "sm_${ARCH_NUMBER}")
|
|
set(CUDA_COMPUTE "compute_${ARCH_NUMBER}")
|
|
|
|
message(--------------------------------------------)
|
|
message(CUDA_ARCH = ${CUDA_ARCH})
|
|
message(CUDA_COMPUTE = ${CUDA_COMPUTE})
|
|
message(--------------------------------------------)
|
|
|
|
set(CUDA_FLAGS "--expt-extended-lambda --compiler-options -fPIC")
|
|
set(CUDA_FLAGS "-gencode code=${CUDA_ARCH},arch=${CUDA_COMPUTE} ${CUDA_FLAGS}")
|
|
string(REGEX REPLACE "^sm_" "" ARCH_NUMBER "${CUDA_ARCH}")
|
|
if ("${CUDA_ARCH}" STREQUAL "sm_${ARCH_NUMBER}")
|
|
set(CMAKE_CUDA_ARCHITECTURES "${ARCH_NUMBER}")
|
|
else()
|
|
message(FATAL_ERROR "Unknown CUDA_ARCH: ${CUDA_ARCH}")
|
|
endif()
|
|
message(STATUS "Using CUDA architecture: ${CUDA_ARCH}")
|
|
|
|
set(CUDA_FLAGS "-ccbin=${CMAKE_CXX_COMPILER} ${CUDA_FLAGS}")
|
|
set(CMAKE_CUDA_HOST_LINK_LAUNCHER ${CMAKE_CXX_COMPILER})
|
|
set(CMAKE_CUDA_FLAGS "${CUDA_FLAGS}" CACHE STRING "CUDA flags set for DGTD" FORCE)
|
|
set(CUSPARSE_FOUND TRUE)
|
|
set(CUSPARSE_LIBRARIES "cusparse")
|
|
endif()
|
|
|
|
# OpenCL
|
|
if(DGTD_USE_OPENCL OR DGTD_USE_CUDA_OPENCL)
|
|
find_package(OpenCL REQUIRED)
|
|
include_directories(${OpenCL_INCLUDE_DIRS})
|
|
link_directories(${OpenCL_LIBRARY})
|
|
endif()
|
|
|
|
if(DGTD_USE_OPENCL)
|
|
add_definitions(-DDGTD_USE_OPENCL)
|
|
endif()
|
|
|
|
# Suppress warnings about MACOSX_RPATH
|
|
set(CMAKE_MACOSX_RPATH OFF CACHE BOOL "")
|
|
|
|
# CMake needs to know where to find things
|
|
set(DGTD_CMAKE_PATH ${PROJECT_SOURCE_DIR}/config)
|
|
set(CMAKE_MODULE_PATH ${DGTD_CMAKE_PATH})
|
|
|
|
# Load DGTD CMake utilities.
|
|
include(CmakeUtilities)
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Process configuration options
|
|
#-------------------------------------------------------------------------------
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie -lpthread")
|
|
|
|
# DGTD_DEBUG
|
|
if (CMAKE_BUILD_TYPE MATCHES "Debug|debug|DEBUG")
|
|
set(DGTD_DEBUG ON)
|
|
else()
|
|
set(DGTD_DEBUG OFF)
|
|
endif()
|
|
|
|
# BLAS, LAPACK
|
|
#set(BLA_VENDOR OpenBLAS) # OpenBLAS can also be used to substitute LAPACK
|
|
# find_package(BLAS REQUIRED)
|
|
# find_package(LAPACK REQUIRED)
|
|
# message(STATUS BLAS found: ${BLAS_LIBRARIES})
|
|
|
|
# MKL
|
|
set(ENV{MKLROOT} "/opt/intel/oneapi/mkl/latest")
|
|
find_package(MKL CONFIG REQUIRED)
|
|
|
|
if (DGTD_USE_CUDA)
|
|
add_definitions(-DDGTD_USE_CUDA)
|
|
endif()
|
|
|
|
if (DGTD_USE_CUDA_OPENCL)
|
|
add_definitions(-DDGTD_USE_CUDA_OPENCL)
|
|
endif()
|
|
|
|
if (DGTD_USE_DOUBLE)
|
|
add_definitions(-DDGTD_USE_DOUBLE)
|
|
endif()
|
|
|
|
if (DGTD_USE_DOUBLE_TS)
|
|
add_definitions(-DDGTD_USE_DOUBLE_TS)
|
|
endif()
|
|
|
|
if (DGTD_WRITE_SURF_FIELDS)
|
|
add_definitions(-DDGTD_WRITE_SURF_FIELDS)
|
|
endif()
|
|
|
|
if (DGTD_INCIDENT_FIELDS)
|
|
add_definitions(-DDGTD_INCIDENT_FIELDS)
|
|
endif()
|
|
|
|
if (CUDA_NON_HEAVY)
|
|
add_definitions(-DCUDA_NON_HEAVY)
|
|
endif()
|
|
|
|
if (CUDA_GPU_ZERO_COPY)
|
|
add_definitions(-DCUDA_GPU_ZERO_COPY)
|
|
endif()
|
|
|
|
if (DGTD_USE_LTS)
|
|
add_definitions(-DDGTD_USE_LTS)
|
|
endif()
|
|
|
|
|
|
# OpenMP
|
|
if (DGTD_USE_OPENMP)
|
|
find_package(OpenMP REQUIRED)
|
|
set(OPENMP_LIBRARIES ${OpenMP_CXX_LIBRARIES})
|
|
|
|
if (OPENMP_FOUND)
|
|
message(STATUS "DGTD: using package OpenMP")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
|
if (DGTD_USE_CUDA OR DGTD_USE_CUDA_OPENCL)
|
|
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -Xcompiler=${OpenMP_CXX_FLAGS}")
|
|
endif()
|
|
endif()
|
|
|
|
add_definitions(-DDGTD_USE_OPENMP)
|
|
endif()
|
|
|
|
|
|
message(STATUS "DGTD build type: CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
|
|
message(STATUS "DGTD version: v${DGTD_VERSION_STRING}")
|
|
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Define and configure the DGTD library
|
|
#-------------------------------------------------------------------------------
|
|
|
|
# Headers and sources
|
|
set(SOURCES "")
|
|
set(HEADERS "")
|
|
set(DGTD_SOURCE_DIRS fem utils)
|
|
foreach(DIR IN LISTS DGTD_SOURCE_DIRS)
|
|
add_subdirectory(${DIR})
|
|
endforeach()
|
|
|
|
if (DGTD_USE_CUDA OR DGTD_USE_CUDA_OPENCL)
|
|
set_source_files_properties(${SOURCES} PROPERTIES LANGUAGE CUDA)
|
|
endif()
|
|
|
|
add_subdirectory(config)
|
|
set(MASTER_HEADERS
|
|
${PROJECT_SOURCE_DIR}/MaxwellTD.cpp
|
|
${PROJECT_SOURCE_DIR}/dgtd-performance.hpp)
|
|
|
|
set(_lib_path "${CMAKE_INSTALL_PREFIX}/lib")
|
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON CACHE BOOL "")
|
|
set(CMAKE_INSTALL_RPATH "${_lib_path}" CACHE PATH "")
|
|
set(CMAKE_INSTALL_NAME_DIR "${_lib_path}" CACHE PATH "")
|
|
|
|
set(DGTD_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH "The DGTD source directory" FORCE)
|
|
set(DGTD_INSTALL_DIR ${CMAKE_INSTALL_PREFIX} CACHE PATH "The DGTD install directory" FORCE)
|
|
|
|
# add the directory as -I to the compilation command line
|
|
include_directories(${PROJECT_SOURCE_DIR}/utils)
|
|
# include_directories(${PROJECT_SOURCE_DIR}/utils/lapack-3.9.1/CBLAS/include)
|
|
include_directories("/opt/intel/oneapi/mkl/latest/include")
|
|
include_directories("/usr/local/cuda/include")
|
|
include_directories(${PROJECT_SOURCE_DIR}/fem)
|
|
link_directories(${PROJECT_SOURCE_DIR}/lib)
|
|
link_directories("/opt/intel/oneapi/mkl/latest/lib/intel64")
|
|
link_directories("/usr/local/cuda/lib64/")
|
|
|
|
# Declaring the library
|
|
set(DGTD_ALL ${SOURCES} ${HEADERS} ${MASTER_HEADERS})
|
|
|
|
foreach(FNAME IN LISTS DGTD_ALL)
|
|
message(${FNAME})
|
|
endforeach()
|
|
|
|
|
|
|
|
# --------------------------------------
|
|
# Executable Name
|
|
set(EXE_NAME maxwelltd)
|
|
if (DGTD_USE_CUDA)
|
|
set(EXE_NAME ${EXE_NAME}_CUDA)
|
|
|
|
if (DGTD_USE_CUDA_OPENCL)
|
|
set(EXE_NAME ${EXE_NAME}_OPENCL)
|
|
endif()
|
|
|
|
if (NOT CUDA_NON_HEAVY)
|
|
if (CUDA_GPU_ZERO_COPY)
|
|
set(EXE_NAME ${EXE_NAME}_HEAVYZEROCOPY)
|
|
else()
|
|
set(EXE_NAME ${EXE_NAME}_HEAVY)
|
|
endif()
|
|
endif()
|
|
|
|
else()
|
|
set(EXE_NAME ${EXE_NAME}_CPU)
|
|
endif()
|
|
|
|
|
|
if (DGTD_USE_LTS)
|
|
set(EXE_NAME ${EXE_NAME}_LTS)
|
|
endif()
|
|
|
|
if (DGTD_USE_DOUBLE)
|
|
set(EXE_NAME ${EXE_NAME}_DOUBLEpre)
|
|
else()
|
|
set(EXE_NAME ${EXE_NAME}_FLOATpre)
|
|
endif()
|
|
|
|
if (DGTD_USE_DOUBLE_TS)
|
|
set(EXE_NAME ${EXE_NAME}_DOUBLEpro)
|
|
else()
|
|
set(EXE_NAME ${EXE_NAME}_FLOATpro)
|
|
endif()
|
|
|
|
# --------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
add_executable(${EXE_NAME} ${DGTD_ALL})
|
|
# lapack should be put before blas and cblas
|
|
# removed vtr quadrature tensor
|
|
target_link_libraries(${EXE_NAME} mkl_rt m register metis5 vtkIO vtkzlib vtkFiltering vtkCommon gfortran gomp dl pthread fftw3 cudart cublas cusolver)
|
|
# target_link_libraries(${EXE_NAME} m register lapack blas metis5 vtkIO vtkzlib vtkFiltering vtkCommon gfortran gomp dl pthread fftw3 cusolver cublas)
|
|
# EMoffice_Base --> m vtr tensor quadrature register
|
|
|
|
if(DGTD_USE_OPENCL OR DGTD_USE_CUDA_OPENCL)
|
|
target_link_libraries (${EXE_NAME} ${OpenCL_LIBRARY})
|
|
endif()
|
|
|
|
if(DGTD_USE_CUDA OR DGTD_USE_CUDA_OPENCL)
|
|
include_directories(${EXE_NAME} ${CUDA_INCLUDE_DIRS})
|
|
target_link_libraries (${EXE_NAME} ${CUDA_LIBRARIES})
|
|
endif()
|
|
|
|
set_target_properties(${EXE_NAME} PROPERTIES VERSION "${dgtd_VERSION}")
|
|
set_target_properties(${EXE_NAME} PROPERTIES SOVERSION "${dgtd_VERSION}")
|
|
set_target_properties(${EXE_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
|
if (DGTD_USE_CUDA OR DGTD_USE_CUDA_OPENCL)
|
|
set_target_properties(${EXE_NAME} PROPERTIES CUDA_SEPARABLE_COMPILATION ON CUDA_RESOLVE_DEVICE_SYMBOLS ON)
|
|
endif ()
|
|
|
|
# If building out-of-source, define DGTD_CONFIG_FILE to point to the config file inside the build directory.
|
|
if (NOT ("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}"))
|
|
target_compile_definitions(${EXE_NAME} PRIVATE "DGTD_CONFIG_FILE=\"${PROJECT_BINARY_DIR}/config/_config.hpp\"")
|
|
endif()
|
|
|