[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] [getfem-commits] branch overhaul-build-system updated:
From: |
Konstantinos Poulios |
Subject: |
[Getfem-commits] [getfem-commits] branch overhaul-build-system updated: Add basic cmake build support |
Date: |
Wed, 27 Dec 2023 11:03:11 -0500 |
This is an automated email from the git hooks/post-receive script.
logari81 pushed a commit to branch overhaul-build-system
in repository getfem.
The following commit(s) were added to refs/heads/overhaul-build-system by this
push:
new 8511ba82 Add basic cmake build support
8511ba82 is described below
commit 8511ba82bb8649aff8aedf27929cd5d314986307
Author: Konstantinos Poulios <logari81@gmail.com>
AuthorDate: Wed Dec 27 16:55:57 2023 +0100
Add basic cmake build support
- Non-intrusive implementation based on a single CMakeList.txt file
and just two header template files "cmake/gmm_arch_config.h.in" and
"cmake/getfem_arch_config.h.in" equivalent to those used by autotools
- It can build the static and shared version of the libgetfem library
as well as the python module
- Typical configuration examples:
$ cmake .. -DBUILD_LIBRARY_TYPE=STATIC -DCMAKE_INSTALL_PREFIX=/opt
$ cmake .. -DENABLE_PYTHON=ON --DCMAKE_INSTALL_PREFIX=/opt
- It does neither support compiling and running unit tests, nor more
advanced features like MPI and OpenMP builds
---
CMakeLists.txt | 685 ++++++++++++++++++++++++++++++++++++++++++
cmake/getfem_arch_config.h.in | 50 +++
cmake/gmm_arch_config.h.in | 26 ++
3 files changed, 761 insertions(+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 00000000..7ff2cdd8
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,685 @@
+cmake_minimum_required(VERSION 3.23)
+include(CheckIncludeFile)
+include(CheckIncludeFileCXX)
+include(CheckCXXSourceCompiles)
+include(CheckLibraryExists)
+
+string(ASCII 27 ESC)
+message("${ESC}[33m"
+ "The cmake build system for GetFEM is an alternative to the "
+ "autotools build. It is a work in progress and it does not "
+ "support all options supported by the autotools system."
+ "${ESC}[0m")
+project(GetFEM)
+
+# Set the project version
+set(VERSION_MAJOR 5)
+set(VERSION_MINOR 4)
+set(VERSION_PATCH 2)
+# applies to both GetFEM and GMM
+set(GETFEM_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
+set(GMM_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
+# mimic autotools package variables
+set(GETFEM_PACKAGE_NAME "getfem")
+set(GETFEM_PACKAGE_STRING "getfem ${GETFEM_VERSION}")
+set(GETFEM_PACKAGE_TARNAME "getfem")
+
+# Configure options for enabling/disabling Python, Octave, and MATLAB support
+option(ENABLE_PYTHON "Enable Python support" OFF)
+option(ENABLE_OCTAVE "Enable Octave support" OFF)
+option(ENABLE_MATLAB "Enable MATLAB support" OFF)
+# Configure option for enabling/disabling OpenMP support
+option(ENABLE_OPENMP "Enable OpenMP support" OFF)
+# Configure option to enable Qhull support
+option(ENABLE_QHULL "Enable Qhull support" ON)
+# Configure options for enabling/disabling linear solvers (at least one is
required)
+option(ENABLE_SUPERLU "Enable SuperLU support" ON) # might be turned off by
cmake if SuperLU is not found
+option(ENABLE_MUMPS "Enable MUMPS support" ON) # might be turned off by
cmake if MUMPS is not found
+# Configure option for enabling/disabling multithreaded BLAS (requires the dl
library)
+option(ENABLE_MULTITHREADED_BLAS "Enable multithreaded blas support" OFF)
+
+option(BUILD_SHARED_LIBS "Build libraries as SHARED, equivalent to
BUILD_LYBRARY_TYPE=SHARED" ON)
+set(BUILD_LIBRARY_TYPE "SHARED" CACHE STRING
+ "Type of library to build, choose among SHARED, STATIC,
STATIC_BUNDLE_DEPS")
+set_property(CACHE BUILD_LIBRARY_TYPE PROPERTY STRINGS
+ "SHARED" "STATIC" "STATIC_BUNDLE_DEPS")
+if(NOT BUILD_LIBRARY_TYPE STREQUAL "SHARED" AND BUILD_SHARED_LIBS)
+ message(STATUS "BUILD_LIBRARY_TYPE=${BUILD_LIBRARY_TYPE} option overrides
BUILD_SHARED_LIBS=ON")
+ set(BUILD_SHARED_LIBS OFF)
+elseif(NOT BUILD_SHARED_LIBS AND BUILD_LIBRARY_TYPE STREQUAL "SHARED")
+ message(STATUS "BUILD_SHARED_LIBS=OFF option overrides
BUILD_LIBRARY_TYPE=SHARED")
+ set(BUILD_LIBRARY_TYPE "STATIC")
+endif()
+
+set(WITH_OPTIMIZATION "-O2" CACHE STRING "Set the optimization level (default:
-O2)")
+set(GETFEM_PARA_LEVEL 0 CACHE STRING "Set the GETFEM_PARA_LEVEL option
(default: 0)")
+
+# CMake variable for installation path
+set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Installation prefix")
+
+
+# General tests and configurations
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+check_include_file_cxx("cxxabi.h" GETFEM_HAVE_CXXABI_H)
+check_cxx_source_compiles(
+ "#include <fenv.h>\nint main() {feenableexcept(FE_DIVBYZERO); return 0;}"
+ GETFEM_HAVE_FEENABLEEXCEPT)
+
+# Tests for availability of linear solvers
+if(ENABLE_SUPERLU)
+ if(NOT BUILD_SHARED_LIBS)
+ find_library(SUPERLU_STATIC_LIBS NAMES libsuperlu.a PATHS
${SUPERLU_LIB_DIR})
+ endif()
+ if(SUPERLU_STATIC_LIBS)
+ set(SUPERLU_LIBS SUPERLU_STATIC_LIBS)
+ else()
+ find_library(SUPERLU_LIBS NAMES superlu PATHS ${SUPERLU_LIB_DIR})
+ endif()
+ if(SUPERLU_LIBS)
+ find_path(SUPERLU_INCLUDE_PATH NAMES "superlu/slu_ddefs.h" HINTS
${SUPERLU_INC_DIR})
+ set(CMAKE_REQUIRED_LIBRARIES ${SUPERLU_LIBS})
+ check_library_exists(superlu dCreate_CompCol_Matrix "" HAVE_SUPERLU)
+ set(CMAKE_REQUIRED_LIBRARIES)
+ endif()
+
+ if(SUPERLU_INCLUDE_PATH)
+ message(STATUS "SUPERLU_INCLUDE_PATH = ${SUPERLU_INCLUDE_PATH}")
+ else()
+ message(WARNING "SuperLU headers NOT found : you can define
SUPERLU_INC_DIR to help cmake find them")
+ endif()
+
+ if(HAVE_SUPERLU AND SUPERLU_INCLUDE_PATH)
+ message(STATUS "SUPERLU_LIBS = ${SUPERLU_LIBS}")
+ set(GMM_USES_SUPERLU 1)
+ message(STATUS "Building with SuperLU")
+ else()
+ set(ENABLE_SUPERLU OFF)
+ message(WARNING "Building without SuperLU")
+ endif()
+else()
+ message("Building with SuperLU explicitly disabled")
+endif()
+
+if(ENABLE_MUMPS)
+ set(MUMPS_LIBS "")
+ if(GETFEM_PARA_LEVEL LESS_EQUAL 1) # try to find "?mumps_seq" named libs
first
+ if(NOT BUILD_SHARED_LIBS)
+ find_library(SMUMPS_STATIC_LIB NAMES libsmumps_seq.a PATHS
${MUMPS_LIB_DIR})
+ find_library(DMUMPS_STATIC_LIB NAMES libdmumps_seq.a PATHS
${MUMPS_LIB_DIR})
+ find_library(CMUMPS_STATIC_LIB NAMES libcmumps_seq.a PATHS
${MUMPS_LIB_DIR})
+ find_library(ZMUMPS_STATIC_LIB NAMES libzmumps_seq.a PATHS
${MUMPS_LIB_DIR})
+ endif()
+ if(SMUMPS_STATIC_LIB AND DMUMPS_STATIC_LIB AND CMUMPS_STATIC_LIB AND
ZMUMPS_STATIC_LIB)
+ set(MUMPS_LIBS ${SMUMPS_STATIC_LIB} ${DMUMPS_STATIC_LIB}
${CMUMPS_STATIC_LIB} ${ZMUMPS_STATIC_LIB})
+ else()
+ find_library(SMUMPS_LIB NAMES smumps_seq PATHS ${MUMPS_LIB_DIR})
+ find_library(DMUMPS_LIB NAMES dmumps_seq PATHS ${MUMPS_LIB_DIR})
+ find_library(CMUMPS_LIB NAMES cmumps_seq PATHS ${MUMPS_LIB_DIR})
+ find_library(ZMUMPS_LIB NAMES zmumps_seq PATHS ${MUMPS_LIB_DIR})
+ if (SMUMPS_LIB AND DMUMPS_LIB AND CMUMPS_LIB AND ZMUMPS_LIB)
+ set(MUMPS_LIBS ${SMUMPS_LIB} ${DMUMPS_LIB} ${CMUMPS_LIB} ${ZMUMPS_LIB})
+ endif()
+ endif()
+ endif()
+ if("${MUMPS_LIBS}" STREQUAL "") # try to find "?mumps" named libs
+ if(NOT BUILD_SHARED_LIBS)
+ find_library(SMUMPS_STATIC_LIB NAMES libsmumps.a PATHS ${MUMPS_LIB_DIR})
+ find_library(DMUMPS_STATIC_LIB NAMES libdmumps.a PATHS ${MUMPS_LIB_DIR})
+ find_library(CMUMPS_STATIC_LIB NAMES libcmumps.a PATHS ${MUMPS_LIB_DIR})
+ find_library(ZMUMPS_STATIC_LIB NAMES libzmumps.a PATHS ${MUMPS_LIB_DIR})
+ endif()
+ if(SMUMPS_STATIC_LIB AND DMUMPS_STATIC_LIB AND CMUMPS_STATIC_LIB AND
ZMUMPS_STATIC_LIB)
+ set(MUMPS_LIBS ${SMUMPS_STATIC_LIB} ${DMUMPS_STATIC_LIB}
${CMUMPS_STATIC_LIB} ${ZMUMPS_STATIC_LIB})
+ else()
+ find_library(SMUMPS_LIB NAMES smumps PATHS ${MUMPS_LIB_DIR})
+ find_library(DMUMPS_LIB NAMES dmumps PATHS ${MUMPS_LIB_DIR})
+ find_library(CMUMPS_LIB NAMES cmumps PATHS ${MUMPS_LIB_DIR})
+ find_library(ZMUMPS_LIB NAMES zmumps PATHS ${MUMPS_LIB_DIR})
+ if (SMUMPS_LIB AND DMUMPS_LIB AND CMUMPS_LIB AND ZMUMPS_LIB)
+ set(MUMPS_LIBS ${SMUMPS_LIB} ${DMUMPS_LIB} ${CMUMPS_LIB} ${ZMUMPS_LIB})
+ endif()
+ endif()
+ endif()
+# find_library(MUMPS_COMMON_LIBRARY NAMES mumps_common HINTS ${MUMPS_LIB_DIR})
+# find_library(MUMPS_PORD_LIBRARY NAMES pord HINTS ${MUMPS_LIB_DIR})
+# find_library(MPI_SEQ NAMES mpiseq HINTS ${MUMPS_LIB_DIR})
+# set(MUMPS_LIBRARIES ${DMUMPS_LIB}
+# ${MUMPS_COMMON_LIBRARY}
+# ${MUMPS_PORD_LIBRARY}
+# ${MPI_SEQ})
+ # find_package(MUMPS REQUIRED)
+ find_path(MUMPS_INCLUDE_PATH NAMES dmumps_struc.h HINTS ${MUMPS_INC_DIR})
+ set(CMAKE_REQUIRED_INCLUDES ${MUMPS_INCLUDE_PATH})
+ check_include_file(smumps_c.h HAVE_SMUMPS_C)
+ check_include_file(dmumps_c.h HAVE_DMUMPS_C)
+ check_include_file(cmumps_c.h HAVE_CMUMPS_C)
+ check_include_file(zmumps_c.h HAVE_ZMUMPS_C)
+ set(CMAKE_REQUIRED_INCLUDES)
+
+ if(MUMPS_LIBS)
+ message(STATUS "MUMPS_LIBS = ${MUMPS_LIBS}")
+ else()
+ message(WARNING "MUMPS LIB NOT found : you can define MUMPS_LIB_DIR to
help cmake find it")
+ endif()
+
+ if(MUMPS_INCLUDE_PATH)
+ message(STATUS "MUMPS_INCLUDE_PATH = ${MUMPS_INCLUDE_PATH}")
+ else()
+ message(WARNING "MUMPS headers NOT found : you can define MUMPS_INC_DIR to
help cmake find them")
+ endif()
+
+ if(MUMPS_LIBS AND MUMPS_INCLUDE_PATH)
+ set(GMM_USES_MUMPS 1)
+ message(STATUS "Building with MUMPS support")
+ else()
+ set(ENABLE_MUMPS OFF)
+ message(WARNING "Building without MUMPS support")
+ endif()
+else()
+ message("Building with MUMPS explicitly disabled")
+endif()
+
+if(NOT ENABLE_MUMPS AND NOT ENABLE_SUPERLU)
+ message(FATAL_ERROR
+ "Neither MUMPS nor SuperLU activated."
+ "At least one direct linear solver is required."
+ "Use MUMPS_LIB_DIR, MUMPS_INC_DIR, SUPERLU_LIB_DIR and
SUPERLU_INC_DIR")
+endif()
+
+# define source files and main build target
+set(SOURCES
+ src/bgeot_convex_ref.cc
+ src/bgeot_convex_ref_simplexified.cc
+ src/bgeot_convex_structure.cc
+ src/bgeot_ftool.cc
+ src/bgeot_geometric_trans.cc
+ src/bgeot_geotrans_inv.cc
+ src/bgeot_kdtree.cc
+ src/bgeot_mesh_structure.cc
+ src/bgeot_node_tab.cc
+ src/bgeot_poly.cc
+ src/bgeot_poly_composite.cc
+ src/bgeot_rtree.cc
+ src/bgeot_small_vector.cc
+ src/bgeot_sparse_tensors.cc
+ src/bgeot_torus.cc
+ src/dal_backtrace.cc
+ src/dal_bit_vector.cc
+ src/dal_singleton.cc
+ src/dal_static_stored_objects.cc
+ src/getfem_assembling_tensors.cc
+ src/getfem_contact_and_friction_common.cc
+ src/getfem_contact_and_friction_integral.cc
+ src/getfem_contact_and_friction_large_sliding.cc
+ src/getfem_contact_and_friction_nodal.cc
+ src/getfem_context.cc
+ src/getfem_continuation.cc
+ src/getfem_enumeration_dof_para.cc
+ src/getfem_error_estimate.cc
+ src/getfem_export.cc
+ src/getfem_fem.cc
+ src/getfem_fem_composite.cc
+ src/getfem_fem_global_function.cc
+ src/getfem_fem_level_set.cc
+ src/getfem_fourth_order.cc
+ src/getfem_generic_assembly_compile_and_exec.cc
+ src/getfem_generic_assembly_functions_and_operators.cc
+ src/getfem_generic_assembly_interpolation.cc
+ src/getfem_generic_assembly_semantic.cc
+ src/getfem_generic_assembly_tree.cc
+ src/getfem_generic_assembly_workspace.cc
+ src/getfem_global_function.cc
+ src/getfem_HHO.cc
+ src/getfem_im_data.cc
+ src/getfem_import.cc
+ src/getfem_integration.cc
+ src/getfem_integration_composite.cc
+ src/getfem_interpolated_fem.cc
+ src/getfem_interpolation.cc
+ src/getfem_interpolation_on_deformed_domains.cc
+ src/getfem_level_set.cc
+ src/getfem_level_set_contact.cc
+ src/getfem_linearized_plates.cc
+ src/getfem_locale.cc
+ src/getfem_mat_elem.cc
+ src/getfem_mat_elem_type.cc
+ src/getfem_mesh.cc
+ src/getfem_mesher.cc
+ src/getfem_mesh_fem.cc
+ src/getfem_mesh_fem_global_function.cc
+ src/getfem_mesh_fem_level_set.cc
+ src/getfem_mesh_fem_product.cc
+ src/getfem_mesh_fem_sum.cc
+ src/getfem_mesh_im.cc
+ src/getfem_mesh_im_level_set.cc
+ src/getfem_mesh_level_set.cc
+ src/getfem_mesh_region.cc
+ src/getfem_mesh_slice.cc
+ src/getfem_mesh_slicers.cc
+ src/getfem_models.cc
+ src/getfem_model_solvers.cc
+ src/getfem_nonlinear_elasticity.cc
+ src/getfem_omp.cc
+ src/getfem_partial_mesh_fem.cc
+ src/getfem_plasticity.cc
+ src/getfem_projected_fem.cc
+ src/getfem_regular_meshes.cc
+ src/getfem_torus.cc)
+
+set(HEADERS
+ src/gmm/gmm_algobase.h
+ src/gmm/gmm_blas.h
+ src/gmm/gmm_blas_interface.h
+ src/gmm/gmm_condition_number.h
+ src/gmm/gmm_conjugated.h
+ src/gmm/gmm_def.h
+ src/gmm/gmm_dense_Householder.h
+ src/gmm/gmm_dense_lu.h
+ src/gmm/gmm_dense_matrix_functions.h
+ src/gmm/gmm_dense_qr.h
+ src/gmm/gmm_dense_sylvester.h
+ src/gmm/gmm_domain_decomp.h
+ src/gmm/gmm_except.h
+ src/gmm/gmm_feedback_management.h
+ src/gmm/gmm.h
+ src/gmm/gmm_inoutput.h
+ src/gmm/gmm_interface_bgeot.h
+ src/gmm/gmm_interface.h
+ src/gmm/gmm_iter.h
+ src/gmm/gmm_iter_solvers.h
+ src/gmm/gmm_kernel.h
+ src/gmm/gmm_lapack_interface.h
+ src/gmm/gmm_least_squares_cg.h
+ src/gmm/gmm_matrix.h
+ src/gmm/gmm_modified_gram_schmidt.h
+ src/gmm/gmm_MUMPS_interface.h
+ src/gmm/gmm_opt.h
+ src/gmm/gmm_precond_diagonal.h
+ src/gmm/gmm_precond.h
+ src/gmm/gmm_precond_ildlt.h
+ src/gmm/gmm_precond_ildltt.h
+ src/gmm/gmm_precond_ilu.h
+ src/gmm/gmm_precond_ilut.h
+ src/gmm/gmm_precond_ilutp.h
+ src/gmm/gmm_precond_mr_approx_inverse.h
+ src/gmm/gmm_range_basis.h
+ src/gmm/gmm_real_part.h
+ src/gmm/gmm_ref.h
+ src/gmm/gmm_scaled.h
+ src/gmm/gmm_solver_bfgs.h
+ src/gmm/gmm_solver_bicgstab.h
+ src/gmm/gmm_solver_cg.h
+ src/gmm/gmm_solver_constrained_cg.h
+ src/gmm/gmm_solver_gmres.h
+ src/gmm/gmm_solver_idgmres.h
+ src/gmm/gmm_solver_qmr.h
+ src/gmm/gmm_solver_Schwarz_additive.h
+ src/gmm/gmm_std.h
+ src/gmm/gmm_sub_index.h
+ src/gmm/gmm_sub_matrix.h
+ src/gmm/gmm_sub_vector.h
+ src/gmm/gmm_superlu_interface.h
+ src/gmm/gmm_transposed.h
+ src/gmm/gmm_tri_solve.h
+ src/gmm/gmm_vector.h
+ src/gmm/gmm_vector_to_matrix.h
+ src/getfem/bgeot_comma_init.h
+ src/getfem/bgeot_config.h
+ src/getfem/bgeot_convex.h
+ src/getfem/bgeot_convex_ref.h
+ src/getfem/bgeot_convex_structure.h
+ src/getfem/bgeot_ftool.h
+ src/getfem/bgeot_geometric_trans.h
+ src/getfem/bgeot_geotrans_inv.h
+ src/getfem/bgeot_kdtree.h
+ src/getfem/bgeot_mesh.h
+ src/getfem/bgeot_mesh_structure.h
+ src/getfem/bgeot_node_tab.h
+ src/getfem/bgeot_permutations.h
+ src/getfem/bgeot_poly_composite.h
+ src/getfem/bgeot_poly.h
+ src/getfem/bgeot_rtree.h
+ src/getfem/bgeot_small_vector.h
+ src/getfem/bgeot_sparse_tensors.h
+ src/getfem/bgeot_tensor.h
+ src/getfem/bgeot_torus.h
+ src/getfem/dal_backtrace.h
+ src/getfem/dal_basic.h
+ src/getfem/dal_bit_vector.h
+ src/getfem/dal_config.h
+ src/getfem/dal_naming_system.h
+ src/getfem/dal_singleton.h
+ src/getfem/dal_static_stored_objects.h
+ src/getfem/dal_tas.h
+ src/getfem/dal_tree_sorted.h
+ src/getfem/getfem_accumulated_distro.h
+ src/getfem/getfem_assembling.h
+ src/getfem/getfem_assembling_tensors.h
+ src/getfem/getfem_config.h
+ src/getfem/getfem_contact_and_friction_common.h
+ src/getfem/getfem_contact_and_friction_integral.h
+ src/getfem/getfem_contact_and_friction_large_sliding.h
+ src/getfem/getfem_contact_and_friction_nodal.h
+ src/getfem/getfem_context.h
+ src/getfem/getfem_continuation.h
+ src/getfem/getfem_convect.h
+ src/getfem/getfem_copyable_ptr.h
+ src/getfem/getfem_crack_sif.h
+ src/getfem/getfem_deformable_mesh.h
+ src/getfem/getfem_derivatives.h
+ src/getfem/getfem_error_estimate.h
+ src/getfem/getfem_export.h
+ src/getfem/getfem_fem_global_function.h
+ src/getfem/getfem_fem.h
+ src/getfem/getfem_fem_level_set.h
+ src/getfem/getfem_fourth_order.h
+ src/getfem/getfem_generic_assembly_compile_and_exec.h
+ src/getfem/getfem_generic_assembly_functions_and_operators.h
+ src/getfem/getfem_generic_assembly.h
+ src/getfem/getfem_generic_assembly_semantic.h
+ src/getfem/getfem_generic_assembly_tree.h
+ src/getfem/getfem_global_function.h
+ src/getfem/getfem_HHO.h
+ src/getfem/getfem_im_data.h
+ src/getfem/getfem_im_list.h
+ src/getfem/getfem_import.h
+ src/getfem/getfem_integration.h
+ src/getfem/getfem_interpolated_fem.h
+ src/getfem/getfem_interpolation.h
+ src/getfem/getfem_level_set_contact.h
+ src/getfem/getfem_level_set.h
+ src/getfem/getfem_linearized_plates.h
+ src/getfem/getfem_locale.h
+ src/getfem/getfem_mat_elem.h
+ src/getfem/getfem_mat_elem_type.h
+ src/getfem/getfem_mesher.h
+ src/getfem/getfem_mesh_fem_global_function.h
+ src/getfem/getfem_mesh_fem.h
+ src/getfem/getfem_mesh_fem_level_set.h
+ src/getfem/getfem_mesh_fem_product.h
+ src/getfem/getfem_mesh_fem_sum.h
+ src/getfem/getfem_mesh.h
+ src/getfem/getfem_mesh_im.h
+ src/getfem/getfem_mesh_im_level_set.h
+ src/getfem/getfem_mesh_level_set.h
+ src/getfem/getfem_mesh_region.h
+ src/getfem/getfem_mesh_slice.h
+ src/getfem/getfem_mesh_slicers.h
+ src/getfem/getfem_models.h
+ src/getfem/getfem_model_solvers.h
+ src/getfem/getfem_Navier_Stokes.h
+ src/getfem/getfem_nonlinear_elasticity.h
+ src/getfem/getfem_omp.h
+ src/getfem/getfem_partial_mesh_fem.h
+ src/getfem/getfem_plasticity.h
+ src/getfem/getfem_projected_fem.h
+ src/getfem/getfem_regular_meshes.h
+ src/getfem/getfem_torus.h)
+
+# Create the library target
+if(BUILD_SHARED_LIBS)
+ add_library(libgetfem SHARED ${SOURCES})
+else()
+ add_library(libgetfem STATIC ${SOURCES})
+endif()
+set_target_properties(libgetfem PROPERTIES OUTPUT_NAME "getfem")
+set_target_properties(libgetfem PROPERTIES VERSION ${GETFEM_VERSION})
+
+target_sources(libgetfem
+ PUBLIC FILE_SET header_set1 TYPE HEADERS
+ BASE_DIRS ${CMAKE_SOURCE_DIR}/src
+ FILES ${HEADERS}
+ PUBLIC FILE_SET header_set2 TYPE HEADERS
+ BASE_DIRS ${CMAKE_BINARY_DIR}
+ FILES
"${CMAKE_BINARY_DIR}/gmm/gmm_arch_config.h"
+
"${CMAKE_BINARY_DIR}/getfem/getfem_arch_config.h")
+
+target_include_directories(libgetfem PRIVATE ${CMAKE_BINARY_DIR})
+target_include_directories(libgetfem PRIVATE ${CMAKE_SOURCE_DIR}/src)
+if(ENABLE_SUPERLU)
+ target_include_directories(libgetfem PRIVATE ${SUPERLU_INCLUDE_PATH})
+ target_link_libraries(libgetfem PRIVATE ${SUPERLU_LIBS})
+endif()
+if(ENABLE_MUMPS)
+ target_include_directories(libgetfem PRIVATE ${MUMPS_INCLUDE_PATH})
+ target_link_libraries(libgetfem PRIVATE "${MUMPS_LIBS}")
+endif()
+
+if(NOT GETFEM_PARA_LEVEL MATCHES "^(0|1|2)$")
+ message(FATAL_ERROR "GETFEM_PARA_LEVEL must be 0, 1, or 2")
+else()
+ if(GETFEM_PARA_LEVEL GREATER_EQUAL 1)
+ find_package(MPI REQUIRED)
+ if(MPI_CXX_FOUND)
+ target_link_libraries(libgetfem PRIVATE MPI::MPI_CXX)
+ else()
+ message(FATAL_ERROR "MPI-enabled C++ compiler not found.")
+ endif()
+ #if(GETFEM_PARA_LEVEL EQUAL 2)
+ #TODO check parallel MUMPS availability
+ #endif()
+ endif()
+endif()
+
+
+if(BUILD_SHARED_LIBS)
+ set_property(TARGET libgetfem PROPERTY POSITION_INDEPENDENT_CODE ON)
+endif()
+
+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ target_compile_options(libgetfem PRIVATE ${WITH_OPTIMIZATION})
+elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+ target_compile_options(libgetfem PRIVATE ${WITH_OPTIMIZATION} -Xc -ansi)
+endif()
+
+
+# Build python interface
+if(ENABLE_PYTHON)
+ if(NOT BUILD_SHARED_LIBS)
+ message(FATAL_ERROR "Building the python interface requires shared
libraries")
+ else()
+ set(INTERFACE_SOURCES
+ interface/src/getfem_interface.h
+ interface/src/getfem_interface.cc
+ interface/src/gfi_array.h
+ interface/src/gfi_array.c
+ interface/src/gfi_rpc.h
+ interface/src/getfemint_std.h
+ interface/src/getfemint.h
+ interface/src/getfemint.cc
+ interface/src/getfemint_misc.h
+ interface/src/getfemint_misc.cc
+ interface/src/gf_spmat.cc
+ interface/src/gf_spmat_set.cc
+ interface/src/gf_spmat_get.cc
+ interface/src/gf_linsolve.cc
+ interface/src/gf_util.cc
+ interface/src/gf_cont_struct.cc
+ interface/src/gf_cont_struct_get.cc
+ interface/src/gf_cvstruct_get.cc
+ interface/src/gf_geotrans.cc
+ interface/src/gf_geotrans_get.cc
+ interface/src/gf_compute.cc
+ interface/src/gf_mesh_fem.cc
+ interface/src/gf_mesh_fem_set.cc
+ interface/src/gf_mesh_fem_get.cc
+ interface/src/gf_mesh_im.cc
+ interface/src/gf_mesh_im_set.cc
+ interface/src/gf_mesh_im_get.cc
+ interface/src/gf_mesh_im_data.cc
+ interface/src/gf_mesh_im_data_set.cc
+ interface/src/gf_mesh_im_data_get.cc
+ interface/src/gf_model.cc
+ interface/src/gf_model_get.cc
+ interface/src/gf_model_set.cc
+ interface/src/gf_eltm.cc
+ interface/src/gf_mesher_object.cc
+ interface/src/gf_mesher_object_get.cc
+ interface/src/gf_mesh.cc
+ interface/src/gf_mesh_set.cc
+ interface/src/gf_mesh_get.cc
+ interface/src/gf_slice.cc
+ interface/src/gf_slice_get.cc
+ interface/src/gf_slice_set.cc
+ interface/src/gf_levelset.cc
+ interface/src/gf_levelset_get.cc
+ interface/src/gf_levelset_set.cc
+ interface/src/gf_mesh_levelset.cc
+ interface/src/gf_mesh_levelset_get.cc
+ interface/src/gf_mesh_levelset_set.cc
+ interface/src/gf_precond.cc
+ interface/src/gf_precond_get.cc
+ interface/src/gf_asm.cc
+ interface/src/gf_fem.cc
+ interface/src/gf_fem_get.cc
+ interface/src/gf_integ.cc
+ interface/src/gf_integ_get.cc
+ interface/src/gf_global_function.cc
+ interface/src/gf_global_function_get.cc
+ interface/src/gf_workspace.cc
+ interface/src/gf_delete.cc
+ interface/src/getfemint_workspace.h
+ interface/src/getfemint_workspace.cc
+ interface/src/getfemint_precond.h
+ interface/src/getfemint_levelset.h
+ interface/src/getfemint_levelset.cc
+ interface/src/getfemint_gsparse.h
+ interface/src/getfemint_gsparse.cc)
+
+ add_library(libgetfemint OBJECT ${INTERFACE_SOURCES})
+ set_property(TARGET libgetfemint PROPERTY POSITION_INDEPENDENT_CODE ON)
+ target_include_directories(libgetfemint PRIVATE ${CMAKE_BINARY_DIR})
+ target_include_directories(libgetfemint PRIVATE ${CMAKE_SOURCE_DIR}/src)
+ target_include_directories(libgetfemint PRIVATE
${CMAKE_SOURCE_DIR}/interface/src)
+
+ find_package(Python3 COMPONENTS Interpreter Development NumPy REQUIRED)
+
+ # create a folder to build the python extension from
+ set(PYTHON_MODULE_PATH ${CMAKE_BINARY_DIR}/python_module)
+ file(MAKE_DIRECTORY ${PYTHON_MODULE_PATH})
+ message("PYTHON_MODULE_PATH = ${PYTHON_MODULE_PATH}")
+ add_custom_target(
+ getfem.py ALL
+ DEPENDS libgetfemint
+ WORKING_DIRECTORY ${PYTHON_MODULE_PATH}
+ COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/bin/extract_doc
${CMAKE_SOURCE_DIR}/interface/src python-com > getfem.py
+ COMMENT "Generating getfem.py")
+
+ Python3_add_library(_getfem MODULE WITH_SOABI
+
${PROJECT_SOURCE_DIR}/interface/src/python/getfem_python.c
+ $<TARGET_OBJECTS:libgetfemint>)
+ target_include_directories(_getfem PRIVATE ${CMAKE_BINARY_DIR}/getfem)
+ target_include_directories(_getfem PRIVATE
${CMAKE_SOURCE_DIR}/interface/src)
+ target_link_libraries(_getfem PRIVATE libgetfem)
+
+ # find the installation directory for python libraries (ported from
autotools)
+ execute_process(
+ COMMAND ${Python3_EXECUTABLE} -c "\
+import sysconfig;
scheme=sysconfig.get_default_scheme().replace('posix_local','posix_prefix'); \
+print(sysconfig.get_path('purelib', scheme, vars={'base':
'${CMAKE_INSTALL_PREFIX}'}))"
+ OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
+ message("Python3_SITEARCH = ${Python3_SITEARCH} (not used)")
+ message("Python3_SITELIB = ${Python3_SITELIB} (not used)")
+ message("PYTHON_SITE_PACKAGES = ${PYTHON_SITE_PACKAGES} (used)")
+ endif()
+endif()
+
+if(ENABLE_OCTAVE)
+ message(FATAL_ERROR "Building the Octave interface not supported in the
cmake configuration")
+endif()
+
+if(ENABLE_MATLAB)
+ message(FATAL_ERROR "Building the Matlab interface not supported in the
cmake configuration")
+endif()
+
+if(ENABLE_OPENMP)
+ find_package(OpenMP REQUIRED)
+ if(OpenMP_CXX_FOUND)
+ set(GETFEM_HAS_OPENMP 1)
+ target_link_libraries(libgetfem PRIVATE OpenMP::OpenMP_CXX)
+ message(STATUS "Building with OpenMP support")
+ else()
+ message(FATAL_ERROR "Could not find OpenMP requested by the user")
+ endif()
+endif()
+
+# in the cmake build, BLAS and Lapack are hard requirements
+find_package(BLAS REQUIRED)
+find_package(LAPACK REQUIRED)
+target_link_libraries(libgetfem PRIVATE ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})
+set(GMM_USES_BLAS 1)
+set(GMM_USES_LAPACK 1)
+
+if(ENABLE_QHULL)
+# find_library(QHULL_R_LIB qhull_r)
+# message(STATUS "QHULL_R_LIB = ${QHULL_R_LIB}")
+# target_link_libraries(libgetfem PRIVATE ${QHULL_R_LIB})
+ find_package(Qhull REQUIRED COMPONENTS qhull_r)
+ if(Qhull_FOUND)
+ set(GETFEM_HAVE_LIBQHULL_R_QHULL_RA_H 1)
+ target_link_libraries(libgetfem PRIVATE Qhull::qhull_r)
+ message(STATUS "Building with Qhull support")
+ else()
+ set(ENABLE_QHULL OFF)
+ message(WARNING "Building without Qhull support")
+ endif()
+else()
+ message("Building with Qhull explicitly disabled")
+endif()
+
+if(ENABLE_MULTITHREADED_BLAS)
+ find_library(DL_LIB NAMES dl)
+ set(CMAKE_REQUIRED_LIBRARIES ${DL_LIB})
+ check_library_exists(dl dlsym "" HAVE_DLSYM)
+ set(CMAKE_REQUIRED_LIBRARIES ${DL_LIB})
+ if(HAVE_DLSYM)
+ target_link_libraries(libgetfem PRIVATE ${DL_LIB})
+ else()
+ message(FATAL_ERROR
+ "Could not find dlsym function required for enabling multithreaded
BLAS")
+ endif()
+else() # single threaded blas by default
+ set(GETFEM_FORCE_SINGLE_THREAD_BLAS 1)
+endif()
+
+
+# Print build options
+message(STATUS "Build options:")
+message(STATUS " WITH_OPTIMIZATION: ${WITH_OPTIMIZATION}")
+message(STATUS " GETFEM_PARA_LEVEL: ${GETFEM_PARA_LEVEL}")
+message(STATUS " ENABLE_PYTHON: ${ENABLE_PYTHON}")
+message(STATUS " ENABLE_OCTAVE: ${ENABLE_OCTAVE}")
+message(STATUS " ENABLE_MATLAB: ${ENABLE_MATLAB}")
+message(STATUS " ENABLE_OPENMP: ${ENABLE_OPENMP}")
+message(STATUS " ENABLE_SUPERLU: ${ENABLE_SUPERLU}")
+message(STATUS " ENABLE_MUMPS: ${ENABLE_MUMPS}")
+message(STATUS " ENABLE_QHULL: ${ENABLE_QHULL}")
+message(STATUS " ENABLE_MULTITHREADED_BLAS: ${ENABLE_MULTITHREADED_BLAS}")
+message(STATUS "GetFEM version ${GETFEM_VERSION}")
+
+# Generate configuration header files for gmm and getfem
+configure_file(cmake/gmm_arch_config.h.in
${CMAKE_BINARY_DIR}/gmm/gmm_arch_config.h)
+configure_file(cmake/getfem_arch_config.h.in
${CMAKE_BINARY_DIR}/getfem/getfem_arch_config.h)
+
+add_custom_command(
+ OUTPUT ${CMAKE_SOURCE_DIR}/src/getfem/getfem_im_list.h
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/getfem/
+ COMMAND perl ${CMAKE_SOURCE_DIR}/cubature/make_getfem_im_list
${CMAKE_SOURCE_DIR}/cubature
+ COMMENT "Generating getfem_im_list.h")
+
+install(TARGETS libgetfem
+ FILE_SET header_set1
+ FILE_SET header_set2)
+if(ENABLE_PYTHON)
+ install(TARGETS _getfem
+ DESTINATION ${PYTHON_SITE_PACKAGES}/getfem)
+ install(FILES "${PYTHON_MODULE_PATH}/getfem.py"
"${CMAKE_SOURCE_DIR}/interface/src/python/__init__.py"
+ DESTINATION ${PYTHON_SITE_PACKAGES}/getfem)
+endif()
+
+#get_cmake_property(_variableNames VARIABLES)
+#list (SORT _variableNames)
+#foreach (_variableName ${_variableNames})
+# message(STATUS "${_variableName}=${${_variableName}}")
+#endforeach()
diff --git a/cmake/getfem_arch_config.h.in b/cmake/getfem_arch_config.h.in
new file mode 100644
index 00000000..79b8537a
--- /dev/null
+++ b/cmake/getfem_arch_config.h.in
@@ -0,0 +1,50 @@
+/* manually maintained template for cmake, equivalent to
src/getfem/getfem_arch_config.h.in
+ used by autotools. */
+
+/* enable openblas to be multithreaded */
+#cmakedefine GETFEM_FORCE_SINGLE_THREAD_BLAS
+
+/* defined if GetFEM is built with OpenMP parallelization */
+#cmakedefine GETFEM_HAS_OPENMP
+
+/* glibc backtrace function */
+#cmakedefine GETFEM_HAVE_BACKTRACE
+
+/* defined if the cxxabi.h header file is available */
+#cmakedefine GETFEM_HAVE_CXXABI_H
+
+/* glibc floating point exceptions control */
+#cmakedefine GETFEM_HAVE_FEENABLEEXCEPT
+
+/* defined if the <libqhull_r/qhull_ra.h> header file is available */
+#cmakedefine GETFEM_HAVE_LIBQHULL_R_QHULL_RA_H
+
+/* defined if the Metis library was found and is working */
+#cmakedefine GETFEM_HAVE_METIS
+
+/* defined if the Metis library found is older than version 4 */
+#cmakedefine GETFEM_HAVE_METIS_OLD_API
+
+/* defined if the qd library was found and is working */
+#cmakedefine GETFEM_HAVE_QDLIB
+
+/* GetFEM package name */
+#define GETFEM_PACKAGE_NAME "@GETFEM_PACKAGE_NAME@"
+
+/* GetFEM package string */
+#define GETFEM_PACKAGE_STRING "@GETFEM_PACKAGE_STRING@"
+
+/* GetFEM package tarname */
+#define GETFEM_PACKAGE_TARNAME "@GETFEM_PACKAGE_TARNAME@"
+
+/* Parallelization level (0|1|2) */
+#define GETFEM_PARA_LEVEL @GETFEM_PARA_LEVEL@
+
+/* defined if quad-doubles are to be used instead of double-double */
+#cmakedefine GETFEM_QDLIB_USE_QUAD
+
+/* Use rpc for getfem communication with matlab */
+#cmakedefine GETFEM_USE_RPC
+
+/* GetFEM version */
+#define GETFEM_VERSION "@GETFEM_VERSION@"
diff --git a/cmake/gmm_arch_config.h.in b/cmake/gmm_arch_config.h.in
new file mode 100644
index 00000000..50f47daa
--- /dev/null
+++ b/cmake/gmm_arch_config.h.in
@@ -0,0 +1,26 @@
+/* manually maintained template for cmake, equivalent to
src/gmm/gmm_arch_config.h.in
+ used by autotools. */
+
+/* gcc style __PRETTY_FUNCTION__ macro */
+#cmakedefine GMM_HAVE_PRETTY_FUNCTION
+
+/* defined if GMM is linked to a blas library */
+#cmakedefine GMM_USES_BLAS
+
+/* defined if GMM is linked to a lapack library */
+#cmakedefine GMM_USES_LAPACK
+
+/* defined if GMM uses MPI */
+#cmakedefine GMM_USES_MPI
+
+/* defined if GMM is linked to the mumps library */
+#cmakedefine GMM_USES_MUMPS
+
+/* defined if GMM is linked to the superlu library */
+#cmakedefine GMM_USES_SUPERLU
+
+/* Use blas with 64 bits integers */
+#cmakedefine GMM_USE_BLAS64_INTERFACE
+
+/* GMM version */
+#define GMM_VERSION "@GMM_VERSION@"
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Getfem-commits] [getfem-commits] branch overhaul-build-system updated: Add basic cmake build support,
Konstantinos Poulios <=