Skip to content
Snippets Groups Projects
Select Git revision
  • 4cae4e9d18a240e7462a38e09ef65719c342d5c7
  • develop default protected
  • feature/kinetic-schemes
  • feature/reconstruction
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/variational-hydro
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • master protected
  • feature/escobar-smoother
  • feature/hypoelasticity-clean
  • feature/hypoelasticity
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

CMakeLists.txt-template

Blame
  • CMakeLists.txt-template 4.34 KiB
    cmake_minimum_required (VERSION 3.19)
    
    project("_PLUGIN_LOW_")
    
    set(PUGS_PREFIX_PATH "" CACHE STRING "pugs intall dir")
    
    string(COMPARE EQUAL "${PUGS_PREFIX_PATH}" "" pugs_prefix_undefined)
    
    if (pugs_prefix_undefined)
      message(FATAL_ERROR "PUGS_PREFIX_PATH must be defined")
    endif()
    
    # CMake utils
    list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
    
    # Forbids in-source builds
    include(CheckNotInSources)
    
    # use PkgConfig to find packages
    find_package(PkgConfig REQUIRED)
    find_package(Pugs REQUIRED)
    
    list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/Kokkos")
    include(KokkosConfig)
    
    list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/pugs")
    include(PugsCompileFlags)
    
    if (${PUGS_HAS_MPI})
      set(HDF5_PREFER_PARALLEL TRUE)
      list(APPEND CMAKE_MODULE_PATH "${PUGS_PREFIX_PATH}/lib/cmake/HighFive")
    
      include(HighFiveConfig)
      if (TARGET HighFive)
        set(HIGHFIVE_TARGET HighFive::HighFive)
      endif()
    endif()
    
    include(PugsTargets)
    
    #------------------------------------------------------
    
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PUGS_CMAKE_CXX_FLAGS}")
    set(CMAKE_CXX_STANDARD "${PUGS_CMAKE_CXX_STANDARD}")
    
    # -----------------------------------------------------
    # dynamic libraries
    
    set(CMAKE_POSITION_INDEPENDENT_CODE ON)
    link_libraries("-rdynamic")
    set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
    
    #------------------------------------------------------
    
    set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
    
    #------------------------------------------------------
    
    set(_PLUGIN_UP__SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
    set(_PLUGIN_UP__BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
    
    #------------------------------------------------------
    # use pugs compilation settings
    
    set(CMAKE_BUILD_TYPE "${PUGS_CMAKE_BUILD_TYPE}" CACHE STRING "" FORCE)
    set(CMAKE_CXX_COMPILER "${PUGS_CMAKE_CXX_COMPILER}" CACHE STRING "" FORCE)
    set(CMAKE_C_COMPILER "${PUGS_CMAKE_C_COMPILER}" CACHE STRING "" FORCE)
    
    mark_as_advanced(CMAKE_BUILD_TYPE CMAKE_CXX_COMPILER CMAKE_C_COMPILER)
    
    #------------------------------------------------------
    # default build shared libraries
    set(BUILD_SHARED_LIBS ON CACHE STRING "" FORCE)
    
    #------------------------------------------------------
    
    # Checks if compiler version is compatible with Pugs sources
    set(GNU_CXX_MIN_VERSION "10.0.0")
    set(CLANG_CXX_MIN_VERSION "11.0.0")
    
    #------------------------------------------------------
    
    include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
    include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include")
    include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include/kokkos")
    include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include/tao/")
    if (${PUGS_HAS_MPI})
    include_directories(SYSTEM "${MPI_CXX_INCLUDE_DIRS}")
    endif()
    
    include_directories(SYSTEM "${PUGS_PREFIX_PATH}/include")
    link_directories(${PUGS_PREFIX_PATH}/lib)
    
    #------------------------------------------------------
    
    if(${PUGS_HAS_MPI})
      set(MPIEXEC_OPTION_FLAGS --oversubscribe)
      if (NOT "$ENV{GITLAB_CI}" STREQUAL "")
        set(MPIEXEC_OPTION_FLAGS ${MPIEXEC_OPTION_FLAGS} --allow-run-as-root)
      endif()
      set(MPIEXEC_NUMPROC 3)
      set(MPIEXEC_PATH_FLAG --path)
      set(MPI_LAUNCHER ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_NUMPROC} ${MPIEXEC_OPTION_FLAGS})
    endif()
    
    add_custom_target(all_unit_tests
      DEPENDS unit_tests mpi_unit_tests
    )
    
    add_custom_target(check
      DEPENDS test
      )
    
    add_custom_target(test
      DEPENDS run_all_unit_tests
      )
    
    add_custom_target(run_all_unit_tests
      DEPENDS run_mpi_unit_tests
      )
    
    if(PUGS_HAS_MPI)
      set(RUN_MPI_UNIT_TESTS_COMMENT "Running mpi_unit_tests [using ${MPIEXEC_NUMPROC} procs]")
    else()
      set(RUN_MPI_UNIT_TESTS_COMMENT "Running mpi_unit_tests [sequentially]")
    endif()
    
    add_custom_target(run_mpi_unit_tests
      COMMAND ${MPI_LAUNCHER} "${_PLUGIN_UP__BINARY_DIR}/mpi_unit_tests" --allow-running-no-tests
      WORKING_DIRECTORY ${_PLUGIN_UP__BINARY_DIR}
      DEPENDS run_unit_tests
      COMMENT ${RUN_MPI_UNIT_TESTS_COMMENT}
      )
    
    add_custom_target(run_unit_tests
      COMMAND "${_PLUGIN_UP__BINARY_DIR}/unit_tests" --allow-running-no-tests
      DEPENDS all_unit_tests
      COMMENT "Running unit_tests"
      )
    
    #------------------------------------------------------
    
    add_library(_PLUGIN_NAME_
      _PLUGIN_NAME_Module.cpp
      # add cpp sources files here
    )
    
    target_link_libraries(_PLUGIN_NAME_
      ${HIGHFIVE_TARGET}
    )
    
    #------------------------------------------------------
    
    add_subdirectory(tests)
    
    #------------------------------------------------------
    
    install(TARGETS _PLUGIN_NAME_)