196 lines
5.9 KiB
CMake
Executable File
196 lines
5.9 KiB
CMake
Executable File
# Set some CMake properties
|
|
CMAKE_MINIMUM_REQUIRED( VERSION 3.9 )
|
|
if( ${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.20.0")
|
|
CMAKE_POLICY( SET CMP0115 OLD )
|
|
endif()
|
|
|
|
|
|
MESSAGE("====================")
|
|
MESSAGE("Configuring LBPM-WIA")
|
|
MESSAGE("====================")
|
|
|
|
|
|
# Set the project name
|
|
SET( PROJ LBPM ) # Set the project name for CMake
|
|
SET( LBPM_LIB lbpm-wia ) # Set the final library name
|
|
SET( LBPM_INC ) # Set an optional subfolder for includes (e.g. include/name/...)
|
|
SET( TEST_MAX_PROCS 16 )
|
|
|
|
|
|
# Initialize the project
|
|
PROJECT( ${PROJ} LANGUAGES CXX)
|
|
|
|
# Prevent users from building in place
|
|
IF ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}" )
|
|
MESSAGE( FATAL_ERROR "Building code in place is a bad idea" )
|
|
ENDIF()
|
|
|
|
|
|
# Set the default C++ standard
|
|
SET( CMAKE_CXX_EXTENSIONS OFF )
|
|
IF ( NOT CMAKE_CXX_STANDARD )
|
|
IF ( CXX_STD )
|
|
MESSAGE( FATAL_ERROR "CXX_STD is obsolete, please set CMAKE_CXX_STANDARD" )
|
|
ENDIF()
|
|
SET( CMAKE_CXX_STANDARD 14 )
|
|
ENDIF()
|
|
IF ( ( "${CMAKE_CXX_STANDARD}" GREATER "90" ) OR ( "${CMAKE_CXX_STANDARD}" LESS "14" ) )
|
|
MESSAGE( FATAL_ERROR "C++14 or newer required" )
|
|
ENDIF()
|
|
|
|
|
|
# Set source/install paths
|
|
SET( ${PROJ}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" )
|
|
SET( ${PROJ}_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
|
|
IF( ${PROJ}_INSTALL_DIR )
|
|
SET( ${PROJ}_INSTALL_DIR "${${PROJ}_INSTALL_DIR}" )
|
|
ELSEIF( PREFIX )
|
|
SET( ${PROJ}_INSTALL_DIR "${PREFIX}" )
|
|
ELSEIF( NOT ${PROJ}_INSTALL_DIR )
|
|
SET( ${PROJ}_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
|
|
ENDIF()
|
|
INCLUDE_DIRECTORIES( "${${PROJ}_INSTALL_DIR}/include" )
|
|
SET( CMAKE_MODULE_PATH ${${PROJ}_SOURCE_DIR} ${${PROJ}_SOURCE_DIR}/cmake )
|
|
|
|
|
|
# Include macros
|
|
INCLUDE( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/macros.cmake" )
|
|
INCLUDE( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/libraries.cmake" )
|
|
INCLUDE( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/LBPM-macros.cmake" )
|
|
|
|
|
|
# Check if we are only compiling docs
|
|
CHECK_ENABLE_FLAG( ONLY_BUILD_DOCS 0 )
|
|
|
|
|
|
# Set testing paramaters
|
|
SET( DROP_METHOD "http" )
|
|
SET( DROP_SITE "" )
|
|
SET( DROP_LOCATION "/CDash/submit.php?project=LBPM-WIA" )
|
|
SET( TRIGGER_SITE "" )
|
|
SET( DROP_SITE_CDASH TRUE )
|
|
ENABLE_TESTING()
|
|
INCLUDE( CTest )
|
|
|
|
|
|
# Check the compile mode and compile flags
|
|
IF ( NOT ONLY_BUILD_DOCS )
|
|
CONFIGURE_SYSTEM()
|
|
ENDIF()
|
|
|
|
|
|
# Add some directories to include
|
|
INCLUDE_DIRECTORIES( "${${PROJ}_INSTALL_DIR}/include" )
|
|
|
|
|
|
# Create the target for documentation
|
|
ADD_CUSTOM_TARGET( doc )
|
|
ADD_CUSTOM_TARGET( latex_docs )
|
|
CHECK_ENABLE_FLAG( USE_DOXYGEN 1 )
|
|
CHECK_ENABLE_FLAG( USE_LATEX 1 )
|
|
FILE( MAKE_DIRECTORY "${${PROJ}_INSTALL_DIR}/doc" )
|
|
IF ( USE_DOXYGEN )
|
|
SET( DOXYFILE_LATEX NO )
|
|
SET( DOXYFILE_IN "${${PROJ}_SOURCE_DIR}/doxygen/Doxyfile.in" )
|
|
SET( DOXY_HEADER_FILE "${${PROJ}_SOURCE_DIR}/doxygen/html/header.html" )
|
|
SET( DOXY_FOOTER_FILE "${${PROJ}_SOURCE_DIR}/doxygen/html/footer.html" )
|
|
SET( DOXYFILE_OUTPUT_DIR "${${PROJ}_INSTALL_DIR}/doc" )
|
|
SET( DOXYFILE_SRC_HTML_DIR "${${PROJ}_SOURCE_DIR}/doxygen/html" )
|
|
SET( DOXYFILE_SOURCE_DIR "${${PROJ}_SOURCE_DIR}" )
|
|
SET( REL_PACKAGE_HTML "" )
|
|
SET( DOXYGEN_MACROS "" )
|
|
MESSAGE("DOXYGEN_MACROS = ${DOXYGEN_MACROS}")
|
|
INCLUDE( "${${PROJ}_SOURCE_DIR}/cmake/UseDoxygen.cmake" )
|
|
IF ( DOXYGEN_FOUND )
|
|
ADD_DEPENDENCIES( doxygen latex_docs )
|
|
ADD_DEPENDENCIES( doc latex_docs doxygen )
|
|
ELSE()
|
|
SET( USE_DOXYGEN 0 )
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
|
|
# Create custom targets for build-test, check, and distclean
|
|
ADD_CUSTOM_TARGET( build-test )
|
|
ADD_CUSTOM_TARGET( build-examples )
|
|
ADD_CUSTOM_TARGET( check COMMAND make test )
|
|
ADD_DISTCLEAN( analysis null_timer tests liblbpm-wia.* cpu gpu cuda hip example common IO threadpool StackTrace )
|
|
|
|
|
|
# Check for CUDA
|
|
CHECK_ENABLE_FLAG( USE_CUDA 0 )
|
|
CHECK_ENABLE_FLAG( USE_HIP 0 )
|
|
NULL_USE( CMAKE_CUDA_FLAGS )
|
|
IF ( USE_CUDA )
|
|
ADD_DEFINITIONS( -DUSE_CUDA )
|
|
ENABLE_LANGUAGE( CUDA )
|
|
ELSEIF ( USE_HIP )
|
|
IF ( NOT DEFINED HIP_PATH )
|
|
IF ( NOT DEFINED ENV{HIP_PATH} )
|
|
SET( HIP_PATH "/opt/rocm/hip" CACHE PATH "Path to which HIP has been installed" )
|
|
ELSE()
|
|
SET( HIP_PATH $ENV{HIP_PATH} CACHE PATH "Path to which HIP has been installed" )
|
|
ENDIF()
|
|
ENDIF()
|
|
SET( CMAKE_MODULE_PATH "${HIP_PATH}/cmake" ${CMAKE_MODULE_PATH} )
|
|
FIND_PACKAGE( HIP REQUIRED )
|
|
FIND_PACKAGE( CUDA QUIET )
|
|
MESSAGE( "HIP Found")
|
|
MESSAGE( " HIP version: ${HIP_VERSION_STRING}")
|
|
MESSAGE( " HIP platform: ${HIP_PLATFORM}")
|
|
MESSAGE( " HIP Include Path: ${HIP_INCLUDE_DIRS}")
|
|
MESSAGE( " HIP Libraries: ${HIP_LIBRARIES}")
|
|
ADD_DEFINITIONS( -DUSE_HIP )
|
|
ENDIF()
|
|
|
|
|
|
|
|
# Configure external packages
|
|
IF ( NOT ONLY_BUILD_DOCS )
|
|
CONFIGURE_MPI() # MPI must be before other libraries
|
|
CONFIGURE_MIC()
|
|
CONFIGURE_HDF5()
|
|
CONFIGURE_NETCDF()
|
|
CONFIGURE_SILO()
|
|
CONFIGURE_LBPM()
|
|
CONFIGURE_TIMER( 0 "${${PROJ}_INSTALL_DIR}/null_timer" FALSE )
|
|
CONFIGURE_LINE_COVERAGE()
|
|
# Set the external library link list
|
|
SET( EXTERNAL_LIBS ${EXTERNAL_LIBS} ${TIMER_LIBS} )
|
|
ENDIF()
|
|
|
|
|
|
|
|
# Macro to create 1,2,4 processor tests
|
|
MACRO( ADD_LBPM_TEST_1_2_4 EXENAME ${ARGN} )
|
|
ADD_LBPM_TEST( ${EXENAME} ${ARGN} )
|
|
ADD_LBPM_TEST_PARALLEL( ${EXENAME} 2 ${ARGN} )
|
|
ADD_LBPM_TEST_PARALLEL( ${EXENAME} 4 ${ARGN} )
|
|
ENDMACRO()
|
|
|
|
|
|
# Add the src directories
|
|
IF ( NOT ONLY_BUILD_DOCS )
|
|
BEGIN_PACKAGE_CONFIG( lbpm-wia-library )
|
|
ADD_PACKAGE_SUBDIRECTORY( common )
|
|
ADD_PACKAGE_SUBDIRECTORY( analysis )
|
|
ADD_PACKAGE_SUBDIRECTORY( IO )
|
|
ADD_PACKAGE_SUBDIRECTORY( threadpool )
|
|
ADD_PACKAGE_SUBDIRECTORY( StackTrace )
|
|
ADD_PACKAGE_SUBDIRECTORY( models )
|
|
IF ( USE_CUDA )
|
|
ADD_PACKAGE_SUBDIRECTORY( cuda )
|
|
ELSEIF ( USE_HIP )
|
|
ADD_SUBDIRECTORY( hip )
|
|
SET( LBPM_LIBRARIES lbpm-hip lbpm-wia )
|
|
ELSE()
|
|
ADD_PACKAGE_SUBDIRECTORY( cpu )
|
|
ENDIF()
|
|
INSTALL_LBPM_TARGET( lbpm-wia-library )
|
|
ADD_SUBDIRECTORY( tests )
|
|
ADD_SUBDIRECTORY( example )
|
|
#ADD_SUBDIRECTORY( workflows )
|
|
INSTALL_PROJ_LIB()
|
|
ENDIF()
|
|
|