Files
haikuports/dev-cpp/eigen/eigen-5.0.1.recipe
2025-11-13 15:38:41 +01:00

118 lines
4.3 KiB
Bash

SUMMARY="A C++ template library for linear algebra, vectors and more"
DESCRIPTION="Eigen is a versatile, fast, elegant and reliable template library \
that supports all matrix sizes, from small fixed-size matrices to arbitrarily \
large dense matrices, and even sparse matrices.
- It supports all standard numeric types, including std::complex, integers, \
and is easily extensible to custom numeric types.
- It supports various matrix decompositions and geometry features.
- Its ecosystem of unsupported modules provides many specialized features \
such as non-linear optimization, matrix functions, a polynomial solver, FFT, \
and much more.
- Expression templates allow to intelligently remove temporaries and enable \
lazy evaluation, when that is appropriate.
- Explicit vectorization is performed for SSE 2/3/4, AVX, FMA, AVX512, \
ARM NEON (32-bit and 64-bit), PowerPC instruction sets, and now S390x SIMD \
(ZVector) with graceful fallback to non-vectorized code.
- Fixed-size matrices are fully optimized: dynamic memory allocation is \
avoided, and the loops are unrolled when that makes sense.
- For large matrices, special attention is paid to cache-friendliness.
- Algorithms are carefully selected for reliability. Reliability trade-offs \
are clearly documented and extremely safe decompositions are available.
- Eigen is thoroughly tested through its own test suite (over 500 executables) \
the standard BLAS test suite, and parts of the LAPACK test suite.
- The API is extremely clean and expressive while feeling natural to C++ \
programmers, thanks to expression templates.
- Implementing an algorithm on top of Eigen feels like just copying pseudocode."
HOMEPAGE="http://eigen.tuxfamily.org"
COPYRIGHT="2006-2011 Benoit Jacob
2008-2012 Gael Guennebaud, et al."
LICENSE="MPL v2
Apache v2
BSD (3-clause)
GNU GPL v3
GNU LGPL v2.1"
REVISION="3"
SOURCE_URI="http://gitlab.com/libeigen/eigen/-/archive/$portVersion/eigen-$portVersion.tar.gz"
CHECKSUM_SHA256="e9c326dc8c05cd1e044c71f30f1b2e34a6161a3b6ecf445d56b53ff1669e3dec"
PATCHES="eigen-$portVersion.patchset"
ARCHITECTURES="all !x86_gcc2"
SECONDARY_ARCHITECTURES="x86"
PROVIDES="
eigen$secondaryArchSuffix = $portVersion
devel:eigen$secondaryArchSuffix = $portVersion
"
REQUIRES="
haiku$secondaryArchSuffix
lib:libgfortran$secondaryArchSuffix
lib:libquadmath$secondaryArchSuffix
"
CONFLICTS="
eigen3$secondaryArchSuffix
"
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
devel:libboost_system$secondaryArchSuffix >= 1.88.0
devel:libcholmod$secondaryArchSuffix
devel:libfftw3f$secondaryArchSuffix
devel:libGL$secondaryArchSuffix
devel:libgmp$secondaryArchSuffix
devel:libhwloc$secondaryArchSuffix >= 15.7 # we want hwloc2_devel
devel:libklu$secondaryArchSuffix
devel:libmpfr$secondaryArchSuffix
# devel:libopenblas$secondaryArchSuffix
devel:libumfpack$secondaryArchSuffix
devel:libsuperlu$secondaryArchSuffix
devel:libspqr$secondaryArchSuffix
# devel:libtbb$secondaryArchSuffix
"
BUILD_PREREQUIRES="
cmd:cmake
cmd:gcc$secondaryArchSuffix
cmd:gfortran$secondaryArchSuffix
cmd:make
cmd:pkg_config$secondaryArchSuffix
"
BUILD()
{
cmake -Bbuild -S. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$prefix \
-DINCLUDE_INSTALL_DIR=$includeDir \
-DCMAKEPACKAGE_INSTALL_DIR=$libDir/cmake/eigen3 \
-DPKGCONFIG_INSTALL_DIR=$developLibDir/pkgconfig \
-DEIGEN_BUILD_BLAS=OFF \
-DEIGEN_BUILD_LAPACK=OFF \
-Wno-dev
make -C build $jobArgs
}
INSTALL()
{
make -C build install
}
TEST()
{
# test binaries are not build with ctest
make -C build check -j 4
# 99% tests passed, 5 tests failed out of 1283 (5 crashes)
# Label Time Summary:
# Official = 355.40 sec*proc (910 tests)
# Unsupported = 74.87 sec*proc (231 tests)
# smoketest = 9.50 sec*proc (109 tests)
# Total Test time (real) = 2542.71 sec
# The following tests FAILED:
# 13 - klu_support_1 (Timeout)
# 14 - klu_support_2 (Signal 21)
# 80 - packetmath_11 (Signal 21) Official
# 732 - geo_homogeneous_2 (Signal 21) Official
# 733 - geo_homogeneous_3 (Signal 21) Official
# change -E to -R to run only the crashing tests
# ctest --test-dir build --output-on-failure -E "klu_support_1|klu_support_2|packetmath_11|geo_homogeneous_2|geo_homogeneous_3"
}