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

Enhance system sc and p4est linkage #1231

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
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
39 changes: 17 additions & 22 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,40 +56,47 @@ set( CMAKE_CXX_EXTENSIONS OFF )
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})

if( T8CODE_ENABLE_MPI )
find_package( MPI COMPONENTS C REQUIRED )
find_package(MPI COMPONENTS C REQUIRED)
if( NOT MPIEXEC_EXECUTABLE )
message( FATAL_ERROR "MPIEXEC was not found" )
endif()
set( mpi ON ) # This is very dirty and will be fixed in the libsc repo (https://github.com/cburstedde/libsc/pull/178)
# set( SC_ENABLE_MPI ON ) # When the fix gets merged, replace the previous line with this one
endif()

if ( T8CODE_USE_SYSTEM_SC )
find_package( SC REQUIRED )
else( T8CODE_USE_SYSTEM_SC )
set (SC_LIBRARIES "SC::SC")
add_subdirectory( ${CMAKE_CURRENT_LIST_DIR}/sc )
endif( T8CODE_USE_SYSTEM_SC )

if ( T8CODE_USE_SYSTEM_P4EST )
find_package( P4EST REQUIRED )
else( T8CODE_USE_SYSTEM_P4EST )
set (P4EST_LIBRARIES "P4EST::P4EST")
add_subdirectory( ${CMAKE_CURRENT_LIST_DIR}/p4est )
endif( T8CODE_USE_SYSTEM_P4EST )

if( T8CODE_ENABLE_VTK )
find_package( VTK REQUIRED COMPONENTS
IOXML CommonExecutionModel CommonDataModel
IOGeometry IOXMLParser IOParallelXML IOPLY
ParallelMPI FiltersCore vtksys CommonCore zlib IOLegacy)
if(VTK_FOUND)
message("Found VTK")
endif (VTK_FOUND)
endif( T8CODE_ENABLE_VTK )

if( T8CODE_ENABLE_OCC )
find_package( OpenCASCADE REQUIRED COMPONENTS
TKBO TKPrim TKTopAlgo
TKGeomAlgo TKBRep
TKG3d TKG2d TKMath TKernel )
if(OpenCASCADE_FOUND)
message("Found OpenCASCADE")
endif (OpenCASCADE_FOUND)
endif( T8CODE_ENABLE_OCC )

if( T8CODE_ENABLE_NETCDF )
find_package( netCDF REQUIRED )
if(netCDF_FOUND)
message("Found netCDF")
if ( NETCDF_FOUND )
include(cmake/CheckNetCDFPar.cmake)
endif (netCDF_FOUND)
endif()
endif( T8CODE_ENABLE_NETCDF )

# Override default for this libsc option
Expand All @@ -103,18 +110,6 @@ set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib)
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH true)

if ( T8CODE_USE_SYSTEM_SC )
find_package( SC REQUIRED PATHS /path/to/system/sc )
else()
add_subdirectory( ${CMAKE_CURRENT_LIST_DIR}/sc )
endif()

if ( T8CODE_USE_SYSTEM_P4EST )
find_package( P4EST REQUIRED PATHS /path/to/system/p4est )
else()
add_subdirectory( ${CMAKE_CURRENT_LIST_DIR}/p4est )
endif()

add_subdirectory( ${CMAKE_CURRENT_LIST_DIR}/src )

if ( T8CODE_BUILD_TESTS )
Expand Down
4 changes: 2 additions & 2 deletions benchmarks/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ function( add_t8_benchmark )
set(BENCHMARK_BUILD_DIR "${CMAKE_BINARY_DIR}/${BENCHMARK_RELATIVE_DIR}")

add_executable( ${ADD_T8_BENCHMARK_NAME} ${ADD_T8_BENCHMARK_SOURCES} )
target_include_directories( ${ADD_T8_BENCHMARK_NAME} PRIVATE ${PROJECT_SOURCE_DIR} )
target_link_libraries( ${ADD_T8_BENCHMARK_NAME} PRIVATE T8 SC::SC )
target_link_libraries( ${ADD_T8_BENCHMARK_NAME} PRIVATE T8 ${SC_LIBRARIES} m )
target_include_directories( ${ADD_T8_BENCHMARK_NAME} PRIVATE ${PROJECT_SOURCE_DIR} ${SC_INCLUDE_DIR})

set_target_properties(${ADD_T8_BENCHMARK_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${BENCHMARK_BUILD_DIR}"
Expand Down
16 changes: 16 additions & 0 deletions cmake/FindP4EST.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Once done, this will define
# P4EST_FOUND - true if p4est has been found
# P4EST_INCLUDE_DIR - the p4est include dir
# P4EST_LIBRARIES - names of p4est libraries
# P4EST_LINK_DIRECTORY - location of p4est libraries

find_path(P4EST_INCLUDE_DIR p4est.h HINTS ${P4EST_ROOT}/../include PATH_SUFFIXES include)

find_library(P4EST_LIBRARIES NAMES p4est HINTS ${P4EST_DIR}/../lib PATH_SUFFIXES lib)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(P4EST DEFAULT_MSG P4EST_INCLUDE_DIR P4EST_LIBRARIES)

if(NOT SC_LIBRARIES)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this be if(NOT P4EST_LIBRARIES) ?

message(FATAL_ERROR "p4est libraries not found")
endif()
16 changes: 16 additions & 0 deletions cmake/FindSC.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Once done, this will define
# SC_FOUND - true if SC has been found
# SC_INCLUDE_DIR - the SC include dir
# SC_LIBRARIES - names of SC libraries
# SC_LINK_DIRECTORY - location of SC libraries

find_path(SC_INCLUDE_DIR sc.h HINTS ${SC_DIR}/../include PATH_SUFFIXES include)

find_library(SC_LIBRARIES NAMES sc HINTS ${SC_DIR}/../lib PATH_SUFFIXES lib)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SC DEFAULT_MSG SC_INCLUDE_DIR SC_LIBRARIES)

if(NOT SC_LIBRARIES)
message(FATAL_ERROR "SC libraries not found")
endif()
6 changes: 3 additions & 3 deletions example/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ install( TARGETS t8example DESTINATION ${CMAKE_INSTALL_PREFIX}/lib )

function( add_t8_example )
set( options "" )
set( oneValueArgs "NAME" )
set( oneValueArgs "NAME" )
set( multiValueArgs "SOURCES" )
cmake_parse_arguments( ADD_T8_EXAMPLE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )

Expand All @@ -23,8 +23,8 @@ function( add_t8_example )
set(EXAMPLE_BUILD_DIR "${CMAKE_BINARY_DIR}/${EXAMPLE_RELATIVE_DIR}")

add_executable( ${ADD_T8_EXAMPLE_NAME} ${ADD_T8_EXAMPLE_SOURCES} )
target_link_libraries( ${ADD_T8_EXAMPLE_NAME} PRIVATE T8 t8example SC::SC )
target_include_directories( ${ADD_T8_EXAMPLE_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/.. )
target_link_libraries( ${ADD_T8_EXAMPLE_NAME} PRIVATE T8 t8example ${SC_LIBRARIES} m )
target_include_directories( ${ADD_T8_EXAMPLE_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/.. ${SC_INCLUDE_DIR} )

set_target_properties(${ADD_T8_EXAMPLE_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${EXAMPLE_BUILD_DIR}"
Expand Down
96 changes: 67 additions & 29 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@ endif()
add_library( T8CODE::T8 ALIAS T8 )

if( CMAKE_BUILD_TYPE STREQUAL "Release" )
set (T8_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
set (T8_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}")
set (T8_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
set (T8_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}")
endif()

if( CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo" )
set (T8_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
set (T8_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
set (T8_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
set (T8_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}")
endif()

if( CMAKE_BUILD_TYPE STREQUAL "Debug" )
set (T8_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
set (T8_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}")
set (T8_CXXFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
set (T8_CFLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}")

target_compile_definitions( T8 PUBLIC T8_ENABLE_DEBUG )
endif()
Expand All @@ -29,51 +29,89 @@ if( T8CODE_EXPORT_COMPILE_COMMANDS )
set_target_properties( T8 PROPERTIES EXPORT_COMPILE_COMMANDS ON )
endif( T8CODE_EXPORT_COMPILE_COMMANDS )

if( T8CODE_ENABLE_NETCDF )
target_link_libraries( T8 PUBLIC netCDF::netcdf )
target_compile_definitions(T8 PUBLIC
T8_WITH_NETCDF
$<$<AND:$<BOOL:${NETCDF_HAVE_NETCDF_PAR}>,$<BOOL:${T8CODE_ENABLE_MPI}>>:T8_WITH_NETCDF_PAR> )
endif()

set_target_properties( T8 PROPERTIES OUTPUT_NAME t8 )

target_include_directories( T8 PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>
)

target_link_libraries( T8 PUBLIC P4EST::P4EST SC::SC )
if ( T8CODE_USE_SYSTEM_SC )
if ( SC_FOUND )
message(STATUS "Found system SC")
message(STATUS "SC include dir: ${SC_INCLUDE_DIR}")
message(STATUS "SC libraries: ${SC_LIBRARIES}")
target_include_directories( T8 PUBLIC ${SC_INCLUDE_DIR} )
target_link_libraries( T8 PUBLIC ${SC_LIBRARIES} )
endif ( SC_FOUND )
else( T8CODE_USE_SYSTEM_SC )
message(STATUS "Building SC with t8code")
target_link_libraries( T8 PUBLIC ${SC_LIBRARIES} )
endif( T8CODE_USE_SYSTEM_SC )

if ( T8CODE_USE_SYSTEM_P4EST )
if ( P4EST_FOUND )
message(STATUS "Found system p4est")
message(STATUS "p4est include dir: ${P4EST_INCLUDE_DIR}")
message(STATUS "p4est libraries: ${P4EST_LIBRARIES}")
target_include_directories( T8 PUBLIC ${P4EST_INCLUDE_DIR} )
target_link_libraries( T8 PUBLIC ${P4EST_LIBRARIES} )
endif ( P4EST_FOUND )
else( T8CODE_USE_SYSTEM_P4EST )
message(STATUS "Building p4est with t8code")
target_link_libraries( T8 PUBLIC ${P4EST_LIBRARIES} )
endif( T8CODE_USE_SYSTEM_P4EST )

if ( T8CODE_ENABLE_MPI )
if ( MPI_FOUND )
message(STATUS "Found MPI")
message(STATUS "MPI include dir: ${MPI_C_INCLUDE_DIRS}")
message(STATUS "MPI libraries: ${MPI_C_LIBRARIES}")
target_compile_definitions( T8 PUBLIC T8_ENABLE_MPI )
target_compile_definitions( T8 PUBLIC T8_ENABLE_MPIIO )
target_link_libraries( T8 PUBLIC MPI::MPI_C )
endif()
endif( MPI_FOUND )

if( T8CODE_ENABLE_VTK )
if( VTK_FOUND )
message(STATUS "Found VTK")
message(STATUS "VTK version: ${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
message(STATUS "VTK include dir: ${VTK_INCLUDE_DIR}")
message(STATUS "VTK libraries: ${VTK_LIBRARIES}")
target_compile_definitions( T8 PUBLIC T8_VTK_VERSION_USED="${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" )
target_compile_definitions( T8 PUBLIC T8_WITH_VTK=1 )
target_include_directories( T8 PUBLIC ${VTK_INCLUDE_DIR} )
target_link_libraries( T8 PUBLIC ${VTK_LIBRARIES} )
endif()
endif( VTK_FOUND )

if( T8CODE_ENABLE_OCC )
if( OpenCASCADE_FOUND )
message(STATUS "Found OpenCASCADE")
message(STATUS "OpenCASCADE version: ${OCC_VERSION_STRING}")
message(STATUS "OpenCASCADE include dir: ${OpenCASCADE_INCLUDE_DIR}")
message(STATUS "OpenCASCADE libraries: ${OpenCASCADE_LIBRARIES}")
target_compile_definitions( T8 PUBLIC T8_WITH_OCC=1 )
target_include_directories( T8 PUBLIC ${OpenCASCADE_INCLUDE_DIR} )
target_link_libraries( T8 PUBLIC ${OpenCASCADE_LIBRARIES} )
endif( OpenCASCADE_FOUND )

if( NETCDF_FOUND )
message(STATUS "Found netCDF")
message(STATUS "netCDF include dir: ${netCDF_INCLUDE_DIR}")
message(STATUS "netCDF libraries: ${netCDF_LIBRARIES}")
target_link_libraries( T8 PUBLIC netCDF::netcdf )
target_compile_definitions(T8 PUBLIC
T8_WITH_NETCDF
$<$<AND:$<BOOL:${NETCDF_HAVE_NETCDF_PAR}>,$<BOOL:${T8CODE_ENABLE_MPI}>>:T8_WITH_NETCDF_PAR> )
endif()

if( T8CODE_ENABLE_LESS_TESTS )
target_compile_definitions( T8 PUBLIC T8_ENABLE_LESS_TESTS=1 )
endif()

if( T8CODE_BUILD_PEDANTIC )
# TODO: Add `-Wextra -Wpedantic`. As of now, t8code would not compile with this.
# See also: https://github.com/DLR-AMR/t8code/issues/1155.
target_compile_options( T8 PUBLIC -Wall -pedantic -Werror )
set (T8_CXXFLAGS "${T8_CXXFLAGS} -W -Wall -Wpedantic -Werror")
set (T8_CFLAGS "${T8_CFLAGS} -W -Wall -Wpedantic -Werror")
# TODO: Add `-Wextra -Wpedantic`. As of now, t8code would not compile with this.
# See also: https://github.com/DLR-AMR/t8code/issues/1155.
target_compile_options( T8 PUBLIC -Wall -pedantic -Werror )
set (T8_CXXFLAGS "${T8_CXXFLAGS} -W -Wall -Wpedantic -Werror")
set (T8_CFLAGS "${T8_CFLAGS} -W -Wall -Wpedantic -Werror")
endif()

target_sources( T8 PRIVATE
Expand Down Expand Up @@ -201,8 +239,8 @@ install( FILES
install( DIRECTORY t8_cmesh DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" )
install( DIRECTORY t8_data DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" )
install( DIRECTORY t8_forest DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING
PATTERN "*.h"
PATTERN "*private.h" EXCLUDE )
PATTERN "*.h"
PATTERN "*private.h" EXCLUDE )
install( DIRECTORY t8_geometry DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" )
install( DIRECTORY t8_schemes DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" )
install( DIRECTORY t8_vtk DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h" )
Expand All @@ -220,7 +258,7 @@ install( TARGETS T8 EXPORT ${PROJECT_NAME}-targets )
include( CMakePackageConfigHelpers )

configure_package_config_file( ${CMAKE_CURRENT_LIST_DIR}/config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${PROJECT_NAME}Config.cmake
${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${PROJECT_NAME}Config.cmake
INSTALL_DESTINATION cmake
)

Expand Down
2 changes: 1 addition & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ function( add_t8_test )
set(TEST_BUILD_DIR "${CMAKE_BINARY_DIR}/${TEST_RELATIVE_DIR}")

add_executable( ${ADD_T8_TEST_NAME} ${ADD_T8_TEST_SOURCES} )
target_link_libraries( ${ADD_T8_TEST_NAME} PRIVATE T8 gtest pthread)
target_link_libraries( ${ADD_T8_TEST_NAME} PRIVATE T8 gtest pthread m )

set_target_properties(${ADD_T8_TEST_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${TEST_BUILD_DIR}"
Expand Down
5 changes: 3 additions & 2 deletions tutorials/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ function( add_t8_tutorial )
set(TUTORIAL_BUILD_DIR "${CMAKE_BINARY_DIR}/${TUTORIAL_RELATIVE_DIR}")

add_executable( ${ADD_T8_TUTORIAL_NAME} ${ADD_T8_TUTORIAL_SOURCES} )
target_link_libraries( ${ADD_T8_TUTORIAL_NAME} PRIVATE T8 SC::SC )
target_include_directories( ${ADD_T8_TUTORIAL_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/.. )

target_link_libraries( ${ADD_T8_TUTORIAL_NAME} PRIVATE T8 ${SC_LIBRARIES} m )
target_include_directories( ${ADD_T8_TUTORIAL_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/.. ${SC_INCLUDE_DIR} )

set_target_properties(${ADD_T8_TUTORIAL_NAME} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${TUTORIAL_BUILD_DIR}"
Expand Down
Loading