xref: /aosp_15_r20/external/eigen/cmake/FindPASTIX.cmake (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li###
2*bf2c3715SXin Li#
3*bf2c3715SXin Li# @copyright (c) 2009-2014 The University of Tennessee and The University
4*bf2c3715SXin Li#                          of Tennessee Research Foundation.
5*bf2c3715SXin Li#                          All rights reserved.
6*bf2c3715SXin Li# @copyright (c) 2012-2014 Inria. All rights reserved.
7*bf2c3715SXin Li# @copyright (c) 2012-2014 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria, Univ. Bordeaux. All rights reserved.
8*bf2c3715SXin Li#
9*bf2c3715SXin Li###
10*bf2c3715SXin Li#
11*bf2c3715SXin Li# - Find PASTIX include dirs and libraries
12*bf2c3715SXin Li# Use this module by invoking find_package with the form:
13*bf2c3715SXin Li#  find_package(PASTIX
14*bf2c3715SXin Li#               [REQUIRED] # Fail with error if pastix is not found
15*bf2c3715SXin Li#               [COMPONENTS <comp1> <comp2> ...] # dependencies
16*bf2c3715SXin Li#              )
17*bf2c3715SXin Li#
18*bf2c3715SXin Li#  PASTIX depends on the following libraries:
19*bf2c3715SXin Li#   - Threads, m, rt
20*bf2c3715SXin Li#   - MPI
21*bf2c3715SXin Li#   - HWLOC
22*bf2c3715SXin Li#   - BLAS
23*bf2c3715SXin Li#
24*bf2c3715SXin Li#  COMPONENTS are optional libraries PASTIX could be linked with,
25*bf2c3715SXin Li#  Use it to drive detection of a specific compilation chain
26*bf2c3715SXin Li#  COMPONENTS can be some of the following:
27*bf2c3715SXin Li#   - MPI: to activate detection of the parallel MPI version (default)
28*bf2c3715SXin Li#        it looks for Threads, HWLOC, BLAS, MPI and ScaLAPACK libraries
29*bf2c3715SXin Li#   - SEQ: to activate detection of the sequential version (exclude MPI version)
30*bf2c3715SXin Li#   - STARPU: to activate detection of StarPU version
31*bf2c3715SXin Li#   it looks for MPI version of StarPU (default behaviour)
32*bf2c3715SXin Li#   if SEQ and STARPU are given, it looks for a StarPU without MPI
33*bf2c3715SXin Li#   - STARPU_CUDA: to activate detection of StarPU with CUDA
34*bf2c3715SXin Li#   - STARPU_FXT: to activate detection of StarPU with FxT
35*bf2c3715SXin Li#   - SCOTCH: to activate detection of PASTIX linked with SCOTCH
36*bf2c3715SXin Li#   - PTSCOTCH: to activate detection of PASTIX linked with SCOTCH
37*bf2c3715SXin Li#   - METIS: to activate detection of PASTIX linked with SCOTCH
38*bf2c3715SXin Li#
39*bf2c3715SXin Li# This module finds headers and pastix library.
40*bf2c3715SXin Li# Results are reported in variables:
41*bf2c3715SXin Li#  PASTIX_FOUND            - True if headers and requested libraries were found
42*bf2c3715SXin Li#  PASTIX_LINKER_FLAGS     - list of required linker flags (excluding -l and -L)
43*bf2c3715SXin Li#  PASTIX_INCLUDE_DIRS     - pastix include directories
44*bf2c3715SXin Li#  PASTIX_LIBRARY_DIRS     - Link directories for pastix libraries
45*bf2c3715SXin Li#  PASTIX_LIBRARIES        - pastix libraries
46*bf2c3715SXin Li#  PASTIX_INCLUDE_DIRS_DEP - pastix + dependencies include directories
47*bf2c3715SXin Li#  PASTIX_LIBRARY_DIRS_DEP - pastix + dependencies link directories
48*bf2c3715SXin Li#  PASTIX_LIBRARIES_DEP    - pastix libraries + dependencies
49*bf2c3715SXin Li#
50*bf2c3715SXin Li# The user can give specific paths where to find the libraries adding cmake
51*bf2c3715SXin Li# options at configure (ex: cmake path/to/project -DPASTIX_DIR=path/to/pastix):
52*bf2c3715SXin Li#  PASTIX_DIR              - Where to find the base directory of pastix
53*bf2c3715SXin Li#  PASTIX_INCDIR           - Where to find the header files
54*bf2c3715SXin Li#  PASTIX_LIBDIR           - Where to find the library files
55*bf2c3715SXin Li# The module can also look for the following environment variables if paths
56*bf2c3715SXin Li# are not given as cmake variable: PASTIX_DIR, PASTIX_INCDIR, PASTIX_LIBDIR
57*bf2c3715SXin Li
58*bf2c3715SXin Li#=============================================================================
59*bf2c3715SXin Li# Copyright 2012-2013 Inria
60*bf2c3715SXin Li# Copyright 2012-2013 Emmanuel Agullo
61*bf2c3715SXin Li# Copyright 2012-2013 Mathieu Faverge
62*bf2c3715SXin Li# Copyright 2012      Cedric Castagnede
63*bf2c3715SXin Li# Copyright 2013      Florent Pruvost
64*bf2c3715SXin Li#
65*bf2c3715SXin Li# Distributed under the OSI-approved BSD License (the "License");
66*bf2c3715SXin Li# see accompanying file MORSE-Copyright.txt for details.
67*bf2c3715SXin Li#
68*bf2c3715SXin Li# This software is distributed WITHOUT ANY WARRANTY; without even the
69*bf2c3715SXin Li# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
70*bf2c3715SXin Li# See the License for more information.
71*bf2c3715SXin Li#=============================================================================
72*bf2c3715SXin Li# (To distribute this file outside of Morse, substitute the full
73*bf2c3715SXin Li#  License text for the above reference.)
74*bf2c3715SXin Li
75*bf2c3715SXin Li
76*bf2c3715SXin Liif (NOT PASTIX_FOUND)
77*bf2c3715SXin Li  set(PASTIX_DIR "" CACHE PATH "Installation directory of PASTIX library")
78*bf2c3715SXin Li  if (NOT PASTIX_FIND_QUIETLY)
79*bf2c3715SXin Li    message(STATUS "A cache variable, namely PASTIX_DIR, has been set to specify the install directory of PASTIX")
80*bf2c3715SXin Li  endif()
81*bf2c3715SXin Liendif()
82*bf2c3715SXin Li
83*bf2c3715SXin Li# Set the version to find
84*bf2c3715SXin Liset(PASTIX_LOOK_FOR_MPI ON)
85*bf2c3715SXin Liset(PASTIX_LOOK_FOR_SEQ OFF)
86*bf2c3715SXin Liset(PASTIX_LOOK_FOR_STARPU OFF)
87*bf2c3715SXin Liset(PASTIX_LOOK_FOR_STARPU_CUDA OFF)
88*bf2c3715SXin Liset(PASTIX_LOOK_FOR_STARPU_FXT OFF)
89*bf2c3715SXin Liset(PASTIX_LOOK_FOR_SCOTCH ON)
90*bf2c3715SXin Liset(PASTIX_LOOK_FOR_PTSCOTCH OFF)
91*bf2c3715SXin Liset(PASTIX_LOOK_FOR_METIS OFF)
92*bf2c3715SXin Li
93*bf2c3715SXin Liif( PASTIX_FIND_COMPONENTS )
94*bf2c3715SXin Li  foreach( component ${PASTIX_FIND_COMPONENTS} )
95*bf2c3715SXin Li    if (${component} STREQUAL "SEQ")
96*bf2c3715SXin Li      # means we look for the sequential version of PaStiX (without MPI)
97*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_SEQ ON)
98*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_MPI OFF)
99*bf2c3715SXin Li    endif()
100*bf2c3715SXin Li    if (${component} STREQUAL "MPI")
101*bf2c3715SXin Li      # means we look for the MPI version of PaStiX (default)
102*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_SEQ OFF)
103*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_MPI ON)
104*bf2c3715SXin Li    endif()
105*bf2c3715SXin Li    if (${component} STREQUAL "STARPU")
106*bf2c3715SXin Li      # means we look for PaStiX with StarPU
107*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_STARPU ON)
108*bf2c3715SXin Li    endif()
109*bf2c3715SXin Li    if (${component} STREQUAL "STARPU_CUDA")
110*bf2c3715SXin Li      # means we look for PaStiX with StarPU + CUDA
111*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_STARPU ON)
112*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_STARPU_CUDA ON)
113*bf2c3715SXin Li    endif()
114*bf2c3715SXin Li    if (${component} STREQUAL "STARPU_FXT")
115*bf2c3715SXin Li      # means we look for PaStiX with StarPU + FxT
116*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_STARPU_FXT ON)
117*bf2c3715SXin Li    endif()
118*bf2c3715SXin Li    if (${component} STREQUAL "SCOTCH")
119*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_SCOTCH ON)
120*bf2c3715SXin Li    endif()
121*bf2c3715SXin Li    if (${component} STREQUAL "PTSCOTCH")
122*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_PTSCOTCH ON)
123*bf2c3715SXin Li    endif()
124*bf2c3715SXin Li    if (${component} STREQUAL "METIS")
125*bf2c3715SXin Li      set(PASTIX_LOOK_FOR_METIS ON)
126*bf2c3715SXin Li    endif()
127*bf2c3715SXin Li  endforeach()
128*bf2c3715SXin Liendif()
129*bf2c3715SXin Li
130*bf2c3715SXin Li# Dependencies detection
131*bf2c3715SXin Li# ----------------------
132*bf2c3715SXin Li
133*bf2c3715SXin Li
134*bf2c3715SXin Li# Required dependencies
135*bf2c3715SXin Li# ---------------------
136*bf2c3715SXin Liinclude(CMakeFindDependencyMacro)
137*bf2c3715SXin Liif (NOT PASTIX_FIND_QUIETLY)
138*bf2c3715SXin Li  message(STATUS "Looking for PASTIX - Try to detect pthread")
139*bf2c3715SXin Liendif()
140*bf2c3715SXin Liif (PASTIX_FIND_REQUIRED)
141*bf2c3715SXin Li  find_dependency(Threads REQUIRED QUIET)
142*bf2c3715SXin Lielse()
143*bf2c3715SXin Li  find_dependency(Threads QUIET)
144*bf2c3715SXin Liendif()
145*bf2c3715SXin Liset(PASTIX_EXTRA_LIBRARIES "")
146*bf2c3715SXin Liif( THREADS_FOUND )
147*bf2c3715SXin Li  list(APPEND PASTIX_EXTRA_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
148*bf2c3715SXin Liendif ()
149*bf2c3715SXin Li
150*bf2c3715SXin Li# Add math library to the list of extra
151*bf2c3715SXin Li# it normally exists on all common systems provided with a C compiler
152*bf2c3715SXin Liif (NOT PASTIX_FIND_QUIETLY)
153*bf2c3715SXin Li  message(STATUS "Looking for PASTIX - Try to detect libm")
154*bf2c3715SXin Liendif()
155*bf2c3715SXin Liset(PASTIX_M_LIBRARIES "")
156*bf2c3715SXin Liif(UNIX OR WIN32)
157*bf2c3715SXin Li  find_library(
158*bf2c3715SXin Li    PASTIX_M_m_LIBRARY
159*bf2c3715SXin Li    NAMES m
160*bf2c3715SXin Li    )
161*bf2c3715SXin Li  mark_as_advanced(PASTIX_M_m_LIBRARY)
162*bf2c3715SXin Li  if (PASTIX_M_m_LIBRARY)
163*bf2c3715SXin Li    list(APPEND PASTIX_M_LIBRARIES "${PASTIX_M_m_LIBRARY}")
164*bf2c3715SXin Li    list(APPEND PASTIX_EXTRA_LIBRARIES "${PASTIX_M_m_LIBRARY}")
165*bf2c3715SXin Li  else()
166*bf2c3715SXin Li    if (PASTIX_FIND_REQUIRED)
167*bf2c3715SXin Li      message(FATAL_ERROR "Could NOT find libm on your system."
168*bf2c3715SXin Li	"Are you sure to a have a C compiler installed?")
169*bf2c3715SXin Li    endif()
170*bf2c3715SXin Li  endif()
171*bf2c3715SXin Liendif()
172*bf2c3715SXin Li
173*bf2c3715SXin Li# Try to find librt (libposix4 - POSIX.1b Realtime Extensions library)
174*bf2c3715SXin Li# on Unix systems except Apple ones because it does not exist on it
175*bf2c3715SXin Liif (NOT PASTIX_FIND_QUIETLY)
176*bf2c3715SXin Li  message(STATUS "Looking for PASTIX - Try to detect librt")
177*bf2c3715SXin Liendif()
178*bf2c3715SXin Liset(PASTIX_RT_LIBRARIES "")
179*bf2c3715SXin Liif(UNIX AND NOT APPLE)
180*bf2c3715SXin Li  find_library(
181*bf2c3715SXin Li    PASTIX_RT_rt_LIBRARY
182*bf2c3715SXin Li    NAMES rt
183*bf2c3715SXin Li    )
184*bf2c3715SXin Li  mark_as_advanced(PASTIX_RT_rt_LIBRARY)
185*bf2c3715SXin Li  if (PASTIX_RT_rt_LIBRARY)
186*bf2c3715SXin Li    list(APPEND PASTIX_RT_LIBRARIES "${PASTIX_RT_rt_LIBRARY}")
187*bf2c3715SXin Li    list(APPEND PASTIX_EXTRA_LIBRARIES "${PASTIX_RT_rt_LIBRARY}")
188*bf2c3715SXin Li  else()
189*bf2c3715SXin Li    if (PASTIX_FIND_REQUIRED)
190*bf2c3715SXin Li      message(FATAL_ERROR "Could NOT find librt on your system")
191*bf2c3715SXin Li    endif()
192*bf2c3715SXin Li  endif()
193*bf2c3715SXin Liendif()
194*bf2c3715SXin Li
195*bf2c3715SXin Li# PASTIX depends on HWLOC
196*bf2c3715SXin Li#------------------------
197*bf2c3715SXin Liif (NOT PASTIX_FIND_QUIETLY)
198*bf2c3715SXin Li  message(STATUS "Looking for PASTIX - Try to detect HWLOC")
199*bf2c3715SXin Liendif()
200*bf2c3715SXin Liif (PASTIX_FIND_REQUIRED)
201*bf2c3715SXin Li  find_dependency(HWLOC REQUIRED QUIET)
202*bf2c3715SXin Lielse()
203*bf2c3715SXin Li  find_dependency(HWLOC QUIET)
204*bf2c3715SXin Liendif()
205*bf2c3715SXin Li
206*bf2c3715SXin Li# PASTIX depends on BLAS
207*bf2c3715SXin Li#-----------------------
208*bf2c3715SXin Liif (NOT PASTIX_FIND_QUIETLY)
209*bf2c3715SXin Li  message(STATUS "Looking for PASTIX - Try to detect BLAS")
210*bf2c3715SXin Liendif()
211*bf2c3715SXin Liif (PASTIX_FIND_REQUIRED)
212*bf2c3715SXin Li  find_dependency(BLASEXT REQUIRED QUIET)
213*bf2c3715SXin Lielse()
214*bf2c3715SXin Li  find_dependency(BLASEXT QUIET)
215*bf2c3715SXin Liendif()
216*bf2c3715SXin Li
217*bf2c3715SXin Li# Optional dependencies
218*bf2c3715SXin Li# ---------------------
219*bf2c3715SXin Li
220*bf2c3715SXin Li# PASTIX may depend on MPI
221*bf2c3715SXin Li#-------------------------
222*bf2c3715SXin Liif (NOT MPI_FOUND AND PASTIX_LOOK_FOR_MPI)
223*bf2c3715SXin Li  if (NOT PASTIX_FIND_QUIETLY)
224*bf2c3715SXin Li    message(STATUS "Looking for PASTIX - Try to detect MPI")
225*bf2c3715SXin Li  endif()
226*bf2c3715SXin Li  # allows to use an external mpi compilation by setting compilers with
227*bf2c3715SXin Li  # -DMPI_C_COMPILER=path/to/mpicc -DMPI_Fortran_COMPILER=path/to/mpif90
228*bf2c3715SXin Li  # at cmake configure
229*bf2c3715SXin Li  if(NOT MPI_C_COMPILER)
230*bf2c3715SXin Li    set(MPI_C_COMPILER mpicc)
231*bf2c3715SXin Li  endif()
232*bf2c3715SXin Li  if (PASTIX_FIND_REQUIRED AND PASTIX_FIND_REQUIRED_MPI)
233*bf2c3715SXin Li    find_dependency(MPI REQUIRED QUIET)
234*bf2c3715SXin Li  else()
235*bf2c3715SXin Li    find_dependency(MPI QUIET)
236*bf2c3715SXin Li  endif()
237*bf2c3715SXin Li  if (MPI_FOUND)
238*bf2c3715SXin Li    mark_as_advanced(MPI_LIBRARY)
239*bf2c3715SXin Li    mark_as_advanced(MPI_EXTRA_LIBRARY)
240*bf2c3715SXin Li  endif()
241*bf2c3715SXin Liendif ()
242*bf2c3715SXin Li
243*bf2c3715SXin Li# PASTIX may depend on STARPU
244*bf2c3715SXin Li#----------------------------
245*bf2c3715SXin Liif( NOT STARPU_FOUND AND PASTIX_LOOK_FOR_STARPU)
246*bf2c3715SXin Li
247*bf2c3715SXin Li  if (NOT PASTIX_FIND_QUIETLY)
248*bf2c3715SXin Li    message(STATUS "Looking for PASTIX - Try to detect StarPU")
249*bf2c3715SXin Li  endif()
250*bf2c3715SXin Li
251*bf2c3715SXin Li  set(PASTIX_STARPU_VERSION "1.1" CACHE STRING "oldest STARPU version desired")
252*bf2c3715SXin Li
253*bf2c3715SXin Li  # create list of components in order to make a single call to find_package(starpu...)
254*bf2c3715SXin Li  # we explicitly need a StarPU version built with hwloc
255*bf2c3715SXin Li  set(STARPU_COMPONENT_LIST "HWLOC")
256*bf2c3715SXin Li
257*bf2c3715SXin Li  # StarPU may depend on MPI
258*bf2c3715SXin Li  # allows to use an external mpi compilation by setting compilers with
259*bf2c3715SXin Li  # -DMPI_C_COMPILER=path/to/mpicc -DMPI_Fortran_COMPILER=path/to/mpif90
260*bf2c3715SXin Li  # at cmake configure
261*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_MPI)
262*bf2c3715SXin Li    if(NOT MPI_C_COMPILER)
263*bf2c3715SXin Li      set(MPI_C_COMPILER mpicc)
264*bf2c3715SXin Li    endif()
265*bf2c3715SXin Li    list(APPEND STARPU_COMPONENT_LIST "MPI")
266*bf2c3715SXin Li  endif()
267*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_STARPU_CUDA)
268*bf2c3715SXin Li    list(APPEND STARPU_COMPONENT_LIST "CUDA")
269*bf2c3715SXin Li  endif()
270*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_STARPU_FXT)
271*bf2c3715SXin Li    list(APPEND STARPU_COMPONENT_LIST "FXT")
272*bf2c3715SXin Li  endif()
273*bf2c3715SXin Li  # set the list of optional dependencies we may discover
274*bf2c3715SXin Li  if (PASTIX_FIND_REQUIRED AND PASTIX_FIND_REQUIRED_STARPU)
275*bf2c3715SXin Li    find_dependency(STARPU ${PASTIX_STARPU_VERSION} REQUIRED
276*bf2c3715SXin Li      COMPONENTS ${STARPU_COMPONENT_LIST})
277*bf2c3715SXin Li  else()
278*bf2c3715SXin Li    find_dependency(STARPU ${PASTIX_STARPU_VERSION}
279*bf2c3715SXin Li      COMPONENTS ${STARPU_COMPONENT_LIST})
280*bf2c3715SXin Li  endif()
281*bf2c3715SXin Li
282*bf2c3715SXin Liendif()
283*bf2c3715SXin Li
284*bf2c3715SXin Li# PASTIX may depends on SCOTCH
285*bf2c3715SXin Li#-----------------------------
286*bf2c3715SXin Liif (NOT SCOTCH_FOUND AND PASTIX_LOOK_FOR_SCOTCH)
287*bf2c3715SXin Li  if (NOT PASTIX_FIND_QUIETLY)
288*bf2c3715SXin Li    message(STATUS "Looking for PASTIX - Try to detect SCOTCH")
289*bf2c3715SXin Li  endif()
290*bf2c3715SXin Li  if (PASTIX_FIND_REQUIRED AND PASTIX_FIND_REQUIRED_SCOTCH)
291*bf2c3715SXin Li    find_dependency(SCOTCH REQUIRED QUIET)
292*bf2c3715SXin Li  else()
293*bf2c3715SXin Li    find_dependency(SCOTCH QUIET)
294*bf2c3715SXin Li  endif()
295*bf2c3715SXin Liendif()
296*bf2c3715SXin Li
297*bf2c3715SXin Li# PASTIX may depends on PTSCOTCH
298*bf2c3715SXin Li#-------------------------------
299*bf2c3715SXin Liif (NOT PTSCOTCH_FOUND AND PASTIX_LOOK_FOR_PTSCOTCH)
300*bf2c3715SXin Li  if (NOT PASTIX_FIND_QUIETLY)
301*bf2c3715SXin Li    message(STATUS "Looking for PASTIX - Try to detect PTSCOTCH")
302*bf2c3715SXin Li  endif()
303*bf2c3715SXin Li  if (PASTIX_FIND_REQUIRED AND PASTIX_FIND_REQUIRED_PTSCOTCH)
304*bf2c3715SXin Li    find_dependency(PTSCOTCH REQUIRED QUIET)
305*bf2c3715SXin Li  else()
306*bf2c3715SXin Li    find_dependency(PTSCOTCH QUIET)
307*bf2c3715SXin Li  endif()
308*bf2c3715SXin Liendif()
309*bf2c3715SXin Li
310*bf2c3715SXin Li# PASTIX may depends on METIS
311*bf2c3715SXin Li#----------------------------
312*bf2c3715SXin Liif (NOT METIS_FOUND AND PASTIX_LOOK_FOR_METIS)
313*bf2c3715SXin Li  if (NOT PASTIX_FIND_QUIETLY)
314*bf2c3715SXin Li    message(STATUS "Looking for PASTIX - Try to detect METIS")
315*bf2c3715SXin Li  endif()
316*bf2c3715SXin Li  if (PASTIX_FIND_REQUIRED AND PASTIX_FIND_REQUIRED_METIS)
317*bf2c3715SXin Li    find_dependency(METIS REQUIRED QUIET)
318*bf2c3715SXin Li  else()
319*bf2c3715SXin Li    find_dependency(METIS QUIET)
320*bf2c3715SXin Li  endif()
321*bf2c3715SXin Liendif()
322*bf2c3715SXin Li
323*bf2c3715SXin Li# Error if pastix required and no partitioning lib found
324*bf2c3715SXin Liif (PASTIX_FIND_REQUIRED AND NOT SCOTCH_FOUND AND NOT PTSCOTCH_FOUND AND NOT METIS_FOUND)
325*bf2c3715SXin Li  message(FATAL_ERROR "Could NOT find any partitioning library on your system"
326*bf2c3715SXin Li    " (install scotch, ptscotch or metis)")
327*bf2c3715SXin Liendif()
328*bf2c3715SXin Li
329*bf2c3715SXin Li
330*bf2c3715SXin Li# Looking for PaStiX
331*bf2c3715SXin Li# ------------------
332*bf2c3715SXin Li
333*bf2c3715SXin Li# Looking for include
334*bf2c3715SXin Li# -------------------
335*bf2c3715SXin Li
336*bf2c3715SXin Li# Add system include paths to search include
337*bf2c3715SXin Li# ------------------------------------------
338*bf2c3715SXin Liunset(_inc_env)
339*bf2c3715SXin Liset(ENV_PASTIX_DIR "$ENV{PASTIX_DIR}")
340*bf2c3715SXin Liset(ENV_PASTIX_INCDIR "$ENV{PASTIX_INCDIR}")
341*bf2c3715SXin Liif(ENV_PASTIX_INCDIR)
342*bf2c3715SXin Li  list(APPEND _inc_env "${ENV_PASTIX_INCDIR}")
343*bf2c3715SXin Lielseif(ENV_PASTIX_DIR)
344*bf2c3715SXin Li  list(APPEND _inc_env "${ENV_PASTIX_DIR}")
345*bf2c3715SXin Li  list(APPEND _inc_env "${ENV_PASTIX_DIR}/include")
346*bf2c3715SXin Li  list(APPEND _inc_env "${ENV_PASTIX_DIR}/include/pastix")
347*bf2c3715SXin Lielse()
348*bf2c3715SXin Li  if(WIN32)
349*bf2c3715SXin Li    string(REPLACE ":" ";" _inc_env "$ENV{INCLUDE}")
350*bf2c3715SXin Li  else()
351*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE}")
352*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
353*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{C_INCLUDE_PATH}")
354*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
355*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{CPATH}")
356*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
357*bf2c3715SXin Li    string(REPLACE ":" ";" _path_env "$ENV{INCLUDE_PATH}")
358*bf2c3715SXin Li    list(APPEND _inc_env "${_path_env}")
359*bf2c3715SXin Li  endif()
360*bf2c3715SXin Liendif()
361*bf2c3715SXin Lilist(APPEND _inc_env "${CMAKE_PLATFORM_IMPLICIT_INCLUDE_DIRECTORIES}")
362*bf2c3715SXin Lilist(APPEND _inc_env "${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}")
363*bf2c3715SXin Lilist(REMOVE_DUPLICATES _inc_env)
364*bf2c3715SXin Li
365*bf2c3715SXin Li
366*bf2c3715SXin Li# Try to find the pastix header in the given paths
367*bf2c3715SXin Li# ---------------------------------------------------
368*bf2c3715SXin Li# call cmake macro to find the header path
369*bf2c3715SXin Liif(PASTIX_INCDIR)
370*bf2c3715SXin Li  set(PASTIX_pastix.h_DIRS "PASTIX_pastix.h_DIRS-NOTFOUND")
371*bf2c3715SXin Li  find_path(PASTIX_pastix.h_DIRS
372*bf2c3715SXin Li    NAMES pastix.h
373*bf2c3715SXin Li    HINTS ${PASTIX_INCDIR})
374*bf2c3715SXin Lielse()
375*bf2c3715SXin Li  if(PASTIX_DIR)
376*bf2c3715SXin Li    set(PASTIX_pastix.h_DIRS "PASTIX_pastix.h_DIRS-NOTFOUND")
377*bf2c3715SXin Li    find_path(PASTIX_pastix.h_DIRS
378*bf2c3715SXin Li      NAMES pastix.h
379*bf2c3715SXin Li      HINTS ${PASTIX_DIR}
380*bf2c3715SXin Li      PATH_SUFFIXES "include" "include/pastix")
381*bf2c3715SXin Li  else()
382*bf2c3715SXin Li    set(PASTIX_pastix.h_DIRS "PASTIX_pastix.h_DIRS-NOTFOUND")
383*bf2c3715SXin Li    find_path(PASTIX_pastix.h_DIRS
384*bf2c3715SXin Li      NAMES pastix.h
385*bf2c3715SXin Li      HINTS ${_inc_env}
386*bf2c3715SXin Li      PATH_SUFFIXES "pastix")
387*bf2c3715SXin Li  endif()
388*bf2c3715SXin Liendif()
389*bf2c3715SXin Limark_as_advanced(PASTIX_pastix.h_DIRS)
390*bf2c3715SXin Li
391*bf2c3715SXin Li# If found, add path to cmake variable
392*bf2c3715SXin Li# ------------------------------------
393*bf2c3715SXin Liif (PASTIX_pastix.h_DIRS)
394*bf2c3715SXin Li  set(PASTIX_INCLUDE_DIRS "${PASTIX_pastix.h_DIRS}")
395*bf2c3715SXin Lielse ()
396*bf2c3715SXin Li  set(PASTIX_INCLUDE_DIRS "PASTIX_INCLUDE_DIRS-NOTFOUND")
397*bf2c3715SXin Li  if(NOT PASTIX_FIND_QUIETLY)
398*bf2c3715SXin Li    message(STATUS "Looking for pastix -- pastix.h not found")
399*bf2c3715SXin Li  endif()
400*bf2c3715SXin Liendif()
401*bf2c3715SXin Li
402*bf2c3715SXin Li
403*bf2c3715SXin Li# Looking for lib
404*bf2c3715SXin Li# ---------------
405*bf2c3715SXin Li
406*bf2c3715SXin Li# Add system library paths to search lib
407*bf2c3715SXin Li# --------------------------------------
408*bf2c3715SXin Liunset(_lib_env)
409*bf2c3715SXin Liset(ENV_PASTIX_LIBDIR "$ENV{PASTIX_LIBDIR}")
410*bf2c3715SXin Liif(ENV_PASTIX_LIBDIR)
411*bf2c3715SXin Li  list(APPEND _lib_env "${ENV_PASTIX_LIBDIR}")
412*bf2c3715SXin Lielseif(ENV_PASTIX_DIR)
413*bf2c3715SXin Li  list(APPEND _lib_env "${ENV_PASTIX_DIR}")
414*bf2c3715SXin Li  list(APPEND _lib_env "${ENV_PASTIX_DIR}/lib")
415*bf2c3715SXin Lielse()
416*bf2c3715SXin Li  if(WIN32)
417*bf2c3715SXin Li    string(REPLACE ":" ";" _lib_env "$ENV{LIB}")
418*bf2c3715SXin Li  else()
419*bf2c3715SXin Li    if(APPLE)
420*bf2c3715SXin Li      string(REPLACE ":" ";" _lib_env "$ENV{DYLD_LIBRARY_PATH}")
421*bf2c3715SXin Li    else()
422*bf2c3715SXin Li      string(REPLACE ":" ";" _lib_env "$ENV{LD_LIBRARY_PATH}")
423*bf2c3715SXin Li    endif()
424*bf2c3715SXin Li    list(APPEND _lib_env "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES}")
425*bf2c3715SXin Li    list(APPEND _lib_env "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
426*bf2c3715SXin Li  endif()
427*bf2c3715SXin Liendif()
428*bf2c3715SXin Lilist(REMOVE_DUPLICATES _lib_env)
429*bf2c3715SXin Li
430*bf2c3715SXin Li# Try to find the pastix lib in the given paths
431*bf2c3715SXin Li# ------------------------------------------------
432*bf2c3715SXin Li
433*bf2c3715SXin Li# create list of libs to find
434*bf2c3715SXin Liset(PASTIX_libs_to_find "pastix_murge;pastix")
435*bf2c3715SXin Li
436*bf2c3715SXin Li# call cmake macro to find the lib path
437*bf2c3715SXin Liif(PASTIX_LIBDIR)
438*bf2c3715SXin Li  foreach(pastix_lib ${PASTIX_libs_to_find})
439*bf2c3715SXin Li    set(PASTIX_${pastix_lib}_LIBRARY "PASTIX_${pastix_lib}_LIBRARY-NOTFOUND")
440*bf2c3715SXin Li    find_library(PASTIX_${pastix_lib}_LIBRARY
441*bf2c3715SXin Li      NAMES ${pastix_lib}
442*bf2c3715SXin Li      HINTS ${PASTIX_LIBDIR})
443*bf2c3715SXin Li  endforeach()
444*bf2c3715SXin Lielse()
445*bf2c3715SXin Li  if(PASTIX_DIR)
446*bf2c3715SXin Li    foreach(pastix_lib ${PASTIX_libs_to_find})
447*bf2c3715SXin Li      set(PASTIX_${pastix_lib}_LIBRARY "PASTIX_${pastix_lib}_LIBRARY-NOTFOUND")
448*bf2c3715SXin Li      find_library(PASTIX_${pastix_lib}_LIBRARY
449*bf2c3715SXin Li	NAMES ${pastix_lib}
450*bf2c3715SXin Li	HINTS ${PASTIX_DIR}
451*bf2c3715SXin Li	PATH_SUFFIXES lib lib32 lib64)
452*bf2c3715SXin Li    endforeach()
453*bf2c3715SXin Li  else()
454*bf2c3715SXin Li    foreach(pastix_lib ${PASTIX_libs_to_find})
455*bf2c3715SXin Li      set(PASTIX_${pastix_lib}_LIBRARY "PASTIX_${pastix_lib}_LIBRARY-NOTFOUND")
456*bf2c3715SXin Li      find_library(PASTIX_${pastix_lib}_LIBRARY
457*bf2c3715SXin Li	NAMES ${pastix_lib}
458*bf2c3715SXin Li	HINTS ${_lib_env})
459*bf2c3715SXin Li    endforeach()
460*bf2c3715SXin Li  endif()
461*bf2c3715SXin Liendif()
462*bf2c3715SXin Li
463*bf2c3715SXin Li# If found, add path to cmake variable
464*bf2c3715SXin Li# ------------------------------------
465*bf2c3715SXin Liforeach(pastix_lib ${PASTIX_libs_to_find})
466*bf2c3715SXin Li
467*bf2c3715SXin Li  get_filename_component(${pastix_lib}_lib_path ${PASTIX_${pastix_lib}_LIBRARY} PATH)
468*bf2c3715SXin Li  # set cmake variables (respects naming convention)
469*bf2c3715SXin Li  if (PASTIX_LIBRARIES)
470*bf2c3715SXin Li    list(APPEND PASTIX_LIBRARIES "${PASTIX_${pastix_lib}_LIBRARY}")
471*bf2c3715SXin Li  else()
472*bf2c3715SXin Li    set(PASTIX_LIBRARIES "${PASTIX_${pastix_lib}_LIBRARY}")
473*bf2c3715SXin Li  endif()
474*bf2c3715SXin Li  if (PASTIX_LIBRARY_DIRS)
475*bf2c3715SXin Li    list(APPEND PASTIX_LIBRARY_DIRS "${${pastix_lib}_lib_path}")
476*bf2c3715SXin Li  else()
477*bf2c3715SXin Li    set(PASTIX_LIBRARY_DIRS "${${pastix_lib}_lib_path}")
478*bf2c3715SXin Li  endif()
479*bf2c3715SXin Li  mark_as_advanced(PASTIX_${pastix_lib}_LIBRARY)
480*bf2c3715SXin Li
481*bf2c3715SXin Liendforeach()
482*bf2c3715SXin Li
483*bf2c3715SXin Li# check a function to validate the find
484*bf2c3715SXin Liif(PASTIX_LIBRARIES)
485*bf2c3715SXin Li
486*bf2c3715SXin Li  set(REQUIRED_LDFLAGS)
487*bf2c3715SXin Li  set(REQUIRED_INCDIRS)
488*bf2c3715SXin Li  set(REQUIRED_LIBDIRS)
489*bf2c3715SXin Li  set(REQUIRED_LIBS)
490*bf2c3715SXin Li
491*bf2c3715SXin Li  # PASTIX
492*bf2c3715SXin Li  if (PASTIX_INCLUDE_DIRS)
493*bf2c3715SXin Li    set(REQUIRED_INCDIRS "${PASTIX_INCLUDE_DIRS}")
494*bf2c3715SXin Li  endif()
495*bf2c3715SXin Li  foreach(libdir ${PASTIX_LIBRARY_DIRS})
496*bf2c3715SXin Li    if (libdir)
497*bf2c3715SXin Li      list(APPEND REQUIRED_LIBDIRS "${libdir}")
498*bf2c3715SXin Li    endif()
499*bf2c3715SXin Li  endforeach()
500*bf2c3715SXin Li  set(REQUIRED_LIBS "${PASTIX_LIBRARIES}")
501*bf2c3715SXin Li  # STARPU
502*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_STARPU AND STARPU_FOUND)
503*bf2c3715SXin Li    if (STARPU_INCLUDE_DIRS_DEP)
504*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${STARPU_INCLUDE_DIRS_DEP}")
505*bf2c3715SXin Li    elseif (STARPU_INCLUDE_DIRS)
506*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${STARPU_INCLUDE_DIRS}")
507*bf2c3715SXin Li    endif()
508*bf2c3715SXin Li    if(STARPU_LIBRARY_DIRS_DEP)
509*bf2c3715SXin Li      list(APPEND REQUIRED_LIBDIRS "${STARPU_LIBRARY_DIRS_DEP}")
510*bf2c3715SXin Li    elseif(STARPU_LIBRARY_DIRS)
511*bf2c3715SXin Li      list(APPEND REQUIRED_LIBDIRS "${STARPU_LIBRARY_DIRS}")
512*bf2c3715SXin Li    endif()
513*bf2c3715SXin Li    if (STARPU_LIBRARIES_DEP)
514*bf2c3715SXin Li      list(APPEND REQUIRED_LIBS "${STARPU_LIBRARIES_DEP}")
515*bf2c3715SXin Li    elseif (STARPU_LIBRARIES)
516*bf2c3715SXin Li      foreach(lib ${STARPU_LIBRARIES})
517*bf2c3715SXin Li	if (EXISTS ${lib} OR ${lib} MATCHES "^-")
518*bf2c3715SXin Li	  list(APPEND REQUIRED_LIBS "${lib}")
519*bf2c3715SXin Li	else()
520*bf2c3715SXin Li	  list(APPEND REQUIRED_LIBS "-l${lib}")
521*bf2c3715SXin Li	endif()
522*bf2c3715SXin Li      endforeach()
523*bf2c3715SXin Li    endif()
524*bf2c3715SXin Li  endif()
525*bf2c3715SXin Li  # CUDA
526*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_STARPU_CUDA AND CUDA_FOUND)
527*bf2c3715SXin Li    if (CUDA_INCLUDE_DIRS)
528*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${CUDA_INCLUDE_DIRS}")
529*bf2c3715SXin Li    endif()
530*bf2c3715SXin Li    foreach(libdir ${CUDA_LIBRARY_DIRS})
531*bf2c3715SXin Li      if (libdir)
532*bf2c3715SXin Li	list(APPEND REQUIRED_LIBDIRS "${libdir}")
533*bf2c3715SXin Li      endif()
534*bf2c3715SXin Li    endforeach()
535*bf2c3715SXin Li    list(APPEND REQUIRED_LIBS "${CUDA_CUBLAS_LIBRARIES};${CUDA_LIBRARIES}")
536*bf2c3715SXin Li  endif()
537*bf2c3715SXin Li  # MPI
538*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_MPI AND MPI_FOUND)
539*bf2c3715SXin Li    if (MPI_C_INCLUDE_PATH)
540*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${MPI_C_INCLUDE_PATH}")
541*bf2c3715SXin Li    endif()
542*bf2c3715SXin Li    if (MPI_C_LINK_FLAGS)
543*bf2c3715SXin Li      if (${MPI_C_LINK_FLAGS} MATCHES "  -")
544*bf2c3715SXin Li	string(REGEX REPLACE " -" "-" MPI_C_LINK_FLAGS ${MPI_C_LINK_FLAGS})
545*bf2c3715SXin Li      endif()
546*bf2c3715SXin Li      list(APPEND REQUIRED_LDFLAGS "${MPI_C_LINK_FLAGS}")
547*bf2c3715SXin Li    endif()
548*bf2c3715SXin Li    list(APPEND REQUIRED_LIBS "${MPI_C_LIBRARIES}")
549*bf2c3715SXin Li  endif()
550*bf2c3715SXin Li  # HWLOC
551*bf2c3715SXin Li  if (HWLOC_FOUND)
552*bf2c3715SXin Li    if (HWLOC_INCLUDE_DIRS)
553*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${HWLOC_INCLUDE_DIRS}")
554*bf2c3715SXin Li    endif()
555*bf2c3715SXin Li    foreach(libdir ${HWLOC_LIBRARY_DIRS})
556*bf2c3715SXin Li      if (libdir)
557*bf2c3715SXin Li	list(APPEND REQUIRED_LIBDIRS "${libdir}")
558*bf2c3715SXin Li      endif()
559*bf2c3715SXin Li    endforeach()
560*bf2c3715SXin Li    foreach(lib ${HWLOC_LIBRARIES})
561*bf2c3715SXin Li      if (EXISTS ${lib} OR ${lib} MATCHES "^-")
562*bf2c3715SXin Li	list(APPEND REQUIRED_LIBS "${lib}")
563*bf2c3715SXin Li      else()
564*bf2c3715SXin Li	list(APPEND REQUIRED_LIBS "-l${lib}")
565*bf2c3715SXin Li      endif()
566*bf2c3715SXin Li    endforeach()
567*bf2c3715SXin Li  endif()
568*bf2c3715SXin Li  # BLAS
569*bf2c3715SXin Li  if (BLAS_FOUND)
570*bf2c3715SXin Li    if (BLAS_INCLUDE_DIRS)
571*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${BLAS_INCLUDE_DIRS}")
572*bf2c3715SXin Li    endif()
573*bf2c3715SXin Li    foreach(libdir ${BLAS_LIBRARY_DIRS})
574*bf2c3715SXin Li      if (libdir)
575*bf2c3715SXin Li	list(APPEND REQUIRED_LIBDIRS "${libdir}")
576*bf2c3715SXin Li      endif()
577*bf2c3715SXin Li    endforeach()
578*bf2c3715SXin Li    list(APPEND REQUIRED_LIBS "${BLAS_LIBRARIES}")
579*bf2c3715SXin Li    if (BLAS_LINKER_FLAGS)
580*bf2c3715SXin Li      list(APPEND REQUIRED_LDFLAGS "${BLAS_LINKER_FLAGS}")
581*bf2c3715SXin Li    endif()
582*bf2c3715SXin Li  endif()
583*bf2c3715SXin Li  # SCOTCH
584*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_SCOTCH AND SCOTCH_FOUND)
585*bf2c3715SXin Li    if (SCOTCH_INCLUDE_DIRS)
586*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${SCOTCH_INCLUDE_DIRS}")
587*bf2c3715SXin Li    endif()
588*bf2c3715SXin Li    foreach(libdir ${SCOTCH_LIBRARY_DIRS})
589*bf2c3715SXin Li      if (libdir)
590*bf2c3715SXin Li	list(APPEND REQUIRED_LIBDIRS "${libdir}")
591*bf2c3715SXin Li      endif()
592*bf2c3715SXin Li    endforeach()
593*bf2c3715SXin Li    list(APPEND REQUIRED_LIBS "${SCOTCH_LIBRARIES}")
594*bf2c3715SXin Li  endif()
595*bf2c3715SXin Li  # PTSCOTCH
596*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_PTSCOTCH AND PTSCOTCH_FOUND)
597*bf2c3715SXin Li    if (PTSCOTCH_INCLUDE_DIRS)
598*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${PTSCOTCH_INCLUDE_DIRS}")
599*bf2c3715SXin Li    endif()
600*bf2c3715SXin Li    foreach(libdir ${PTSCOTCH_LIBRARY_DIRS})
601*bf2c3715SXin Li      if (libdir)
602*bf2c3715SXin Li	list(APPEND REQUIRED_LIBDIRS "${libdir}")
603*bf2c3715SXin Li      endif()
604*bf2c3715SXin Li    endforeach()
605*bf2c3715SXin Li    list(APPEND REQUIRED_LIBS "${PTSCOTCH_LIBRARIES}")
606*bf2c3715SXin Li  endif()
607*bf2c3715SXin Li  # METIS
608*bf2c3715SXin Li  if (PASTIX_LOOK_FOR_METIS AND METIS_FOUND)
609*bf2c3715SXin Li    if (METIS_INCLUDE_DIRS)
610*bf2c3715SXin Li      list(APPEND REQUIRED_INCDIRS "${METIS_INCLUDE_DIRS}")
611*bf2c3715SXin Li    endif()
612*bf2c3715SXin Li    foreach(libdir ${METIS_LIBRARY_DIRS})
613*bf2c3715SXin Li      if (libdir)
614*bf2c3715SXin Li	list(APPEND REQUIRED_LIBDIRS "${libdir}")
615*bf2c3715SXin Li      endif()
616*bf2c3715SXin Li    endforeach()
617*bf2c3715SXin Li    list(APPEND REQUIRED_LIBS "${METIS_LIBRARIES}")
618*bf2c3715SXin Li  endif()
619*bf2c3715SXin Li  # Fortran
620*bf2c3715SXin Li  if (CMAKE_C_COMPILER_ID MATCHES "GNU")
621*bf2c3715SXin Li    find_library(
622*bf2c3715SXin Li      FORTRAN_gfortran_LIBRARY
623*bf2c3715SXin Li      NAMES gfortran
624*bf2c3715SXin Li      HINTS ${_lib_env}
625*bf2c3715SXin Li      )
626*bf2c3715SXin Li    mark_as_advanced(FORTRAN_gfortran_LIBRARY)
627*bf2c3715SXin Li    if (FORTRAN_gfortran_LIBRARY)
628*bf2c3715SXin Li      list(APPEND REQUIRED_LIBS "${FORTRAN_gfortran_LIBRARY}")
629*bf2c3715SXin Li    endif()
630*bf2c3715SXin Li  elseif (CMAKE_C_COMPILER_ID MATCHES "Intel")
631*bf2c3715SXin Li    find_library(
632*bf2c3715SXin Li      FORTRAN_ifcore_LIBRARY
633*bf2c3715SXin Li      NAMES ifcore
634*bf2c3715SXin Li      HINTS ${_lib_env}
635*bf2c3715SXin Li      )
636*bf2c3715SXin Li    mark_as_advanced(FORTRAN_ifcore_LIBRARY)
637*bf2c3715SXin Li    if (FORTRAN_ifcore_LIBRARY)
638*bf2c3715SXin Li      list(APPEND REQUIRED_LIBS "${FORTRAN_ifcore_LIBRARY}")
639*bf2c3715SXin Li    endif()
640*bf2c3715SXin Li  endif()
641*bf2c3715SXin Li  # EXTRA LIBS such that pthread, m, rt
642*bf2c3715SXin Li  list(APPEND REQUIRED_LIBS ${PASTIX_EXTRA_LIBRARIES})
643*bf2c3715SXin Li
644*bf2c3715SXin Li  # set required libraries for link
645*bf2c3715SXin Li  set(CMAKE_REQUIRED_INCLUDES "${REQUIRED_INCDIRS}")
646*bf2c3715SXin Li  set(CMAKE_REQUIRED_LIBRARIES)
647*bf2c3715SXin Li  list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LDFLAGS}")
648*bf2c3715SXin Li  foreach(lib_dir ${REQUIRED_LIBDIRS})
649*bf2c3715SXin Li    list(APPEND CMAKE_REQUIRED_LIBRARIES "-L${lib_dir}")
650*bf2c3715SXin Li  endforeach()
651*bf2c3715SXin Li  list(APPEND CMAKE_REQUIRED_LIBRARIES "${REQUIRED_LIBS}")
652*bf2c3715SXin Li  list(APPEND CMAKE_REQUIRED_FLAGS "${REQUIRED_FLAGS}")
653*bf2c3715SXin Li  string(REGEX REPLACE "^ -" "-" CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
654*bf2c3715SXin Li
655*bf2c3715SXin Li  # test link
656*bf2c3715SXin Li  unset(PASTIX_WORKS CACHE)
657*bf2c3715SXin Li  include(CheckFunctionExists)
658*bf2c3715SXin Li  check_function_exists(pastix PASTIX_WORKS)
659*bf2c3715SXin Li  mark_as_advanced(PASTIX_WORKS)
660*bf2c3715SXin Li
661*bf2c3715SXin Li  if(PASTIX_WORKS)
662*bf2c3715SXin Li    # save link with dependencies
663*bf2c3715SXin Li    set(PASTIX_LIBRARIES_DEP "${REQUIRED_LIBS}")
664*bf2c3715SXin Li    set(PASTIX_LIBRARY_DIRS_DEP "${REQUIRED_LIBDIRS}")
665*bf2c3715SXin Li    set(PASTIX_INCLUDE_DIRS_DEP "${REQUIRED_INCDIRS}")
666*bf2c3715SXin Li    set(PASTIX_LINKER_FLAGS "${REQUIRED_LDFLAGS}")
667*bf2c3715SXin Li    list(REMOVE_DUPLICATES PASTIX_LIBRARY_DIRS_DEP)
668*bf2c3715SXin Li    list(REMOVE_DUPLICATES PASTIX_INCLUDE_DIRS_DEP)
669*bf2c3715SXin Li    list(REMOVE_DUPLICATES PASTIX_LINKER_FLAGS)
670*bf2c3715SXin Li  else()
671*bf2c3715SXin Li    if(NOT PASTIX_FIND_QUIETLY)
672*bf2c3715SXin Li      message(STATUS "Looking for PASTIX : test of pastix() fails")
673*bf2c3715SXin Li      message(STATUS "CMAKE_REQUIRED_LIBRARIES: ${CMAKE_REQUIRED_LIBRARIES}")
674*bf2c3715SXin Li      message(STATUS "CMAKE_REQUIRED_INCLUDES: ${CMAKE_REQUIRED_INCLUDES}")
675*bf2c3715SXin Li      message(STATUS "Check in CMakeFiles/CMakeError.log to figure out why it fails")
676*bf2c3715SXin Li      message(STATUS "Maybe PASTIX is linked with specific libraries. "
677*bf2c3715SXin Li	"Have you tried with COMPONENTS (MPI/SEQ, STARPU, STARPU_CUDA, SCOTCH, PTSCOTCH, METIS)? "
678*bf2c3715SXin Li	"See the explanation in FindPASTIX.cmake.")
679*bf2c3715SXin Li    endif()
680*bf2c3715SXin Li  endif()
681*bf2c3715SXin Li  set(CMAKE_REQUIRED_INCLUDES)
682*bf2c3715SXin Li  set(CMAKE_REQUIRED_FLAGS)
683*bf2c3715SXin Li  set(CMAKE_REQUIRED_LIBRARIES)
684*bf2c3715SXin Liendif()
685*bf2c3715SXin Li
686*bf2c3715SXin Liif (PASTIX_LIBRARIES)
687*bf2c3715SXin Li  list(GET PASTIX_LIBRARIES 0 first_lib)
688*bf2c3715SXin Li  get_filename_component(first_lib_path "${first_lib}" PATH)
689*bf2c3715SXin Li  if (${first_lib_path} MATCHES "/lib(32|64)?$")
690*bf2c3715SXin Li    string(REGEX REPLACE "/lib(32|64)?$" "" not_cached_dir "${first_lib_path}")
691*bf2c3715SXin Li    set(PASTIX_DIR_FOUND "${not_cached_dir}" CACHE PATH "Installation directory of PASTIX library" FORCE)
692*bf2c3715SXin Li  else()
693*bf2c3715SXin Li    set(PASTIX_DIR_FOUND "${first_lib_path}" CACHE PATH "Installation directory of PASTIX library" FORCE)
694*bf2c3715SXin Li  endif()
695*bf2c3715SXin Liendif()
696*bf2c3715SXin Limark_as_advanced(PASTIX_DIR)
697*bf2c3715SXin Limark_as_advanced(PASTIX_DIR_FOUND)
698*bf2c3715SXin Li
699*bf2c3715SXin Li# check that PASTIX has been found
700*bf2c3715SXin Li# ---------------------------------
701*bf2c3715SXin Liinclude(FindPackageHandleStandardArgs)
702*bf2c3715SXin Lifind_package_handle_standard_args(PASTIX DEFAULT_MSG
703*bf2c3715SXin Li  PASTIX_LIBRARIES
704*bf2c3715SXin Li  PASTIX_WORKS)
705