Commit Graph

402 Commits

Author SHA1 Message Date
Markus Blatt
e66fd64dba Do not hard-code shared-libs in package configuration if not needed.
We usually list all libraries that might be needed for linking in the
CMake package configuration files. This is needed when building static
libraries as we do not yet use CMake targets (which would allow to
list them differently). As we are doing this unconditionally and
also including the ones listed in modules that we depend on, changing
a library (e.g. moving from Python 3.9 to 3.10) requires a complete
rebuild of all modules to get rid of the stale dependency on
libpython3.9.

At least when building shared libraries listing the dependencies is
not needed and this patch simply removes all shared libraries form the
list in the CMake package configuration file. Thus we only need to
recompile the modules that have direct dependency on a stale library.
2022-05-06 14:33:28 +02:00
Markus Blatt
c8e5935a19 Make not finding Quadmath non-fatal (e.g. not available on arm64)
Quadmath is usually unused except when a dependency uses it and
explicitly puts QuadMath::QuadMath into their CMake package
configuration file.

On most platforms the compiler has Quadmath available by
default. But on those that don't we should not stop CMake and fail.
Hence now we only print a message that Quadmath is not available.
2022-04-29 11:21:40 +02:00
Markus Blatt
a561e68b41 Require UMFPack
A direct coarse solver of AMG is needed for good convergence and umfpack
was tested to work better than SuperLU previously. Hence we now require it.
2022-04-20 19:53:13 +02:00
Markus Blatt
a44c0ad80b Always build with MPI and search for SuperLU and Quadmath.
Concerning MPI, both DUNE and OPM must be compiled with the
same default. For DUNE that is to used MPI if it is found.
With the previous default Cmake in opm-grid would fail for
DUNE 2.8

Even if SuperLU is found umfpack will be used as the coarse
solver for AMG. But if dune-fem is used  that will need SuperL
if it is on the system otherwise linking will fail for DUNE 2.8

Quadmath is used by dune-fem if it is found and linking of flow
will fail in this case for DUNE 2.8 if we did not search for it.
2022-04-20 19:53:13 +02:00
Markus Blatt
0cdfeae0e5 Added CMake variable to prevent timestamps in flow binary packages.
One can now set the variable OPM_BINARY_PACKAGE_VERSION to a
meaningful version string (Debian 11.2: 2021.10-4). When building
outside of git it will be used as the project hash. If the variable is
non-empty there will also be no timestamp in project-timestamp.hh (as
this would break reproducible builds).

Note that if building from git or not setting the variable then everything
will be like before.
2022-03-23 22:53:43 +01:00
Markus Blatt
283d7b3dce Do not try to get git hashes for version if built from tarballs. 2022-03-23 22:37:31 +01:00
Joakim Hove
9685946196 Merge pull request #2799 from akva2/fix_suitesparse_warning
changed: use STRING type
2021-10-29 16:39:51 +02:00
Arne Morten Kvarving
fecd879840 changed: use STRING type
there is no such thing as INT type in cmake
2021-10-29 14:25:41 +02:00
Arne Morten Kvarving
c979f25d02 fix cjson find module
the param to find_package_handle_standard_args should match module name
2021-10-29 13:15:47 +02:00
Joakim Hove
798e93e4a8 Merge pull request #2774 from blattms/dune-2.8-imported-targets
Define imported targets needed e.g. for dune-fem 2.8.0
2021-10-21 20:17:43 +02:00
Markus Blatt
c6e1730a0a Search for GMP if dune-common is used.
We do suggest dune-fem for opm-models and that one links to it
if available.
2021-10-21 15:33:02 +02:00
Markus Blatt
e67a55bf86 dune-fem uses QuadMath if available, search for it.
One still has to set USE_QUADMATH to true otherwise no
search will happen.
2021-10-21 15:30:44 +02:00
Markus Blatt
d577b74106 Introduced DUNE-2.8 compatible imported targets where needed.
I.e. in the find_package files for PTScotch ParMETIS, Quadmath,
SuiteSparse, and SuperLU.
2021-10-21 15:29:12 +02:00
Markus Blatt
c713d540e6 Adds a rudimentary FindTBB.cmake to make DUNE 2.8 with TBB work
Fixes errors like

Target "test_communication_utils" links to target
"PkgConfig::PkgConfigTBB" but the target
was not found.  Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
2021-10-20 22:06:29 +02:00
Markus Blatt
22e9452de0 Search for TBB in Finddune-common.cmake
When configured with TBB dune-common-targets.cmake lists the
imported TBB::tbb or PkgConfig::PkgConfigTBB target
in INTERFACE_LINK_LIBRARIES. Hence we need to be able to resolve
this target in opm. We do this by searching for TBB id dune-common
is a prerequisite.

This commit fixes the problem only for newer versions of TBB shipping a
TBBConfig.cmake file.

The error fixed is along these lines:

Target "test_communication_utils" links to target "TBB::tbb" but the target
was not found.  Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?
2021-10-20 22:06:29 +02:00
Arne Morten Kvarving
53cfb50d75 use -e when passing exename to test drivers 2021-10-13 11:27:47 +02:00
Feda Curic
c2e8eabc2f Use built in FindBoost 2021-10-07 12:11:54 +02:00
Markus Blatt
657f04cd28 Merge pull request #2631 from blattms/dune-2.8-metis
Fix FindMETIS for DUNE 2.8.
2021-08-30 16:23:55 +02:00
Markus Blatt
0056e0a2a1 Fix FindMETIS for DUNE 2.8.
With version 2.8 DUNE will specify imported target METIS::METIS for
the linker and introduces a METIS_API_VERSION to distinguish different
versions. This patch introduces these to the find module used by OPM.
2021-08-26 15:08:27 +02:00
Arne Morten Kvarving
7f84696bc9 changed: default to asserts enabled in release mode 2021-08-19 13:03:25 +02:00
Arne Morten Kvarving
1d4a3cc655 fixed: make WITH_NDEBUG cmake option work again
cmake now adds -DNDEBUG to default CXX flags
invert logic and use -UNDEBUG to remove instead
2021-08-04 15:21:37 +02:00
Markus Blatt
ff9792e31c Work around issues of Boost >=1.70.0 and CMake 3.18.4
With that combination the first search seems to happen in CONFIG mode
but subsequent searches will use MODULE mode. This will result in the
following warning:

CMake Warning at /usr/share/cmake-3.18/Modules/FindBoost.cmake:1187 (message):
  New Boost version may have incorrect or missing dependencies and imported
  targets
Call Stack (most recent call first):
  /usr/share/cmake-3.18/Modules/FindBoost.cmake:1311 (_Boost_COMPONENT_DEPENDENCIES)
  /usr/share/cmake-3.18/Modules/FindBoost.cmake:1919 (_Boost_MISSING_DEPENDENCIES)
  cmake/Modules/OpmFind.cmake:135 (find_package)
  cmake/Modules/OpmFind.cmake:230 (find_and_append_package_to)
  cmake/Modules/OpmLibMain.cmake:83 (find_and_append_package_list_to)
  CMakeLists.txt:222 (include)

Also the variable Boost_LIBRARIES will look quite messed up by
occurrences of optimized and debug:
Boost_LIBRARIES=optimized;/usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0;debug;/usr/lib/x86_64-linux-gnu/libboost_system.so;optimized;/usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so.1.74.0;debug;/usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so

Which will make the modules unusable because of CMake errors during
linking:

CMake Error at /usr/share/dune/cmake/modules/DuneMacros.cmake:991 (target_link_libraries):
  The "debug" argument must be followed by a library.
Call Stack (most recent call first):
  src/CMakeLists.txt:2 (target_link_dune_default_libraries)
-- Configuring incomplete, errors occurred!

Note this fix is only needed for Boost versions 1.70 and higher.
Older versions do not provide cmake package configuration
files (BoostConfig.cmake) and hence there can be no mixup.

Note also that the alternative approach of setting
CMAKE_FIND_PACKAGE_PREFER_CONFIG does not work for OPM as with this
e.g. the Dune module versions would not be set correctly.
2021-06-15 21:04:41 +02:00
Markus Blatt
bf55667553 Allow installation of bash completion scripts to new location.
That location is /usr/share/bash-completion/completions and scripts
will be loaded on demand. Added option USE_BASH_COMPLETIONS_DIR (default OFF)
to request this. It is needed to prevent lintian warnings for Debian
packages.
2021-06-15 20:56:50 +02:00
Markus Blatt
7740e00883 Removed code for CMake < 3.10 2021-04-29 16:03:21 +02:00
Markus Blatt
62b202e85c Stop pretending that we support CMake 2.8
We actually already require at least CMake 2.8.12 due to the embedded
pybind11 (some tests of it are even at 3.0). Anyway as Ubuntu LTS has
3.10.2 I doubt that anything less is tested by us.
2021-04-07 13:56:03 +02:00
Markus Blatt
3fd76f9c26 Fixes include paths in pkg-config files (at least in Debian).
Previously we ended up with "-I -I/cjson" for
"/usr/include;/usr/include/cjson" in opm-common_INCLUDE_DIRS.

Gbp-Pq: Name 0008-Fixes-include-paths-in-pkg-config-files-at-least-in-.patch
2021-04-06 22:57:00 +02:00
Markus Blatt
3e22403cfe Make SOVERSION change with every release.
Previously the SOVERSION was the year which indicated a stable ABI
within each year. It is highly unlikely that or ABI is that
stable. Hence we stop pretending that it is and change the version
with every release.

Gbp-Pq: Name 0006-Make-SOVERSION-change-with-every-release.patch
2021-04-06 22:56:59 +02:00
Markus Blatt
8e70bfb93b Fix pkg-config files with imported targets.
They had imported target names (e.g. from OpenMP) in them which did not work.
Also linking std++fs was a bit strange. Hopefully fixed now.

Gbp-Pq: Name 0003-Fix-pkg-config-files-with-imported-targets.patch
2021-04-06 22:56:59 +02:00
Markus Blatt
77050e5042 Moved settings of CMake_STANDARD stuff to OPMInit.cmake
That makes it usable from *prereqs and helps preventing
multiple -std=c++xx options when compiling (at least for
pybind11)
2021-03-18 15:06:00 +01:00
Markus Blatt
55bdaaa9f9 Do not set unnecessary COMPILE_DEFINTIONS.
The ones set for DUNE are for very old unsupported versions.
2021-03-18 15:06:00 +01:00
Markus Blatt
05128745cf Some modules may still export definitions using -D, strip it. 2021-03-17 17:27:26 +01:00
Markus Blatt
213f0c0afa Only add -D for older CMake versions. 2021-03-17 16:57:00 +01:00
Markus Blatt
6d9a924930 Add -D qualifier to DEFINITIONS if missing for old CMake. 2021-03-17 15:36:24 +01:00
Markus Blatt
a4f73a3a7c Use add_compile_definitions for newer CMake versions.
add_definitions is deprecated.
Note the new command does not need the -D qualifier but will detect
if there is one and act accordingly. This helps with package
configuration files that have "-DVAR" in their COMPILE_DEFINTIONS

As some packages actually already add the -D qualifier we now detect
that to be able to support old CMake version without
add_compile_definitions. In this case we prevent adding another -D
and use add_definitions.
2021-03-17 11:16:13 +01:00
Joakim Hove
0ae020cb8b Removed cmake module FindCwrap 2021-03-13 16:22:16 +01:00
Markus Blatt
2e0bc4f17a Recover external cjson library support.
This was somehow deactivated when merging opm-parser to opm-common.
2021-03-11 16:21:46 +01:00
Markus Blatt
8951ff3130 [cmake] Use scotch include dir for parmetis bindings of scotch.
The parmetis.h distributed via the parmetis binding of scotch
with Ubuntu 18.04 (libscotchparmetis-dev) includes the header
scotch.h located in /usr/include/scotch/. Therefore our check
of the include file failed. With this commit we check the
parmetis.h header another time with the scotch include path added.
Now parmetis is found on my Ubuntu.
2020-10-21 14:36:39 +02:00
Markus Blatt
7c30586fde Only compile code if non-empty code was submitted for DUNE/OPM.
Also make the search fail if the compilation fails.
2020-08-11 00:53:45 +02:00
Markus Blatt
d5388ba653 Fix compile check for dune-geometry from DUNE>2.7
Dune::Geometry::makeQuadrilateral() is deprecated since 2.6 and has recently
been removed. We are using now using Dune::GeometryTypes::quadrilateral
2020-08-11 00:25:23 +02:00
Arne Morten Kvarving
64cbbdde65 add a cmake flag to disable warnings 2020-06-09 15:11:44 +02:00
Arne Morten Kvarving
1d3843cef1 changed: move build timestamp to separate header
to avoid rebuilds for things only needing project versions
2020-06-08 10:06:03 +02:00
Markus Blatt
9452796c57 Send error for required but disabled packages.
When using CMAKE_DISABLE_FIND_PACKAGE_<name>=ON for a required package
CMake did not issue an errors since we never trigger the find_package
call. With this commit we now check whether such package is required
and send an error.
2020-05-20 14:55:52 +02:00
Markus Blatt
eeb63d8694 Merge pull request #1758 from blattms/mark-openmp-as-prereq
Mark OpenMP as prerequisite for opm-common
2020-04-29 12:57:02 +02:00
Joakim Hove
ad536b718b Merge pull request #1754 from blattms/find-zoltan-only-with-mpi
[CMake] Find Zoltan only if MPI is available.
2020-04-28 14:50:08 +02:00
Markus Blatt
a87e6f281d Quietly searcg for OpenMP in opm-common-prereqs.cmake 2020-04-28 12:58:39 +02:00
Markus Blatt
b6dd398c32 Find Zoltan only if MPI is available.
Otherwise we experience compilation errors if OPM is configured with
deactivated MPI and activated and found dune-alugrid (cpmpile error
that mpi.h is not found). This commit fixes this for me.
2020-04-27 16:00:49 +02:00
Markus Blatt
0ebe62a1d5 Use OpenMP::OpenMP_CXX target when linking libopmcommon
This should allow downstream to automatically use the correct
compile and linke flags for CMake > 3.9. For older versions
we fall back to the old approach.

Closes #1751
2020-04-27 12:54:18 +02:00
Markus Blatt
8e3ba156a6 Merge pull request #1675 from blattms/refactor-policy-settings
Fix policy warnings
2020-04-15 21:01:35 +02:00
Markus Blatt
8816549f2f Try to set CMP0048 to NEW as we do not use VERSION 2020-04-15 14:17:53 +02:00
Markus Blatt
eb22f6cfd9 [CMake] Set PATH instead of LOCATION. 2020-04-15 14:17:53 +02:00