Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
PaMPA
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
8
Issues
8
List
Boards
Labels
Service Desk
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PaMPA
PaMPA
Commits
e08337bf
Commit
e08337bf
authored
Apr 23, 2018
by
PRUVOST Florent
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use FindPTSCOTCH from morse cmake (more complete)
parent
2444c9e5
Pipeline
#23190
failed with stages
in 59 seconds
Changes
7
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
888 additions
and
140 deletions
+888
-140
CMakeLists.txt
CMakeLists.txt
+8
-13
CMakeScripts/FindPTSCOTCH.cmake
CMakeScripts/FindPTSCOTCH.cmake
+439
-68
CMakeScripts/FindSCOTCH.cmake
CMakeScripts/FindSCOTCH.cmake
+366
-47
CMakeScripts/LibrariesAbsolutePath.cmake
CMakeScripts/LibrariesAbsolutePath.cmake
+68
-0
doc/user_pages/doc_02_compil.txt
doc/user_pages/doc_02_compil.txt
+2
-2
ext/CMakeLists.txt
ext/CMakeLists.txt
+0
-5
src/pampa-remesh/CMakeLists.txt
src/pampa-remesh/CMakeLists.txt
+5
-5
No files found.
CMakeLists.txt
View file @
e08337bf
...
...
@@ -7,12 +7,12 @@
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## any later version.
##
##
## PaMPA is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
##
## In this respect, the user's attention is drawn to the risks associated
## with loading, using, modifying and/or developing or reproducing the
## software by the user in light of its specific status of free software,
...
...
@@ -23,7 +23,7 @@
## their requirements in conditions enabling the security of their
## systems and/or data to be ensured and, more generally, to use and
## operate it in the same conditions as regards security.
##
##
## The fact that you are presently reading this means that you have had
## knowledge of the GPLv3 license and that you accept its terms.
##
...
...
@@ -75,6 +75,8 @@ include(CheckSymbolExists)
set
(
CMAKE_MODULE_PATH
${
PROJECT_SOURCE_DIR
}
/CMakeScripts
)
# To transform relative path into absolute for a list of libraries
include
(
LibrariesAbsolutePath
)
set
(
CMAKE_Fortran_MODULE_DIRECTORY
${
PROJECT_BINARY_DIR
}
/MOD
)
# Define some variables which will be fill in with ccmake or cmake-gui
...
...
@@ -205,11 +207,8 @@ endif (COMMON_COMPRESSION)
option
(
PTSCOTCH
"Build PaMPA with PT-Scotch dependencies"
ON
)
if
(
PTSCOTCH
)
add_definitions
(
-DPTSCOTCH
)
set
(
PTSCOTCH_HOME
""
CACHE PATH
"PT-Scotch home directory"
)
find_package
(
PTSCOTCH REQUIRED
)
file
(
STRINGS
"
${
PTSCOTCH_INCLUDE_DIR
}
/scotch.h"
CHECK_SCOTCH_VERSION REGEX
"^[
\t
]*#define[
\t
]+SCOTCH_[A-Z]+[
\t
]+[0-9]+.*$"
)
file
(
STRINGS
"
${
PTSCOTCH_INCLUDE_DIRS
}
/scotch.h"
CHECK_SCOTCH_VERSION REGEX
"^[
\t
]*#define[
\t
]+SCOTCH_[A-Z]+[
\t
]+[0-9]+.*$"
)
foreach
(
item IN ITEMS VERSION RELEASE PATCHLEVEL
)
string
(
REGEX REPLACE
".*#define[
\t
]+SCOTCH_
${
item
}
[
\t
]+([0-9]+).*"
"
\\
1"
XYZ
${
CHECK_SCOTCH_VERSION
}
)
set
(
SCOTCH_
${
item
}
${
XYZ
}
)
...
...
@@ -218,9 +217,7 @@ if (PTSCOTCH)
#if (${SCOTCH_VERSION}.${SCOTCH_RELEASE}.${SCOTCH_PATCHLEVEL} VERSION_LESS 6.0.4)
# message (FATAL_ERROR "PT-Scotch version must be greater than or equal to 6.0.4")
#endif ()
include_directories
(
${
PTSCOTCH_INCLUDE_DIR
}
)
else
()
unset
(
PTSCOTCH_HOME CACHE
)
include_directories
(
${
PTSCOTCH_INCLUDE_DIRS
}
)
endif
()
...
...
@@ -362,9 +359,7 @@ add_subdirectory(${PAMPA_SOURCE_DIR}/src/libpampa)
# Add dependency on PT-Scotch
if
(
PTSCOTCH
)
list
(
APPEND PAMPA_DEPENDENCIES
${
PTSCOTCH_LIBRARY
}
)
list
(
APPEND PAMPA_DEPENDENCIES
${
SCOTCH_LIBRARY
}
)
list
(
APPEND PAMPA_DEPENDENCIES
${
PTSCOTCH_EXTRA_LIBRARY
}
)
list
(
APPEND PAMPA_DEPENDENCIES
${
PTSCOTCH_LIBRARIES_DEP
}
)
endif
()
...
...
CMakeScripts/FindPTSCOTCH.cmake
View file @
e08337bf
## Copyright 2009-2016 Inria
##
## This file is part of the PaMPA software package for parallel
## mesh partitioning and adaptation.
##
## PaMPA is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## any later version.
##
## PaMPA is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## In this respect, the user's attention is drawn to the risks associated
## with loading, using, modifying and/or developing or reproducing the
## software by the user in light of its specific status of free software,
## that may mean that it is complicated to manipulate, and that also
## therefore means that it is reserved for developers and experienced
## professionals having in-depth computer knowledge. Users are therefore
## encouraged to load and test the software's suitability as regards
## their requirements in conditions enabling the security of their
## systems and/or data to be ensured and, more generally, to use and
## operate it in the same conditions as regards security.
##
## The fact that you are presently reading this means that you have had
## knowledge of the GPLv3 license and that you accept its terms.
##
#############################################################
##
## \file FindPTSCOTCH.cmake
##
## \authors Cedric Lachat
##
## \brief This file is a part of the configuration
## to build PaMPA with CMake
##
## \date Version 1.0: from: 6 Jun 2011
## to: 30 Jun 2014
##
#############################################################
if
(
NOT
${
PTSCOTCH_PATH
}
STREQUAL
${
PTSCOTCH_HOME
}
)
set
(
PTSCOTCH_LIBRARY
"NOTFOUND"
)
set
(
SCOTCH_LIBRARY
"NOTFOUND"
)
set
(
PTSCOTCH_EXTRA_LIBRARY
"NOTFOUND"
)
set
(
PTSCOTCH_INCLUDE_DIR
"NOTFOUND"
)
###
#
# @copyright (c) 2009-2014 The University of Tennessee and The University
# of Tennessee Research Foundation.
# All rights reserved.
# @copyright (c) 2012-2016 Inria. All rights reserved.
# @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
#
###
#
# - Find PTSCOTCH include dirs and libraries
# Use this module by invoking find_package with the form:
# find_package(PTSCOTCH
# [REQUIRED] # Fail with error if ptscotch is not found
# [COMPONENTS <comp1> <comp2> ...] # dependencies
# )
#
# PTSCOTCH depends on the following libraries:
# - Threads
# - MPI
#
# COMPONENTS can be some of the following:
# - ESMUMPS: to activate detection of PT-Scotch with the esmumps interface
#
# This module finds headers and ptscotch library.
# Results are reported in variables:
# PTSCOTCH_FOUND - True if headers and requested libraries were found
# PTSCOTCH_CFLAGS_OTHER - ptscotch compiler flags without headers paths
# PTSCOTCH_LDFLAGS_OTHER - ptscotch linker flags without libraries
# PTSCOTCH_INCLUDE_DIRS - ptscotch include directories
# PTSCOTCH_LIBRARY_DIRS - ptscotch link directories
# PTSCOTCH_LIBRARIES - ptscotch libraries to be linked (absolute path)
# PTSCOTCH_CFLAGS_OTHER_DEP - ptscotch + dependencies compiler flags without headers paths
# PTSCOTCH_LDFLAGS_OTHER_DEP - ptscotch + dependencies linker flags without libraries
# PTSCOTCH_INCLUDE_DIRS_DEP - ptscotch + dependencies include directories
# PTSCOTCH_LIBRARY_DIRS_DEP - ptscotch + dependencies link directories
# PTSCOTCH_LIBRARIES_DEP - ptscotch + dependencies libraries
# PTSCOTCH_INTSIZE - Number of octets occupied by a SCOTCH_Num
#
# The user can give specific paths where to find the libraries adding cmake
# options at configure (ex: cmake path/to/project -DPTSCOTCH=path/to/ptscotch):
# PTSCOTCH_DIR - Where to find the base directory of ptscotch
# PTSCOTCH_INCDIR - Where to find the header files
# PTSCOTCH_LIBDIR - Where to find the library files
# The module can also look for the following environment variables if paths
# are not given as cmake variable: PTSCOTCH_DIR, PTSCOTCH_INCDIR, PTSCOTCH_LIBDIR
#=============================================================================
# Copyright 2012-2013 Inria
# Copyright 2012-2013 Emmanuel Agullo
# Copyright 2012-2013 Mathieu Faverge
# Copyright 2012 Cedric Castagnede
# Copyright 2013-2016 Florent Pruvost
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file MORSE-Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of Morse, substitute the full
# License text for the above reference.)
if
(
NOT PTSCOTCH_FOUND
)
set
(
PTSCOTCH_DIR
""
CACHE PATH
"Installation directory of PTSCOTCH library"
)
if
(
NOT PTSCOTCH_FIND_QUIETLY
)
message
(
STATUS
"A cache variable, namely PTSCOTCH_DIR, has been set to specify the install directory of PTSCOTCH"
)
endif
()
endif
()
# Set the version to find
set
(
PTSCOTCH_LOOK_FOR_ESMUMPS OFF
)
if
(
PTSCOTCH_FIND_COMPONENTS
)
foreach
(
component
${
PTSCOTCH_FIND_COMPONENTS
}
)
if
(
${
component
}
STREQUAL
"ESMUMPS"
)
# means we look for esmumps library
set
(
PTSCOTCH_LOOK_FOR_ESMUMPS ON
)
endif
()
endforeach
()
endif
()
# PTSCOTCH depends on Threads, try to find it
if
(
PTSCOTCH_FIND_REQUIRED
)
find_package
(
Threads REQUIRED
)
else
()
find_package
(
Threads
)
endif
()
if
(
THREADS_FOUND
)
libraries_absolute_path
(
CMAKE_THREAD_LIBS_INIT
""
)
endif
()
set
(
PTSCOTCH_PATH
${
PTSCOTCH_HOME
}
CACHE INTERNAL
""
)
find_path
(
PTSCOTCH_INCLUDE_DIR ptscotch
${
PTSCOTCH_SUFFIX
}
.h HINTS
${
PTSCOTCH_PATH
}
PATH_SUFFIXES include
)
# PTSCOTCH depends on MPI, try to find it
if
(
PTSCOTCH_FIND_REQUIRED
)
find_package
(
MPI REQUIRED
)
else
()
find_package
(
MPI
)
endif
()
find_library
(
PTSCOTCH_LIBRARY NAMES ptscotch
${
PTSCOTCH_SUFFIX
}
HINTS
${
PTSCOTCH_PATH
}
PATH_SUFFIXES lib
)
find_library
(
SCOTCH_LIBRARY NAMES scotch
${
PTSCOTCH_SUFFIX
}
HINTS
${
PTSCOTCH_PATH
}
PATH_SUFFIXES lib
)
find_library
(
PTSCOTCH_EXTRA_LIBRARY NAMES ptscotcherr
${
PTSCOTCH_SUFFIX
}
HINTS
${
PTSCOTCH_PATH
}
PATH_SUFFIXES lib
)
if
(
PTSCOTCH_INCLUDE_DIR AND PTSCOTCH_LIBRARY AND SCOTCH_LIBRARY AND PTSCOTCH_EXTRA_LIBRARY
)
set
(
PTSCOTCH_FOUND TRUE
)
endif
(
PTSCOTCH_INCLUDE_DIR AND PTSCOTCH_LIBRARY AND SCOTCH_LIBRARY AND
PTSCOTCH_EXTRA_LIBRARY
)
# Looking for include
# -------------------
# Add system include paths to search include
# ------------------------------------------
unset
(
_inc_env
)
set
(
ENV_PTSCOTCH_DIR
"$ENV{PTSCOTCH_DIR}"
)
set
(
ENV_PTSCOTCH_INCDIR
"$ENV{PTSCOTCH_INCDIR}"
)
if
(
ENV_PTSCOTCH_INCDIR
)
list
(
APPEND _inc_env
"
${
ENV_PTSCOTCH_INCDIR
}
"
)
elseif
(
ENV_PTSCOTCH_DIR
)
list
(
APPEND _inc_env
"
${
ENV_PTSCOTCH_DIR
}
"
)
list
(
APPEND _inc_env
"
${
ENV_PTSCOTCH_DIR
}
/include"
)
list
(
APPEND _inc_env
"
${
ENV_PTSCOTCH_DIR
}
/include/ptscotch"
)
else
()
if
(
WIN32
)
string
(
REPLACE
":"
";"
_inc_env
"$ENV{INCLUDE}"
)
else
()
string
(
REPLACE
":"
";"
_path_env
"$ENV{INCLUDE}"
)
list
(
APPEND _inc_env
"
${
_path_env
}
"
)
string
(
REPLACE
":"
";"
_path_env
"$ENV{C_INCLUDE_PATH}"
)
list
(
APPEND _inc_env
"
${
_path_env
}
"
)
string
(
REPLACE
":"
";"
_path_env
"$ENV{CPATH}"
)
list
(
APPEND _inc_env
"
${
_path_env
}
"
)
string
(
REPLACE
":"
";"
_path_env
"$ENV{INCLUDE_PATH}"
)
list
(
APPEND _inc_env
"
${
_path_env
}
"
)
endif
()
endif
()
list
(
APPEND _inc_env
"
${
CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES
}
"
)
list
(
REMOVE_DUPLICATES _inc_env
)
if
(
PTSCOTCH_FOUND
)
if
(
NOT PTSCOTCH_FIND_QUIETLY
)
message
(
STATUS
"Found PTSCOTCH :
${
PTSCOTCH_LIBRARY
}
"
)
endif
(
NOT PTSCOTCH_FIND_QUIETLY
)
else
(
PTSCOTCH_FOUND
)
if
(
PTSCOTCH_FIND_REQUIRED
)
message
(
FATAL_ERROR
"Could not find PTSCOTCH. You have to define variable PTSCOTCH_HOME"
)
endif
(
PTSCOTCH_FIND_REQUIRED
)
endif
(
PTSCOTCH_FOUND
)
mark_as_advanced
(
PTSCOTCH_INCLUDE_DIR PTSCOTCH_LIBRARY SCOTCH_LIBRARY
PTSCOTCH_EXTRA_LIBRARY PTSCOTCH_SUFFIX
)
# Try to find the ptscotch header in the given paths
# -------------------------------------------------
set
(
PTSCOTCH_hdrs_to_find
"ptscotch.h;scotch.h"
)
# call cmake macro to find the header path
if
(
PTSCOTCH_INCDIR
)
foreach
(
ptscotch_hdr
${
PTSCOTCH_hdrs_to_find
}
)
set
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
"PTSCOTCH_
${
ptscotch_hdr
}
_DIRS-NOTFOUND"
)
find_path
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
NAMES
${
ptscotch_hdr
}
HINTS
${
PTSCOTCH_INCDIR
}
)
mark_as_advanced
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
)
endforeach
()
else
()
if
(
PTSCOTCH_DIR
)
foreach
(
ptscotch_hdr
${
PTSCOTCH_hdrs_to_find
}
)
set
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
"PTSCOTCH_
${
ptscotch_hdr
}
_DIRS-NOTFOUND"
)
find_path
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
NAMES
${
ptscotch_hdr
}
HINTS
${
PTSCOTCH_DIR
}
PATH_SUFFIXES
"include"
"include/scotch"
)
mark_as_advanced
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
)
endforeach
()
else
()
foreach
(
ptscotch_hdr
${
PTSCOTCH_hdrs_to_find
}
)
set
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
"PTSCOTCH_
${
ptscotch_hdr
}
_DIRS-NOTFOUND"
)
find_path
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
NAMES
${
ptscotch_hdr
}
HINTS
${
_inc_env
}
PATH_SUFFIXES
"scotch"
)
mark_as_advanced
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
)
endforeach
()
endif
()
endif
()
# If found, add path to cmake variable
# ------------------------------------
foreach
(
ptscotch_hdr
${
PTSCOTCH_hdrs_to_find
}
)
if
(
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
)
list
(
APPEND PTSCOTCH_INCLUDE_DIRS
"
${
PTSCOTCH_
${
ptscotch_hdr
}
_DIRS
}
"
)
else
()
set
(
PTSCOTCH_INCLUDE_DIRS
"PTSCOTCH_INCLUDE_DIRS-NOTFOUND"
)
if
(
NOT PTSCOTCH_FIND_QUIETLY
)
message
(
STATUS
"Looking for ptscotch --
${
ptscotch_hdr
}
not found"
)
endif
()
endif
()
endforeach
()
list
(
REMOVE_DUPLICATES PTSCOTCH_INCLUDE_DIRS
)
# Looking for lib
# ---------------
# Add system library paths to search lib
# --------------------------------------
unset
(
_lib_env
)
set
(
ENV_PTSCOTCH_LIBDIR
"$ENV{PTSCOTCH_LIBDIR}"
)
if
(
ENV_PTSCOTCH_LIBDIR
)
list
(
APPEND _lib_env
"
${
ENV_PTSCOTCH_LIBDIR
}
"
)
elseif
(
ENV_PTSCOTCH_DIR
)
list
(
APPEND _lib_env
"
${
ENV_PTSCOTCH_DIR
}
"
)
list
(
APPEND _lib_env
"
${
ENV_PTSCOTCH_DIR
}
/lib"
)
else
()
if
(
WIN32
)
string
(
REPLACE
":"
";"
_lib_env
"$ENV{LIB}"
)
else
()
if
(
APPLE
)
string
(
REPLACE
":"
";"
_lib_env
"$ENV{DYLD_LIBRARY_PATH}"
)
else
()
string
(
REPLACE
":"
";"
_lib_env
"$ENV{LD_LIBRARY_PATH}"
)
endif
()
list
(
APPEND _lib_env
"
${
CMAKE_C_IMPLICIT_LINK_DIRECTORIES
}
"
)
endif
()
endif
()
list
(
REMOVE_DUPLICATES _lib_env
)
# Try to find the ptscotch lib in the given paths
# ----------------------------------------------
set
(
PTSCOTCH_libs_to_find
"ptscotch;ptscotcherr"
)
if
(
PTSCOTCH_LOOK_FOR_ESMUMPS
)
list
(
INSERT PTSCOTCH_libs_to_find 0
"ptesmumps"
)
list
(
APPEND PTSCOTCH_libs_to_find
"esmumps"
)
endif
()
list
(
APPEND PTSCOTCH_libs_to_find
"scotch;scotcherr"
)
# call cmake macro to find the lib path
if
(
PTSCOTCH_LIBDIR
)
foreach
(
ptscotch_lib
${
PTSCOTCH_libs_to_find
}
)
set
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
"PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY-NOTFOUND"
)
find_library
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
NAMES
${
ptscotch_lib
}
HINTS
${
PTSCOTCH_LIBDIR
}
)
endforeach
()
else
()
if
(
PTSCOTCH_DIR
)
foreach
(
ptscotch_lib
${
PTSCOTCH_libs_to_find
}
)
set
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
"PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY-NOTFOUND"
)
find_library
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
NAMES
${
ptscotch_lib
}
HINTS
${
PTSCOTCH_DIR
}
PATH_SUFFIXES lib lib32 lib64
)
endforeach
()
else
()
foreach
(
ptscotch_lib
${
PTSCOTCH_libs_to_find
}
)
set
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
"PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY-NOTFOUND"
)
find_library
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
NAMES
${
ptscotch_lib
}
HINTS
${
_lib_env
}
)
endforeach
()
endif
()
endif
()
set
(
PTSCOTCH_LIBRARIES
""
)
set
(
PTSCOTCH_LIBRARY_DIRS
""
)
# If found, add path to cmake variable
# ------------------------------------
foreach
(
ptscotch_lib
${
PTSCOTCH_libs_to_find
}
)
if
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
)
get_filename_component
(
${
ptscotch_lib
}
_lib_path
"
${
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
}
"
PATH
)
# set cmake variables
list
(
APPEND PTSCOTCH_LIBRARIES
"
${
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
}
"
)
list
(
APPEND PTSCOTCH_LIBRARY_DIRS
"
${${
ptscotch_lib
}
_lib_path
}
"
)
else
()
list
(
APPEND PTSCOTCH_LIBRARIES
"
${
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
}
"
)
if
(
NOT PTSCOTCH_FIND_QUIETLY
)
message
(
STATUS
"Looking for ptscotch -- lib
${
ptscotch_lib
}
not found"
)
endif
()
endif
()
mark_as_advanced
(
PTSCOTCH_
${
ptscotch_lib
}
_LIBRARY
)
endforeach
()
list
(
REMOVE_DUPLICATES PTSCOTCH_LIBRARY_DIRS
)
# check a function to validate the find
if
(
PTSCOTCH_LIBRARIES
)
set
(
REQUIRED_INCDIRS
)
set
(
REQUIRED_FLAGS
)
set
(
REQUIRED_LDFLAGS
)
set
(
REQUIRED_LIBDIRS
)
set
(
REQUIRED_LIBS
)
# PTSCOTCH
if
(
PTSCOTCH_INCLUDE_DIRS
)
set
(
REQUIRED_INCDIRS
"
${
PTSCOTCH_INCLUDE_DIRS
}
"
)
endif
()
if
(
PTSCOTCH_LIBRARY_DIRS
)
set
(
REQUIRED_LIBDIRS
"
${
PTSCOTCH_LIBRARY_DIRS
}
"
)
endif
()
set
(
REQUIRED_LIBS
"
${
PTSCOTCH_LIBRARIES
}
"
)
# MPI
if
(
MPI_FOUND
)
if
(
MPI_C_INCLUDE_PATH
)
list
(
APPEND REQUIRED_INCDIRS
"
${
MPI_C_INCLUDE_PATH
}
"
)
endif
()
if
(
MPI_C_LINK_FLAGS
)
if
(
${
MPI_C_LINK_FLAGS
}
MATCHES
" -"
)
string
(
REGEX REPLACE
" -"
"-"
MPI_C_LINK_FLAGS
${
MPI_C_LINK_FLAGS
}
)
endif
()
list
(
APPEND REQUIRED_LDFLAGS
"
${
MPI_C_LINK_FLAGS
}
"
)
endif
()
list
(
APPEND REQUIRED_LIBS
"
${
MPI_C_LIBRARIES
}
"
)
endif
()
# THREADS
if
(
CMAKE_THREAD_LIBS_INIT
)
list
(
APPEND REQUIRED_LIBS
"
${
CMAKE_THREAD_LIBS_INIT
}
"
)
endif
()
set
(
Z_LIBRARY
"Z_LIBRARY-NOTFOUND"
)
find_library
(
Z_LIBRARY NAMES z
)
mark_as_advanced
(
Z_LIBRARY
)
if
(
Z_LIBRARY
)
list
(
APPEND REQUIRED_LIBS
"
${
Z_LIBRARY
}
"
)
endif
()
set
(
M_LIBRARY
"M_LIBRARY-NOTFOUND"
)
find_library
(
M_LIBRARY NAMES m
)
mark_as_advanced
(
M_LIBRARY
)
if
(
M_LIBRARY
)
list
(
APPEND REQUIRED_LIBS
"
${
M_LIBRARY
}
"
)
endif
()
set
(
RT_LIBRARY
"RT_LIBRARY-NOTFOUND"
)
find_library
(
RT_LIBRARY NAMES rt
)
mark_as_advanced
(
RT_LIBRARY
)
if
(
RT_LIBRARY
)
list
(
APPEND REQUIRED_LIBS
"
${
RT_LIBRARY
}
"
)
endif
()
# set required libraries for link
set
(
CMAKE_REQUIRED_INCLUDES
"
${
REQUIRED_INCDIRS
}
"
)
if
(
REQUIRED_FLAGS
)
set
(
REQUIRED_FLAGS_COPY
"
${
REQUIRED_FLAGS
}
"
)
set
(
REQUIRED_FLAGS
)
set
(
REQUIRED_DEFINITIONS
)
foreach
(
_flag
${
REQUIRED_FLAGS_COPY
}
)
if
(
_flag MATCHES
"^-D"
)
list
(
APPEND REQUIRED_DEFINITIONS
"
${
_flag
}
"
)
endif
()
string
(
REGEX REPLACE
"^-D.*"
""
_flag
"
${
_flag
}
"
)
list
(
APPEND REQUIRED_FLAGS
"
${
_flag
}
"
)
endforeach
()
endif
()
set
(
CMAKE_REQUIRED_DEFINITIONS
"
${
REQUIRED_DEFINITIONS
}
"
)
set
(
CMAKE_REQUIRED_FLAGS
"
${
REQUIRED_FLAGS
}
"
)
set
(
CMAKE_REQUIRED_LIBRARIES
)
list
(
APPEND CMAKE_REQUIRED_LIBRARIES
"
${
REQUIRED_LDFLAGS
}
"
)
list
(
APPEND CMAKE_REQUIRED_LIBRARIES
"
${
REQUIRED_LIBS
}
"
)
string
(
REGEX REPLACE
"^ -"
"-"
CMAKE_REQUIRED_LIBRARIES
"
${
CMAKE_REQUIRED_LIBRARIES
}
"
)
# test link
unset
(
PTSCOTCH_WORKS CACHE
)
include
(
CheckFunctionExists
)
check_function_exists
(
SCOTCH_dgraphInit PTSCOTCH_WORKS
)
mark_as_advanced
(
PTSCOTCH_WORKS
)
if
(
PTSCOTCH_WORKS
)
# save link with dependencies
set
(
PTSCOTCH_LIBRARIES_DEP
"
${
REQUIRED_LIBS
}
"
)
set
(
PTSCOTCH_LIBRARY_DIRS_DEP
"
${
REQUIRED_LIBDIRS
}
"
)
set
(
PTSCOTCH_INCLUDE_DIRS_DEP
"
${
REQUIRED_INCDIRS
}
"
)
set
(
PTSCOTCH_CFLAGS_OTHER_DEP
"
${
REQUIRED_FLAGS
}
"
)
set
(
PTSCOTCH_LDFLAGS_OTHER_DEP
"
${
REQUIRED_LDFLAGS
}
"
)
list
(
REMOVE_DUPLICATES PTSCOTCH_LIBRARY_DIRS_DEP
)
list
(
REMOVE_DUPLICATES PTSCOTCH_CFLAGS_OTHER_DEP
)
list
(
REMOVE_DUPLICATES PTSCOTCH_LDFLAGS_OTHER_DEP
)
else
()
if
(
NOT PTSCOTCH_FIND_QUIETLY
)
message
(
STATUS
"Looking for PTSCOTCH : test of SCOTCH_dgraphInit with PTSCOTCH library fails"
)
message
(
STATUS
"CMAKE_REQUIRED_LIBRARIES:
${
CMAKE_REQUIRED_LIBRARIES
}
"
)
message
(
STATUS
"CMAKE_REQUIRED_INCLUDES:
${
CMAKE_REQUIRED_INCLUDES
}
"
)
message
(
STATUS
"CMAKE_REQUIRED_FLAGS:
${
CMAKE_REQUIRED_FLAGS
}
"
)
message
(
STATUS
"Check in CMakeFiles/CMakeError.log to figure out why it fails"
)
endif
()
endif
()
set
(
CMAKE_REQUIRED_INCLUDES
)
set
(
CMAKE_REQUIRED_FLAGS
)
set
(
CMAKE_REQUIRED_LIBRARIES
)
endif
(
PTSCOTCH_LIBRARIES
)
if
(
PTSCOTCH_LIBRARIES
)
list
(
GET PTSCOTCH_LIBRARIES 0 first_lib
)
get_filename_component
(
first_lib_path
"
${
first_lib
}
"
PATH
)
if
(
NOT PTSCOTCH_LIBRARY_DIRS
)
set
(
PTSCOTCH_LIBRARY_DIRS
"
${
first_lib_path
}
"
)
endif
()
if
(
${
first_lib_path
}
MATCHES
"/lib(32|64)?$"
)
string
(
REGEX REPLACE
"/lib(32|64)?$"
""
not_cached_dir
"
${
first_lib_path
}
"
)
set
(
PTSCOTCH_DIR_FOUND
"
${
not_cached_dir
}
"
CACHE PATH
"Installation directory of PTSCOTCH library"
FORCE
)
else
()
set
(
PTSCOTCH_DIR_FOUND
"
${
first_lib_path
}
"
CACHE PATH
"Installation directory of PTSCOTCH library"
FORCE
)
endif
()
endif
()
mark_as_advanced
(
PTSCOTCH_DIR
)
mark_as_advanced
(
PTSCOTCH_DIR_FOUND
)
# Check the size of SCOTCH_Num
# ---------------------------------
set
(
CMAKE_REQUIRED_INCLUDES
${
PTSCOTCH_INCLUDE_DIRS_DEP
}
)
include
(
CheckCSourceRuns
)
#stdio.h and stdint.h should be included by scotch.h directly
#mpi.h not included into ptscotch.h => MPI_comm undefined
set
(
PTSCOTCH_C_TEST_SCOTCH_Num_4
"
#include <stdio.h>
#include <stdint.h>
#include <mpi.h>
#include <ptscotch.h>
int main(int argc, char **argv) {
if (sizeof(SCOTCH_Num) == 4)
return 0;
else
return 1;
}
"
)
set
(
PTSCOTCH_C_TEST_SCOTCH_Num_8
"
#include <stdio.h>
#include <stdint.h>
#include <mpi.h>
#include <ptscotch.h>
int main(int argc, char **argv) {
if (sizeof(SCOTCH_Num) == 8)
return 0;
else
return 1;
}
"
)
unset
(
PTSCOTCH_Num_4 CACHE
)
unset
(
PTSCOTCH_Num_8 CACHE
)
check_c_source_runs
(
"
${
PTSCOTCH_C_TEST_SCOTCH_Num_4
}
"
PTSCOTCH_Num_4
)
check_c_source_runs
(
"
${
PTSCOTCH_C_TEST_SCOTCH_Num_8
}
"
PTSCOTCH_Num_8
)
if
(
NOT PTSCOTCH_Num_4
)
if
(
NOT PTSCOTCH_Num_8
)
set
(
PTSCOTCH_INTSIZE -1
)
else
()
set
(
PTSCOTCH_INTSIZE 8
)
endif
()
else
()
set
(
PTSCOTCH_INTSIZE 4
)
endif
()
set
(
CMAKE_REQUIRED_INCLUDES
""
)
# check that PTSCOTCH has been found
# ---------------------------------
include
(
FindPackageHandleStandardArgs
)
find_package_handle_standard_args
(
PTSCOTCH DEFAULT_MSG
PTSCOTCH_LIBRARIES
PTSCOTCH_WORKS
)
#
# TODO: Add possibility to check for specific functions in the library
#
CMakeScripts/FindSCOTCH.cmake
View file @
e08337bf
## Copyright 2017 Inria ##
#############################################################
##
## \file FindSCOTCH.cmake
##
## \authors Cedric Lachat
##
##
## \date Version 1.0: from: 19 May 2017
## to: 22 Sep 2017
##
#############################################################
if
(
NOT
${
SCOTCH_PATH
}
STREQUAL
${
SCOTCH_HOME
}
)
set
(
SCOTCH_LIBRARY
"NOTFOUND"
)
set
(
SCOTCH_DEBUG_LIBRARY
"NOTFOUND"
)
set
(
SCOTCH_RELEASE_LIBRARY
"NOTFOUND"
)
set
(
SCOTCH_EXTRA_LIBRARY
"NOTFOUND"
)
set
(
SCOTCH_INCLUDE_DIR
"NOTFOUND"
)
###
#
# @copyright (c) 2009-2014 The University of Tennessee and The University
# of Tennessee Research Foundation.
# All rights reserved.
# @copyright (c) 2012-2018 Inria. All rights reserved.
# @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
#
###
#
# - Find SCOTCH include dirs and libraries
# Use this module by invoking find_package with the form:
# find_package(SCOTCH
# [REQUIRED] # Fail with error if scotch is not found
# [COMPONENTS <comp1> <comp2> ...] # dependencies
# )
#
# COMPONENTS can be some of the following:
# - ESMUMPS: to activate detection of Scotch with the esmumps interface
#
# This module finds headers and scotch library.
# Results are reported in variables:
# SCOTCH_FOUND - True if headers and requested libraries were found
# SCOTCH_INCLUDE_DIRS - scotch include directories
# SCOTCH_LIBRARY_DIRS - Link directories for scotch libraries
# SCOTCH_LIBRARIES - scotch component libraries to be linked
# SCOTCH_INTSIZE - Number of octets occupied by a SCOTCH_Num
#
# The user can give specific paths where to find the libraries adding cmake
# options at configure (ex: cmake path/to/project -DSCOTCH=path/to/scotch):
# SCOTCH_DIR - Where to find the base directory of scotch
# SCOTCH_INCDIR - Where to find the header files
# SCOTCH_LIBDIR - Where to find the library files
# The module can also look for the following environment variables if paths
# are not given as cmake variable: SCOTCH_DIR, SCOTCH_INCDIR, SCOTCH_LIBDIR
#=============================================================================
# Copyright 2012-2018 Inria
# Copyright 2012-2013 Emmanuel Agullo
# Copyright 2012-2013 Mathieu Faverge
# Copyright 2012 Cedric Castagnede
# Copyright 2013-2018 Florent Pruvost
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file MORSE-Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied wa