Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify build system targets #5018

Merged
merged 2 commits into from
Dec 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,13 @@ include(FetchContent)
include(espresso_option_enum)
include(espresso_enable_avx2_support)

if(EXISTS "${PROJECT_BINARY_DIR}/CMakeLists.txt")
message(
FATAL_ERROR
"${PROJECT_NAME} cannot be built in-place. Instead, create a build directory and run CMake from there. A new file 'CMakeCache.txt' and a new folder 'CMakeFiles' have just been created by CMake in the current folder and need to be removed."
)
endif()

#
# CMake internal vars
#
Expand Down Expand Up @@ -478,7 +485,7 @@ target_compile_options(
$<$<CXX_COMPILER_ID:Clang,AppleClang,IntelLLVM>:-Wimplicit-float-conversion>
$<$<CXX_COMPILER_ID:Clang,AppleClang,IntelLLVM>:-Wunused-exception-parameter>
$<$<CXX_COMPILER_ID:Clang,AppleClang,IntelLLVM>:-Wmissing-variable-declarations>
$<$<AND:$<CXX_COMPILER_ID:Clang>,$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,11.0.0>>:-Wnon-c-typedef-for-linkage>
$<$<CXX_COMPILER_ID:Clang>:-Wnon-c-typedef-for-linkage>
$<$<NOT:$<CXX_COMPILER_ID:Intel>>:-Wdelete-non-virtual-dtor>
# disable warnings from -Wall and -Wextra
-Wno-sign-compare
Expand All @@ -487,9 +494,9 @@ target_compile_options(
-Wno-array-bounds
$<$<CXX_COMPILER_ID:GNU>:-Wno-restrict>
$<$<CXX_COMPILER_ID:GNU>:-Wno-clobbered>
$<$<CXX_COMPILER_ID:GNU>:-Wno-cast-function-type>
$<$<CXX_COMPILER_ID:Intel,IntelLLVM>:-diag-disable=592>
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wno-gnu-zero-variadic-macro-arguments>
$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_GREATER_EQUAL:$<CXX_COMPILER_VERSION>,8.1.0>>:-Wno-cast-function-type>
$<$<NOT:$<CXX_COMPILER_ID:Intel,IntelLLVM>>:-Wno-implicit-fallthrough>
$<$<NOT:$<CXX_COMPILER_ID:Intel,IntelLLVM,GNU>>:-Wno-unused-private-field>
# warnings are errors
Expand Down Expand Up @@ -687,7 +694,8 @@ if(ESPRESSO_BUILD_WITH_CALIPER)
target_compile_options(
caliper-runtime
PRIVATE $<$<CXX_COMPILER_ID:GNU>:-Wno-maybe-uninitialized>
$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-Wno-volatile>)
$<$<CXX_COMPILER_ID:GNU>:-Wno-volatile>
$<$<CXX_COMPILER_ID:Clang,AppleClang>:-Wno-deprecated-volatile>)
endif()

#
Expand Down
2 changes: 1 addition & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ add_subdirectory(utils)
add_subdirectory(shapes)
add_subdirectory(core)
add_subdirectory(config)
add_subdirectory(profiler)
add_subdirectory(instrumentation)

if(ESPRESSO_BUILD_WITH_SCAFACOS)
add_subdirectory(scafacos)
Expand Down
2 changes: 1 addition & 1 deletion src/core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ target_link_libraries(
espresso_core PRIVATE espresso::config espresso::utils::mpi espresso::shapes
espresso::cpp_flags
PUBLIC espresso::utils MPI::MPI_CXX Random123 espresso::particle_observables
Boost::serialization Boost::mpi espresso::profiler)
Boost::serialization Boost::mpi espresso::instrumentation)

target_include_directories(espresso_core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

Expand Down
19 changes: 7 additions & 12 deletions src/profiler/CMakeLists.txt → src/instrumentation/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
# Copyright (C) 2019-2022 The ESPResSo project
# Copyright (C) 2019-2024 The ESPResSo project
#
# This file is part of ESPResSo.
#
Expand All @@ -17,22 +17,17 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

add_library(espresso_profiler INTERFACE)
add_library(espresso::profiler ALIAS espresso_profiler)
add_library(espresso_instrumentation INTERFACE)
add_library(espresso::instrumentation ALIAS espresso_instrumentation)

if(ESPRESSO_BUILD_WITH_VALGRIND)
target_include_directories(espresso_profiler
target_include_directories(espresso_instrumentation
INTERFACE "${VALGRIND_INCLUDE_DIRS}")
endif()

if(ESPRESSO_BUILD_WITH_CALIPER)
target_link_libraries(espresso_profiler INTERFACE caliper)
# workaround to handle the case where the build directory is outside `_deps`
cmake_path(GET CMAKE_BINARY_DIR FILENAME CMAKE_BINARY_DIR_BASENAME)
set(caliper_BINARY_DIR_ALTERNATIVE
"${CMAKE_BINARY_DIR}/${CMAKE_BINARY_DIR_BASENAME}/_deps/caliper-src")
target_link_libraries(espresso_instrumentation INTERFACE caliper)
target_include_directories(
espresso_profiler
INTERFACE "${caliper_SOURCE_DIR}/include" "${caliper_BINARY_DIR}/include"
"${caliper_BINARY_DIR_ALTERNATIVE}/include")
espresso_instrumentation INTERFACE "${caliper_SOURCE_DIR}/include"
"${caliper_BINARY_DIR}/include")
endif()
2 changes: 1 addition & 1 deletion src/script_interface/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ install(TARGETS espresso_script_interface

target_link_libraries(
espresso_script_interface PRIVATE espresso::config espresso::core
espresso::profiler
espresso::instrumentation
PUBLIC espresso::utils MPI::MPI_CXX Boost::mpi espresso::shapes
PRIVATE espresso::cpp_flags)

Expand Down
43 changes: 28 additions & 15 deletions src/walberla_bridge/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,17 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

function(espresso_configure_walberla_target)
set(TARGET_NAME ${ARGV0})
set_target_properties(${TARGET_NAME} PROPERTIES CXX_CLANG_TIDY "")
target_link_libraries(${TARGET_NAME} PRIVATE ${WALBERLA_LIBS})
target_include_directories(
${TARGET_NAME} PUBLIC include PRIVATE ${WALBERLA_INCLUDE_DIRS}
${walberla_BINARY_DIR}/src)
install(TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${ESPRESSO_INSTALL_PYTHON}/espressomd)
endfunction()

add_library(espresso_walberla_cpp_flags INTERFACE)
add_library(espresso::walberla::cpp_flags ALIAS espresso_walberla_cpp_flags)
target_link_libraries(
Expand All @@ -30,31 +41,33 @@ target_link_libraries(
INTERFACE espresso::cuda_flags
$<$<BOOL:${ESPRESSO_BUILD_WITH_WALBERLA_AVX}>:espresso::avx_flags>)

function(espresso_configure_walberla_target)
set(TARGET_NAME ${ARGV0})
set_target_properties(${TARGET_NAME} PROPERTIES CXX_CLANG_TIDY "")
target_link_libraries(${TARGET_NAME} PRIVATE ${WALBERLA_LIBS})
target_include_directories(
${TARGET_NAME} PUBLIC include PRIVATE ${WALBERLA_INCLUDE_DIRS}
${walberla_BINARY_DIR}/src)
install(TARGETS ${TARGET_NAME}
LIBRARY DESTINATION ${ESPRESSO_INSTALL_PYTHON}/espressomd)
endfunction()

add_library(espresso_walberla SHARED)
add_library(espresso_walberla_codegen SHARED)
add_library(espresso::walberla ALIAS espresso_walberla)
add_library(espresso::walberla_codegen ALIAS espresso_walberla_codegen)

espresso_configure_walberla_target(espresso_walberla)
espresso_configure_walberla_target(espresso_walberla_codegen)

target_link_libraries(espresso_walberla PUBLIC MPI::MPI_CXX espresso::utils
target_link_libraries(
espresso_walberla PUBLIC MPI::MPI_CXX espresso::utils
PRIVATE espresso::walberla::cpp_flags espresso::walberla_codegen)
target_link_libraries(espresso_walberla_codegen
PRIVATE espresso::walberla::cpp_flags)

if(ESPRESSO_BUILD_WITH_CUDA AND WALBERLA_BUILD_WITH_CUDA)
if(WALBERLA_BUILD_WITH_CUDA)
espresso_add_gpu_library(espresso_walberla_cuda SHARED)
espresso_add_gpu_library(espresso_walberla_codegen_cuda SHARED)
add_library(espresso::walberla_cuda ALIAS espresso_walberla_cuda)
add_library(espresso::walberla_codegen_cuda ALIAS
espresso_walberla_codegen_cuda)
espresso_configure_walberla_target(espresso_walberla_cuda)
target_link_libraries(espresso_walberla_cuda PUBLIC espresso::utils
PRIVATE CUDA::cuda_driver CUDA::cudart)
espresso_configure_walberla_target(espresso_walberla_codegen_cuda)
target_link_libraries(
espresso_walberla_cuda PUBLIC espresso::utils
PRIVATE CUDA::cuda_driver CUDA::cudart espresso::walberla_codegen_cuda)
target_link_libraries(espresso_walberla_codegen_cuda PRIVATE CUDA::cuda_driver
CUDA::cudart)
endif()

add_subdirectory(src)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

foreach(precision double_precision single_precision)
target_sources(
espresso_walberla
espresso_walberla_codegen
PRIVATE DiffusiveFluxKernel_${precision}.cpp
DiffusiveFluxKernelThermalized_${precision}.cpp
DiffusiveFluxKernelWithElectrostatic_${precision}.cpp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
foreach(n_species RANGE 1 5)
foreach(precision double_precision single_precision)
target_sources(
espresso_walberla
espresso_walberla_codegen
PRIVATE ReactionKernelBulk_${n_species}_${precision}.cpp
ReactionKernelIndexed_${n_species}_${precision}.cpp)
endforeach()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,47 +17,39 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

target_sources(
espresso_walberla
PRIVATE StreamSweepSinglePrecision.cpp StreamSweepDoublePrecision.cpp
PackInfoPdfSinglePrecision.cpp PackInfoPdfDoublePrecision.cpp
PackInfoVecSinglePrecision.cpp PackInfoVecDoublePrecision.cpp
InitialPDFsSetterSinglePrecision.cpp
InitialPDFsSetterDoublePrecision.cpp Dynamic_UBB_single_precision.cpp
Dynamic_UBB_double_precision.cpp)
if(ESPRESSO_BUILD_WITH_WALBERLA_AVX)
target_sources(
espresso_walberla
PRIVATE CollideSweepSinglePrecisionLeesEdwardsAVX.cpp
CollideSweepDoublePrecisionLeesEdwardsAVX.cpp
CollideSweepSinglePrecisionThermalizedAVX.cpp
CollideSweepDoublePrecisionThermalizedAVX.cpp
StreamSweepSinglePrecisionAVX.cpp StreamSweepDoublePrecisionAVX.cpp)
else()
target_sources(
espresso_walberla
PRIVATE CollideSweepSinglePrecisionLeesEdwards.cpp
CollideSweepDoublePrecisionLeesEdwards.cpp
CollideSweepSinglePrecisionThermalized.cpp
CollideSweepDoublePrecisionThermalized.cpp)
endif()
if(ESPRESSO_BUILD_WITH_CUDA AND WALBERLA_BUILD_WITH_CUDA)
foreach(precision single_precision double_precision)
target_sources(espresso_walberla_codegen PRIVATE Dynamic_UBB_${precision}.cpp)
if(WALBERLA_BUILD_WITH_CUDA)
target_sources(espresso_walberla_codegen_cuda
PRIVATE Dynamic_UBB_${precision}CUDA.cu)
endif()
endforeach()

foreach(precision DoublePrecision SinglePrecision)
target_sources(
espresso_walberla_cuda
PRIVATE CollideSweepDoublePrecisionLeesEdwardsCUDA.cu
CollideSweepDoublePrecisionThermalizedCUDA.cu
CollideSweepSinglePrecisionLeesEdwardsCUDA.cu
CollideSweepSinglePrecisionThermalizedCUDA.cu
FieldAccessorsDoublePrecisionCUDA.cu
FieldAccessorsSinglePrecisionCUDA.cu
StreamSweepDoublePrecisionCUDA.cu
StreamSweepSinglePrecisionCUDA.cu
InitialPDFsSetterDoublePrecisionCUDA.cu
InitialPDFsSetterSinglePrecisionCUDA.cu
PackInfoPdfSinglePrecisionCUDA.cu
PackInfoPdfDoublePrecisionCUDA.cu
PackInfoVecSinglePrecisionCUDA.cu
PackInfoVecDoublePrecisionCUDA.cu
Dynamic_UBB_double_precisionCUDA.cu
Dynamic_UBB_single_precisionCUDA.cu)
endif()
espresso_walberla_codegen
PRIVATE PackInfoPdf${precision}.cpp PackInfoVec${precision}.cpp
InitialPDFsSetter${precision}.cpp)
if(ESPRESSO_BUILD_WITH_WALBERLA_AVX)
target_sources(
espresso_walberla_codegen
PRIVATE CollideSweep${precision}LeesEdwardsAVX.cpp
CollideSweep${precision}ThermalizedAVX.cpp
StreamSweep${precision}AVX.cpp)
else()
target_sources(
espresso_walberla_codegen
PRIVATE CollideSweep${precision}LeesEdwards.cpp
CollideSweep${precision}Thermalized.cpp
StreamSweep${precision}.cpp)
endif()
if(WALBERLA_BUILD_WITH_CUDA)
target_sources(
espresso_walberla_codegen_cuda
PRIVATE CollideSweep${precision}LeesEdwardsCUDA.cu
CollideSweep${precision}ThermalizedCUDA.cu
FieldAccessors${precision}CUDA.cu StreamSweep${precision}CUDA.cu
InitialPDFsSetter${precision}CUDA.cu
PackInfoPdf${precision}CUDA.cu PackInfoVec${precision}CUDA.cu)
endif()
endforeach()
6 changes: 4 additions & 2 deletions src/walberla_bridge/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ function(ESPRESSO_ADD_TEST)
cmake_parse_arguments(TEST "" "SRC;NAME;NUM_PROC" "DEPENDS" ${ARGN})
espresso_unit_test(
SRC ${TEST_SRC} NAME ${TEST_NAME} NUM_PROC ${TEST_NUM_PROC} DEPENDS
${TEST_DEPENDS} espresso::walberla espresso::utils)
${TEST_DEPENDS} espresso::walberla espresso::walberla_codegen
espresso::utils)
if(WALBERLA_BUILD_WITH_CUDA)
target_link_libraries(${TEST_NAME} PRIVATE espresso::walberla_cuda)
target_link_libraries(${TEST_NAME} PRIVATE espresso::walberla_cuda
espresso::walberla_codegen_cuda)
endif()
if(${TEST_SRC} MATCHES ".*\.cu$")
target_link_libraries(${TEST_NAME} PRIVATE espresso::walberla::cuda_flags)
Expand Down
Loading