diff --git a/CMakeLists.txt b/CMakeLists.txt index 053c7c7bbebd3ae5945870da5f9175d8eafd2e10..a61b03e71782e9ea8b308ce49172260aabeb7b72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ ## ############################################################################################################################ -CMAKE_MINIMUM_REQUIRED (VERSION 3.10) +CMAKE_MINIMUM_REQUIRED (VERSION 3.14) PROJECT ( walberla ) diff --git a/cmake/FindMetis.cmake b/cmake/FindMetis.cmake index c40d40be7677d6a1a9f74d97e95817658a706c53..baf1f12d72a007c026067d32d4e46221285f043e 100644 --- a/cmake/FindMetis.cmake +++ b/cmake/FindMetis.cmake @@ -1,183 +1,68 @@ -# METIS Find Module for MSTK -# Shamelessly stolen from Amanzi open source code https://software.lanl.gov/ascem/trac -# -# Usage: -# Control the search through METIS_DIR or setting environment variable -# METIS_ROOT to the METIS installation prefix. -# -# This module does not search default paths! -# -# Following variables are set: -# METIS_FOUND (BOOL) Flag indicating if METIS was found -# METIS_INCLUDE_DIR (PATH) Path to the METIS include file -# METIS_INCLUDE_DIRS (LIST) List of all required include files -# METIS_LIBRARY_DIR (PATH) Path to the METIS library -# METIS_LIBRARY (FILE) METIS library -# METIS_LIBRARIES (LIST) List of all required METIS libraries -# -# ############################################################################# +#[=======================================================================[.rst: +FindMETIS +------- -# Standard CMake modules see CMAKE_ROOT/Modules -include(FindPackageHandleStandardArgs) - -# Amanzi CMake functions see <root>/tools/cmake for source -#include(PrintVariable) - -if ( METIS_LIBRARIES AND METIS_INCLUDE_DIRS ) - - # Do nothing. Variables are set. No need to search again - -else(METIS_LIBRARIES AND METIS_INCLUDE_DIRS) - - # Cache variables - if(METIS_DIR) - set(METIS_DIR "${METIS_DIR}" CACHE PATH "Path to search for METIS include and library files") - else() - if( DEFINED ENV{METIS_ROOT} ) - set(METIS_DIR "$ENV{METIS_ROOT}" CACHE PATH "Path to search for METIS include and library files") - endif() - endif() - - if(METIS_INCLUDE_DIR) - set(METIS_INCLUDE_DIR "${METIS_INCLUDE_DIR}" CACHE PATH "Path to search for METIS include files") - endif() - - if(METIS_LIBRARY_DIR) - set(METIS_LIBRARY_DIR "${METIS_LIBRARY_DIR}" CACHE PATH "Path to search for METIS library files") - endif() - - - # Search for include files - # Search order preference: - # (1) METIS_INCLUDE_DIR - check existence of path AND if the include files exist - # (2) METIS_DIR/<include> - # (3) Default CMake paths See cmake --html-help=out.html file for more information. - # - set(metis_inc_names "metis.h") - if (METIS_INCLUDE_DIR) - - if (EXISTS "${METIS_INCLUDE_DIR}") - - find_path(metis_test_include_path - NAMES ${metis_inc_names} - HINTS ${METIS_INCLUDE_DIR} - NO_DEFAULT_PATH) - - set(METIS_INCLUDE_DIR "${metis_test_include_path}") +Finds the METIS library. - else() - message(SEND_ERROR "METIS_INCLUDE_DIR=${METIS_INCLUDE_DIR} does not exist") - set(METIS_INCLUDE_DIR "METIS_INCLUDE_DIR-NOTFOUND") - endif() +Result Variables +^^^^^^^^^^^^^^^^ - else() +This will define the following variables: -# Metis sometimes puts the include files in a subdir called Lib +``METIS_FOUND`` + True if the system has the METIS library. +``METIS_INCLUDE_DIRS`` + Include directories needed to use METIS. +``METIS_LIBRARIES`` + Libraries needed to link to METIS. - set(metis_inc_suffixes "include" "Lib") - if(METIS_DIR) +Cache Variables +^^^^^^^^^^^^^^^ - if (EXISTS "${METIS_DIR}" ) +The following cache variables may also be set: - find_path(METIS_INCLUDE_DIR - NAMES ${metis_inc_names} - HINTS ${METIS_DIR} - PATH_SUFFIXES ${metis_inc_suffixes} - NO_DEFAULT_PATH) +``METIS_INCLUDE_DIR`` + The directory containing ``METIS.h``. +``METIS_LIBRARY`` + The path to the METIS library. - else() - message(SEND_ERROR "METIS_DIR=${METIS_DIR} does not exist") - set(METIS_INCLUDE_DIR "METIS_INCLUDE_DIR-NOTFOUND") - endif() +#]=======================================================================] +set(CMAKE_FIND_DEBUG_MODE TRUE) +find_path(METIS_INCLUDE_DIR + NAMES metis.h + ) + set(CMAKE_FIND_DEBUG_MODE FALSE) +find_library(METIS_LIBRARY + NAMES metis + ) - else() - - find_path(METIS_INCLUDE_DIR - NAMES ${metis_inc_names} - PATH_SUFFIXES ${metis_inc_suffixes}) - - endif() - - endif() - - - # Search for libraries - # Search order preference: - # (1) METIS_LIBRARY_DIR - check existence of path AND if the library file exists - # (2) METIS_DIR/<lib,Lib> - # (3) Default CMake paths See cmake --html-help=out.html file for more information. - # - set(metis_lib_names "metis") - if (METIS_LIBRARY_DIR) - - if (EXISTS "${METIS_LIBRARY_DIR}") - - find_library(METIS_LIBRARY - NAMES ${metis_lib_names} - HINTS ${METIS_LIBRARY_DIR} - NO_DEFAULT_PATH) - else() - message(SEND_ERROR "METIS_LIBRARY_DIR=${METIS_LIBRARY_DIR} does not exist") - set(METIS_LIBRARY "METIS_LIBRARY-NOTFOUND") - endif() - - else() - - list(APPEND metis_lib_suffixes "lib" "Lib") - if(METIS_DIR) - - if (EXISTS "${METIS_DIR}" ) - - find_library(METIS_LIBRARY - NAMES ${metis_lib_names} - HINTS ${METIS_DIR} - PATH_SUFFIXES ${metis_lib_suffixes} - NO_DEFAULT_PATH) - - else() - message(SEND_ERROR "METIS_DIR=${METIS_DIR} does not exist") - set(METISLIBRARY "METIS_LIBRARY-NOTFOUND") - endif() - - - else() - - find_library(METIS_LIBRARY - NAMES ${metis_lib_names} - PATH_SUFFIXES ${metis_lib_suffixes}) - - endif() - +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Metis + FOUND_VAR METIS_FOUND + REQUIRED_VARS + METIS_LIBRARY + METIS_INCLUDE_DIR + VERSION_VAR METIS_VERSION + ) + +if(METIS_FOUND) + # Build and run test program + try_compile(METIS_TEST_RUNS + "${CMAKE_BINARY_DIR}" + "${CMAKE_SOURCE_DIR}/cmake/TestMetis.cpp" + CXX_STANDARD 14 + OUTPUT_VARIABLE METIS_ERROR + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${METIS_INCLUDE_DIR}") + + if (NOT METIS_TEST_RUNS) + message(FATAL_ERROR "Metis not build with 64-bit integer and 64-bit float. (${METIS_INCLUDE_DIR})") endif() - - - - # Define prerequisite packages + set(METIS_LIBRARIES ${METIS_LIBRARY}) set(METIS_INCLUDE_DIRS ${METIS_INCLUDE_DIR}) - set(METIS_LIBRARIES ${METIS_LIBRARY}) - - -endif(METIS_LIBRARIES AND METIS_INCLUDE_DIRS ) - -# Send useful message if everything is found -find_package_handle_standard_args(METIS DEFAULT_MSG - METIS_LIBRARIES - METIS_INCLUDE_DIRS) - -# find_package_handle_standard_args should set METIS_FOUND but it does not! -if ( METIS_LIBRARIES AND METIS_INCLUDE_DIRS) - set(METIS_FOUND TRUE) -else() - set(METIS_FOUND FALSE) endif() -# Define the version - mark_as_advanced( - METIS_INCLUDE_DIR - METIS_INCLUDE_DIRS - METIS_LIBRARY - METIS_LIBRARIES - METIS_LIBRARY_DIR -) \ No newline at end of file + METIS_INCLUDE_DIR + METIS_LIBRARY +) diff --git a/cmake/TestMetis.cpp b/cmake/TestMetis.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f60c362c7a628dd83cd5b48c9fb629ef1cafcbed --- /dev/null +++ b/cmake/TestMetis.cpp @@ -0,0 +1,8 @@ +#include <metis.h> + +int main( int argc, char* argv[] ) +{ + static_assert(IDXTYPEWIDTH==64, "Metis has to be build with 64-bit integer support!"); + static_assert(REALTYPEWIDTH==64, "Metis has to be build with 64-bit floating point precision!"); + return 0; +}