Skip to content

Commit 38399d9

Browse files
author
Charles PIGNEROL
committed
Version 7.8.0. ortage swig 4.1.0. Options cmake MACHINE_TYPES, FORMAT_MLI et FORMAT_MLI2. Suppression cibles cmake archive et export. Détection du répertoire d'installation du binding python identique à celle de spack_organizer.
1 parent 9ec73ee commit 38399d9

File tree

8 files changed

+242
-155
lines changed

8 files changed

+242
-155
lines changed

CMakeLists.txt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required (VERSION 3.14)
1+
cmake_minimum_required (VERSION 3.20)
22

33
project (Lima CXX C Fortran)
44

@@ -8,8 +8,16 @@ include (cmake/common.cmake)
88

99
set (Lima_VERSION ${LIMA_VERSION})
1010

11-
set (CMAKE_VERBOSE_MAKEFILE ON)
11+
option (VERBOSE_MAKEFILE ON)
1212
option (BUILD_SHARED_LIBS "Creation de bibliotheques dynamiques (defaut : ON)" ON)
1313

14+
# Divers dépendances optionnelles :
15+
option (MACHINE_TYPES "Définition des types numériques simples." ON)
16+
17+
# Les formats de fichiers optionnellement supportés :
18+
option (FORMAT_MLI "Format obsolète déconseillé en externe. Requiert HDF145." ON)
19+
option (FORMAT_MLI2 "Format remplaçant le format MLI recommandé partout. Requiert HDF 5 v >= 1.10.0." ON)
20+
1421
add_subdirectory (src)
1522
enable_testing ( )
23+

cmake/FindHdf145.cmake

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#
2+
# Surcouche CEA/DAM : ajout des targets (en fin de fichier)
3+
#
4+
# Version du 12/08/22
5+
#
6+
7+
#
8+
# The module defines the following variables:
9+
# HDF145_FOUND - the system has HDF145
10+
# HDF145_INCLUDE_DIR - where to find HDF145/hdf5.h
11+
# HDF145_INCLUDE_DIRS - HDF145 includes
12+
# HDF145_LIBRARY - where to find the HDF145 library
13+
# HDF145CPP_LIBRARY - where to find the HDF145 C++ API library
14+
# HDF145_LIBRARIES - additional libraries
15+
# HDF145_MAJOR_VERSION - major version
16+
# HDF145_MINOR_VERSION - minor version
17+
# HDF145_PATCH_VERSION - patch version
18+
# HDF145_VERSION_STRING - version (ex. 5.2.1)
19+
# HDF145_ROOT_DIR - root dir
20+
21+
find_path (HDF145_INCLUDE_DIR NAMES HDF145/hdf5.h PATH_SUFFIXES HDF145)
22+
23+
if (HDF145_INCLUDE_DIR)
24+
set (HDF145_FOUND TRUE)
25+
if (NOT ZLIB_FOUND)
26+
find_package (ZLIB REQUIRED)
27+
endif (NOT ZLIB_FOUND)
28+
# message( "HDF145_INCLUDE_DIR: '${HDF145_INCLUDE_DIR}'" )
29+
string (REGEX REPLACE "(.*)/include.*" "\\1" HDF145_ROOT_DIR ${HDF145_INCLUDE_DIR})
30+
# message( "HDF145_ROOT_DIR: '${HDF145_ROOT_DIR}'" )
31+
find_library (HDF145_LIBRARY NAMES hdf145 PATHS ${HDF145_ROOT_DIR} PATH_SUFFIXES lib lib64)
32+
find_library (HDF145CPP_LIBRARY NAMES hdf145_cpp PATHS ${HDF145_ROOT_DIR} PATH_SUFFIXES lib lib64)
33+
# message( "HDF145_LIBRARY: '${HDF145_LIBRARY}'" " HDF145CPP_LIBRARY: '${HDF145CPP_LIBRARY}'")
34+
35+
36+
set (HDF145_INCLUDE_DIRS ${HDF145_INCLUDE_DIR})
37+
38+
# version
39+
set (HDF145_MAJOR_VERSION "1")
40+
set (HDF145_MINOR_VERSION "3")
41+
set (HDF145_PATCH_VERSION "0")
42+
set (HDF145_VERSION_STRING "1.3.0")
43+
44+
set (HDF145_LIBRARIES ${HDF145CPP_LIBRARY} ${HDF145_LIBRARY})
45+
46+
mark_as_advanced (
47+
HDF145_LIBRARY
48+
HDF145CPP_LIBRARY
49+
HDF145_LIBRARIES
50+
HDF145_INCLUDE_DIR
51+
HDF145_INCLUDE_DIRS
52+
HDF145_MAJOR_VERSION
53+
HDF145_MINOR_VERSION
54+
HDF145_PATCH_VERSION
55+
HDF145_VERSION_STRING
56+
HDF145_ROOT_DIR
57+
)
58+
59+
if (NOT TARGET HDF145::hdf145_cpp)
60+
set (HDF145_TARGET "HDF145::hdf145")
61+
set (HDF145CPP_TARGET "HDF145::hdf145_cpp")
62+
63+
add_library (${HDF145_TARGET} SHARED IMPORTED)
64+
add_library (${HDF145CPP_TARGET} SHARED IMPORTED)
65+
set_target_properties (HDF145::hdf145 PROPERTIES
66+
INTERFACE_INCLUDE_DIRECTORIES ${HDF145_INCLUDE_DIR}
67+
IMPORTED_LOCATION ${HDF145_LIBRARY}
68+
INTERFACE_LINK_LIBRARIES "${HDF145_LIBRARY};ZLIB::ZLIB"
69+
)
70+
set_target_properties (HDF145::hdf145_cpp PROPERTIES
71+
INTERFACE_INCLUDE_DIRECTORIES ${HDF145_INCLUDE_DIR}
72+
IMPORTED_LOCATION ${HDF145CPP_LIBRARY}
73+
INTERFACE_LINK_LIBRARIES "${HDF145CPP_LIBRARY};HDF145::hdf145"
74+
)
75+
endif (NOT TARGET HDF145::hdf145_cpp)
76+
77+
endif (HDF145_INCLUDE_DIR)

cmake/python_binding.cmake

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,69 @@
1+
# Version 0.5 (21/6/23, support Python 2/Python 3, répertoire d'installation des modules python fourni par le python utilisé)
2+
3+
# Par défaut on utilise Python 2
4+
15
include (GNUInstallDirs)
26
find_package (SWIG 3 REQUIRED)
37

4-
include (${SWIG_USE_FILE})
58

69
#find_package (Python REQUIRED COMPONENTS Interpreter Development) # Rem : Python3 a la priorité => inutilisé car empêche l'accès à Python2
7-
if (NOT USE_PYTHON_3)
10+
if (USE_PYTHON_3)
11+
message (STATUS "========================================= UTILISATION DE PYTHON 3 =========================================")
12+
find_package (Python3 REQUIRED COMPONENTS Interpreter Development)
13+
set (Python_INCLUDE_DIRS ${Python3_INCLUDE_DIRS})
14+
set (Python_EXECUTABLE ${Python3_EXECUTABLE})
15+
set (Python_VERSION ${Python3_VERSION})
16+
set (Python_LIBRARIES ${Python3_LIBRARIES})
17+
set (Python_LIBRARY_DIRS ${Python3_LIBRARY_DIRS})
18+
set (PYTHON_MAJOR_VERSION 3)
19+
elseif (USE_PYTHON_2)
20+
message (STATUS "========================================= UTILISATION DE PYTHON 2 =========================================")
821
find_package (Python2 REQUIRED COMPONENTS Interpreter Development)
9-
set (PYTHON_BINDING_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python2_VERSION_MAJOR}.${Python2_VERSION_MINOR}/site-packages/)
1022
set (Python_INCLUDE_DIRS ${Python2_INCLUDE_DIRS})
23+
set (Python_EXECUTABLE ${Python2_EXECUTABLE})
24+
set (Python_VERSION ${Python2_VERSION})
25+
set (Python_LIBRARIES ${Python2_LIBRARIES})
26+
set (Python_LIBRARY_DIRS ${Python2_LIBRARY_DIRS})
1127
set (PYTHON_MAJOR_VERSION 2)
1228
else ( )
13-
find_package (Python3 REQUIRED COMPONENTS Interpreter Development)
14-
set (PYTHON_BINDING_DIR ${CMAKE_INSTALL_LIBDIR}/python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR}/site-packages/)
15-
set (Python_INCLUDE_DIRS ${Python3_INCLUDE_DIRS})
16-
set (PYTHON_MAJOR_VERSION 3)
17-
endif (NOT USE_PYTHON_3)
29+
message (STATUS "========================================= VERSION DE PYTHON NON DEFINIE =========================================")
30+
message (FATAL_ERROR "==> UTILISEZ -DUSE_PYTHON_2 OU -DUSE_PYTHON_3 A LA LIGNE DE COMMANDE")
31+
endif (USE_PYTHON_3)
32+
33+
34+
# Recherche du répertoire d'installation des modules (procédure spack organizer) :
35+
# get python installation path
36+
macro (_set_from_python outvar python_code)
37+
if (NOT ${outvar})
38+
execute_process (
39+
COMMAND ${Python_EXECUTABLE} -c "${python_code}"
40+
OUTPUT_VARIABLE ${outvar}
41+
OUTPUT_STRIP_TRAILING_WHITESPACE)
42+
if (NOT ${outvar})
43+
message (FATAL_ERROR "Failed to detect ${outvar} from command:${Python_EXECUTABLE} -c ${python_code}")
44+
endif ( )
45+
endif ( )
46+
endmacro ( )
47+
48+
_set_from_python (_GET_PYTHON_SITEARCH "import sys; from distutils import sysconfig; sys.stdout.write (sysconfig.get_python_lib (plat_specific=True, standard_lib=False, prefix=''))")
49+
set (PYTHON_BINDING_DIR ${_GET_PYTHON_SITEARCH})
50+
set (CMAKE_PYTHON_RPATH_DIR ${CMAKE_INSTALL_PREFIX}/${_GET_PYTHON_SITEARCH})
51+
52+
include (${SWIG_USE_FILE})
53+
54+
message (STATUS "========================================= VARIABLES LIEES A PYTHON =========================================")
55+
message (STATUS "PYTHON_BINDING_DIR=${PYTHON_BINDING_DIR}")
56+
message (STATUS "Python_INCLUDE_DIRS=${Python_INCLUDE_DIRS}")
57+
message (STATUS "Python_EXECUTABLE=${Python_EXECUTABLE}")
58+
message (STATUS "Python_VERSION=${Python_VERSION} PYTHON_MAJOR_VERSION=${PYTHON_MAJOR_VERSION}")
59+
message (STATUS "Python_LIBRARIES=${Python_LIBRARIES}")
60+
message (STATUS "Python_LIBRARY_DIRS=${Python_LIBRARY_DIRS}")
61+
message (STATUS "PYTHON_BINDING_DIR=${PYTHON_BINDING_DIR}")
62+
message (STATUS "CMAKE_PYTHON_RPATH_DIR=${CMAKE_PYTHON_RPATH_DIR}")
63+
message (STATUS "============================================================================================================")
64+
65+
66+
67+
1868

19-
# Répertoire d'installation des modules (pour le RPATH) :
20-
set (CMAKE_PYTHON_RPATH_DIR ${CMAKE_INSTALL_PREFIX}/${PYTHON_BINDING_DIR})
2169

cmake/version.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
#
44

55
set (LIMA_MAJOR_VERSION "7")
6-
set (LIMA_MINOR_VERSION "7")
7-
set (LIMA_RELEASE_VERSION "9")
6+
set (LIMA_MINOR_VERSION "8")
7+
set (LIMA_RELEASE_VERSION "0")
88
set (LIMA_VERSION ${LIMA_MAJOR_VERSION}.${LIMA_MINOR_VERSION}.${LIMA_RELEASE_VERSION})
99

1010

installation.txt

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
# INSTALLATION DE LA BIBLIOTHEQUE Lima++
33
#
44

5-
Elle requiert une version supérieure ou égale à la version 3.14.0 de cmake.
5+
Elle requiert une version supérieure ou égale à la version 3.14.0 de cmake. La version 3.24.2 est recommandée si le choix du python utilisé est important.
66

77

8-
CONFIGURATION DE BASE : lecteurs mali [mli][mli2] ideas gibi castem modulef [icemcfd] dyna2d dyna3d abaqus
8+
CONFIGURATION DE BASE : lecteurs mali mli mli2 ideas gibi castem modulef [icemcfd] dyna2d dyna3d abaqus
99
=======================
1010

1111

@@ -16,8 +16,8 @@ A la ligne de commande : depuis le répertoire racine contenant les sources de L
1616

1717
cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_Fortran_COMPILER=/usr/bin/gfortran -DCMAKE_CXX_FLAGS="-std=c++11" -DCMAKE_Fortran_FLAGS="-fdefault-integer-8 -fdefault-real-8 -fdefault-double-8" \
1818
-DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_XLMLIMA=ON -DBUILD_TESTS:BOOL=ON -DBUILD_SCRIPTING:BOOL=ON -DBUILD_SHARED_LIBS:BOOL=ON -DINT_8:BOOL=ON -DREAL_8:BOOL=ON \
19-
-DSWIG_EXECUTABLE=/opt/swig/3.0.12/bin/swig -DPython2_ROOT_DIR=/usr/lib/python2.7 -DHDF5_ROOT=/opt/HDF5/1.12.0 -DHDF145_INCLUDE_DIR=/opt/hdf145/1.3.0/include -DHDF145CPP_LIBRARY=/opt/hdf145/1.3.0/lib/libhdf145_cpp.so -DHDF145_LIBRARY=/opt/hdf145/1.3.0/lib/libhdf145.so \
20-
-B /tmp/lima_build_dir -DCMAKE_INSTALL_PREFIX=/opt/Lima/7.7.8
19+
-DSWIG_EXECUTABLE=/opt/swig/4.1.1/bin/swig -DPython2_ROOT_DIR=/usr/lib/python2.7 -DHDF5_ROOT=/opt/HDF5/1.12.0 -DHDF145_INCLUDE_DIR=/opt/hdf145/1.3.0/include -DHDF145CPP_LIBRARY=/opt/hdf145/1.3.0/lib/libhdf145_cpp.so -DHDF145_LIBRARY=/opt/hdf145/1.3.0/lib/libhdf145.so \
20+
-B /tmp/lima_build_dir -DCMAKE_INSTALL_PREFIX=/opt/Lima/7.7.10
2121
cmake --build /tmp/lima_build_dir
2222
cmake --install /tmp/lima_build_dir
2323

@@ -33,7 +33,13 @@ cmake --install /tmp/build_lima
3333
REMARQUES :
3434
============
3535

36-
L'option -DBUILD_XLMLIMA=ON permet la compilation de l'utilitaire xlmlima (informations, changement de formats, préparations, comparaison).
36+
L'option -DMACHINE_TYPES:BOOL=OFF permet de désactiver l'utilisation de MachineTypes - définition des types numériques simples - dans les interfaces.
37+
38+
L'option -DFORMAT_MLI:BOOL=OFF permet de désactiver le lecteur/écrivain obsolète "mli" qui repose sur la bibliothèque HDF 5 1.4.5.
39+
40+
L'option -DFORMAT_MLI2:BOOL=ON permet de désactiver le lecteur/écrivain "mli2" qui repose sur une version supérieure ou égale à 1.10.0 de la bibliothèque HDF 5.
41+
42+
L'option -DBUILD_XLMLIMA:BOOL=ON permet la compilation de l'utilitaire xlmlima (informations, changement de formats, préparations, comparaison).
3743

3844
Le format mli2, qui repose sur une version supérieure ou égale à 1.10.0 de HDF5, est automatiquement réalisée si cmake trouve HDF5 avec entêtes et bibliothèques C++.
3945

@@ -64,6 +70,8 @@ Pour avoir un binding python il faut en plus utiliser la directive cmake -DBUILD
6470
A noter que si cmake croise sur son chemin une version 3 de python celle-ci sera retenue, même si python 2 est demandé et renseigné. C'est
6571
pour cette raison que la directive find_package (Python VERSION) n'est pas utilisée dans les fichiers cmake.
6672

73+
Une version récente de cmake (ex : 3.24) est recommandée afin de s'assurer que le Python utilisé correspond bien à celui demandé (Python2_ROOT_DIR ou Python3_ROOT_DIR).
74+
6775

6876
Binding python 2 :
6977
------------------

src/Lima/CMakeLists.txt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@ set (CURRENT_PACKAGE_MACRO_NAME "LIMA_KERNEL")
33
include (${CMAKE_SOURCE_DIR}/cmake/version.cmake)
44
include (${CMAKE_SOURCE_DIR}/cmake/common.cmake)
55
include (${CMAKE_SOURCE_DIR}/cmake/workarounds.cmake)
6-
#include (${CMAKE_SOURCE_DIR}/cmake/FindHdf145.cmake)
6+
if (MACHINE_TYPES)
7+
find_package (MachineTypes REQUIRED)
8+
endif (MACHINE_TYPES)
9+
if (FORMAT_MLI)
10+
include (${CMAKE_SOURCE_DIR}/cmake/FindHdf145.cmake)
11+
endif (FORMAT_MLI)
712
unset (HDF5_USE_STATIC_LIBRARIES)
8-
find_package (HDF5 COMPONENTS CXX)
13+
if (FORMAT_MLI2)
14+
find_package (HDF5 COMPONENTS CXX REQUIRED)
15+
endif (FORMAT_MLI2)
916
find_package (Threads)
1017

1118
# EXPURGE_BEGINNING_TAG FIND_LOCAL_DEPENDENCIES
@@ -133,6 +140,6 @@ install (EXPORT ${CMAKE_PACKAGE_TARGETS_NAME}
133140
install (FILES ${CMAKE_PACKAGE_CONFIG_FILE} ${CMAKE_PACKAGE_VERSION_FILE} DESTINATION ${ConfigPackageLocation} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE WORLD_READ)
134141

135142
# Le fichier FindHDF5.cmake :
136-
#install(FILES ${CMAKE_SOURCE_DIR}/cmake/FindHdf145.cmake DESTINATION ${ConfigPackageLocation} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE WORLD_READ)
143+
install(FILES ${CMAKE_SOURCE_DIR}/cmake/FindHdf145.cmake DESTINATION ${ConfigPackageLocation} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE WORLD_READ)
137144

138145

src/LimaScripting/LimaScripting.i

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,23 @@ using namespace Lima;
3737
}
3838
}
3939

40-
%typemap(python, in) const string& {
40+
%typemap(in) const string& {
4141
if(!PyString_Check($1)) {
4242
PyErr_SetString(PyExc_TypeError, "not a string");
4343
return NULL;
4444
}
4545
$1 = new IN_STD string(PyString_AsString($1));
4646
}
4747

48-
%typemap(python, freearg) const IN_STD string& {
48+
%typemap(freearg) const IN_STD string& {
4949
delete $1;
5050
}
5151

52-
//%typemap(python, out) const string& {
5352
%typemap(out) const IN_STD string& {
5453
$result = PyString_FromString($1->c_str());
5554
}
5655

57-
%typemap(python, out) IN_STD string {
56+
%typemap(out) IN_STD string {
5857
$result = PyString_FromString($1.c_str());
5958
}
6059

0 commit comments

Comments
 (0)