Skip to content

Commit b7aebe8

Browse files
Merge pull request #1002 from arcaneframework/dev/gg-remove-find-trilinos-config
Use components of Trilinos for Aleph/Trilinos
2 parents 75f4b7c + 757315a commit b7aebe8

File tree

6 files changed

+129
-69
lines changed

6 files changed

+129
-69
lines changed

arcane/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ set(ARCANE_INT64_MAX ${ARCCORE_INT64_MAX})
367367

368368
# ----------------------------------------------------------------------------
369369

370+
include(${CMAKE_CURRENT_LIST_DIR}/cmake/ArcanePackageInfo.cmake)
370371
include(${CMAKE_CURRENT_LIST_DIR}/cmake/Functions.cmake)
371372

372373
# ----------------------------------------------------------------------------

arcane/cmake/ArcanePackageInfo.cmake

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# ----------------------------------------------------------------------------
2+
# Liste de noms potentiels de cibles pour des packages
3+
#
4+
# Pour les packages de cette liste, l'appel à arcane_find_package() indiquera
5+
# NOT FOUND si aucune cible de cette liste n'est trouvé.
6+
7+
list(APPEND ARCANE_PACKAGE_SEARCH_TARGETS_ML "trilinos_ml" "ml")
8+
list(APPEND ARCANE_PACKAGE_SEARCH_TARGETS_AztecOO "trilinos_aztecoo" "aztecoo")
9+
list(APPEND ARCANE_PACKAGE_SEARCH_TARGETS_Epetra "trilinos_epetra" "epetra")
10+
list(APPEND ARCANE_PACKAGE_SEARCH_TARGETS_Ifpack "trilinos_ifpack" "ifpack")
11+
12+
# ----------------------------------------------------------------------------
13+
# Local Variables:
14+
# tab-width: 2
15+
# indent-tabs-mode: nil
16+
# coding: utf-8-with-signature
17+
# End:

arcane/cmake/Functions.cmake

+32
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,24 @@ macro(arcane_find_package package_name)
3535
set(CMAKE_DISABLE_FIND_PACKAGE_${package_name} TRUE)
3636
endif()
3737
find_package(${package_name} ${ARGN})
38+
# Si cette variable est définie, elle contient une liste de noms de
39+
# cibles pour le package. Il faut qu'au moins une de ces cibles
40+
# existe pour qu'on considère le package comme trouvé.
41+
if (ARCANE_PACKAGE_SEARCH_TARGETS_${package_name})
42+
set(__arcane_sub_target_found FALSE)
43+
message(STATUS "Found package search targets for'${package_name}'")
44+
foreach(sub_target_name ${ARCANE_PACKAGE_SEARCH_TARGETS_${package_name}})
45+
message(STATUS "Search target '${sub_target_name}' for package '${package_name}'")
46+
if (TARGET ${sub_target_name})
47+
arccon_register_cmake_config_target(${package_name} CONFIG_TARGET_NAME ${sub_target_name})
48+
set(__arcane_sub_target_found TRUE)
49+
break()
50+
endif()
51+
endforeach()
52+
if (NOT __arcane_sub_target_found)
53+
set(${package_name}_FOUND FALSE)
54+
endif()
55+
endif()
3856
if(__arcane_required_package)
3957
if(NOT ${package_name}_FOUND)
4058
message(FATAL_ERROR "Required package '${package_name}' is not available")
@@ -272,6 +290,16 @@ endfunction()
272290
#
273291
# La liste des packages est sans le préfix 'arccon::'.
274292
#
293+
# Afin de supporter le fait que les noms des cibles puissent
294+
# évoluer en fonction des versions des produits, de CMake ou
295+
# de la configuration, on supporte plusieurs mécanismes pour
296+
# associer une cible à un package. Pour chaque package '<pkg>, la
297+
# recherche de la cible associé se fait comme suit:
298+
#
299+
# 1. Si la variable 'ARCCON_TARGET_${pkg}' on considère qu'il
300+
# s'agit du nom de la cible
301+
# 2. Sinon, on la cible recherchée sera 'arccon::${pkg}'
302+
275303
# En plus d'ajouter la liste des packages, cette fonction
276304
# ajoute aussi en public un argument '-rpath' pour chaque
277305
# répertoire contenant une bibliothèque des packages.
@@ -316,6 +344,10 @@ function(arcane_add_arccon_packages target visibility)
316344
# Récupère les bibliothèques définies dans le package.
317345
# TODO: ne traiter que les répertoires correspondants aux bibliothèques
318346
# dynamiques.
347+
# NOTE: Ce mécanisme est obsolète (2023) et n'est actif que
348+
# si ARCANE_ADD_RPATH_TO_LIBS est défini. Ce n'est normalement
349+
# plus le cas. On le laisse temporairement pour des raisons
350+
# de compatibilité
319351
get_target_property(_LIB ${_PKG} INTERFACE_LINK_LIBRARIES)
320352
foreach(lib ${_LIB})
321353
#message(STATUS "LIB::${lib}")

arcane/cmake/Modules/FindTrilinos.cmake

-63
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
#
2+
# Cherche les composants de Trilinos nécessaires pour Aleph.
3+
#
4+
# Afin de ne pas interférer avec la package Trilinos, on nomme ce
5+
# package 'TrilinosAleph'. Il n'est utilisé que pour Aleph
6+
#
7+
# À la date de novembre 2023, L'utilisation de CMake
8+
# avec Trilinos est assez compliqué car Trilinos fournit
9+
# des fichiers de configuration CMake pour chaque composant
10+
# mais ces derniers ne sont pas facilement utilisables pour deux raisons:
11+
# - le nom de la cible peut varier suivant l'installation.
12+
# Par exemple, pour un composant 'ifpack', le nom
13+
# de la cible peut être 'ifpack' (si compilé avec Spack)
14+
# ou 'trilinos_ifpack' (si package système ubuntu)
15+
# - la cible importée ne contient pas la liste des fichiers
16+
# d'en-tête nécessaires.
17+
#
18+
# Le seul moyen qui semble identique quelles que soient les
19+
# installations est d'utilier les variables '<pkg>_INCLUDE_DIRS'
20+
# et '<pkg>_LIBRARIES'. On utilise donc ce mécanisme.
21+
#
22+
arccon_return_if_package_found(TrilinosAleph)
23+
24+
set(Trilinos_TARGETS_IMPORTED 1)
25+
find_package(AztecOO QUIET)
26+
find_package(ML QUIET)
27+
find_package(Ifpack QUIET)
28+
find_package(Epetra QUIET)
29+
30+
message(STATUS "AztecOO_FOUND " ${AztecOO_FOUND})
31+
message(STATUS "ML_FOUND " ${ML_FOUND})
32+
message(STATUS "Ifpack_FOUND " ${Ifpack_FOUND})
33+
message(STATUS "Epetra_FOUND " ${Epetra_FOUND})
34+
35+
set(TrilinosAleph_FOUND "NO")
36+
37+
if (AztecOO_FOUND AND ML_FOUND AND Ifpack_FOUND AND Epetra_FOUND)
38+
message(STATUS "Found Trilinos components for Aleph")
39+
SET(TrilinosAleph_INCLUDE_DIRS "${AztecOO_INCLUDE_DIRS}" "${ML_INCLUDE_DIRS}" "${Ifpack_INCLUDE_DIRS}" "${Epetra_INCLUDE_DIRS}")
40+
SET(TrilinosAleph_LIBRARIES "${AztecOO_LIBRARIES}" "${ML_LIBRARIES}" "${Ifpack_LIBRARIES}" "${Epetra_LIBRARIES}")
41+
if (TrilinosAleph_INCLUDE_DIRS AND TrilinosAleph_LIBRARIES)
42+
set(TrilinosAleph_FOUND YES)
43+
endif()
44+
endif()
45+
46+
# Remove duplicate libraries, keeping the last (for linking)
47+
if (TrilinosAleph_FOUND)
48+
set(TrilinosAleph_FOUND TRUE)
49+
LIST(REVERSE TrilinosAleph_LIBRARIES)
50+
LIST(REMOVE_DUPLICATES TrilinosAleph_LIBRARIES)
51+
LIST(REVERSE TrilinosAleph_LIBRARIES)
52+
arccon_register_package_library(TrilinosAleph TrilinosAleph)
53+
endif ()
54+
55+
message(STATUS "TrilinosAleph_LIBRARIES = ${TrilinosAleph_LIBRARIES}")
56+
message(STATUS "TrilinosAleph_INCLUDE_DIRS = '${TrilinosAleph_INCLUDE_DIRS}'")
57+
message(STATUS "TrilinosAleph_FOUND = '${TrilinosAleph_FOUND}'")
58+
59+
if (NOT TrilinosAleph_FOUND)
60+
unset(TrilinosAleph_INCLUDE_DIRS)
61+
unset(TrilinosAleph_LIBRARIES)
62+
endif()
63+
64+
# ----------------------------------------------------------------------------
65+
# Local Variables:
66+
# tab-width: 2
67+
# indent-tabs-mode: nil
68+
# coding: utf-8-with-signature
69+
# End:

arcane/src/arcane/aleph/trilinos/CMakeLists.txt

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
message(STATUS "ALEPH_TRILINOS subdirectory")
2-
set(PKGS Trilinos MPI)
3-
arcane_find_package(Trilinos)
4-
if (NOT TARGET arcconpkg_Trilinos)
5-
return()
6-
endif()
1+
message(STATUS "'arcane_aleph_trilinos' subdirectory")
2+
3+
set(PKGS TrilinosAleph MPI)
4+
foreach(package ${PKGS})
5+
arcane_find_package(${package})
6+
if (NOT ${package}_FOUND)
7+
message(STATUS "Disabling 'arcane_aleph_trilinos' because package '${package}' is not found")
8+
return()
9+
endif()
10+
endforeach()
711

812
include(srcs.cmake)
913

0 commit comments

Comments
 (0)