]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Add CMake module and configuration files for SymEngine 7810/head
authorJean-Paul Pelteret <jppelteret@gmail.com>
Thu, 14 Mar 2019 08:54:01 +0000 (09:54 +0100)
committerJean-Paul Pelteret <jppelteret@gmail.com>
Thu, 14 Mar 2019 17:21:33 +0000 (18:21 +0100)
cmake/configure/configure_symengine.cmake [new file with mode: 0644]
cmake/modules/FindSYMENGINE.cmake [new file with mode: 0644]

diff --git a/cmake/configure/configure_symengine.cmake b/cmake/configure/configure_symengine.cmake
new file mode 100644 (file)
index 0000000..4867772
--- /dev/null
@@ -0,0 +1,41 @@
+## ---------------------------------------------------------------------
+##
+## Copyright (C) 2019 by the deal.II authors
+##
+## This file is part of the deal.II library.
+##
+## The deal.II library is free software; you can use it, redistribute
+## it, and/or modify it under the terms of the GNU Lesser General
+## Public License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+## The full text of the license can be found in the file LICENSE at
+## the top level of the deal.II distribution.
+##
+## ---------------------------------------------------------------------
+
+#
+# Configuration for the SymEngine library:
+#
+
+#
+# We require at least version 0.3 of the symengine library:
+#
+SET(SYMENGINE_MINIMUM_REQUIRED_VERSION "0.3")
+
+
+MACRO(FEATURE_SYMENGINE_CONFIGURE_EXTERNAL)
+  SET(DEAL_II_SYMENGINE_WITH_LLVM ${SYMENGINE_WITH_LLVM})
+
+  IF(DEAL_II_SYMENGINE_WITH_LLVM)
+    MESSAGE(STATUS "Configured with SymEngine LLVM capabilities.")
+  ENDIF()
+
+  #
+  # Overwrite the compiler flags imported from SymEngine
+  #
+  SET(SYMENGINE_CXX_FLAGS_DEBUG)
+  SET(SYMENGINE_CXX_FLAGS_RELEASE)
+ENDMACRO()
+
+
+CONFIGURE_FEATURE(SYMENGINE)
diff --git a/cmake/modules/FindSYMENGINE.cmake b/cmake/modules/FindSYMENGINE.cmake
new file mode 100644 (file)
index 0000000..4b7468f
--- /dev/null
@@ -0,0 +1,129 @@
+## ---------------------------------------------------------------------
+##
+## Copyright (C) 2019 by the deal.II authors
+##
+## This file is part of the deal.II library.
+##
+## The deal.II library is free software; you can use it, redistribute
+## it, and/or modify it under the terms of the GNU Lesser General
+## Public License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+## The full text of the license can be found in the file LICENSE at
+## the top level of the deal.II distribution.
+##
+## ---------------------------------------------------------------------
+
+#
+# - Try to find SymEngine
+#
+# This module exports
+#
+#   SYMENGINE_INCLUDE_DIR
+#   SYMENGINE_LIBRARY
+#   SYMENGINE_WITH_LLVM
+#
+
+SET(SYMENGINE_DIR "" CACHE PATH "An optional hint to a SymEngine installation")
+SET_IF_EMPTY(SYMENGINE_DIR "$ENV{SYMENGINE_DIR}")
+
+#
+# SymEngine overwrites the CMake module path, so we save
+# and restore it after this library is found and configured.
+#
+SET (DEAL_II_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH})
+
+#
+# Include the SymEngine:
+#
+FIND_PACKAGE(SymEngine ${SYMENGINE_MINIMUM_REQUIRED_VERSION}
+  CONFIG QUIET
+  HINTS ${SYMENGINE_DIR}
+  PATH_SUFFIXES lib/cmake/symengine
+  NO_SYSTEM_ENVIRONMENT_PATH
+  )
+
+#
+# Reset the CMake module path
+#
+SET (CMAKE_MODULE_PATH ${DEAL_II_CMAKE_MODULE_PATH})
+
+
+#
+# Look for symengine_config.h - we'll query it to determine supported features:
+#
+IF(SymEngine_FOUND)
+  DEAL_II_FIND_FILE(SYMENGINE_SETTINGS_H symengine_config.h
+    HINTS ${SYMENGINE_INCLUDE_DIRS}
+    PATH_SUFFIXES symengine
+    NO_DEFAULT_PATH
+    NO_CMAKE_ENVIRONMENT_PATH
+    NO_CMAKE_PATH
+    NO_SYSTEM_ENVIRONMENT_PATH
+    NO_CMAKE_SYSTEM_PATH
+    NO_CMAKE_FIND_ROOT_PATH
+    )
+ENDIF()
+
+#
+# Version check
+#
+IF(EXISTS ${SYMENGINE_SETTINGS_H})
+
+  FILE(STRINGS "${SYMENGINE_SETTINGS_H}" SYMENGINE_VERSION_MAJOR_STRING
+    REGEX "#define.*SYMENGINE_MAJOR_VERSION")
+  STRING(REGEX REPLACE "^.*SYMENGINE_MAJOR_VERSION.*([0-9]+).*" "\\1"
+    SYMENGINE_VERSION_MAJOR "${SYMENGINE_VERSION_MAJOR_STRING}"
+    )
+  FILE(STRINGS "${SYMENGINE_SETTINGS_H}" SYMENGINE_VERSION_MINOR_STRING
+    REGEX "#define.*SYMENGINE_MINOR_VERSION")
+  STRING(REGEX REPLACE "^.*SYMENGINE_MINOR_VERSION.*([0-9]+).*" "\\1"
+    SYMENGINE_VERSION_MINOR "${SYMENGINE_VERSION_MINOR_STRING}"
+    )
+  FILE(STRINGS "${SYMENGINE_SETTINGS_H}" SYMENGINE_VERSION_PATCH_STRING
+    REGEX "#define.*SYMENGINE_PATCH_VERSION")
+  STRING(REGEX REPLACE "^.*SYMENGINE_PATCH_VERSION.*([0-9]+).*" "\\1"
+    SYMENGINE_VERSION_PATCH "${SYMENGINE_VERSION_PATCH_STRING}"
+    )
+  SET(SYMENGINE_VERSION
+    "${SYMENGINE_VERSION_MAJOR}.${SYMENGINE_VERSION_MINOR}.${SYMENGINE_VERSION_PATCH}"
+    )
+ENDIF()
+
+#
+# Feature checks
+#
+
+MACRO(_symengine_feature_check _var _regex)
+  IF(EXISTS ${SYMENGINE_SETTINGS_H})
+    FILE(STRINGS "${SYMENGINE_SETTINGS_H}" SYMENGINE_${_var}_STRING
+      REGEX "${_regex}")
+    IF("${SYMENGINE_${_var}_STRING}" STREQUAL "")
+      SET(SYMENGINE_WITH_${_var} FALSE)
+    ELSE()
+      SET(SYMENGINE_WITH_${_var} TRUE)
+    ENDIF()
+  ENDIF()
+ENDMACRO()
+
+# Other possible features of interest: BOOST, GMP
+_symengine_feature_check(LLVM "#define.*HAVE_SYMENGINE_LLVM")
+
+#
+# Sanitize include dirs:
+#
+
+STRING(REGEX REPLACE
+  "(lib64|lib)\\/cmake\\/symengine\\/\\.\\.\\/\\.\\.\\/\\.\\.\\/" ""
+  _symengine_include_dirs "${SYMENGINE_INCLUDE_DIRS}"
+  )
+REMOVE_DUPLICATES(_symengine_include_dirs)
+
+SET(_symengine_libraries ${SYMENGINE_LIBRARIES})
+
+
+DEAL_II_PACKAGE_HANDLE(SYMENGINE
+  LIBRARIES REQUIRED _symengine_libraries
+  INCLUDE_DIRS REQUIRED _symengine_include_dirs
+  USER_INCLUDE_DIRS REQUIRED  _symengine_include_dirs
+  CLEAR SYMENGINE_SETTINGS_H SYMENGINE_SKIP_DEPENDENCIES SymEngine_DIR
+)

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.