diff options
| author | root <root@alpha.trunkmasters.com> | 2026-06-12 19:09:37 -0500 |
|---|---|---|
| committer | root <root@alpha.trunkmasters.com> | 2026-06-12 19:09:37 -0500 |
| commit | b590c8d7572b727d565cc0b8ff660d43569845de (patch) | |
| tree | 06f7a4102ea4e845df8b66660f252920d52952f9 /dev-cpp/eigen | |
| parent | 24f9cbfc4c34fdb6a6e03311674414e881ceab47 (diff) | |
| download | baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.gz baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.tar.xz baldeagleos-repo-b590c8d7572b727d565cc0b8ff660d43569845de.zip | |
Adding metadata
Diffstat (limited to 'dev-cpp/eigen')
26 files changed, 4924 insertions, 0 deletions
diff --git a/dev-cpp/eigen/Manifest b/dev-cpp/eigen/Manifest new file mode 100644 index 000000000000..e78035ce5e3c --- /dev/null +++ b/dev-cpp/eigen/Manifest @@ -0,0 +1,6 @@ +DIST eigen-3.4.0.tar.bz2 2143091 BLAKE2B a32aac13cbab68cfaaa252d8a406e6a36ecfd1239361412b1f9baa08284a94467479c08ffae10cb847e9916472b46b1c1af4efbf81f957c8200a4379acd42c42 SHA512 cc488eb111e0e248744d2bc4475b345b5fb82361dff226a5b73a33bd0388de8c219cff8cffcf8f476b672fc0e223f339e8c6a1cfb6293840a4a6abf232438a89 +DIST eigen-3.4.1.tar.bz2 2157363 BLAKE2B 382fcebd716d81019c4606974f8db22234ff34c415d465eb5cf9dbab34d4fa9bca7a3ae6ef64a7eca627cdbacb35fdac862005b0a14ec2d851831246f879f374 SHA512 806be7536f811eb77898a9431eac4fe446fbdd41c2a33ebe30e56750920c105e24bc41d8cbb4a5c01ee770ded9c58f06ff37058d17c6e2301bc9021a864bb549 +DIST eigen-3.4.1_p1.patch 1007 BLAKE2B 0a2af4c2cd8fc423535e046919fe7f931e9b718df1ff799ccc451139c084a344988fc8d1277fd1970827051ce1fcae5512222310fea00a9f1a654f3b1cffbec8 SHA512 ec3f6c78c19544f9a4f2c52e069b573eb633d67998acdd7d74e9769102ec9dfdbf68fca1492002ed0ec6b3e9a25637afa9978cfb80dd3e3f9aa0e1a34ac64534 +DIST eigen-3.4.1_p2.patch 1054 BLAKE2B b46683962764a9dd560932e2230177f91e56d9e4b48ce7de79cad5743b59050aafde4f2da1db961adfb5228ac17f477e598cdf23c4150fa254d2640e4fff3a6d SHA512 bdcd4599ccb88f0599aa74fd5a73135dcc5bb9ad0bc2791517473a48f938bb784e62376e829b8b5b3d6f5149bc8874bf77655c1bfe63f86afbc151c2c86d6732 +DIST eigen-5.0.1.tar.bz2 2335713 BLAKE2B a7ccf9fc63b25b0e5ad8940ccf541cf4977a80ded671757ae1965cd0ca480fd11361de8eaf18cae94a74cde68979a76f5a18b47b696cdd6939b6cf30922e5fd4 SHA512 5cb11c7f1945ae7f36c5deb067b8d5a962d2d3cff7d4dbec8a4ee255ee6aae1b7dbe6d5a6dcc6fe77554ef191e4101366bf79cfb34f5cf06a0e4de311afbeaf6 +DIST eigen-lapack_addons-3.4.1.tgz 6215074 BLAKE2B 564c3398de1f4ea249b58957a482cda0b5eb99e5021e1f18abf3b4d2893fed48912bfa8386681fcae03dd933eea91644f7429d47a53684d64462209a6ae76f30 SHA512 5a827d0befb521cb430f0d63f5000e7955359bc637cdb7292d942712e98c0702570a5b650a72fc609bf5b43633661c0e51de7761ae892df6ff0aab667f436edf diff --git a/dev-cpp/eigen/eigen-3.4.0-r3.ebuild b/dev-cpp/eigen/eigen-3.4.0-r3.ebuild new file mode 100644 index 000000000000..21f9174b1ab0 --- /dev/null +++ b/dev-cpp/eigen/eigen-3.4.0-r3.ebuild @@ -0,0 +1,458 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +FORTRAN_NEEDED="test" +inherit cmake cuda fortran-2 llvm toolchain-funcs + +DESCRIPTION="C++ template library for linear algebra" +HOMEPAGE="https://eigen.tuxfamily.org/index.php?title=Main_Page" + +if [[ ${PV} = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://gitlab.com/lib${PN}/${PN}.git" + if [[ ${PV} = 3.4.9999* ]] ; then + EGIT_BRANCH="3.4" + fi +else + SRC_URI=" + https://gitlab.com/lib${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2 + test? ( lapack? ( https://downloads.tuxfamily.org/${PN}/lapack_addons_3.4.1.tgz -> ${PN}-lapack_addons-3.4.1.tgz ) ) + " + KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~arm64-macos ~x64-macos" +fi + +LICENSE="MPL-2.0" +SLOT="3" + +# The following lines are shamelessly stolen from ffmpeg-9999.ebuild with modifications +ARM_CPU_FEATURES=( + neon:NEON +) +PPC_CPU_FEATURES=( + altivec:ALTIVEC + vsx:VSX +) +X86_CPU_FEATURES=( + avx:AVX + avx2:AVX2 + avx512f:AVX512 + avx512dq:AVX512DQ + f16c:FP16C + fma3:FMA + popcnt:POPCNT + sse:SSE + sse2:SSE2 + sse3:SSE3 + ssse3:SSSE3 + sse4_1:SSE4_1 + sse4_2:SSE4_2 +) +# MIPS_CPU_FEATURES=( +# msa:MSA +# ) +# S390_CPU_FEATURES=( +# z13:Z13 +# z14:Z14 +# ) + +CPU_FEATURES_MAP=( + "${ARM_CPU_FEATURES[@]/#/cpu_flags_arm_}" + "${PPC_CPU_FEATURES[@]/#/cpu_flags_ppc_}" + "${X86_CPU_FEATURES[@]/#/cpu_flags_x86_}" + # "${MIPS_CPU_FEATURES[@]/#/cpu_flags_mips_}" + # "${S390_CPU_FEATURES[@]/#/cpu_flags_s390_}" +) + +IUSE_TEST_BACKENDS=( + "adolc" + "boost" + "cholmod" + "fftw" + "klu" + "opengl" + "openmp" + "pastix" + "sparsehash" + "spqr" + "superlu" + "umfpack" +) + +IUSE="${CPU_FEATURES_MAP[*]%:*} clang cuda hip debug doc lapack mathjax test ${IUSE_TEST_BACKENDS[*]}" #zvector + +REQUIRED_USE=" + test? ( !lapack ) + || ( ${IUSE_TEST_BACKENDS[*]} ) +" + +# Tests failing again because of compiler issues; bugs #932646, #943401 +RESTRICT="test !test? ( test )" + +BDEPEND=" + doc? ( + app-text/doxygen[dot] + dev-texlive/texlive-bibtexextra + dev-texlive/texlive-fontsextra + dev-texlive/texlive-fontutils + dev-texlive/texlive-latex + dev-texlive/texlive-latexextra + mathjax? ( dev-libs/mathjax ) + ) + test? ( virtual/pkgconfig ) +" + +# METIS +# MPREAL +# dev-libs/mpfr:0 +# dev-libs/gmp:0 + +TEST_BACKENDS=" + boost? ( dev-libs/boost ) + adolc? ( sci-libs/adolc[sparse] ) + cholmod? ( sci-libs/cholmod:= ) + fftw? ( sci-libs/fftw ) + spqr? ( sci-libs/spqr ) + klu? ( sci-libs/klu ) + opengl? ( + media-libs/freeglut + media-libs/glew + media-libs/libglvnd + ) + pastix? ( sci-libs/pastix[-mpi] ) + sparsehash? ( + amd64? ( dev-cpp/sparsehash ) + arm64? ( dev-cpp/sparsehash ) + ppc64? ( dev-cpp/sparsehash ) + x86? ( dev-cpp/sparsehash ) + ) + superlu? ( sci-libs/superlu ) + umfpack? ( sci-libs/umfpack ) +" +DEPEND=" + test? ( + cuda? ( + !clang? ( + dev-util/nvidia-cuda-toolkit + ) + clang? ( + llvm-core/clang[llvm_targets_NVPTX] + openmp? ( llvm-runtimes/openmp[llvm_targets_NVPTX,offload] ) + ) + ) + hip? ( dev-util/hip ) + lapack? ( virtual/lapacke ) + ${TEST_BACKENDS} + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-3.3.9-max-macro.patch" + "${FILESDIR}/${PN}-3.4.0-doc-nocompress.patch" # bug 830064 + "${FILESDIR}/${PN}-3.4.0-buildstring.patch" + "${FILESDIR}/${PN}-3.4.0-noansi.patch" + "${FILESDIR}/${PN}-3.4.0-cxxstandard.patch" + "${FILESDIR}/${PN}-3.4.0-ppc-no-vsx.patch" # bug 936107 +) + +# TODO should be in cuda.eclass +cuda_set_CUDAHOSTCXX() { + local compiler + tc-is-gcc && compiler="gcc" + tc-is-clang && compiler="clang" + [[ -z "$compiler" ]] && die "no compiler specified" + + local package="sys-devel/${compiler}" + local version="${package}" + local CUDAHOSTCXX_test + while + CUDAHOSTCXX="${CUDAHOSTCXX_test}" + version=$(best_version "${version}") + if [[ -z "${version}" ]]; then + if [[ -z "${CUDAHOSTCXX}" ]]; then + die "could not find supported version of ${package}" + fi + break + fi + CUDAHOSTCXX_test="$( + dirname "$( + realpath "$( + which "${compiler}-$(echo "${version}" | grep -oP "(?<=${package}-)[0-9]*")" + )" + )" + )" + version="<${version}" + do ! echo "int main(){}" | nvcc "-ccbin ${CUDAHOSTCXX_test}" - -x cu &>/dev/null; done + + export CUDAHOSTCXX +} + +pkg_setup() { + use test && use cuda && use clang && llvm_pkg_setup +} + +src_unpack() { + if [[ ${PV} = *9999* ]] ; then + git-r3_src_unpack + else + unpack "${P}.tar.bz2" + + if use test && use lapack; then + cd "${S}/lapack" || die + unpack "${PN}-lapack_addons-3.4.1.tgz" + fi + fi +} + +src_prepare() { + cmake_src_prepare + + sed \ + -e "/add_subdirectory(bench\/spbench/s/^/#DONOTCOMPILE /g" \ + -e "/add_subdirectory(demos/s/^/#DONOTCOMPILE /g" \ + -i CMakeLists.txt || die + + if ! use test; then + sed \ + -e "/add_subdirectory(test/s/^/#DONOTCOMPILE /g" \ + -e "/add_subdirectory(scripts/s/^/#DONOTCOMPILE /g" \ + -e "/add_subdirectory(failtest/s/^/#DONOTCOMPILE /g" \ + -e "/add_subdirectory(blas/s/^/#DONOTCOMPILE /g" \ + -e "/add_subdirectory(lapack/s/^/#DONOTCOMPILE /g" \ + -i CMakeLists.txt || die + fi +} + +src_configure() { + local mycmakeargs=( + -DBUILD_SHARED_LIBS="yes" + -DBUILD_TESTING="$(usex test)" + + -DEIGEN_BUILD_DOC="$(usex doc)" # Enable creation of Eigen documentation + -DEIGEN_BUILD_PKGCONFIG="yes" # Build pkg-config .pc file for Eigen + ) + if use doc || use test; then + mycmakeargs+=( + # needs Qt4 + -DEIGEN_TEST_NOQT="yes" # Disable Qt support in unit tests + ) + fi + + if use doc; then + mycmakeargs+=( + -DEIGEN_DOC_USE_MATHJAX="$(usex mathjax)" # Use MathJax for rendering math in HTML docs + -DEIGEN_INTERNAL_DOCUMENTATION=no # Build internal documentation + ) + fi + + if use test; then + mycmakeargs+=( + # the OpenGL testsuite is extremely brittle, bug #712808 + -DOpenGL_GL_PREFERENCE="GLVND" + -DEIGEN_TEST_OPENGL="$(usex opengl)" # Enable OpenGL support in unit tests + -DEIGEN_TEST_OPENMP="$(usex openmp)" # Enable/Disable OpenMP in tests/examples + + -DCMAKE_DISABLE_FIND_PACKAGE_MPREAL=ON + + -DEIGEN_TEST_CXX11=yes + + # -DEIGEN_TEST_CUSTOM_CXX_FLAGS= # Additional compiler flags when compiling unit tests. + # -DEIGEN_TEST_CUSTOM_LINKER_FLAGS= # Additional linker flags when linking unit tests. + # -DEIGEN_TEST_BUILD_FLAGS= # Options passed to the build command of unit tests + + # -DEIGEN_BUILD_BTL=yes # Build benchmark suite + + -DEIGEN_TEST_BUILD_DOCUMENTATION="$(usex doc)" # Test building the doxygen documentation + + # -DEIGEN_COVERAGE_TESTING=no # Enable/disable gcov + # -DEIGEN_CTEST_ERROR_EXCEPTION= # Regular expression for build error messages to be filtered out + # -DEIGEN_DEBUG_ASSERTS=no # Enable advanced debugging of assertions + # -DEIGEN_NO_ASSERTION_CHECKING=no # Disable checking of assertions using exceptions + # -DEIGEN_TEST_NO_EXCEPTIONS=no # Disables C++ exceptions + # -DEIGEN_TEST_NO_EXPLICIT_ALIGNMENT=no # Disable explicit alignment (hence vectorization) in tests/examples + # -DEIGEN_TEST_NO_EXPLICIT_VECTORIZATION=no # Disable explicit vectorization in tests/examples + + # -DEIGEN_DASHBOARD_BUILD_TARGET=buildtests # Target to be built in dashboard mode, default is buildtests + + # -DEIGEN_DEFAULT_TO_ROW_MAJOR=no # Use row-major as default matrix storage order + + # -DEIGEN_TEST_MATRIX_DIR=yes # Enable testing of realword sparse matrices contained in the specified path + # -DEIGEN_TEST_MAX_SIZE=320 # Maximal matrix/vector size, default is 320 + # -DEIGEN_SPLIT_LARGE_TESTS=no # Split large tests into smaller executables + ) + + use !adolc && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_Adolc="TRUE" ) + use !boost && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_Boost="TRUE" ) + use !cholmod && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_CHOLMOD="TRUE" ) + use !fftw && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_FFTW="TRUE" ) + use !sparsehash && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_GoogleHash="TRUE" ) + use !klu && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_KLU="TRUE" ) + use !opengl && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_OpenGL="TRUE" ) + use !openmp && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_OpenMP="TRUE" ) + use !pastix && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_PASTIX="TRUE" ) + use !spqr && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_SPQR="TRUE" ) + use !superlu && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_SuperLU="TRUE" ) + use !umfpack && mycmakeargs+=( -DCMAKE_DISABLE_FIND_PACKAGE_UMFPACK="TRUE" ) + + if use lapack; then + mycmakeargs+=( + -DEIGEN_ENABLE_LAPACK_TESTS=yes + -DEIGEN_TEST_EXTERNAL_BLAS=yes # Use external BLAS library for testsuite + -DCMAKE_DISABLE_FIND_PACKAGE_SuperLU=ON + ) + fi + + if use arm; then + mycmakeargs+=( + -DEIGEN_TEST_NEON="$(usex cpu_flags_arm_neon)" + ) + fi + + if use arm64; then + mycmakeargs+=( + -DEIGEN_TEST_NEON64="$(usex cpu_flags_arm_neon)" + ) + fi + + if use ppc || use ppc64; then + mycmakeargs+=( + -DEIGEN_TEST_ALTIVEC="$(usex cpu_flags_ppc_altivec)" + -DEIGEN_TEST_VSX="$(usex cpu_flags_ppc_vsx)" + ) + fi + + if use amd64 || use x86; then + mycmakeargs+=( + # -DEIGEN_TEST_32BIT=no # Force generating 32bit code. + # -DEIGEN_TEST_X87=no # Force using X87 instructions. Implies no vectorization. + -DEIGEN_TEST_SSE2="$(usex cpu_flags_x86_sse2)" + -DEIGEN_TEST_SSE3="$(usex cpu_flags_x86_sse3)" + -DEIGEN_TEST_SSSE3="$(usex cpu_flags_x86_ssse3)" + -DEIGEN_TEST_FMA="$(usex cpu_flags_x86_fma3)" + -DEIGEN_TEST_SSE4_1="$(usex cpu_flags_x86_sse4_1)" + -DEIGEN_TEST_SSE4_2="$(usex cpu_flags_x86_sse4_2)" + -DEIGEN_TEST_AVX="$(usex cpu_flags_x86_avx)" + -DEIGEN_TEST_F16C="$(usex cpu_flags_x86_f16c)" + -DEIGEN_TEST_AVX2="$(usex cpu_flags_x86_avx2)" + -DEIGEN_TEST_AVX512="$(usex cpu_flags_x86_avx512f)" + -DEIGEN_TEST_AVX512DQ="$(usex cpu_flags_x86_avx512dq)" + ) + fi + + if use mips; then + mycmakeargs+=( + # -DEIGEN_TEST_MSA=no # Enable/Disable MSA in tests/examples + ) + fi + + if use s390; then + mycmakeargs+=( + # -DEIGEN_TEST_Z13=no # Enable/Disable S390X(zEC13) ZVECTOR in tests/examples + # -DEIGEN_TEST_Z14=no # Enable/Disable S390X(zEC14) ZVECTOR in tests/examples + ) + fi + + mycmakeargs+=( + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL=no # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL=no # Use the triSYCL Sycl implementation (ComputeCPP by default). + ) + + if use cuda; then + cuda_add_sandbox -w + if use clang; then + local llvm_prefix + llvm_prefix="$(get_llvm_prefix -b)" + export CC="${llvm_prefix}/bin/clang" + export CXX="${llvm_prefix}/bin/clang++" + export LIBRARY_PATH="${ESYSROOT}/usr/$(get_libdir)" + else + cuda_set_CUDAHOSTCXX + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" + ) + fi + if [[ "${CUDA_VERBOSE}" == true ]]; then + mycmakeargs+=( + -DCUDA_VERBOSE_BUILD=yes + ) + NVCCFLAGS+=" -v" + fi + + export CUDAFLAGS="${NVCCFLAGS}" + + [[ -z "${CUDAARCHS}" ]] && einfo "trying to determine host CUDAARCHS" + : "${CUDAARCHS:=$(__nvcc_device_query)}" + export CUDAARCHS + + mycmakeargs+=( + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + fi + + cmake_src_configure +} + +src_compile() { + local targets=() + if use doc; then + targets+=( doc ) + HTML_DOCS=( "${BUILD_DIR}"/doc/html/. ) + fi + if use test; then + targets+=( buildtests ) + if ! use lapack; then + targets+=( blas ) + fi + # tests generate random data, which + # obviously fails for some seeds + export EIGEN_SEED=712808 + fi + + if use doc || use test; then + cmake_src_compile "${targets[@]}" + fi +} + +src_test() { + CMAKE_SKIP_TESTS=( + product_small_32 # 143 (Subprocess aborted) + product_small_33 # 144 (Subprocess aborted) + + eigensolver_selfadjoint_13 # 452 (Subprocess aborted) + + cholmod_support_21 # 726 (Subprocess aborted) + cholmod_support_22 # 727 (Subprocess aborted) + + NonLinearOptimization # 930 (Subprocess aborted) + openglsupport # 990 (Failed) + levenberg_marquardt # 1020 (Subprocess aborted) + ) + + if use cuda ; then + cuda_add_sandbox -w + + CMAKE_SKIP_TESTS+=( + cxx11_tensor_cast_float16_gpu + cxx11_tensor_gpu_5 + ) + fi + + if use lapack ; then + CMAKE_SKIP_TESTS+=( + "^LAPACK-.*$" + ) + fi + + local myctestargs=( + -j1 # otherwise breaks due to cmake reruns + ) + + cmake_src_test +} diff --git a/dev-cpp/eigen/eigen-3.4.1.ebuild b/dev-cpp/eigen/eigen-3.4.1.ebuild new file mode 100644 index 000000000000..65f1b42f809f --- /dev/null +++ b/dev-cpp/eigen/eigen-3.4.1.ebuild @@ -0,0 +1,651 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LLVM_COMPAT=( {21..23} ) +LLVM_OPTIONAL="cuda-clang" + +PYTHON_COMPAT=( python3_{13..14} ) + +FORTRAN_NEEDED="no" + +LAPACK_ADDONS_PV="3.4.1" + +inherit cmake cuda flag-o-matic fortran-2 llvm-r2 python-any-r1 toolchain-funcs virtualx + +DESCRIPTION="C++ template library for linear algebra" +HOMEPAGE="https://eigen.tuxfamily.org/index.php?title=Main_Page" + +if [[ ${PV} = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://gitlab.com/lib${PN}/${PN}.git" + if [[ ${PV} = *.9999* ]] ; then + EGIT_BRANCH="$(ver_cut 1-2)" + fi +else + # we backport two patches from the 3.4 branch + SRC_URI=" + https://gitlab.com/lib${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2 + https://gitlab.com/libeigen/eigen/-/commit/0295f81a835ef69e2bacd9e75ab5782eca398720.patch -> ${P}_p1.patch + https://gitlab.com/libeigen/eigen/-/commit/28ded8800c26864e537852658428ab44c8399e87.patch -> ${P}_p2.patch + " + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos" +fi + +SRC_URI+=" + test? ( + lapack? ( + https://downloads.tuxfamily.org/${PN}/lapack_addons_${LAPACK_ADDONS_PV}.tgz + -> ${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz + ) + ) +" + +LICENSE="MPL-2.0" +SLOT="3/$(ver_cut 1-2)" + +# The following lines are shamelessly stolen from ffmpeg-9999.ebuild with modifications +ARM_CPU_FEATURES=( + neon:NEON +) +PPC_CPU_FEATURES=( + altivec:ALTIVEC + vsx:VSX +) +X86_CPU_FEATURES=( + avx:AVX + avx2:AVX2 + avx512f:AVX512 + avx512dq:AVX512DQ + f16c:FP16C + fma3:FMA + popcnt:POPCNT + sse:SSE + sse2:SSE2 + sse3:SSE3 + ssse3:SSSE3 + sse4_1:SSE4_1 + sse4_2:SSE4_2 +) +# MIPS_CPU_FEATURES=( +# msa:MSA +# ) +# S390_CPU_FEATURES=( +# z13:Z13 +# z14:Z14 +# ) + +CPU_FEATURES_MAP=( + "${ARM_CPU_FEATURES[@]/#/cpu_flags_arm_}" + "${PPC_CPU_FEATURES[@]/#/cpu_flags_ppc_}" + "${X86_CPU_FEATURES[@]/#/cpu_flags_x86_}" + # "${MIPS_CPU_FEATURES[@]/#/cpu_flags_mips_}" + # "${S390_CPU_FEATURES[@]/#/cpu_flags_s390_}" +) + +IUSE_TEST_BACKENDS=( + "adolc" + "boost" + "cholmod" + "fftw" + "klu" + "metis" + "opengl" + "pastix" + "pocketfft" + "sparsehash" + "spqr" + "superlu" + "umfpack" +) + +IUSE=" + debug + blas lapack + ${CPU_FEATURES_MAP[*]%:*} + cuda cuda-clang hip + doc mathjax + openmp + test ${IUSE_TEST_BACKENDS[*]} +" +# zvector + +REQUIRED_USE=" + lapack? ( + blas + ) + test? ( + || ( ${IUSE_TEST_BACKENDS[*]} ) + cuda-clang? ( + !openmp + ${LLVM_REQUIRED_USE} + ) + ) +" + +# Tests failing again because of compiler issues; bugs #932646, #943401 +RESTRICT="!test? ( test )" +FORTRAN_DEPEND="virtual/fortran" + +BDEPEND=" + doc? ( + app-text/doxygen[dot] + dev-texlive/texlive-bibtexextra + dev-texlive/texlive-fontsextra + dev-texlive/texlive-fontutils + dev-texlive/texlive-latex + dev-texlive/texlive-latexextra + mathjax? ( dev-libs/mathjax ) + ) + test? ( + virtual/pkgconfig + lapack? ( + ${PYTHON_DEPS} + ) + spqr? ( + cholmod? ( + blas? ( + lapack? ( + ${FORTRAN_DEPEND} + ) + ) + ) + ) + pastix? ( ${FORTRAN_DEPEND} ) + ) + blas? ( ${FORTRAN_DEPEND} ) + lapack? ( ${FORTRAN_DEPEND} ) +" + +TEST_BACKENDS=" + adolc? ( sci-libs/adolc[sparse] ) + boost? ( dev-libs/boost ) + cholmod? ( sci-libs/cholmod:=[cuda?] ) + fftw? ( sci-libs/fftw[openmp?] ) + klu? ( sci-libs/klu:= ) + metis? ( + sci-libs/metis[openmp?] + sci-libs/pastix[metis] + ) + opengl? ( + media-libs/freeglut + media-libs/glew + media-libs/libglvnd + ) + pastix? ( + sci-libs/pastix[-mpi] + || ( + sci-libs/pastix[scotch] + sci-libs/pastix[metis] + ) + ) + pocketfft? ( dev-libs/pocketfft ) + sparsehash? ( + amd64? ( dev-cpp/sparsehash ) + arm64? ( dev-cpp/sparsehash ) + ppc64? ( dev-cpp/sparsehash ) + x86? ( dev-cpp/sparsehash ) + ) + spqr? ( sci-libs/spqr:= ) + superlu? ( sci-libs/superlu:= ) + umfpack? ( sci-libs/umfpack:= ) +" + +DEPEND=" + test? ( + cuda? ( + !cuda-clang? ( + dev-util/nvidia-cuda-toolkit + ) + cuda-clang? ( + $(llvm_gen_dep ' + llvm-core/clang:${LLVM_SLOT} + llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp] + ') + ) + ) + hip? ( dev-util/hip ) + !blas? ( + virtual/blas + !lapack? ( + virtual/lapacke + ) + ) + ${TEST_BACKENDS} + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-3.3.9-max-macro.patch" + "${FILESDIR}/${PN}-3.4.0-doc-nocompress.patch" # bug 830064 + "${FILESDIR}/${PN}-3.4.0-buildstring.patch" + "${FILESDIR}/${PN}-3.4.1-cxxstandard-17.patch" + + "${FILESDIR}/${PN}-3.4.0-c++-20.patch" + + "${FILESDIR}/${PN}-3.4.1-bug1213-link-with-Eigen3-Eigen.patch" + + "${FILESDIR}/${PN}-5.0.1-cmake-GNUInstallDirs.patch" + "${FILESDIR}/${PN}-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch" + + "${DISTDIR}/${P}_p1.patch" + "${DISTDIR}/${P}_p2.patch" +) + +# TODO should be in cuda.eclass +cuda_get_host_compiler() { + if [[ -n "${NVCC_CCBIN}" ]]; then + echo "${NVCC_CCBIN}" + return + fi + + if [[ -n "${CUDAHOSTCXX}" ]]; then + echo "${CUDAHOSTCXX}" + return + fi + + einfo "Trying to find working CUDA host compiler" + + if ! tc-is-gcc && ! tc-is-clang; then + die "$(tc-get-compiler-type) compiler is not supported" + fi + + local compiler compiler_type compiler_version + local package package_version + local -x NVCC_CCBIN + local NVCC_CCBIN_default + + compiler_type="$(tc-get-compiler-type)" + compiler_version="$("${compiler_type}-major-version")" + + # try the default compiler first + NVCC_CCBIN="$(tc-getCXX)" + NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}" + + compiler="${NVCC_CCBIN/%-${compiler_version}}" + + # store the package so we can re-use it later + package="sys-devel/${compiler_type}" + package_version="${package}" + + ebegin "testing ${NVCC_CCBIN_default} (default)" + + while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do + eend 1 + + while true; do + # prepare next version + if ! package_version="<$(best_version "${package_version}")"; then + die "could not find a supported version of ${compiler}" + fi + + NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")" + + [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break + done + ebegin "testing ${NVCC_CCBIN}" + done + eend $? + + echo "${NVCC_CCBIN}" + export NVCC_CCBIN +} + +pkg_pretend() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi + + if use lapack; then + python-any-r1_pkg_setup + fi + + if { use test && { use spqr && use cholmod && use blas && use lapack; } || use pastix; } \ + || use blas \ + || use lapack \ + ; then + fortran-2_pkg_setup + fi + + if use test && use cuda && use cuda-clang; then + llvm-r2_pkg_setup + fi +} + +src_unpack() { + if [[ ${PV} = *9999* ]] ; then + git-r3_src_unpack + else + unpack "${P}.tar.bz2" + fi + + if use test && use lapack; then + pushd "${S}/lapack" > /dev/null || die + unpack "${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz" + popd > /dev/null || die + fi +} + +src_prepare() { + # run patches here as we patch in test/ + cmake_src_prepare + + if use test && use lapack; then + pushd "${S}" > /dev/null || die + eapply "${FILESDIR}/${PN}-5.0.1-fix-lapack_testing.py.patch" + popd > /dev/null || die + fi +} + +src_configure() { + if use lapack; then + # bug 878987 + # multiple definition of `cgesdd_' + filter-lto + fi + + local mycmakeargs=( + -DCMAKE_CXX_STANDARD="20" + -DCMAKE_POSITION_INDEPENDENT_CODE="yes" + + -DEIGEN_BUILD_TESTING="$(usex test)" # Enable creation of Eigen tests. + + -DEIGEN_BUILD_BLAS="$(usex blas)" # Toggles the building of the Eigen Blas library + -DEIGEN_BUILD_LAPACK="$(usex blas "$(usex lapack)")" # Toggles the building of the included Eigen LAPACK library + + -DEIGEN_BUILD_DOC="$(usex doc)" # Enable creation of Eigen documentation + -DEIGEN_BUILD_PKGCONFIG="yes" # Build pkg-config .pc file for Eigen + ) + + append-cxxflags "-DEIGEN_USE_OPENBLAS_BFLOAT16=0" + + if use blas; then + mycmakeargs+=( + -DBUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_SHARED_LIBS="yes" + ) + + if use lapack; then + mycmakeargs+=( + -DCMAKE_POLICY_DEFAULT_CMP0148="OLD" # FindPythonInterp + -DEIGEN_ENABLE_LAPACK_TESTS="$(usex test)" + ) + fi + fi + + if use doc || use test; then + mycmakeargs+=( + # needs Qt4 + -DEIGEN_TEST_NOQT="yes" # Disable Qt support in unit tests + ) + fi + + if use doc; then + mycmakeargs+=( + -DEIGEN_DOC_USE_MATHJAX="$(usex mathjax)" # Use MathJax for rendering math in HTML docs + -DEIGEN_INTERNAL_DOCUMENTATION=no # Build internal documentation + ) + fi + + if use test; then + mycmakeargs+=( + -DEIGEN_LEAVE_TEST_IN_ALL_TARGET=yes # Leaves tests in the all target, needed by ctest for automatic building + + # the OpenGL testsuite is extremely brittle, bug #712808 + -DEIGEN_TEST_OPENGL="$(usex opengl)" # Enable OpenGL support in unit tests + -DEIGEN_TEST_OPENMP="$(usex openmp)" # Enable/Disable OpenMP in tests/examples + + -DEIGEN_TEST_EXTERNAL_BLAS="$(usex !blas)" # Use external BLAS library for testsuite + + -DEIGEN_TEST_BUILD_DOCUMENTATION="no" # $(usex doc)" # Test building the doxygen documentation + + -DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions + -DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables + + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default). + + $(cmake_use_find_package adolc Adolc) + $(cmake_use_find_package boost Boost) + $(cmake_use_find_package cholmod CHOLMOD) + $(cmake_use_find_package fftw FFTW ) + $(cmake_use_find_package klu KLU) + -DCMAKE_DISABLE_FIND_PACKAGE_MPREAL=yes + # $(cmake_use_find_package opengl OpenGL) # EIGEN_TEST_OPENGL + # $(cmake_use_find_package openmp OpenMP) # EIGEN_TEST_OPENMP + $(cmake_use_find_package pastix PASTIX) + # prevent pastix_nompi.h lookup it no longer exists, we enforce this via deps + -DPASTIX_pastix_nompi.h_INCLUDE_DIRS="FOUND" + + -DPOCKETFFT="$(usex pocketfft)" + $(cmake_use_find_package sparsehash GoogleHash) + $(cmake_use_find_package spqr SPQR) + $(cmake_use_find_package superlu SuperLU) + $(cmake_use_find_package umfpack UMFPACK) + ) + + if use arm; then + mycmakeargs+=( + -DEIGEN_TEST_NEON="$(usex cpu_flags_arm_neon)" + ) + fi + + if use arm64; then + mycmakeargs+=( + -DEIGEN_TEST_NEON64="$(usex cpu_flags_arm_neon)" + ) + fi + + if use amd64 || use x86; then + mycmakeargs+=( + # -DEIGEN_TEST_32BIT=no # Force generating 32bit code. + # -DEIGEN_TEST_X87=no # Force using X87 instructions. Implies no vectorization. + -DEIGEN_TEST_SSE2="$(usex cpu_flags_x86_sse2)" + -DEIGEN_TEST_SSE3="$(usex cpu_flags_x86_sse3)" + -DEIGEN_TEST_SSSE3="$(usex cpu_flags_x86_ssse3)" + -DEIGEN_TEST_FMA="$(usex cpu_flags_x86_fma3)" + -DEIGEN_TEST_SSE4_1="$(usex cpu_flags_x86_sse4_1)" + -DEIGEN_TEST_SSE4_2="$(usex cpu_flags_x86_sse4_2)" + -DEIGEN_TEST_AVX="$(usex cpu_flags_x86_avx)" + -DEIGEN_TEST_F16C="$(usex cpu_flags_x86_f16c)" + -DEIGEN_TEST_AVX2="$(usex cpu_flags_x86_avx2)" + -DEIGEN_TEST_AVX512="$(usex cpu_flags_x86_avx512f)" + -DEIGEN_TEST_AVX512DQ="$(usex cpu_flags_x86_avx512dq)" + ) + fi + + if use mips; then + mycmakeargs+=( + # -DEIGEN_TEST_MSA=no # Enable/Disable MSA in tests/examples + ) + fi + + if use ppc || use ppc64; then + mycmakeargs+=( + -DEIGEN_TEST_ALTIVEC="$(usex cpu_flags_ppc_altivec)" + -DEIGEN_TEST_VSX="$(usex cpu_flags_ppc_vsx)" + ) + fi + + if use s390; then + mycmakeargs+=( + # -DEIGEN_TEST_Z13=no # Enable/Disable S390X(zEC13) ZVECTOR in tests/examples + # -DEIGEN_TEST_Z14=no # Enable/Disable S390X(zEC14) ZVECTOR in tests/examples + ) + fi + + if use cuda; then + cuda_add_sandbox -w + + if use cuda-clang; then + local llvm_prefix + llvm_prefix="$(get_llvm_prefix -b)" + + # NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with + # error: unrecognized command-line option + if ! tc-is-clang; then + export CC="${CHOST}-clang-${LLVM_SLOT}" + export CXX="${CHOST}-clang++-${LLVM_SLOT}" + fi + + NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc" + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}" + ) + else + cuda_get_host_compiler + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" + ) + if [[ -v CUDACXX ]]; then + mycmakeargs+=( + -DCUDA_NVCC_EXECUTABLE="${CUDACXX}" + -DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA + ) + fi + fi + + if [[ "${CUDA_VERBOSE}" == true ]]; then + mycmakeargs+=( + -DCUDA_VERBOSE_BUILD="yes" + ) + NVCCFLAGS+=" -v" + fi + + if [[ -v CUDAARCHS ]]; then + mycmakeargs+=( + # TODO this needs to be lowest first for eigen + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + + # CUDAFLAGS is used by cmake + # NVCCFLAGS is used by cuda.eclass + mycmakeargs+=( + -DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}" + + -DCUDA_USE_STATIC_CUDA_RUNTIME="no" + ) + fi + + if use opengl; then + mycmakeargs+=( + -DOpenGL_GL_PREFERENCE="GLVND" + ) + fi + + if use pocketfft; then + mycmakeargs+=( + -DEIGEN_TEST_CXX11=yes + ) + fi + fi + + cmake_src_configure +} + +src_compile() { + local targets=() + + if use blas; then + targets+=( blas ) + if use lapack; then + targets+=( lapack ) + fi + fi + + if use test; then + targets+=( buildtests ) + + if use cuda || use hip; then + targets+=( buildtests_gpu ) + fi + + # tests generate random data, which fails for some seeds + # we solve this via test reruns now + # export EIGEN_SEED=712808 + fi + + # we add doc last to capture results for buildtests + if use doc; then + targets+=( doc ) + fi + + if [[ -n "${targets[*]}" ]]; then + cmake_src_compile "${targets[@]}" + fi +} + +src_test() { + local CMAKE_SKIP_TESTS=( + "^ref_8$" + ) + + if use cholmod && use blas && use lapack; then + CMAKE_SKIP_TESTS+=( + "^cholmod_support_21$" + "^cholmod_support_22$" + ) + fi + + if use cuda; then + cuda_add_sandbox -w + fi + + if use klu && use blas; then + CMAKE_SKIP_TESTS+=( + "^klu_support_1$" + "^klu_support_2$" + ) + fi + + if use lapack; then + CMAKE_SKIP_TESTS+=( + "^LAPACK-xlintsts_stest_in$" + "^LAPACK-xeigtsts_sep_in$" + "^LAPACK-xeigtsts_svd_in$" + "^LAPACK-xlintstd_dtest_in$" + "^LAPACK-xeigtstd_sep_in$" + "^LAPACK-xeigtstd_svd_in$" + "^LAPACK-xlintstc_ctest_in$" + "^LAPACK-xeigtstc_svd_in$" + ) + fi + + local myctestargs=( + -j1 # otherwise breaks due to cmake reruns + --repeat until-pass:50 + ) + + if use opengl; then + virtx \ + cmake_src_test + else + cmake_src_test + fi +} + +src_install() { + local DOCS=() + cmake_src_install + + if use doc; then + pushd "${BUILD_DIR}/doc" > /dev/null || die + dodoc -r html + popd > /dev/null || die + fi +} diff --git a/dev-cpp/eigen/eigen-3.4.9999.ebuild b/dev-cpp/eigen/eigen-3.4.9999.ebuild new file mode 100644 index 000000000000..0d0b2ca43801 --- /dev/null +++ b/dev-cpp/eigen/eigen-3.4.9999.ebuild @@ -0,0 +1,645 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LLVM_COMPAT=( {21..23} ) +LLVM_OPTIONAL="cuda-clang" + +PYTHON_COMPAT=( python3_{13..14} ) + +FORTRAN_NEEDED="no" + +LAPACK_ADDONS_PV="3.4.1" + +inherit cmake cuda flag-o-matic fortran-2 llvm-r2 python-any-r1 toolchain-funcs virtualx + +DESCRIPTION="C++ template library for linear algebra" +HOMEPAGE="https://eigen.tuxfamily.org/index.php?title=Main_Page" + +if [[ ${PV} = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://gitlab.com/lib${PN}/${PN}.git" + if [[ ${PV} = *.9999* ]] ; then + EGIT_BRANCH="$(ver_cut 1-2)" + fi +else + SRC_URI=" + https://gitlab.com/lib${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2 + " + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos" +fi + +SRC_URI+=" + test? ( + lapack? ( + https://downloads.tuxfamily.org/${PN}/lapack_addons_${LAPACK_ADDONS_PV}.tgz + -> ${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz + ) + ) +" + +LICENSE="MPL-2.0" +SLOT="3/$(ver_cut 1-2)" + +# The following lines are shamelessly stolen from ffmpeg-9999.ebuild with modifications +ARM_CPU_FEATURES=( + neon:NEON +) +PPC_CPU_FEATURES=( + altivec:ALTIVEC + vsx:VSX +) +X86_CPU_FEATURES=( + avx:AVX + avx2:AVX2 + avx512f:AVX512 + avx512dq:AVX512DQ + f16c:FP16C + fma3:FMA + popcnt:POPCNT + sse:SSE + sse2:SSE2 + sse3:SSE3 + ssse3:SSSE3 + sse4_1:SSE4_1 + sse4_2:SSE4_2 +) +# MIPS_CPU_FEATURES=( +# msa:MSA +# ) +# S390_CPU_FEATURES=( +# z13:Z13 +# z14:Z14 +# ) + +CPU_FEATURES_MAP=( + "${ARM_CPU_FEATURES[@]/#/cpu_flags_arm_}" + "${PPC_CPU_FEATURES[@]/#/cpu_flags_ppc_}" + "${X86_CPU_FEATURES[@]/#/cpu_flags_x86_}" + # "${MIPS_CPU_FEATURES[@]/#/cpu_flags_mips_}" + # "${S390_CPU_FEATURES[@]/#/cpu_flags_s390_}" +) + +IUSE_TEST_BACKENDS=( + "adolc" + "boost" + "cholmod" + "fftw" + "klu" + "metis" + "opengl" + "pastix" + "pocketfft" + "sparsehash" + "spqr" + "superlu" + "umfpack" +) + +IUSE=" + debug + blas lapack + ${CPU_FEATURES_MAP[*]%:*} + cuda cuda-clang hip + doc mathjax + openmp + test ${IUSE_TEST_BACKENDS[*]} +" +# zvector + +REQUIRED_USE=" + lapack? ( + blas + ) + test? ( + || ( ${IUSE_TEST_BACKENDS[*]} ) + cuda-clang? ( + !openmp + ${LLVM_REQUIRED_USE} + ) + ) +" + +# Tests failing again because of compiler issues; bugs #932646, #943401 +RESTRICT="!test? ( test )" +FORTRAN_DEPEND="virtual/fortran" + +BDEPEND=" + doc? ( + app-text/doxygen[dot] + dev-texlive/texlive-bibtexextra + dev-texlive/texlive-fontsextra + dev-texlive/texlive-fontutils + dev-texlive/texlive-latex + dev-texlive/texlive-latexextra + mathjax? ( dev-libs/mathjax ) + ) + test? ( + virtual/pkgconfig + lapack? ( + ${PYTHON_DEPS} + ) + spqr? ( + cholmod? ( + blas? ( + lapack? ( + ${FORTRAN_DEPEND} + ) + ) + ) + ) + pastix? ( ${FORTRAN_DEPEND} ) + ) + blas? ( ${FORTRAN_DEPEND} ) + lapack? ( ${FORTRAN_DEPEND} ) +" + +TEST_BACKENDS=" + adolc? ( sci-libs/adolc[sparse] ) + boost? ( dev-libs/boost ) + cholmod? ( sci-libs/cholmod:=[cuda?] ) + fftw? ( sci-libs/fftw[openmp?] ) + klu? ( sci-libs/klu:= ) + metis? ( + sci-libs/metis[openmp?] + sci-libs/pastix[metis] + ) + opengl? ( + media-libs/freeglut + media-libs/glew + media-libs/libglvnd + ) + pastix? ( + sci-libs/pastix[-mpi] + || ( + sci-libs/pastix[scotch] + sci-libs/pastix[metis] + ) + ) + pocketfft? ( dev-libs/pocketfft ) + sparsehash? ( + amd64? ( dev-cpp/sparsehash ) + arm64? ( dev-cpp/sparsehash ) + ppc64? ( dev-cpp/sparsehash ) + x86? ( dev-cpp/sparsehash ) + ) + spqr? ( sci-libs/spqr:= ) + superlu? ( sci-libs/superlu:= ) + umfpack? ( sci-libs/umfpack:= ) +" + +DEPEND=" + test? ( + cuda? ( + !cuda-clang? ( + dev-util/nvidia-cuda-toolkit + ) + cuda-clang? ( + $(llvm_gen_dep ' + llvm-core/clang:${LLVM_SLOT} + llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp] + ') + ) + ) + hip? ( dev-util/hip ) + !blas? ( + virtual/blas + !lapack? ( + virtual/lapacke + ) + ) + ${TEST_BACKENDS} + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-3.3.9-max-macro.patch" + "${FILESDIR}/${PN}-3.4.0-doc-nocompress.patch" # bug 830064 + "${FILESDIR}/${PN}-3.4.0-buildstring.patch" + "${FILESDIR}/${PN}-3.4.1-cxxstandard-17.patch" + + "${FILESDIR}/${PN}-3.4.0-c++-20.patch" + + "${FILESDIR}/${PN}-3.4.1-bug1213-link-with-Eigen3-Eigen.patch" + + "${FILESDIR}/${PN}-5.0.1-cmake-GNUInstallDirs.patch" + "${FILESDIR}/${PN}-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch" +) + +# TODO should be in cuda.eclass +cuda_get_host_compiler() { + if [[ -n "${NVCC_CCBIN}" ]]; then + echo "${NVCC_CCBIN}" + return + fi + + if [[ -n "${CUDAHOSTCXX}" ]]; then + echo "${CUDAHOSTCXX}" + return + fi + + einfo "Trying to find working CUDA host compiler" + + if ! tc-is-gcc && ! tc-is-clang; then + die "$(tc-get-compiler-type) compiler is not supported" + fi + + local compiler compiler_type compiler_version + local package package_version + local -x NVCC_CCBIN + local NVCC_CCBIN_default + + compiler_type="$(tc-get-compiler-type)" + compiler_version="$("${compiler_type}-major-version")" + + # try the default compiler first + NVCC_CCBIN="$(tc-getCXX)" + NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}" + + compiler="${NVCC_CCBIN/%-${compiler_version}}" + + # store the package so we can re-use it later + package="sys-devel/${compiler_type}" + package_version="${package}" + + ebegin "testing ${NVCC_CCBIN_default} (default)" + + while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do + eend 1 + + while true; do + # prepare next version + if ! package_version="<$(best_version "${package_version}")"; then + die "could not find a supported version of ${compiler}" + fi + + NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")" + + [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break + done + ebegin "testing ${NVCC_CCBIN}" + done + eend $? + + echo "${NVCC_CCBIN}" + export NVCC_CCBIN +} + +pkg_pretend() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi + + if use lapack; then + python-any-r1_pkg_setup + fi + + if { use test && { use spqr && use cholmod && use blas && use lapack; } || use pastix; } \ + || use blas \ + || use lapack \ + ; then + fortran-2_pkg_setup + fi + + if use test && use cuda && use cuda-clang; then + llvm-r2_pkg_setup + fi +} + +src_unpack() { + if [[ ${PV} = *9999* ]] ; then + git-r3_src_unpack + else + unpack "${P}.tar.bz2" + fi + + if use test && use lapack; then + pushd "${S}/lapack" > /dev/null || die + unpack "${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz" + popd > /dev/null || die + fi +} + +src_prepare() { + # run patches here as we patch in test/ + cmake_src_prepare + + if use test && use lapack; then + pushd "${S}" > /dev/null || die + eapply "${FILESDIR}/${PN}-5.0.1-fix-lapack_testing.py.patch" + popd > /dev/null || die + fi +} + +src_configure() { + if use lapack; then + # bug 878987 + # multiple definition of `cgesdd_' + filter-lto + fi + + local mycmakeargs=( + -DCMAKE_CXX_STANDARD="20" + -DCMAKE_POSITION_INDEPENDENT_CODE="yes" + + -DEIGEN_BUILD_TESTING="$(usex test)" # Enable creation of Eigen tests. + + -DEIGEN_BUILD_BLAS="$(usex blas)" # Toggles the building of the Eigen Blas library + -DEIGEN_BUILD_LAPACK="$(usex blas "$(usex lapack)")" # Toggles the building of the included Eigen LAPACK library + + -DEIGEN_BUILD_DOC="$(usex doc)" # Enable creation of Eigen documentation + -DEIGEN_BUILD_PKGCONFIG="yes" # Build pkg-config .pc file for Eigen + ) + + append-cxxflags "-DEIGEN_USE_OPENBLAS_BFLOAT16=0" + + if use blas; then + mycmakeargs+=( + -DBUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_SHARED_LIBS="yes" + ) + + if use lapack; then + mycmakeargs+=( + -DCMAKE_POLICY_DEFAULT_CMP0148="OLD" # FindPythonInterp + -DEIGEN_ENABLE_LAPACK_TESTS="$(usex test)" + ) + fi + fi + + if use doc || use test; then + mycmakeargs+=( + # needs Qt4 + -DEIGEN_TEST_NOQT="yes" # Disable Qt support in unit tests + ) + fi + + if use doc; then + mycmakeargs+=( + -DEIGEN_DOC_USE_MATHJAX="$(usex mathjax)" # Use MathJax for rendering math in HTML docs + -DEIGEN_INTERNAL_DOCUMENTATION=no # Build internal documentation + ) + fi + + if use test; then + mycmakeargs+=( + -DEIGEN_LEAVE_TEST_IN_ALL_TARGET=yes # Leaves tests in the all target, needed by ctest for automatic building + + # the OpenGL testsuite is extremely brittle, bug #712808 + -DEIGEN_TEST_OPENGL="$(usex opengl)" # Enable OpenGL support in unit tests + -DEIGEN_TEST_OPENMP="$(usex openmp)" # Enable/Disable OpenMP in tests/examples + + -DEIGEN_TEST_EXTERNAL_BLAS="$(usex !blas)" # Use external BLAS library for testsuite + + -DEIGEN_TEST_BUILD_DOCUMENTATION="no" # $(usex doc)" # Test building the doxygen documentation + + -DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions + -DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables + + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default). + + $(cmake_use_find_package adolc Adolc) + $(cmake_use_find_package boost Boost) + $(cmake_use_find_package cholmod CHOLMOD) + $(cmake_use_find_package fftw FFTW ) + $(cmake_use_find_package klu KLU) + -DCMAKE_DISABLE_FIND_PACKAGE_MPREAL=yes + # $(cmake_use_find_package opengl OpenGL) # EIGEN_TEST_OPENGL + # $(cmake_use_find_package openmp OpenMP) # EIGEN_TEST_OPENMP + $(cmake_use_find_package pastix PASTIX) + # prevent pastix_nompi.h lookup it no longer exists, we enforce this via deps + -DPASTIX_pastix_nompi.h_INCLUDE_DIRS="FOUND" + + -DPOCKETFFT="$(usex pocketfft)" + $(cmake_use_find_package sparsehash GoogleHash) + $(cmake_use_find_package spqr SPQR) + $(cmake_use_find_package superlu SuperLU) + $(cmake_use_find_package umfpack UMFPACK) + ) + + if use arm; then + mycmakeargs+=( + -DEIGEN_TEST_NEON="$(usex cpu_flags_arm_neon)" + ) + fi + + if use arm64; then + mycmakeargs+=( + -DEIGEN_TEST_NEON64="$(usex cpu_flags_arm_neon)" + ) + fi + + if use amd64 || use x86; then + mycmakeargs+=( + # -DEIGEN_TEST_32BIT=no # Force generating 32bit code. + # -DEIGEN_TEST_X87=no # Force using X87 instructions. Implies no vectorization. + -DEIGEN_TEST_SSE2="$(usex cpu_flags_x86_sse2)" + -DEIGEN_TEST_SSE3="$(usex cpu_flags_x86_sse3)" + -DEIGEN_TEST_SSSE3="$(usex cpu_flags_x86_ssse3)" + -DEIGEN_TEST_FMA="$(usex cpu_flags_x86_fma3)" + -DEIGEN_TEST_SSE4_1="$(usex cpu_flags_x86_sse4_1)" + -DEIGEN_TEST_SSE4_2="$(usex cpu_flags_x86_sse4_2)" + -DEIGEN_TEST_AVX="$(usex cpu_flags_x86_avx)" + -DEIGEN_TEST_F16C="$(usex cpu_flags_x86_f16c)" + -DEIGEN_TEST_AVX2="$(usex cpu_flags_x86_avx2)" + -DEIGEN_TEST_AVX512="$(usex cpu_flags_x86_avx512f)" + -DEIGEN_TEST_AVX512DQ="$(usex cpu_flags_x86_avx512dq)" + ) + fi + + if use mips; then + mycmakeargs+=( + # -DEIGEN_TEST_MSA=no # Enable/Disable MSA in tests/examples + ) + fi + + if use ppc || use ppc64; then + mycmakeargs+=( + -DEIGEN_TEST_ALTIVEC="$(usex cpu_flags_ppc_altivec)" + -DEIGEN_TEST_VSX="$(usex cpu_flags_ppc_vsx)" + ) + fi + + if use s390; then + mycmakeargs+=( + # -DEIGEN_TEST_Z13=no # Enable/Disable S390X(zEC13) ZVECTOR in tests/examples + # -DEIGEN_TEST_Z14=no # Enable/Disable S390X(zEC14) ZVECTOR in tests/examples + ) + fi + + if use cuda; then + cuda_add_sandbox -w + + if use cuda-clang; then + local llvm_prefix + llvm_prefix="$(get_llvm_prefix -b)" + + # NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with + # error: unrecognized command-line option + if ! tc-is-clang; then + export CC="${CHOST}-clang-${LLVM_SLOT}" + export CXX="${CHOST}-clang++-${LLVM_SLOT}" + fi + + NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc" + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}" + ) + else + cuda_get_host_compiler + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" + ) + if [[ -v CUDACXX ]]; then + mycmakeargs+=( + -DCUDA_NVCC_EXECUTABLE="${CUDACXX}" + -DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA + ) + fi + fi + + if [[ "${CUDA_VERBOSE}" == true ]]; then + mycmakeargs+=( + -DCUDA_VERBOSE_BUILD="yes" + ) + NVCCFLAGS+=" -v" + fi + + if [[ -v CUDAARCHS ]]; then + mycmakeargs+=( + # TODO this needs to be lowest first for eigen + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + + # CUDAFLAGS is used by cmake + # NVCCFLAGS is used by cuda.eclass + mycmakeargs+=( + -DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}" + + -DCUDA_USE_STATIC_CUDA_RUNTIME="no" + ) + fi + + if use opengl; then + mycmakeargs+=( + -DOpenGL_GL_PREFERENCE="GLVND" + ) + fi + + if use pocketfft; then + mycmakeargs+=( + -DEIGEN_TEST_CXX11=yes + ) + fi + fi + + cmake_src_configure +} + +src_compile() { + local targets=() + + if use blas; then + targets+=( blas ) + if use lapack; then + targets+=( lapack ) + fi + fi + + if use test; then + targets+=( buildtests ) + + if use cuda || use hip; then + targets+=( buildtests_gpu ) + fi + + # tests generate random data, which fails for some seeds + # we solve this via test reruns now + # export EIGEN_SEED=712808 + fi + + # we add doc last to capture results for buildtests + if use doc; then + targets+=( doc ) + fi + + if [[ -n "${targets[*]}" ]]; then + cmake_src_compile "${targets[@]}" + fi +} + +src_test() { + local CMAKE_SKIP_TESTS=( + "^ref_8$" + ) + + if use cholmod && use blas && use lapack; then + CMAKE_SKIP_TESTS+=( + "^cholmod_support_21$" + "^cholmod_support_22$" + ) + fi + + if use cuda; then + cuda_add_sandbox -w + fi + + if use klu && use blas; then + CMAKE_SKIP_TESTS+=( + "^klu_support_1$" + "^klu_support_2$" + ) + fi + + if use lapack; then + CMAKE_SKIP_TESTS+=( + "^LAPACK-xlintsts_stest_in$" + "^LAPACK-xeigtsts_sep_in$" + "^LAPACK-xeigtsts_svd_in$" + "^LAPACK-xlintstd_dtest_in$" + "^LAPACK-xeigtstd_sep_in$" + "^LAPACK-xeigtstd_svd_in$" + "^LAPACK-xlintstc_ctest_in$" + "^LAPACK-xeigtstc_svd_in$" + ) + fi + + local myctestargs=( + -j1 # otherwise breaks due to cmake reruns + --repeat until-pass:50 + ) + + if use opengl; then + virtx \ + cmake_src_test + else + cmake_src_test + fi +} + +src_install() { + local DOCS=() + cmake_src_install + + if use doc; then + pushd "${BUILD_DIR}/doc" > /dev/null || die + dodoc -r html + popd > /dev/null || die + fi +} diff --git a/dev-cpp/eigen/eigen-5.0.1.ebuild b/dev-cpp/eigen/eigen-5.0.1.ebuild new file mode 100644 index 000000000000..2a62c78642c4 --- /dev/null +++ b/dev-cpp/eigen/eigen-5.0.1.ebuild @@ -0,0 +1,665 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LLVM_COMPAT=( {21..23} ) +LLVM_OPTIONAL="cuda-clang" + +PYTHON_COMPAT=( python3_{13..14} ) + +FORTRAN_NEEDED="no" + +LAPACK_ADDONS_PV="3.4.1" + +inherit cmake cuda flag-o-matic fortran-2 llvm-r2 python-any-r1 toolchain-funcs virtualx + +DESCRIPTION="C++ template library for linear algebra" +HOMEPAGE="https://eigen.tuxfamily.org/index.php?title=Main_Page" + +if [[ ${PV} = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://gitlab.com/lib${PN}/${PN}.git" + if [[ ${PV} = *.9999* ]] ; then + EGIT_BRANCH="$(ver_cut 1-2)" + fi +else + SRC_URI=" + https://gitlab.com/lib${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2 + " + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos" +fi + +SRC_URI+=" + test? ( + lapack? ( + https://downloads.tuxfamily.org/${PN}/lapack_addons_${LAPACK_ADDONS_PV}.tgz + -> ${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz + ) + ) +" + +LICENSE="MPL-2.0" +SLOT="3/$(ver_cut 1-2)" + +# The following lines are shamelessly stolen from ffmpeg-9999.ebuild with modifications +ARM_CPU_FEATURES=( + neon:NEON +) +PPC_CPU_FEATURES=( + altivec:ALTIVEC + vsx:VSX +) +X86_CPU_FEATURES=( + avx:AVX + avx2:AVX2 + avx512f:AVX512 + avx512dq:AVX512DQ + f16c:FP16C + fma3:FMA + popcnt:POPCNT + sse:SSE + sse2:SSE2 + sse3:SSE3 + ssse3:SSSE3 + sse4_1:SSE4_1 + sse4_2:SSE4_2 +) +# MIPS_CPU_FEATURES=( +# msa:MSA +# ) +# S390_CPU_FEATURES=( +# z13:Z13 +# z14:Z14 +# ) + +CPU_FEATURES_MAP=( + "${ARM_CPU_FEATURES[@]/#/cpu_flags_arm_}" + "${PPC_CPU_FEATURES[@]/#/cpu_flags_ppc_}" + "${X86_CPU_FEATURES[@]/#/cpu_flags_x86_}" + # "${MIPS_CPU_FEATURES[@]/#/cpu_flags_mips_}" + # "${S390_CPU_FEATURES[@]/#/cpu_flags_s390_}" +) + +IUSE_TEST_BACKENDS=( + "adolc" + "boost" + "cholmod" + "fftw" + "klu" + "metis" + "opengl" + "pastix" + "pocketfft" + "sparsehash" + "spqr" + "superlu" + "umfpack" +) + +IUSE=" + debug + blas lapack + ${CPU_FEATURES_MAP[*]%:*} + cuda cuda-clang hip + doc mathjax + openmp + test ${IUSE_TEST_BACKENDS[*]} +" +# zvector + +REQUIRED_USE=" + lapack? ( + blas + ) + test? ( + || ( ${IUSE_TEST_BACKENDS[*]} ) + cuda-clang? ( + !openmp + ${LLVM_REQUIRED_USE} + ) + ) +" + +# Tests failing again because of compiler issues; bugs #932646, #943401 +RESTRICT="!test? ( test )" +FORTRAN_DEPEND="virtual/fortran" + +BDEPEND=" + doc? ( + app-text/doxygen[dot] + dev-texlive/texlive-bibtexextra + dev-texlive/texlive-fontsextra + dev-texlive/texlive-fontutils + dev-texlive/texlive-latex + dev-texlive/texlive-latexextra + mathjax? ( dev-libs/mathjax ) + ) + test? ( + virtual/pkgconfig + lapack? ( + ${PYTHON_DEPS} + ) + spqr? ( + cholmod? ( + blas? ( + lapack? ( + ${FORTRAN_DEPEND} + ) + ) + ) + ) + pastix? ( ${FORTRAN_DEPEND} ) + ) + blas? ( ${FORTRAN_DEPEND} ) + lapack? ( ${FORTRAN_DEPEND} ) +" + +TEST_BACKENDS=" + adolc? ( sci-libs/adolc[sparse] ) + boost? ( dev-libs/boost ) + cholmod? ( sci-libs/cholmod:=[cuda?] ) + fftw? ( sci-libs/fftw[openmp?] ) + klu? ( sci-libs/klu:= ) + metis? ( + sci-libs/metis[openmp?] + sci-libs/pastix[metis] + ) + opengl? ( + media-libs/freeglut + media-libs/glew + media-libs/libglvnd + ) + pastix? ( + sci-libs/pastix[-mpi] + || ( + sci-libs/pastix[scotch] + sci-libs/pastix[metis] + ) + ) + pocketfft? ( dev-libs/pocketfft ) + sparsehash? ( + amd64? ( dev-cpp/sparsehash ) + arm64? ( dev-cpp/sparsehash ) + ppc64? ( dev-cpp/sparsehash ) + x86? ( dev-cpp/sparsehash ) + ) + spqr? ( sci-libs/spqr:= ) + superlu? ( sci-libs/superlu:= ) + umfpack? ( sci-libs/umfpack:= ) +" + +DEPEND=" + test? ( + cuda? ( + !cuda-clang? ( + dev-util/nvidia-cuda-toolkit + ) + cuda-clang? ( + $(llvm_gen_dep ' + llvm-core/clang:${LLVM_SLOT} + llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp] + ') + ) + ) + hip? ( dev-util/hip ) + !blas? ( + virtual/blas + !lapack? ( + virtual/lapacke + ) + ) + ${TEST_BACKENDS} + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-3.4.0-doc-nocompress.patch" # bug 830064 + "${FILESDIR}/${PN}-3.4.0-buildstring.patch" + "${FILESDIR}/${PN}-5.0.0-please_protect_your_min_with_parentheses.patch" + + # PRs + "${FILESDIR}/${PN}-5.0.0-doxygen-1.14.patch" + + "${FILESDIR}/${PN}-5.0.1-c++-20.patch" + "${FILESDIR}/${PN}-5.0.1-cmake-GNUInstallDirs.patch" + "${FILESDIR}/${PN}-5.0.1-make-static-libs-optional.patch" + + "${FILESDIR}/${PN}-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch" +) + +# TODO should be in cuda.eclass +cuda_get_host_compiler() { + if [[ -n "${NVCC_CCBIN}" ]]; then + echo "${NVCC_CCBIN}" + return + fi + + if [[ -n "${CUDAHOSTCXX}" ]]; then + echo "${CUDAHOSTCXX}" + return + fi + + einfo "Trying to find working CUDA host compiler" + + if ! tc-is-gcc && ! tc-is-clang; then + die "$(tc-get-compiler-type) compiler is not supported" + fi + + local compiler compiler_type compiler_version + local package package_version + local -x NVCC_CCBIN + local NVCC_CCBIN_default + + compiler_type="$(tc-get-compiler-type)" + compiler_version="$("${compiler_type}-major-version")" + + # try the default compiler first + NVCC_CCBIN="$(tc-getCXX)" + NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}" + + compiler="${NVCC_CCBIN/%-${compiler_version}}" + + # store the package so we can re-use it later + package="sys-devel/${compiler_type}" + package_version="${package}" + + ebegin "testing ${NVCC_CCBIN_default} (default)" + + while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do + eend 1 + + while true; do + # prepare next version + if ! package_version="<$(best_version "${package_version}")"; then + die "could not find a supported version of ${compiler}" + fi + + NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")" + + [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break + done + ebegin "testing ${NVCC_CCBIN}" + done + eend $? + + echo "${NVCC_CCBIN}" + export NVCC_CCBIN +} + +pkg_pretend() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi + + if use lapack; then + python-any-r1_pkg_setup + fi + + if { use test && { use spqr && use cholmod && use blas && use lapack; } || use pastix; } \ + || use blas \ + || use lapack \ + ; then + fortran-2_pkg_setup + fi + + if use test && use cuda && use cuda-clang; then + llvm-r2_pkg_setup + fi +} + +src_unpack() { + if [[ ${PV} = *9999* ]] ; then + git-r3_src_unpack + else + unpack "${P}.tar.bz2" + fi + + if use test && use lapack; then + pushd "${S}/lapack" > /dev/null || die + unpack "${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz" + popd > /dev/null || die + fi +} + +src_prepare() { + # run patches here as we patch in test/ + cmake_src_prepare + + if use test && use lapack; then + pushd "${S}" > /dev/null || die + eapply "${FILESDIR}/${PN}-5.0.1-fix-lapack_testing.py.patch" + popd > /dev/null || die + fi +} + +src_configure() { + if use lapack; then + # bug 878987 + # multiple definition of `cgesdd_' + filter-lto + fi + + local mycmakeargs=( + -DCMAKE_CXX_STANDARD="20" + -DCMAKE_POSITION_INDEPENDENT_CODE="yes" + + -DEIGEN_BUILD_TESTING="$(usex test)" # Enable creation of Eigen tests. + + -DEIGEN_BUILD_BLAS="$(usex blas)" # Toggles the building of the Eigen Blas library + -DEIGEN_BUILD_LAPACK="$(usex blas "$(usex lapack)")" # Toggles the building of the included Eigen LAPACK library + + -DEIGEN_BUILD_DOC="$(usex doc)" # Enable creation of Eigen documentation + -DEIGEN_BUILD_PKGCONFIG="yes" # Build pkg-config .pc file for Eigen + ) + + append-cxxflags "-DEIGEN_USE_OPENBLAS_BFLOAT16=0" + + if use blas; then + mycmakeargs+=( + -DBUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_STATIC_LIBS="yes" + -DEIGEN_INSTALL_STATIC_LIBS="yes" + ) + + if use lapack; then + mycmakeargs+=( + -DCMAKE_POLICY_DEFAULT_CMP0148="OLD" # FindPythonInterp + -DEIGEN_ENABLE_LAPACK_TESTS="$(usex test)" + ) + fi + fi + + if use doc || use test; then + mycmakeargs+=( + # needs Qt4 + -DEIGEN_TEST_NOQT="yes" # Disable Qt support in unit tests + ) + fi + + if use doc; then + mycmakeargs+=( + -DEIGEN_DOC_USE_MATHJAX="$(usex mathjax)" # Use MathJax for rendering math in HTML docs + -DEIGEN_INTERNAL_DOCUMENTATION=no # Build internal documentation + ) + fi + + if use test; then + mycmakeargs+=( + -DEIGEN_LEAVE_TEST_IN_ALL_TARGET=yes # Leaves tests in the all target, needed by ctest for automatic building + + # the OpenGL testsuite is extremely brittle, bug #712808 + -DEIGEN_TEST_OPENGL="$(usex opengl)" # Enable OpenGL support in unit tests + -DEIGEN_TEST_OPENMP="$(usex openmp)" # Enable/Disable OpenMP in tests/examples + + -DEIGEN_TEST_EXTERNAL_BLAS="$(usex !blas)" # Use external BLAS library for testsuite + + -DEIGEN_TEST_BUILD_DOCUMENTATION="no" # $(usex doc)" # Test building the doxygen documentation + + -DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions + -DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables + + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default). + + $(cmake_use_find_package adolc Adolc) + $(cmake_use_find_package boost Boost) + $(cmake_use_find_package cholmod CHOLMOD) + # -DDUCCFFT="$(usex ducc)" + -DDUCC_ROOT="DUCCFFT" + -DDUCCFFT="NOTFOUND" + $(cmake_use_find_package fftw FFTW ) + $(cmake_use_find_package klu KLU) + -DCMAKE_DISABLE_FIND_PACKAGE_MPREAL=yes + # $(cmake_use_find_package opengl OpenGL) # EIGEN_TEST_OPENGL + # $(cmake_use_find_package openmp OpenMP) # EIGEN_TEST_OPENMP + $(cmake_use_find_package pastix PASTIX) + # prevent pastix_nompi.h lookup it no longer exists, we enforce this via deps + -DPASTIX_pastix_nompi.h_INCLUDE_DIRS="FOUND" + + -DPOCKETFFT="$(usex pocketfft)" + $(cmake_use_find_package sparsehash GoogleHash) + $(cmake_use_find_package spqr SPQR) + $(cmake_use_find_package superlu SuperLU) + $(cmake_use_find_package umfpack UMFPACK) + ) + + if use arm; then + mycmakeargs+=( + -DEIGEN_TEST_NEON="$(usex cpu_flags_arm_neon)" + ) + fi + + if use arm64; then + mycmakeargs+=( + -DEIGEN_TEST_NEON64="$(usex cpu_flags_arm_neon)" + ) + fi + + if use amd64 || use x86; then + mycmakeargs+=( + # -DEIGEN_TEST_32BIT=no # Force generating 32bit code. + # -DEIGEN_TEST_X87=no # Force using X87 instructions. Implies no vectorization. + -DEIGEN_TEST_SSE2="$(usex cpu_flags_x86_sse2)" + -DEIGEN_TEST_SSE3="$(usex cpu_flags_x86_sse3)" + -DEIGEN_TEST_SSSE3="$(usex cpu_flags_x86_ssse3)" + -DEIGEN_TEST_FMA="$(usex cpu_flags_x86_fma3)" + -DEIGEN_TEST_SSE4_1="$(usex cpu_flags_x86_sse4_1)" + -DEIGEN_TEST_SSE4_2="$(usex cpu_flags_x86_sse4_2)" + -DEIGEN_TEST_AVX="$(usex cpu_flags_x86_avx)" + -DEIGEN_TEST_F16C="$(usex cpu_flags_x86_f16c)" + -DEIGEN_TEST_AVX2="$(usex cpu_flags_x86_avx2)" + -DEIGEN_TEST_AVX512="$(usex cpu_flags_x86_avx512f)" + -DEIGEN_TEST_AVX512DQ="$(usex cpu_flags_x86_avx512dq)" + ) + fi + + if use mips; then + mycmakeargs+=( + # -DEIGEN_TEST_MSA=no # Enable/Disable MSA in tests/examples + ) + fi + + if use ppc || use ppc64; then + mycmakeargs+=( + -DEIGEN_TEST_ALTIVEC="$(usex cpu_flags_ppc_altivec)" + -DEIGEN_TEST_VSX="$(usex cpu_flags_ppc_vsx)" + ) + fi + + if use s390; then + mycmakeargs+=( + # -DEIGEN_TEST_Z13=no # Enable/Disable S390X(zEC13) ZVECTOR in tests/examples + # -DEIGEN_TEST_Z14=no # Enable/Disable S390X(zEC14) ZVECTOR in tests/examples + ) + fi + + if use cuda; then + cuda_add_sandbox -w + + if use cuda-clang; then + local llvm_prefix + llvm_prefix="$(get_llvm_prefix -b)" + + # NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with + # error: unrecognized command-line option + if ! tc-is-clang; then + export CC="${CHOST}-clang-${LLVM_SLOT}" + export CXX="${CHOST}-clang++-${LLVM_SLOT}" + fi + + NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc" + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}" + ) + else + cuda_get_host_compiler + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" + ) + if [[ -v CUDACXX ]]; then + mycmakeargs+=( + -DCUDA_NVCC_EXECUTABLE="${CUDACXX}" + -DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA + ) + fi + fi + + if [[ "${CUDA_VERBOSE}" == true ]]; then + mycmakeargs+=( + -DCUDA_VERBOSE_BUILD="yes" + ) + NVCCFLAGS+=" -v" + fi + + if [[ -v CUDAARCHS ]]; then + mycmakeargs+=( + # TODO this needs to be lowest first for eigen + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + + # CUDAFLAGS is used by cmake + # NVCCFLAGS is used by cuda.eclass + mycmakeargs+=( + -DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}" + + -DCUDA_USE_STATIC_CUDA_RUNTIME="no" + ) + fi + + if use opengl; then + mycmakeargs+=( + -DOpenGL_GL_PREFERENCE="GLVND" + ) + fi + + if use pocketfft; then + mycmakeargs+=( + -DEIGEN_TEST_CXX11=yes + ) + fi + fi + + cmake_src_configure +} + +src_compile() { + local targets=() + + if use blas; then + targets+=( blas ) + if use lapack; then + targets+=( lapack ) + fi + fi + + if use test; then + targets+=( buildtests ) + + if use cuda || use hip; then + targets+=( buildtests_gpu ) + fi + + # tests generate random data, which fails for some seeds + # we solve this via test reruns now + # export EIGEN_SEED=712808 + fi + + # we add doc last to capture results for buildtests + if use doc; then + targets+=( doc ) + fi + + if [[ -n "${targets[*]}" ]]; then + cmake_src_compile "${targets[@]}" + fi +} + +src_test() { + local CMAKE_SKIP_TESTS=( + "^ref_8$" + ) + + if ! use blas; then + CMAKE_SKIP_TESTS+=( + "^nomalloc_1$" # smoketest + "^nomalloc_2$" + "^nomalloc_3$" + "^nomalloc_4$" + + "^product_notemporary_1$" + "^product_notemporary_2$" + "^product_notemporary_3$" + "^product_notemporary_4$" + ) + fi + + if use cholmod && use blas && use lapack; then + CMAKE_SKIP_TESTS+=( + "^cholmod_support_21$" + "^cholmod_support_22$" + ) + fi + + if use cuda; then + cuda_add_sandbox -w + fi + + if use klu && use blas; then + CMAKE_SKIP_TESTS+=( + "^klu_support_1$" + "^klu_support_2$" + ) + fi + + if use lapack; then + CMAKE_SKIP_TESTS+=( + "^LAPACK-xlintsts_stest_in$" + "^LAPACK-xeigtsts_sep_in$" + "^LAPACK-xeigtsts_svd_in$" + "^LAPACK-xlintstd_dtest_in$" + "^LAPACK-xeigtstd_sep_in$" + "^LAPACK-xeigtstd_svd_in$" + "^LAPACK-xlintstc_ctest_in$" + "^LAPACK-xeigtstc_svd_in$" + ) + fi + + local myctestargs=( + -j1 # otherwise breaks due to cmake reruns + --repeat until-pass:50 + ) + + if use opengl; then + virtx \ + cmake_src_test + else + cmake_src_test + fi +} + +src_install() { + local DOCS=() + cmake_src_install + + if use doc; then + pushd "${BUILD_DIR}/doc" > /dev/null || die + dodoc -r html + popd > /dev/null || die + fi +} diff --git a/dev-cpp/eigen/eigen-5.0.9999.ebuild b/dev-cpp/eigen/eigen-5.0.9999.ebuild new file mode 100644 index 000000000000..2a62c78642c4 --- /dev/null +++ b/dev-cpp/eigen/eigen-5.0.9999.ebuild @@ -0,0 +1,665 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LLVM_COMPAT=( {21..23} ) +LLVM_OPTIONAL="cuda-clang" + +PYTHON_COMPAT=( python3_{13..14} ) + +FORTRAN_NEEDED="no" + +LAPACK_ADDONS_PV="3.4.1" + +inherit cmake cuda flag-o-matic fortran-2 llvm-r2 python-any-r1 toolchain-funcs virtualx + +DESCRIPTION="C++ template library for linear algebra" +HOMEPAGE="https://eigen.tuxfamily.org/index.php?title=Main_Page" + +if [[ ${PV} = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://gitlab.com/lib${PN}/${PN}.git" + if [[ ${PV} = *.9999* ]] ; then + EGIT_BRANCH="$(ver_cut 1-2)" + fi +else + SRC_URI=" + https://gitlab.com/lib${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2 + " + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos" +fi + +SRC_URI+=" + test? ( + lapack? ( + https://downloads.tuxfamily.org/${PN}/lapack_addons_${LAPACK_ADDONS_PV}.tgz + -> ${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz + ) + ) +" + +LICENSE="MPL-2.0" +SLOT="3/$(ver_cut 1-2)" + +# The following lines are shamelessly stolen from ffmpeg-9999.ebuild with modifications +ARM_CPU_FEATURES=( + neon:NEON +) +PPC_CPU_FEATURES=( + altivec:ALTIVEC + vsx:VSX +) +X86_CPU_FEATURES=( + avx:AVX + avx2:AVX2 + avx512f:AVX512 + avx512dq:AVX512DQ + f16c:FP16C + fma3:FMA + popcnt:POPCNT + sse:SSE + sse2:SSE2 + sse3:SSE3 + ssse3:SSSE3 + sse4_1:SSE4_1 + sse4_2:SSE4_2 +) +# MIPS_CPU_FEATURES=( +# msa:MSA +# ) +# S390_CPU_FEATURES=( +# z13:Z13 +# z14:Z14 +# ) + +CPU_FEATURES_MAP=( + "${ARM_CPU_FEATURES[@]/#/cpu_flags_arm_}" + "${PPC_CPU_FEATURES[@]/#/cpu_flags_ppc_}" + "${X86_CPU_FEATURES[@]/#/cpu_flags_x86_}" + # "${MIPS_CPU_FEATURES[@]/#/cpu_flags_mips_}" + # "${S390_CPU_FEATURES[@]/#/cpu_flags_s390_}" +) + +IUSE_TEST_BACKENDS=( + "adolc" + "boost" + "cholmod" + "fftw" + "klu" + "metis" + "opengl" + "pastix" + "pocketfft" + "sparsehash" + "spqr" + "superlu" + "umfpack" +) + +IUSE=" + debug + blas lapack + ${CPU_FEATURES_MAP[*]%:*} + cuda cuda-clang hip + doc mathjax + openmp + test ${IUSE_TEST_BACKENDS[*]} +" +# zvector + +REQUIRED_USE=" + lapack? ( + blas + ) + test? ( + || ( ${IUSE_TEST_BACKENDS[*]} ) + cuda-clang? ( + !openmp + ${LLVM_REQUIRED_USE} + ) + ) +" + +# Tests failing again because of compiler issues; bugs #932646, #943401 +RESTRICT="!test? ( test )" +FORTRAN_DEPEND="virtual/fortran" + +BDEPEND=" + doc? ( + app-text/doxygen[dot] + dev-texlive/texlive-bibtexextra + dev-texlive/texlive-fontsextra + dev-texlive/texlive-fontutils + dev-texlive/texlive-latex + dev-texlive/texlive-latexextra + mathjax? ( dev-libs/mathjax ) + ) + test? ( + virtual/pkgconfig + lapack? ( + ${PYTHON_DEPS} + ) + spqr? ( + cholmod? ( + blas? ( + lapack? ( + ${FORTRAN_DEPEND} + ) + ) + ) + ) + pastix? ( ${FORTRAN_DEPEND} ) + ) + blas? ( ${FORTRAN_DEPEND} ) + lapack? ( ${FORTRAN_DEPEND} ) +" + +TEST_BACKENDS=" + adolc? ( sci-libs/adolc[sparse] ) + boost? ( dev-libs/boost ) + cholmod? ( sci-libs/cholmod:=[cuda?] ) + fftw? ( sci-libs/fftw[openmp?] ) + klu? ( sci-libs/klu:= ) + metis? ( + sci-libs/metis[openmp?] + sci-libs/pastix[metis] + ) + opengl? ( + media-libs/freeglut + media-libs/glew + media-libs/libglvnd + ) + pastix? ( + sci-libs/pastix[-mpi] + || ( + sci-libs/pastix[scotch] + sci-libs/pastix[metis] + ) + ) + pocketfft? ( dev-libs/pocketfft ) + sparsehash? ( + amd64? ( dev-cpp/sparsehash ) + arm64? ( dev-cpp/sparsehash ) + ppc64? ( dev-cpp/sparsehash ) + x86? ( dev-cpp/sparsehash ) + ) + spqr? ( sci-libs/spqr:= ) + superlu? ( sci-libs/superlu:= ) + umfpack? ( sci-libs/umfpack:= ) +" + +DEPEND=" + test? ( + cuda? ( + !cuda-clang? ( + dev-util/nvidia-cuda-toolkit + ) + cuda-clang? ( + $(llvm_gen_dep ' + llvm-core/clang:${LLVM_SLOT} + llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp] + ') + ) + ) + hip? ( dev-util/hip ) + !blas? ( + virtual/blas + !lapack? ( + virtual/lapacke + ) + ) + ${TEST_BACKENDS} + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-3.4.0-doc-nocompress.patch" # bug 830064 + "${FILESDIR}/${PN}-3.4.0-buildstring.patch" + "${FILESDIR}/${PN}-5.0.0-please_protect_your_min_with_parentheses.patch" + + # PRs + "${FILESDIR}/${PN}-5.0.0-doxygen-1.14.patch" + + "${FILESDIR}/${PN}-5.0.1-c++-20.patch" + "${FILESDIR}/${PN}-5.0.1-cmake-GNUInstallDirs.patch" + "${FILESDIR}/${PN}-5.0.1-make-static-libs-optional.patch" + + "${FILESDIR}/${PN}-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch" +) + +# TODO should be in cuda.eclass +cuda_get_host_compiler() { + if [[ -n "${NVCC_CCBIN}" ]]; then + echo "${NVCC_CCBIN}" + return + fi + + if [[ -n "${CUDAHOSTCXX}" ]]; then + echo "${CUDAHOSTCXX}" + return + fi + + einfo "Trying to find working CUDA host compiler" + + if ! tc-is-gcc && ! tc-is-clang; then + die "$(tc-get-compiler-type) compiler is not supported" + fi + + local compiler compiler_type compiler_version + local package package_version + local -x NVCC_CCBIN + local NVCC_CCBIN_default + + compiler_type="$(tc-get-compiler-type)" + compiler_version="$("${compiler_type}-major-version")" + + # try the default compiler first + NVCC_CCBIN="$(tc-getCXX)" + NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}" + + compiler="${NVCC_CCBIN/%-${compiler_version}}" + + # store the package so we can re-use it later + package="sys-devel/${compiler_type}" + package_version="${package}" + + ebegin "testing ${NVCC_CCBIN_default} (default)" + + while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do + eend 1 + + while true; do + # prepare next version + if ! package_version="<$(best_version "${package_version}")"; then + die "could not find a supported version of ${compiler}" + fi + + NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")" + + [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break + done + ebegin "testing ${NVCC_CCBIN}" + done + eend $? + + echo "${NVCC_CCBIN}" + export NVCC_CCBIN +} + +pkg_pretend() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi + + if use lapack; then + python-any-r1_pkg_setup + fi + + if { use test && { use spqr && use cholmod && use blas && use lapack; } || use pastix; } \ + || use blas \ + || use lapack \ + ; then + fortran-2_pkg_setup + fi + + if use test && use cuda && use cuda-clang; then + llvm-r2_pkg_setup + fi +} + +src_unpack() { + if [[ ${PV} = *9999* ]] ; then + git-r3_src_unpack + else + unpack "${P}.tar.bz2" + fi + + if use test && use lapack; then + pushd "${S}/lapack" > /dev/null || die + unpack "${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz" + popd > /dev/null || die + fi +} + +src_prepare() { + # run patches here as we patch in test/ + cmake_src_prepare + + if use test && use lapack; then + pushd "${S}" > /dev/null || die + eapply "${FILESDIR}/${PN}-5.0.1-fix-lapack_testing.py.patch" + popd > /dev/null || die + fi +} + +src_configure() { + if use lapack; then + # bug 878987 + # multiple definition of `cgesdd_' + filter-lto + fi + + local mycmakeargs=( + -DCMAKE_CXX_STANDARD="20" + -DCMAKE_POSITION_INDEPENDENT_CODE="yes" + + -DEIGEN_BUILD_TESTING="$(usex test)" # Enable creation of Eigen tests. + + -DEIGEN_BUILD_BLAS="$(usex blas)" # Toggles the building of the Eigen Blas library + -DEIGEN_BUILD_LAPACK="$(usex blas "$(usex lapack)")" # Toggles the building of the included Eigen LAPACK library + + -DEIGEN_BUILD_DOC="$(usex doc)" # Enable creation of Eigen documentation + -DEIGEN_BUILD_PKGCONFIG="yes" # Build pkg-config .pc file for Eigen + ) + + append-cxxflags "-DEIGEN_USE_OPENBLAS_BFLOAT16=0" + + if use blas; then + mycmakeargs+=( + -DBUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_STATIC_LIBS="yes" + -DEIGEN_INSTALL_STATIC_LIBS="yes" + ) + + if use lapack; then + mycmakeargs+=( + -DCMAKE_POLICY_DEFAULT_CMP0148="OLD" # FindPythonInterp + -DEIGEN_ENABLE_LAPACK_TESTS="$(usex test)" + ) + fi + fi + + if use doc || use test; then + mycmakeargs+=( + # needs Qt4 + -DEIGEN_TEST_NOQT="yes" # Disable Qt support in unit tests + ) + fi + + if use doc; then + mycmakeargs+=( + -DEIGEN_DOC_USE_MATHJAX="$(usex mathjax)" # Use MathJax for rendering math in HTML docs + -DEIGEN_INTERNAL_DOCUMENTATION=no # Build internal documentation + ) + fi + + if use test; then + mycmakeargs+=( + -DEIGEN_LEAVE_TEST_IN_ALL_TARGET=yes # Leaves tests in the all target, needed by ctest for automatic building + + # the OpenGL testsuite is extremely brittle, bug #712808 + -DEIGEN_TEST_OPENGL="$(usex opengl)" # Enable OpenGL support in unit tests + -DEIGEN_TEST_OPENMP="$(usex openmp)" # Enable/Disable OpenMP in tests/examples + + -DEIGEN_TEST_EXTERNAL_BLAS="$(usex !blas)" # Use external BLAS library for testsuite + + -DEIGEN_TEST_BUILD_DOCUMENTATION="no" # $(usex doc)" # Test building the doxygen documentation + + -DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions + -DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables + + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default). + + $(cmake_use_find_package adolc Adolc) + $(cmake_use_find_package boost Boost) + $(cmake_use_find_package cholmod CHOLMOD) + # -DDUCCFFT="$(usex ducc)" + -DDUCC_ROOT="DUCCFFT" + -DDUCCFFT="NOTFOUND" + $(cmake_use_find_package fftw FFTW ) + $(cmake_use_find_package klu KLU) + -DCMAKE_DISABLE_FIND_PACKAGE_MPREAL=yes + # $(cmake_use_find_package opengl OpenGL) # EIGEN_TEST_OPENGL + # $(cmake_use_find_package openmp OpenMP) # EIGEN_TEST_OPENMP + $(cmake_use_find_package pastix PASTIX) + # prevent pastix_nompi.h lookup it no longer exists, we enforce this via deps + -DPASTIX_pastix_nompi.h_INCLUDE_DIRS="FOUND" + + -DPOCKETFFT="$(usex pocketfft)" + $(cmake_use_find_package sparsehash GoogleHash) + $(cmake_use_find_package spqr SPQR) + $(cmake_use_find_package superlu SuperLU) + $(cmake_use_find_package umfpack UMFPACK) + ) + + if use arm; then + mycmakeargs+=( + -DEIGEN_TEST_NEON="$(usex cpu_flags_arm_neon)" + ) + fi + + if use arm64; then + mycmakeargs+=( + -DEIGEN_TEST_NEON64="$(usex cpu_flags_arm_neon)" + ) + fi + + if use amd64 || use x86; then + mycmakeargs+=( + # -DEIGEN_TEST_32BIT=no # Force generating 32bit code. + # -DEIGEN_TEST_X87=no # Force using X87 instructions. Implies no vectorization. + -DEIGEN_TEST_SSE2="$(usex cpu_flags_x86_sse2)" + -DEIGEN_TEST_SSE3="$(usex cpu_flags_x86_sse3)" + -DEIGEN_TEST_SSSE3="$(usex cpu_flags_x86_ssse3)" + -DEIGEN_TEST_FMA="$(usex cpu_flags_x86_fma3)" + -DEIGEN_TEST_SSE4_1="$(usex cpu_flags_x86_sse4_1)" + -DEIGEN_TEST_SSE4_2="$(usex cpu_flags_x86_sse4_2)" + -DEIGEN_TEST_AVX="$(usex cpu_flags_x86_avx)" + -DEIGEN_TEST_F16C="$(usex cpu_flags_x86_f16c)" + -DEIGEN_TEST_AVX2="$(usex cpu_flags_x86_avx2)" + -DEIGEN_TEST_AVX512="$(usex cpu_flags_x86_avx512f)" + -DEIGEN_TEST_AVX512DQ="$(usex cpu_flags_x86_avx512dq)" + ) + fi + + if use mips; then + mycmakeargs+=( + # -DEIGEN_TEST_MSA=no # Enable/Disable MSA in tests/examples + ) + fi + + if use ppc || use ppc64; then + mycmakeargs+=( + -DEIGEN_TEST_ALTIVEC="$(usex cpu_flags_ppc_altivec)" + -DEIGEN_TEST_VSX="$(usex cpu_flags_ppc_vsx)" + ) + fi + + if use s390; then + mycmakeargs+=( + # -DEIGEN_TEST_Z13=no # Enable/Disable S390X(zEC13) ZVECTOR in tests/examples + # -DEIGEN_TEST_Z14=no # Enable/Disable S390X(zEC14) ZVECTOR in tests/examples + ) + fi + + if use cuda; then + cuda_add_sandbox -w + + if use cuda-clang; then + local llvm_prefix + llvm_prefix="$(get_llvm_prefix -b)" + + # NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with + # error: unrecognized command-line option + if ! tc-is-clang; then + export CC="${CHOST}-clang-${LLVM_SLOT}" + export CXX="${CHOST}-clang++-${LLVM_SLOT}" + fi + + NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc" + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}" + ) + else + cuda_get_host_compiler + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" + ) + if [[ -v CUDACXX ]]; then + mycmakeargs+=( + -DCUDA_NVCC_EXECUTABLE="${CUDACXX}" + -DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA + ) + fi + fi + + if [[ "${CUDA_VERBOSE}" == true ]]; then + mycmakeargs+=( + -DCUDA_VERBOSE_BUILD="yes" + ) + NVCCFLAGS+=" -v" + fi + + if [[ -v CUDAARCHS ]]; then + mycmakeargs+=( + # TODO this needs to be lowest first for eigen + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + + # CUDAFLAGS is used by cmake + # NVCCFLAGS is used by cuda.eclass + mycmakeargs+=( + -DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}" + + -DCUDA_USE_STATIC_CUDA_RUNTIME="no" + ) + fi + + if use opengl; then + mycmakeargs+=( + -DOpenGL_GL_PREFERENCE="GLVND" + ) + fi + + if use pocketfft; then + mycmakeargs+=( + -DEIGEN_TEST_CXX11=yes + ) + fi + fi + + cmake_src_configure +} + +src_compile() { + local targets=() + + if use blas; then + targets+=( blas ) + if use lapack; then + targets+=( lapack ) + fi + fi + + if use test; then + targets+=( buildtests ) + + if use cuda || use hip; then + targets+=( buildtests_gpu ) + fi + + # tests generate random data, which fails for some seeds + # we solve this via test reruns now + # export EIGEN_SEED=712808 + fi + + # we add doc last to capture results for buildtests + if use doc; then + targets+=( doc ) + fi + + if [[ -n "${targets[*]}" ]]; then + cmake_src_compile "${targets[@]}" + fi +} + +src_test() { + local CMAKE_SKIP_TESTS=( + "^ref_8$" + ) + + if ! use blas; then + CMAKE_SKIP_TESTS+=( + "^nomalloc_1$" # smoketest + "^nomalloc_2$" + "^nomalloc_3$" + "^nomalloc_4$" + + "^product_notemporary_1$" + "^product_notemporary_2$" + "^product_notemporary_3$" + "^product_notemporary_4$" + ) + fi + + if use cholmod && use blas && use lapack; then + CMAKE_SKIP_TESTS+=( + "^cholmod_support_21$" + "^cholmod_support_22$" + ) + fi + + if use cuda; then + cuda_add_sandbox -w + fi + + if use klu && use blas; then + CMAKE_SKIP_TESTS+=( + "^klu_support_1$" + "^klu_support_2$" + ) + fi + + if use lapack; then + CMAKE_SKIP_TESTS+=( + "^LAPACK-xlintsts_stest_in$" + "^LAPACK-xeigtsts_sep_in$" + "^LAPACK-xeigtsts_svd_in$" + "^LAPACK-xlintstd_dtest_in$" + "^LAPACK-xeigtstd_sep_in$" + "^LAPACK-xeigtstd_svd_in$" + "^LAPACK-xlintstc_ctest_in$" + "^LAPACK-xeigtstc_svd_in$" + ) + fi + + local myctestargs=( + -j1 # otherwise breaks due to cmake reruns + --repeat until-pass:50 + ) + + if use opengl; then + virtx \ + cmake_src_test + else + cmake_src_test + fi +} + +src_install() { + local DOCS=() + cmake_src_install + + if use doc; then + pushd "${BUILD_DIR}/doc" > /dev/null || die + dodoc -r html + popd > /dev/null || die + fi +} diff --git a/dev-cpp/eigen/eigen-9999.ebuild b/dev-cpp/eigen/eigen-9999.ebuild new file mode 100644 index 000000000000..804b9e4ea506 --- /dev/null +++ b/dev-cpp/eigen/eigen-9999.ebuild @@ -0,0 +1,641 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LLVM_COMPAT=( {21..23} ) +LLVM_OPTIONAL="cuda-clang" + +PYTHON_COMPAT=( python3_{13..14} ) + +FORTRAN_NEEDED="no" + +LAPACK_ADDONS_PV="3.4.1" + +inherit cmake cuda flag-o-matic fortran-2 llvm-r2 python-any-r1 toolchain-funcs virtualx + +DESCRIPTION="C++ template library for linear algebra" +HOMEPAGE="https://eigen.tuxfamily.org/index.php?title=Main_Page" + +if [[ ${PV} = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://gitlab.com/lib${PN}/${PN}.git" + if [[ ${PV} = *.9999* ]] ; then + EGIT_BRANCH="$(ver_cut 1-2)" + fi +else + SRC_URI=" + https://gitlab.com/lib${PN}/${PN}/-/archive/${PV}/${P}.tar.bz2 + " + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~arm64-macos ~x64-macos" +fi + +SRC_URI+=" + test? ( + lapack? ( + https://downloads.tuxfamily.org/${PN}/lapack_addons_${LAPACK_ADDONS_PV}.tgz + -> ${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz + ) + ) +" + +LICENSE="MPL-2.0" +SLOT="3/$(ver_cut 1-2)" + +# The following lines are shamelessly stolen from ffmpeg-9999.ebuild with modifications +ARM_CPU_FEATURES=( + neon:NEON +) +PPC_CPU_FEATURES=( + altivec:ALTIVEC + vsx:VSX +) +X86_CPU_FEATURES=( + avx:AVX + avx2:AVX2 + avx512f:AVX512 + avx512dq:AVX512DQ + f16c:FP16C + fma3:FMA + popcnt:POPCNT + sse:SSE + sse2:SSE2 + sse3:SSE3 + ssse3:SSSE3 + sse4_1:SSE4_1 + sse4_2:SSE4_2 +) +# MIPS_CPU_FEATURES=( +# msa:MSA +# ) +# S390_CPU_FEATURES=( +# z13:Z13 +# z14:Z14 +# ) + +CPU_FEATURES_MAP=( + "${ARM_CPU_FEATURES[@]/#/cpu_flags_arm_}" + "${PPC_CPU_FEATURES[@]/#/cpu_flags_ppc_}" + "${X86_CPU_FEATURES[@]/#/cpu_flags_x86_}" + # "${MIPS_CPU_FEATURES[@]/#/cpu_flags_mips_}" + # "${S390_CPU_FEATURES[@]/#/cpu_flags_s390_}" +) + +IUSE_TEST_BACKENDS=( + "adolc" + "boost" + "cholmod" + "fftw" + "klu" + "metis" + "opengl" + "pastix" + "pocketfft" + "sparsehash" + "spqr" + "superlu" + "umfpack" +) + +IUSE=" + debug + blas lapack + ${CPU_FEATURES_MAP[*]%:*} + cuda cuda-clang hip + doc mathjax + openmp + test ${IUSE_TEST_BACKENDS[*]} +" +# zvector + +REQUIRED_USE=" + lapack? ( + blas + ) + test? ( + || ( ${IUSE_TEST_BACKENDS[*]} ) + cuda-clang? ( + !openmp + ${LLVM_REQUIRED_USE} + ) + ) +" + +# Tests failing again because of compiler issues; bugs #932646, #943401 +RESTRICT="!test? ( test )" +FORTRAN_DEPEND="virtual/fortran" + +BDEPEND=" + doc? ( + app-text/doxygen[dot] + dev-texlive/texlive-bibtexextra + dev-texlive/texlive-fontsextra + dev-texlive/texlive-fontutils + dev-texlive/texlive-latex + dev-texlive/texlive-latexextra + mathjax? ( dev-libs/mathjax ) + ) + test? ( + virtual/pkgconfig + lapack? ( + ${PYTHON_DEPS} + ) + spqr? ( + cholmod? ( + blas? ( + lapack? ( + ${FORTRAN_DEPEND} + ) + ) + ) + ) + pastix? ( ${FORTRAN_DEPEND} ) + ) + blas? ( ${FORTRAN_DEPEND} ) + lapack? ( ${FORTRAN_DEPEND} ) +" + +TEST_BACKENDS=" + adolc? ( sci-libs/adolc[sparse] ) + boost? ( dev-libs/boost ) + cholmod? ( sci-libs/cholmod:=[cuda?] ) + fftw? ( sci-libs/fftw[openmp?] ) + klu? ( sci-libs/klu:= ) + metis? ( + sci-libs/metis[openmp?] + sci-libs/pastix[metis] + ) + opengl? ( + media-libs/freeglut + media-libs/glew + media-libs/libglvnd + ) + pastix? ( + sci-libs/pastix[-mpi] + || ( + sci-libs/pastix[scotch] + sci-libs/pastix[metis] + ) + ) + pocketfft? ( dev-libs/pocketfft ) + sparsehash? ( + amd64? ( dev-cpp/sparsehash ) + arm64? ( dev-cpp/sparsehash ) + ppc64? ( dev-cpp/sparsehash ) + x86? ( dev-cpp/sparsehash ) + ) + spqr? ( sci-libs/spqr:= ) + superlu? ( sci-libs/superlu:= ) + umfpack? ( sci-libs/umfpack:= ) +" + +DEPEND=" + test? ( + cuda? ( + !cuda-clang? ( + dev-util/nvidia-cuda-toolkit + ) + cuda-clang? ( + $(llvm_gen_dep ' + llvm-core/clang:${LLVM_SLOT} + llvm-runtimes/clang-runtime:${LLVM_SLOT}[llvm_targets_NVPTX,offload,openmp] + ') + ) + ) + hip? ( dev-util/hip ) + !blas? ( + virtual/blas + !lapack? ( + virtual/lapacke + ) + ) + ${TEST_BACKENDS} + ) +" + +PATCHES=( + "${FILESDIR}/${PN}-3.4.0-doc-nocompress.patch" # bug 830064 + "${FILESDIR}/${PN}-3.4.0-buildstring.patch" + + "${FILESDIR}/${PN}-5.0.1-cmake-GNUInstallDirs.patch" + "${FILESDIR}/${PN}-5.0.1-make-static-libs-optional.patch" + + "${FILESDIR}/${PN}-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch" + "${FILESDIR}/${PN}-9999-product_threaded_dont_parallelize.patch" +) + +# TODO should be in cuda.eclass +cuda_get_host_compiler() { + if [[ -n "${NVCC_CCBIN}" ]]; then + echo "${NVCC_CCBIN}" + return + fi + + if [[ -n "${CUDAHOSTCXX}" ]]; then + echo "${CUDAHOSTCXX}" + return + fi + + einfo "Trying to find working CUDA host compiler" + + if ! tc-is-gcc && ! tc-is-clang; then + die "$(tc-get-compiler-type) compiler is not supported" + fi + + local compiler compiler_type compiler_version + local package package_version + local -x NVCC_CCBIN + local NVCC_CCBIN_default + + compiler_type="$(tc-get-compiler-type)" + compiler_version="$("${compiler_type}-major-version")" + + # try the default compiler first + NVCC_CCBIN="$(tc-getCXX)" + NVCC_CCBIN_default="${NVCC_CCBIN}-${compiler_version}" + + compiler="${NVCC_CCBIN/%-${compiler_version}}" + + # store the package so we can re-use it later + package="sys-devel/${compiler_type}" + package_version="${package}" + + ebegin "testing ${NVCC_CCBIN_default} (default)" + + while ! nvcc -v -ccbin "${NVCC_CCBIN}" - -x cu <<<"int main(){}" &>> "${T}/cuda_get_host_compiler.log" ; do + eend 1 + + while true; do + # prepare next version + if ! package_version="<$(best_version "${package_version}")"; then + die "could not find a supported version of ${compiler}" + fi + + NVCC_CCBIN="${compiler}-$(ver_cut 1 "${package_version/#<${package}-/}")" + + [[ "${NVCC_CCBIN}" != "${NVCC_CCBIN_default}" ]] && break + done + ebegin "testing ${NVCC_CCBIN}" + done + eend $? + + echo "${NVCC_CCBIN}" + export NVCC_CCBIN +} + +pkg_pretend() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]] && use openmp; then + tc-check-openmp + fi + + if use lapack; then + python-any-r1_pkg_setup + fi + + if { use test && { use spqr && use cholmod && use blas && use lapack; } || use pastix; } \ + || use blas \ + || use lapack \ + ; then + fortran-2_pkg_setup + fi + + if use test && use cuda && use cuda-clang; then + llvm-r2_pkg_setup + fi +} + +src_unpack() { + if [[ ${PV} = *9999* ]] ; then + git-r3_src_unpack + else + unpack "${P}.tar.bz2" + fi + + if use test && use lapack; then + pushd "${S}/lapack" > /dev/null || die + unpack "${PN}-lapack_addons-${LAPACK_ADDONS_PV}.tgz" + popd > /dev/null || die + fi +} + +src_prepare() { + # run patches here as we patch in test/ + cmake_src_prepare + + if use test && use lapack; then + pushd "${S}" > /dev/null || die + eapply "${FILESDIR}/${PN}-5.0.1-fix-lapack_testing.py.patch" + popd > /dev/null || die + fi +} + +src_configure() { + if use lapack; then + # bug 878987 + # multiple definition of `cgesdd_' + filter-lto + fi + + local mycmakeargs=( + -DCMAKE_CXX_STANDARD="20" + -DCMAKE_POSITION_INDEPENDENT_CODE="yes" + + -DEIGEN_BUILD_TESTING="$(usex test)" # Enable creation of Eigen tests. + + -DEIGEN_BUILD_BLAS="$(usex blas)" # Toggles the building of the Eigen Blas library + -DEIGEN_BUILD_LAPACK="$(usex blas "$(usex lapack)")" # Toggles the building of the included Eigen LAPACK library + + -DEIGEN_BUILD_DOC="$(usex doc)" # Enable creation of Eigen documentation + -DEIGEN_BUILD_PKGCONFIG="yes" # Build pkg-config .pc file for Eigen + ) + + append-cxxflags "-DEIGEN_USE_OPENBLAS_BFLOAT16=0" + + if use blas; then + mycmakeargs+=( + -DBUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_SHARED_LIBS="yes" + -DEIGEN_BUILD_STATIC_LIBS="yes" + -DEIGEN_INSTALL_STATIC_LIBS="yes" + ) + + if use lapack; then + mycmakeargs+=( + -DCMAKE_POLICY_DEFAULT_CMP0148="OLD" # FindPythonInterp + -DEIGEN_ENABLE_LAPACK_TESTS="$(usex test)" + ) + fi + fi + + if use doc || use test; then + mycmakeargs+=( + # needs Qt4 + -DEIGEN_TEST_NOQT="yes" # Disable Qt support in unit tests + ) + fi + + if use doc; then + mycmakeargs+=( + -DEIGEN_DOC_USE_MATHJAX="$(usex mathjax)" # Use MathJax for rendering math in HTML docs + -DEIGEN_INTERNAL_DOCUMENTATION=no # Build internal documentation + ) + fi + + if use test; then + mycmakeargs+=( + -DEIGEN_LEAVE_TEST_IN_ALL_TARGET=yes # Leaves tests in the all target, needed by ctest for automatic building + + # the OpenGL testsuite is extremely brittle, bug #712808 + -DEIGEN_TEST_OPENGL="$(usex opengl)" # Enable OpenGL support in unit tests + -DEIGEN_TEST_OPENMP="$(usex openmp)" # Enable/Disable OpenMP in tests/examples + + -DEIGEN_TEST_EXTERNAL_BLAS="$(usex !blas)" # Use external BLAS library for testsuite + + -DEIGEN_TEST_BUILD_DOCUMENTATION="no" # $(usex doc)" # Test building the doxygen documentation + + -DEIGEN_DEBUG_ASSERTS="$(usex debug)" # Enable advanced debugging of assertions + -DEIGEN_SPLIT_LARGE_TESTS="yes" # Split large tests into smaller executables + + -DEIGEN_TEST_CUDA="$(usex cuda)" # Enable CUDA support in unit tests + -DEIGEN_TEST_CUDA_CLANG="$(usex cuda "$(usex cuda-clang)")" # Use clang instead of nvcc to compile the CUDA tests + + -DEIGEN_TEST_HIP="$(usex hip)" # Add HIP support. + + # -DEIGEN_TEST_SYCL="$(usex sycl)" # Add Sycl support. + # -DEIGEN_SYCL_TRISYCL="no" # Use the triSYCL Sycl implementation (ComputeCPP by default). + + $(cmake_use_find_package adolc Adolc) + $(cmake_use_find_package boost Boost) + $(cmake_use_find_package cholmod CHOLMOD) + # -DDUCCFFT="$(usex ducc)" + -DDUCC_ROOT="DUCCFFT" + -DDUCCFFT="NOTFOUND" + $(cmake_use_find_package fftw FFTW ) + $(cmake_use_find_package klu KLU) + -DCMAKE_DISABLE_FIND_PACKAGE_MPREAL=yes + # $(cmake_use_find_package opengl OpenGL) # EIGEN_TEST_OPENGL + # $(cmake_use_find_package openmp OpenMP) # EIGEN_TEST_OPENMP + $(cmake_use_find_package pastix PASTIX) + # prevent pastix_nompi.h lookup it no longer exists, we enforce this via deps + -DPASTIX_pastix_nompi.h_INCLUDE_DIRS="FOUND" + + -DPOCKETFFT="$(usex pocketfft)" + $(cmake_use_find_package sparsehash GoogleHash) + $(cmake_use_find_package spqr SPQR) + $(cmake_use_find_package superlu SuperLU) + $(cmake_use_find_package umfpack UMFPACK) + ) + + if use arm; then + mycmakeargs+=( + -DEIGEN_TEST_NEON="$(usex cpu_flags_arm_neon)" + ) + fi + + if use arm64; then + mycmakeargs+=( + -DEIGEN_TEST_NEON64="$(usex cpu_flags_arm_neon)" + ) + fi + + if use amd64 || use x86; then + mycmakeargs+=( + # -DEIGEN_TEST_32BIT=no # Force generating 32bit code. + # -DEIGEN_TEST_X87=no # Force using X87 instructions. Implies no vectorization. + -DEIGEN_TEST_SSE2="$(usex cpu_flags_x86_sse2)" + -DEIGEN_TEST_SSE3="$(usex cpu_flags_x86_sse3)" + -DEIGEN_TEST_SSSE3="$(usex cpu_flags_x86_ssse3)" + -DEIGEN_TEST_FMA="$(usex cpu_flags_x86_fma3)" + -DEIGEN_TEST_SSE4_1="$(usex cpu_flags_x86_sse4_1)" + -DEIGEN_TEST_SSE4_2="$(usex cpu_flags_x86_sse4_2)" + -DEIGEN_TEST_AVX="$(usex cpu_flags_x86_avx)" + -DEIGEN_TEST_F16C="$(usex cpu_flags_x86_f16c)" + -DEIGEN_TEST_AVX2="$(usex cpu_flags_x86_avx2)" + -DEIGEN_TEST_AVX512="$(usex cpu_flags_x86_avx512f)" + -DEIGEN_TEST_AVX512DQ="$(usex cpu_flags_x86_avx512dq)" + ) + fi + + if use mips; then + mycmakeargs+=( + # -DEIGEN_TEST_MSA=no # Enable/Disable MSA in tests/examples + ) + fi + + if use ppc || use ppc64; then + mycmakeargs+=( + -DEIGEN_TEST_ALTIVEC="$(usex cpu_flags_ppc_altivec)" + -DEIGEN_TEST_VSX="$(usex cpu_flags_ppc_vsx)" + ) + fi + + if use s390; then + mycmakeargs+=( + # -DEIGEN_TEST_Z13=no # Enable/Disable S390X(zEC13) ZVECTOR in tests/examples + # -DEIGEN_TEST_Z14=no # Enable/Disable S390X(zEC14) ZVECTOR in tests/examples + ) + fi + + if use cuda; then + cuda_add_sandbox -w + + if use cuda-clang; then + local llvm_prefix + llvm_prefix="$(get_llvm_prefix -b)" + + # NVCCFLAGS gets injected into CMAKE_CXX_FLAGS, which means we need to use clang as gcc will fail with + # error: unrecognized command-line option + if ! tc-is-clang; then + export CC="${CHOST}-clang-${LLVM_SLOT}" + export CXX="${CHOST}-clang++-${LLVM_SLOT}" + fi + + NVCCFLAGS="${NVCCFLAGS:+${NVCCFLAGS} }--libomptarget-nvptx-bc-path=${llvm_prefix}/$(get_libdir)/nvptx64-nvidia-cuda/libomptarget-nvptx.bc" + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CHOST}-clang++-${LLVM_SLOT}" + ) + else + cuda_get_host_compiler + + mycmakeargs+=( + -DCUDA_HOST_COMPILER="${CUDAHOSTCXX}" + ) + if [[ -v CUDACXX ]]; then + mycmakeargs+=( + -DCUDA_NVCC_EXECUTABLE="${CUDACXX}" + -DCMAKE_POLICY_DEFAULT_CMP0146="OLD" # FindCUDA + ) + fi + fi + + if [[ "${CUDA_VERBOSE}" == true ]]; then + mycmakeargs+=( + -DCUDA_VERBOSE_BUILD="yes" + ) + NVCCFLAGS+=" -v" + fi + + if [[ -v CUDAARCHS ]]; then + mycmakeargs+=( + # TODO this needs to be lowest first for eigen + -DEIGEN_CUDA_COMPUTE_ARCH="${CUDAARCHS}" + ) + fi + + # CUDAFLAGS is used by cmake + # NVCCFLAGS is used by cuda.eclass + mycmakeargs+=( + -DEIGEN_CUDA_CXX_FLAGS="${NVCCFLAGS}" + + -DCUDA_USE_STATIC_CUDA_RUNTIME="no" + ) + fi + + if use opengl; then + mycmakeargs+=( + -DOpenGL_GL_PREFERENCE="GLVND" + ) + fi + fi + + cmake_src_configure +} + +src_compile() { + local targets=() + + if use blas; then + targets+=( blas ) + if use lapack; then + targets+=( lapack ) + fi + fi + + if use test; then + targets+=( buildtests ) + + if use cuda || use hip; then + targets+=( buildtests_gpu ) + fi + + # tests generate random data, which fails for some seeds + # we solve this via test reruns now + # export EIGEN_SEED=712808 + fi + + # we add doc last to capture results for buildtests + if use doc; then + targets+=( doc ) + fi + + if [[ -n "${targets[*]}" ]]; then + cmake_src_compile "${targets[@]}" + fi +} + +src_test() { + local CMAKE_SKIP_TESTS=( + "^ref_8$" + ) + + if use cholmod && use blas && use lapack; then + CMAKE_SKIP_TESTS+=( + "^cholmod_support_21$" + "^cholmod_support_22$" + ) + fi + + if use cuda; then + cuda_add_sandbox -w + fi + + if use klu && use blas; then + CMAKE_SKIP_TESTS+=( + "^klu_support_1$" + "^klu_support_2$" + ) + fi + + if use lapack; then + CMAKE_SKIP_TESTS+=( + "^LAPACK-xlintsts_stest_in$" + "^LAPACK-xeigtsts_sep_in$" + "^LAPACK-xeigtsts_svd_in$" + "^LAPACK-xlintstd_dtest_in$" + "^LAPACK-xeigtstd_sep_in$" + "^LAPACK-xeigtstd_svd_in$" + "^LAPACK-xlintstc_ctest_in$" + "^LAPACK-xeigtstc_svd_in$" + ) + fi + + local myctestargs=( + -j1 # otherwise breaks due to cmake reruns + --repeat until-pass:50 + ) + + if use opengl; then + virtx \ + cmake_src_test + else + cmake_src_test + fi +} + +src_install() { + local DOCS=() + cmake_src_install + + if use doc; then + pushd "${BUILD_DIR}/doc" > /dev/null || die + dodoc -r html + popd > /dev/null || die + fi +} diff --git a/dev-cpp/eigen/files/eigen-3.3.9-max-macro.patch b/dev-cpp/eigen/files/eigen-3.3.9-max-macro.patch new file mode 100644 index 000000000000..c5fdc2ed582c --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.3.9-max-macro.patch @@ -0,0 +1,17 @@ +--- a/unsupported/test/forward_adolc.cpp ++++ b/unsupported/test/forward_adolc.cpp +@@ -7,12 +7,13 @@ + // Public License v. 2.0. If a copy of the MPL was not distributed + // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +-#include "main.h" + #include <Eigen/Dense> + + #define NUMBER_DIRECTIONS 16 + #include <unsupported/Eigen/AdolcForward> + ++#include "main.h" ++ + template<typename Vector> + EIGEN_DONT_INLINE typename Vector::Scalar foo(const Vector& p) + { diff --git a/dev-cpp/eigen/files/eigen-3.4.0-buildstring.patch b/dev-cpp/eigen/files/eigen-3.4.0-buildstring.patch new file mode 100644 index 000000000000..8e9b98fbd8bb --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.0-buildstring.patch @@ -0,0 +1,25 @@ +--- a/cmake/EigenTesting.cmake ++++ b/cmake/EigenTesting.cmake +@@ -559,14 +559,22 @@ macro(ei_get_cxxflags VAR) + set(${VAR} VSX) + elseif(EIGEN_TEST_ALTIVEC) + set(${VAR} ALVEC) ++ elseif(EIGEN_TEST_AVX512DQ) ++ set(${VAR} AVX512DQ) ++ elseif(EIGEN_TEST_AVX512) ++ set(${VAR} AVX512) ++ elseif(EIGEN_TEST_AVX2) ++ set(${VAR} AVX2) + elseif(EIGEN_TEST_FMA) + set(${VAR} FMA) ++ elseif(EIGEN_TEST_F16C) ++ set(${VAR} F16C) + elseif(EIGEN_TEST_AVX) + set(${VAR} AVX) + elseif(EIGEN_TEST_SSE4_2) + set(${VAR} SSE42) + elseif(EIGEN_TEST_SSE4_1) + set(${VAR} SSE41) + elseif(EIGEN_TEST_SSSE3) + set(${VAR} SSSE3) + elseif(EIGEN_TEST_SSE3) diff --git a/dev-cpp/eigen/files/eigen-3.4.0-c++-20.patch b/dev-cpp/eigen/files/eigen-3.4.0-c++-20.patch new file mode 100644 index 000000000000..39eef7dc0c0f --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.0-c++-20.patch @@ -0,0 +1,30 @@ +From: Nicholas Vinson <nvinson234@gmail.com> +Date: Mon, 15 Dec 2025 20:37:04 -0500 + +--- a/Eigen/src/Eigenvalues/ComplexSchur.h ++++ b/Eigen/src/Eigenvalues/ComplexSchur.h +@@ -277,7 +277,8 @@ + using std::abs; + if ((iter == 10 || iter == 20) && iu > 1) { + // exceptional shift, taken from http://www.netlib.org/eispack/comqr.f +- return abs(numext::real(m_matT.coeff(iu,iu-1))) + abs(numext::real(m_matT.coeff(iu-1,iu-2))); ++ return ComplexSchur<MatrixType>::ComplexScalar( ++ abs(numext::real(m_matT.coeff(iu, iu - 1))) + abs(numext::real(m_matT.coeff(iu - 1, iu - 2)))); + } + + // compute the shift as one of the eigenvalues of t, the 2x2 +--- a/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h ++++ b/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +@@ -86,8 +86,8 @@ + for (Index i = 0; i < rows; i++) + mx = (std::max)(mx, std::abs(m_f(Ashifted(i, i) + avgEival, static_cast<int>(s + r)))); + if (r != 0) + rfactorial *= RealScalar(r); +- delta = (std::max)(delta, mx / rfactorial); ++ delta = (std::max)(delta, RealScalar(mx / rfactorial)); + } + const RealScalar P_norm = P.cwiseAbs().rowwise().sum().maxCoeff(); + if (mu * delta * P_norm < NumTraits<Scalar>::epsilon() * F_norm) // series converged +-- +2.52.0 + diff --git a/dev-cpp/eigen/files/eigen-3.4.0-cxxstandard.patch b/dev-cpp/eigen/files/eigen-3.4.0-cxxstandard.patch new file mode 100644 index 000000000000..826aa78d05aa --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.0-cxxstandard.patch @@ -0,0 +1,108 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -74,19 +74,9 @@ macro(ei_add_cxx_compiler_flag FLAG) + endif() + endmacro() + +-check_cxx_compiler_flag("-std=c++11" EIGEN_COMPILER_SUPPORT_CPP11) +- +-if(EIGEN_TEST_CXX11) +- set(CMAKE_CXX_STANDARD 11) +- set(CMAKE_CXX_EXTENSIONS OFF) +- if(EIGEN_COMPILER_SUPPORT_CPP11) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +- endif() +-else() +- #set(CMAKE_CXX_STANDARD 03) +- #set(CMAKE_CXX_EXTENSIONS OFF) +- ei_add_cxx_compiler_flag("-std=c++03") +-endif() ++set(CMAKE_CXX_STANDARD 14) ++set(CMAKE_CXX_STANDARD_REQUIRED TRUE) ++set(CMAKE_CXX_EXTENSIONS OFF) + + # Determine if we should build shared libraries on this platform. + get_cmake_property(EIGEN_BUILD_SHARED_LIBS TARGET_SUPPORTS_SHARED_LIBS) +@@ -157,7 +157,6 @@ if(NOT MSVC) + ei_add_cxx_compiler_flag("-Wshorten-64-to-32") + ei_add_cxx_compiler_flag("-Wlogical-op") + ei_add_cxx_compiler_flag("-Wenum-conversion") +- ei_add_cxx_compiler_flag("-Wc++11-extensions") + ei_add_cxx_compiler_flag("-Wdouble-promotion") + # ei_add_cxx_compiler_flag("-Wconversion") + +--- a/Eigen/src/Core/util/Macros.h ++++ b/Eigen/src/Core/util/Macros.h +@@ -37,7 +37,7 @@ + // Expected values are 03, 11, 14, 17, etc. + // By default, let's use an arbitrarily large C++ version. + #ifndef EIGEN_MAX_CPP_VER +-#define EIGEN_MAX_CPP_VER 99 ++#define EIGEN_MAX_CPP_VER 14 + #endif + + /** Allows to disable some optimizations which might affect the accuracy of the result. +--- a/doc/examples/CMakeLists.txt ++++ b/doc/examples/CMakeLists.txt +@@ -14,7 +14,3 @@ foreach(example_src ${examples_SRCS}) + ) + add_dependencies(all_examples ${example}) + endforeach() +- +-if(EIGEN_COMPILER_SUPPORT_CPP11) +-ei_add_target_property(nullary_indexing COMPILE_FLAGS "-std=c++11") +-endif() +\ No newline at end of file +diff --git a/doc/snippets/CMakeLists.txt b/doc/snippets/CMakeLists.txt +index 65f195a..4cb18c8 100644 +--- a/doc/snippets/CMakeLists.txt ++++ b/doc/snippets/CMakeLists.txt +@@ -15,9 +15,6 @@ foreach(snippet_src ${snippets_SRCS}) + if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) + target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) + endif() +- if(${snippet_src} MATCHES "cxx11") +- set_target_properties(${compile_snippet_target} PROPERTIES COMPILE_FLAGS "-std=c++11") +- endif() + if(${snippet_src} MATCHES "deprecated") + set_target_properties(${compile_snippet_target} PROPERTIES COMPILE_FLAGS "-DEIGEN_NO_DEPRECATED_WARNING") + endif() +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -399,7 +399,6 @@ if(CUDA_FOUND) + set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE) + endif() + if(EIGEN_TEST_CUDA_CLANG) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") + foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH) + string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}") +--- a/unsupported/test/CMakeLists.txt ++++ b/unsupported/test/CMakeLists.txt +@@ -59,7 +59,7 @@ find_package(MPREAL) + if(MPREAL_FOUND AND EIGEN_COMPILER_SUPPORT_CPP11) + ei_add_property(EIGEN_TESTED_BACKENDS "MPFR C++, ") + include_directories(${MPREAL_INCLUDES}) +- ei_add_test(mpreal_support "-std=c++11" "${MPREAL_LIBRARIES}" ) ++ ei_add_test(mpreal_support "-std=c++14" "${MPREAL_LIBRARIES}" ) + else() + ei_add_property(EIGEN_MISSING_BACKENDS "MPFR C++, ") + endif() +@@ -308,7 +308,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) + set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE) + endif() + if(EIGEN_TEST_CUDA_CLANG) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") + foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) + string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${ARCH}") +--- a/doc/special_examples/CMakeLists.txt ++++ b/doc/special_examples/CMakeLists.txt +@@ -23,7 +23,6 @@ if(EIGEN_COMPILER_SUPPORT_CPP11) + add_executable(random_cpp11 random_cpp11.cpp) + target_link_libraries(random_cpp11 ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) + add_dependencies(all_examples random_cpp11) +- ei_add_target_property(random_cpp11 COMPILE_FLAGS "-std=c++11") + + add_custom_command( + TARGET random_cpp11 diff --git a/dev-cpp/eigen/files/eigen-3.4.0-doc-nocompress.patch b/dev-cpp/eigen/files/eigen-3.4.0-doc-nocompress.patch new file mode 100644 index 000000000000..b9c252ebb09c --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.0-doc-nocompress.patch @@ -0,0 +1,15 @@ +--- a/doc/CMakeLists.txt ++++ b/doc/CMakeLists.txt +@@ -112,11 +112,7 @@ + COMMAND doxygen + COMMAND doxygen Doxyfile-unsupported + COMMAND ${CMAKE_COMMAND} -E copy ${Eigen_BINARY_DIR}/doc/html/group__TopicUnalignedArrayAssert.html ${Eigen_BINARY_DIR}/doc/html/TopicUnalignedArrayAssert.html +- COMMAND ${CMAKE_COMMAND} -E rename html eigen-doc +- COMMAND ${CMAKE_COMMAND} -E remove eigen-doc/eigen-doc.tgz eigen-doc/unsupported/_formulas.log eigen-doc/_formulas.log +- COMMAND ${CMAKE_COMMAND} -E tar cfz eigen-doc.tgz eigen-doc +- COMMAND ${CMAKE_COMMAND} -E rename eigen-doc.tgz eigen-doc/eigen-doc.tgz +- COMMAND ${CMAKE_COMMAND} -E rename eigen-doc html ++ COMMAND ${CMAKE_COMMAND} -E remove html/unsupported/_formulas.log html/_formulas.log + WORKING_DIRECTORY ${Eigen_BINARY_DIR}/doc) + + add_dependencies(doc doc-eigen-prerequisites doc-unsupported-prerequisites) diff --git a/dev-cpp/eigen/files/eigen-3.4.0-noansi.patch b/dev-cpp/eigen/files/eigen-3.4.0-noansi.patch new file mode 100644 index 000000000000..c0ce44445c1d --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.0-noansi.patch @@ -0,0 +1,18 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -184,6 +184,7 @@ if(NOT MSVC) + ei_add_cxx_compiler_flag("-wd2304") # disable ICC's "warning #2304: non-explicit constructor with single argument may cause implicit type conversion" produced by -Wnon-virtual-dtor + + ++ if(NOT EIGEN_TEST_CXX11) + # The -ansi flag must be added last, otherwise it is also used as a linker flag by check_cxx_compiler_flag making it fails + # Moreover we should not set both -strict-ansi and -ansi + check_cxx_compiler_flag("-strict-ansi" COMPILER_SUPPORT_STRICTANSI) +@@ -194,6 +195,7 @@ if(NOT MSVC) + else() + ei_add_cxx_compiler_flag("-ansi") + endif() ++ endif() + + if(ANDROID_NDK) + ei_add_cxx_compiler_flag("-pie") diff --git a/dev-cpp/eigen/files/eigen-3.4.0-ppc-no-vsx.patch b/dev-cpp/eigen/files/eigen-3.4.0-ppc-no-vsx.patch new file mode 100644 index 000000000000..7cfeaaf129ff --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.0-ppc-no-vsx.patch @@ -0,0 +1,195 @@ +https://gitlab.com/libeigen/eigen/-/merge_requests/1028 +https://bugs.gentoo.org/936107 +--- a/Eigen/Core ++++ b/Eigen/Core +@@ -346,7 +346,7 @@ + #include "src/Core/CoreIterators.h" + #include "src/Core/ConditionEstimator.h" + +-#if defined(EIGEN_VECTORIZE_ALTIVEC) || defined(EIGEN_VECTORIZE_VSX) ++#if defined(EIGEN_VECTORIZE_VSX) + #include "src/Core/arch/AltiVec/MatrixProduct.h" + #elif defined EIGEN_VECTORIZE_NEON + #include "src/Core/arch/NEON/GeneralBlockPanelKernel.h" +--- a/Eigen/src/Core/arch/AltiVec/Complex.h ++++ b/Eigen/src/Core/arch/AltiVec/Complex.h +@@ -100,6 +100,7 @@ + HasAbs2 = 0, + HasMin = 0, + HasMax = 0, ++ HasSqrt = 1, + #ifdef __VSX__ + HasBlend = 1, + #endif +@@ -320,6 +321,7 @@ + HasAbs2 = 0, + HasMin = 0, + HasMax = 0, ++ HasSqrt = 1, + HasSetLinear = 0 + }; + }; +--- a/Eigen/src/Core/arch/AltiVec/MathFunctions.h ++++ b/Eigen/src/Core/arch/AltiVec/MathFunctions.h +@@ -40,16 +40,14 @@ + return pcos_float(_x); + } + ++#ifdef __VSX__ + #ifndef EIGEN_COMP_CLANG + template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED + Packet4f prsqrt<Packet4f>(const Packet4f& x) + { + return vec_rsqrt(x); + } +-#endif + +-#ifdef __VSX__ +-#ifndef EIGEN_COMP_CLANG + template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_UNUSED + Packet2d prsqrt<Packet2d>(const Packet2d& x) + { +@@ -74,6 +72,26 @@ + { + return pexp_double(_x); + } ++ ++template<> EIGEN_STRONG_INLINE Packet8bf psqrt<Packet8bf> (const Packet8bf& a){ ++ BF16_TO_F32_UNARY_OP_WRAPPER(psqrt<Packet4f>, a); ++} ++ ++#ifndef EIGEN_COMP_CLANG ++template<> EIGEN_STRONG_INLINE Packet8bf prsqrt<Packet8bf> (const Packet8bf& a){ ++ BF16_TO_F32_UNARY_OP_WRAPPER(prsqrt<Packet4f>, a); ++} ++#endif ++#else ++template<> EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS ++Packet4f psqrt<Packet4f>(const Packet4f& x) ++{ ++ Packet4f a; ++ for (Index i = 0; i < packet_traits<float>::size; i++) { ++ a[i] = numext::sqrt(x[i]); ++ } ++ return a; ++} + #endif + + // Hyperbolic Tangent function. +--- a/Eigen/src/Core/arch/AltiVec/PacketMath.h ++++ b/Eigen/src/Core/arch/AltiVec/PacketMath.h +@@ -175,16 +175,19 @@ + #else + HasRsqrt = 0, + #endif ++ HasTanh = EIGEN_FAST_MATH, ++ HasErf = EIGEN_FAST_MATH, ++ HasRint = 1, + #else + HasSqrt = 0, + HasRsqrt = 0, +- HasTanh = EIGEN_FAST_MATH, +- HasErf = EIGEN_FAST_MATH, ++ HasTanh = 0, ++ HasErf = 0, ++ HasRint = 0, + #endif + HasRound = 1, + HasFloor = 1, + HasCeil = 1, +- HasRint = 1, + HasNegate = 1, + HasBlend = 1 + }; +@@ -217,16 +220,17 @@ + #else + HasRsqrt = 0, + #endif ++ HasRint = 1, + #else + HasSqrt = 0, + HasRsqrt = 0, +- HasTanh = EIGEN_FAST_MATH, +- HasErf = EIGEN_FAST_MATH, ++ HasRint = 0, + #endif ++ HasTanh = 0, ++ HasErf = 0, + HasRound = 1, + HasFloor = 1, + HasCeil = 1, +- HasRint = 1, + HasNegate = 1, + HasBlend = 1 + }; +@@ -872,19 +876,29 @@ + return vec_nor(c,c); + } + ++#ifdef __VSX__ + template<> EIGEN_STRONG_INLINE Packet4i pcmp_le(const Packet4i& a, const Packet4i& b) { return reinterpret_cast<Packet4i>(vec_cmple(a,b)); } ++#endif + template<> EIGEN_STRONG_INLINE Packet4i pcmp_lt(const Packet4i& a, const Packet4i& b) { return reinterpret_cast<Packet4i>(vec_cmplt(a,b)); } + template<> EIGEN_STRONG_INLINE Packet4i pcmp_eq(const Packet4i& a, const Packet4i& b) { return reinterpret_cast<Packet4i>(vec_cmpeq(a,b)); } ++#ifdef __VSX__ + template<> EIGEN_STRONG_INLINE Packet8s pcmp_le(const Packet8s& a, const Packet8s& b) { return reinterpret_cast<Packet8s>(vec_cmple(a,b)); } ++#endif + template<> EIGEN_STRONG_INLINE Packet8s pcmp_lt(const Packet8s& a, const Packet8s& b) { return reinterpret_cast<Packet8s>(vec_cmplt(a,b)); } + template<> EIGEN_STRONG_INLINE Packet8s pcmp_eq(const Packet8s& a, const Packet8s& b) { return reinterpret_cast<Packet8s>(vec_cmpeq(a,b)); } ++#ifdef __VSX__ + template<> EIGEN_STRONG_INLINE Packet8us pcmp_le(const Packet8us& a, const Packet8us& b) { return reinterpret_cast<Packet8us>(vec_cmple(a,b)); } ++#endif + template<> EIGEN_STRONG_INLINE Packet8us pcmp_lt(const Packet8us& a, const Packet8us& b) { return reinterpret_cast<Packet8us>(vec_cmplt(a,b)); } + template<> EIGEN_STRONG_INLINE Packet8us pcmp_eq(const Packet8us& a, const Packet8us& b) { return reinterpret_cast<Packet8us>(vec_cmpeq(a,b)); } ++#ifdef __VSX__ + template<> EIGEN_STRONG_INLINE Packet16c pcmp_le(const Packet16c& a, const Packet16c& b) { return reinterpret_cast<Packet16c>(vec_cmple(a,b)); } ++#endif + template<> EIGEN_STRONG_INLINE Packet16c pcmp_lt(const Packet16c& a, const Packet16c& b) { return reinterpret_cast<Packet16c>(vec_cmplt(a,b)); } + template<> EIGEN_STRONG_INLINE Packet16c pcmp_eq(const Packet16c& a, const Packet16c& b) { return reinterpret_cast<Packet16c>(vec_cmpeq(a,b)); } ++#ifdef __VSX__ + template<> EIGEN_STRONG_INLINE Packet16uc pcmp_le(const Packet16uc& a, const Packet16uc& b) { return reinterpret_cast<Packet16uc>(vec_cmple(a,b)); } ++#endif + template<> EIGEN_STRONG_INLINE Packet16uc pcmp_lt(const Packet16uc& a, const Packet16uc& b) { return reinterpret_cast<Packet16uc>(vec_cmplt(a,b)); } + template<> EIGEN_STRONG_INLINE Packet16uc pcmp_eq(const Packet16uc& a, const Packet16uc& b) { return reinterpret_cast<Packet16uc>(vec_cmpeq(a,b)); } + +@@ -937,6 +951,7 @@ + } + template<> EIGEN_STRONG_INLINE Packet4f pceil<Packet4f>(const Packet4f& a) { return vec_ceil(a); } + template<> EIGEN_STRONG_INLINE Packet4f pfloor<Packet4f>(const Packet4f& a) { return vec_floor(a); } ++#ifdef __VSX__ + template<> EIGEN_STRONG_INLINE Packet4f print<Packet4f>(const Packet4f& a) + { + Packet4f res; +@@ -947,6 +962,7 @@ + + return res; + } ++#endif + + template<typename Packet> EIGEN_STRONG_INLINE Packet ploadu_common(const __UNPACK_TYPE__(Packet)* from) + { +@@ -1341,12 +1357,6 @@ + BF16_TO_F32_BINARY_OP_WRAPPER(psub<Packet4f>, a, b); + } + +-template<> EIGEN_STRONG_INLINE Packet8bf psqrt<Packet8bf> (const Packet8bf& a){ +- BF16_TO_F32_UNARY_OP_WRAPPER(vec_sqrt, a); +-} +-template<> EIGEN_STRONG_INLINE Packet8bf prsqrt<Packet8bf> (const Packet8bf& a){ +- BF16_TO_F32_UNARY_OP_WRAPPER(prsqrt<Packet4f>, a); +-} + template<> EIGEN_STRONG_INLINE Packet8bf pexp<Packet8bf> (const Packet8bf& a){ + BF16_TO_F32_UNARY_OP_WRAPPER(pexp_float, a); + } +@@ -1390,9 +1400,11 @@ + template<> EIGEN_STRONG_INLINE Packet8bf pround<Packet8bf> (const Packet8bf& a){ + BF16_TO_F32_UNARY_OP_WRAPPER(pround<Packet4f>, a); + } ++#ifdef __VSX__ + template<> EIGEN_STRONG_INLINE Packet8bf print<Packet8bf> (const Packet8bf& a){ + BF16_TO_F32_UNARY_OP_WRAPPER(print<Packet4f>, a); + } ++#endif + template<> EIGEN_STRONG_INLINE Packet8bf pmadd(const Packet8bf& a, const Packet8bf& b, const Packet8bf& c) { + Packet4f a_even = Bf16ToF32Even(a); + Packet4f a_odd = Bf16ToF32Odd(a); diff --git a/dev-cpp/eigen/files/eigen-3.4.1-bug1213-link-with-Eigen3-Eigen.patch b/dev-cpp/eigen/files/eigen-3.4.1-bug1213-link-with-Eigen3-Eigen.patch new file mode 100644 index 000000000000..9ced714f0c51 --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.1-bug1213-link-with-Eigen3-Eigen.patch @@ -0,0 +1,25 @@ +From 470c47b3b8309cb71cf48146e56744bd2630827a Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Sat, 28 Feb 2026 23:16:55 +0100 +Subject: [PATCH] bug1213: link with Eigen3::Eigen + +Doesn't find Eigen/Core otherwise. +--- + test/CMakeLists.txt | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index f503efc..360f989 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -299,6 +299,7 @@ if(EIGEN_TEST_CXX11) + endif() + + add_executable(bug1213 bug1213.cpp bug1213_main.cpp) ++target_link_libraries(bug1213 Eigen3::Eigen) + + check_cxx_compiler_flag("-ffast-math" COMPILER_SUPPORT_FASTMATH) + if(COMPILER_SUPPORT_FASTMATH) +-- +2.53.0 + diff --git a/dev-cpp/eigen/files/eigen-3.4.1-cxxstandard-17.patch b/dev-cpp/eigen/files/eigen-3.4.1-cxxstandard-17.patch new file mode 100644 index 000000000000..720898bdd11c --- /dev/null +++ b/dev-cpp/eigen/files/eigen-3.4.1-cxxstandard-17.patch @@ -0,0 +1,72 @@ +From cd8bb671321b5163c21f84689f929b671ed68750 Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Mon, 20 Oct 2025 21:26:47 +0200 +Subject: [PATCH] cxx standard 17 + +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 80d36b991..8106bb264 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -330,11 +330,8 @@ if (EIGEN_BUILD_TESTING) + + option(EIGEN_TEST_CXX11 "Enable testing with C++11 and C++11 features (e.g. Tensor module)." ${EIGEN_COMPILER_SUPPORT_CPP11}) + if(EIGEN_TEST_CXX11) +- set(CMAKE_CXX_STANDARD 11) ++ set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_EXTENSIONS OFF) +- if(EIGEN_COMPILER_SUPPORT_CPP11) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +- endif() + else() + ei_add_cxx_compiler_flag("-std=c++03") + endif() +@@ -373,7 +370,7 @@ if (EIGEN_BUILD_TESTING) + ei_add_cxx_compiler_flag("-Wshorten-64-to-32") + ei_add_cxx_compiler_flag("-Wlogical-op") + ei_add_cxx_compiler_flag("-Wenum-conversion") +- ei_add_cxx_compiler_flag("-Wc++11-extensions") ++ # ei_add_cxx_compiler_flag("-Wc++11-extensions") + ei_add_cxx_compiler_flag("-Wdouble-promotion") + # ei_add_cxx_compiler_flag("-Wconversion") + ei_add_cxx_compiler_flag("-Wshadow") +diff --git a/doc/special_examples/CMakeLists.txt b/doc/special_examples/CMakeLists.txt +index a0267a512..d7fc80976 100644 +--- a/doc/special_examples/CMakeLists.txt ++++ b/doc/special_examples/CMakeLists.txt +@@ -23,7 +23,6 @@ if(EIGEN_COMPILER_SUPPORT_CPP11) + add_executable(random_cpp11 random_cpp11.cpp) + target_link_libraries(random_cpp11 ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO} Eigen3::Eigen) + add_dependencies(all_examples random_cpp11) +- target_compile_options(random_cpp11 PRIVATE "-std=c++11") + + add_custom_command( + TARGET random_cpp11 +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index 7ce260e0e..f503efc5d 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -386,7 +386,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) + string(REPLACE "-fno-check-new" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + + if(EIGEN_TEST_CUDA_CLANG) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") + foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH) + string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}") +diff --git a/unsupported/test/CMakeLists.txt b/unsupported/test/CMakeLists.txt +index 1d5e9b174..cf394de86 100644 +--- a/unsupported/test/CMakeLists.txt ++++ b/unsupported/test/CMakeLists.txt +@@ -227,7 +227,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) + string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + + if(EIGEN_TEST_CUDA_CLANG) +- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") + foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) + string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${ARCH}") +-- +2.51.1 + diff --git a/dev-cpp/eigen/files/eigen-5.0.0-doxygen-1.14.patch b/dev-cpp/eigen/files/eigen-5.0.0-doxygen-1.14.patch new file mode 100644 index 000000000000..89e049368022 --- /dev/null +++ b/dev-cpp/eigen/files/eigen-5.0.0-doxygen-1.14.patch @@ -0,0 +1,136 @@ +From cf458c66ee01802d5023fcab78412583b5c73574 Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel <guilhem.saurel@laas.fr> +Date: Tue, 16 Dec 2025 09:40:05 +0100 +Subject: [PATCH 1/4] doc: add and use \anchor Eigen_placeholders_lastN + +fix for Doxygen >= 1.14: +``` +doc/Manual.dox:177: error: unable to resolve link to 'Eigen::placeholders::lastN(SizeType)' for \link command +doc/Manual.dox:178: error: unable to resolve link to 'Eigen::placeholders::lastN(SizeType,IncrType)' for \link command +``` +--- + Eigen/src/Core/ArithmeticSequence.h | 2 +- + doc/TutorialSlicingIndexing.dox | 3 +-- + 2 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/Eigen/src/Core/ArithmeticSequence.h b/Eigen/src/Core/ArithmeticSequence.h +index ae6373dda..41617713f 100644 +--- a/Eigen/src/Core/ArithmeticSequence.h ++++ b/Eigen/src/Core/ArithmeticSequence.h +@@ -182,7 +182,7 @@ namespace placeholders { + * \returns a symbolic ArithmeticSequence representing the last \a size elements with increment \a incr. + * + * It is a shortcut for: \code seqN(last-(size-fix<1>)*incr, size, incr) \endcode +- * ++ * \anchor Eigen_placeholders_lastN + * \sa lastN(SizeType), seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType) */ + template <typename SizeType, typename IncrType> + auto lastN(SizeType size, IncrType incr) +diff --git a/doc/TutorialSlicingIndexing.dox b/doc/TutorialSlicingIndexing.dox +index 6ebaa2d6d..a1b00dfc4 100644 +--- a/doc/TutorialSlicingIndexing.dox ++++ b/doc/TutorialSlicingIndexing.dox +@@ -114,8 +114,7 @@ Here are some examples for a 2D array/matrix \c A and a 1D array/vector \c v. + + As seen in the last example, referencing the <i> last n </i> elements (or rows/columns) is a bit cumbersome to write. + This becomes even more tricky and error prone with a non-default increment. +-Here comes \link Eigen::placeholders::lastN(SizeType) Eigen::placeholders::lastN(size) \endlink, and +-\link Eigen::placeholders::lastN(SizeType,IncrType) Eigen::placeholders::lastN(size,incr) \endlink: ++Here comes \ref Eigen_placeholders_lastN : + + <table class="manual"> + <tr> +-- +GitLab + + +From 6be98c166c86a2360177bad9cdccc55ac1ceed7b Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel <guilhem.saurel@laas.fr> +Date: Tue, 16 Dec 2025 10:13:56 +0100 +Subject: [PATCH 2/4] doc: fix html + +fix for Doxygen >= 1.14: +``` +doc/Manual.dox:656: error: expected <tr> or </table> tag but found token TK_HTMLTAG instead! +``` +--- + doc/QuickReference.dox | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/doc/QuickReference.dox b/doc/QuickReference.dox +index 1fb000fdc..4aece902c 100644 +--- a/doc/QuickReference.dox ++++ b/doc/QuickReference.dox +@@ -551,7 +551,6 @@ Read-write access to sub-vectors: + <tr> + <th>Default versions</th> + <th>Optimized versions when the size \n is known at compile time</th></tr> +-<th></th> + + <tr><td>\code vec1.head(n)\endcode</td><td>\code vec1.head<n>()\endcode</td><td>the first \c n coeffs </td></tr> + <tr><td>\code vec1.tail(n)\endcode</td><td>\code vec1.tail<n>()\endcode</td><td>the last \c n coeffs </td></tr> +-- +GitLab + + +From ac5d00609f14b7402f1fe8274e4d5db3c61f091e Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel <guilhem.saurel@laas.fr> +Date: Tue, 16 Dec 2025 10:37:35 +0100 +Subject: [PATCH 3/4] doc: typo + +fix for doxygen 1.15: +``` +doc/UnalignedArrayAssert.dox:134: error: Reached end of file while still searching closing '`' of a verbatim block starting at line 117 +doc/UnalignedArrayAssert.dox:134: error: Reached end of file while still inside a (nested) comment. Nesting level 1 (possible line reference(s): 3) +``` +--- + doc/UnalignedArrayAssert.dox | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/doc/UnalignedArrayAssert.dox b/doc/UnalignedArrayAssert.dox +index ca674a267..0ed6f8835 100644 +--- a/doc/UnalignedArrayAssert.dox ++++ b/doc/UnalignedArrayAssert.dox +@@ -7,7 +7,7 @@ Hello! You are seeing this webpage because your program terminated on an asserti + my_program: path/to/eigen/Eigen/src/Core/DenseStorage.h:44: + Eigen::internal::matrix_array<T, Size, MatrixOptions, Align>::internal::matrix_array() + [with T = double, int Size = 2, int MatrixOptions = 2, bool Align = true]: +-Assertion `(reinterpret_cast<size_t>(array) & (sizemask)) == 0 && "this assertion ++Assertion (reinterpret_cast<size_t>(array) & (sizemask)) == 0 && "this assertion + is explained here: http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html + **** READ THIS WEB PAGE !!! ****"' failed. + </pre> +-- +GitLab + + +From ae263fb905b2dd9ff3ad9b47dc44f90466f7b1c8 Mon Sep 17 00:00:00 2001 +From: Guilhem Saurel <guilhem.saurel@laas.fr> +Date: Tue, 16 Dec 2025 10:40:27 +0100 +Subject: [PATCH 4/4] doc: define eigenAutoToc alias + +Fix for doxygen 1.15: +``` +doc/Manual.dox:95: error: Found unexpanded alias '\cpp17'. Check if number of arguments passed is correct. +doc/Manual.dox:98: error: Found unexpanded alias '\eigenAutoToc'. Check if number of arguments passed is correct. +``` +--- + doc/Doxyfile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in +index 25a7e2e9a..445fc0a6f 100644 +--- a/doc/Doxyfile.in ++++ b/doc/Doxyfile.in +@@ -32,7 +32,7 @@ ALIASES = "only_for_vectors=This is only for vectors (either row- + "cpp14=<span class='cpp14'>[c++14]</span>" \ + "cpp17=<span class='cpp17'>[c++17]</span>" \ + "newin{1}=<span class='newin3x'>New in %Eigen \1.</span>" \ +- eigenAutoToc= \ ++ "eigenAutoToc=<!-- TOC placeholder -->" \ + eigenManualPage=\defgroup + EXTENSION_MAPPING = .h=C++ \ + no_extension=C++ +-- +GitLab + diff --git a/dev-cpp/eigen/files/eigen-5.0.0-please_protect_your_min_with_parentheses.patch b/dev-cpp/eigen/files/eigen-5.0.0-please_protect_your_min_with_parentheses.patch new file mode 100644 index 000000000000..ee8ab16793cb --- /dev/null +++ b/dev-cpp/eigen/files/eigen-5.0.0-please_protect_your_min_with_parentheses.patch @@ -0,0 +1,35 @@ +From 056b77036b4c97fee25bbd7a747e55c75c79cd48 Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Tue, 23 Sep 2025 00:40:14 +0200 +Subject: [PATCH] please protect your min with parentheses + +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/Eigen/src/Core/products/Parallelizer.h b/Eigen/src/Core/products/Parallelizer.h +index 4f36689..899d78f 100644 +--- a/Eigen/src/Core/products/Parallelizer.h ++++ b/Eigen/src/Core/products/Parallelizer.h +@@ -141,7 +141,7 @@ inline void manage_multi_threading(Action action, int* v) { + // for OpenMP. + eigen_internal_assert(*v >= 0); + int omp_threads = omp_get_max_threads(); +- m_maxThreads = (*v == 0 ? omp_threads : std::min(*v, omp_threads)); ++ m_maxThreads = (*v == 0 ? omp_threads : (std::min)(*v, omp_threads)); + #elif defined(EIGEN_GEMM_THREADPOOL) + // Calling action == SetAction and *v = 0 means + // restoring m_maxThreads to the number of threads in the ThreadPool, +diff --git a/test/product_threaded.cpp b/test/product_threaded.cpp +index 1782c28..85c2615 100644 +--- a/test/product_threaded.cpp ++++ b/test/product_threaded.cpp +@@ -7,6 +7,7 @@ + // Public License v. 2.0. If a copy of the MPL was not distributed + // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + ++#define EIGEN_DONT_PARALLELIZE + #define EIGEN_GEMM_THREADPOOL + #include "main.h" + +-- +2.51.0 + diff --git a/dev-cpp/eigen/files/eigen-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch b/dev-cpp/eigen/files/eigen-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch new file mode 100644 index 000000000000..9a740351ead9 --- /dev/null +++ b/dev-cpp/eigen/files/eigen-5.0.1-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch @@ -0,0 +1,29 @@ +From d0e70fb11f54ccc8117030482fb7b3b359261cbf Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Mon, 22 Dec 2025 17:19:51 +0100 +Subject: Do not show deprecated CUDA device properties for CUDA-13 + +Fixes: 9e5714b93b3a0d7848e72db5fa2b58decaa60297 +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/test/gpu_common.h b/test/gpu_common.h +index f34f1b078..f47742079 100644 +--- a/test/gpu_common.h ++++ b/test/gpu_common.h +@@ -153,9 +153,13 @@ void ei_test_init_gpu() { + std::cout << " warpSize: " << deviceProp.warpSize << "\n"; + std::cout << " regsPerBlock: " << deviceProp.regsPerBlock << "\n"; + std::cout << " concurrentKernels: " << deviceProp.concurrentKernels << "\n"; ++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000 + std::cout << " clockRate: " << deviceProp.clockRate << "\n"; ++#endif + std::cout << " canMapHostMemory: " << deviceProp.canMapHostMemory << "\n"; ++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000 + std::cout << " computeMode: " << deviceProp.computeMode << "\n"; ++#endif + } + + #endif // EIGEN_TEST_GPU_COMMON_H +-- +2.52.0 + diff --git a/dev-cpp/eigen/files/eigen-5.0.1-c++-20.patch b/dev-cpp/eigen/files/eigen-5.0.1-c++-20.patch new file mode 100644 index 000000000000..c770cbe827cc --- /dev/null +++ b/dev-cpp/eigen/files/eigen-5.0.1-c++-20.patch @@ -0,0 +1,29 @@ +From: Nicholas Vinson <nvinson234@gmail.com> +Date: Mon, 15 Dec 2025 20:37:04 -0500 + +--- a/Eigen/src/Eigenvalues/ComplexSchur.h ++++ b/Eigen/src/Eigenvalues/ComplexSchur.h +@@ -277,7 +277,8 @@ + using std::abs; + if ((iter == 10 || iter == 20) && iu > 1) { + // exceptional shift, taken from http://www.netlib.org/eispack/comqr.f +- return abs(numext::real(m_matT.coeff(iu, iu - 1))) + abs(numext::real(m_matT.coeff(iu - 1, iu - 2))); ++ return ComplexSchur<MatrixType>::ComplexScalar( ++ abs(numext::real(m_matT.coeff(iu, iu - 1))) + abs(numext::real(m_matT.coeff(iu - 1, iu - 2)))); + } + + // compute the shift as one of the eigenvalues of t, the 2x2 +--- a/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h ++++ b/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +@@ -86,7 +86,7 @@ + for (Index i = 0; i < rows; i++) + mx = (std::max)(mx, std::abs(m_f(Ashifted(i, i) + avgEival, static_cast<int>(s + r)))); + if (r != 0) rfactorial *= RealScalar(r); +- delta = (std::max)(delta, mx / rfactorial); ++ delta = (std::max)(delta, RealScalar(mx / rfactorial)); + } + const RealScalar P_norm = P.cwiseAbs().rowwise().sum().maxCoeff(); + if (mu * delta * P_norm < NumTraits<Scalar>::epsilon() * F_norm) // series converged +-- +2.52.0 + diff --git a/dev-cpp/eigen/files/eigen-5.0.1-cmake-GNUInstallDirs.patch b/dev-cpp/eigen/files/eigen-5.0.1-cmake-GNUInstallDirs.patch new file mode 100644 index 000000000000..d68e31b132ed --- /dev/null +++ b/dev-cpp/eigen/files/eigen-5.0.1-cmake-GNUInstallDirs.patch @@ -0,0 +1,57 @@ +From efcf4891a83e2757aa70de61eb17d81963085c20 Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Sat, 27 Dec 2025 15:39:40 +0100 +Subject: cmake GNUInstallDirs + +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt +index 45488d7..f0f88c0 100644 +--- a/blas/CMakeLists.txt ++++ b/blas/CMakeLists.txt +@@ -31,10 +31,8 @@ foreach(target IN LISTS EIGEN_BLAS_TARGETS) + endif() + + add_dependencies(blas ${target}) +- install(TARGETS ${target} +- RUNTIME DESTINATION bin +- LIBRARY DESTINATION lib +- ARCHIVE DESTINATION lib) ++ include(GNUInstallDirs) ++ install(TARGETS ${target}) + endforeach() + + if(EIGEN_BUILD_TESTING) +diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt +index da07b19d6..dec130bd5 100644 +--- a/doc/CMakeLists.txt ++++ b/doc/CMakeLists.txt +@@ -4,6 +4,8 @@ set_directory_properties(PROPERTIES EXCLUDE_FROM_ALL TRUE) + + project(EigenDoc) + ++include(GNUInstallDirs) ++ + if(CMAKE_COMPILER_IS_GNUCXX) + if(CMAKE_SYSTEM_NAME MATCHES Linux) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O1 -g1") +diff --git a/lapack/CMakeLists.txt b/lapack/CMakeLists.txt +index d837fff..9e127a6 100644 +--- a/lapack/CMakeLists.txt ++++ b/lapack/CMakeLists.txt +@@ -120,10 +120,8 @@ foreach(target IN LISTS EIGEN_LAPACK_TARGETS) + endif() + target_link_libraries(${target} Eigen3::Eigen) + add_dependencies(lapack ${target}) +- install(TARGETS ${target} +- RUNTIME DESTINATION bin +- LIBRARY DESTINATION lib +- ARCHIVE DESTINATION lib) ++ include(GNUInstallDirs) ++ install(TARGETS ${target}) + endforeach() + + +-- +2.52.0 + diff --git a/dev-cpp/eigen/files/eigen-5.0.1-fix-lapack_testing.py.patch b/dev-cpp/eigen/files/eigen-5.0.1-fix-lapack_testing.py.patch new file mode 100644 index 000000000000..cbba85d882cb --- /dev/null +++ b/dev-cpp/eigen/files/eigen-5.0.1-fix-lapack_testing.py.patch @@ -0,0 +1,248 @@ +From 8d05fb579428b57a784f72e054295ebfeac5864d Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Fri, 13 Mar 2026 18:43:46 +0100 +Subject: fix lapack_testing.py + +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/lapack/testing/lapack_testing.py b/lapack/testing/lapack_testing.py +index 3bd9462..b35e15d 100755 +--- a/lapack/testing/lapack_testing.py ++++ b/lapack/testing/lapack_testing.py +@@ -15,9 +15,9 @@ try: + opts, args = getopt.getopt(sys.argv[1:], "hd:srep:t:n", + ["help", "dir", "short", "run", "error","prec=","test=","number"]) + +-except getopt.error, msg: +- print msg +- print "for help use --help" ++except (getopt.error, msg): ++ print(msg) ++ print("for help use --help") + sys.exit(2) + + short_summary=0 +@@ -29,38 +29,38 @@ only_numbers=0 + dir="TESTING" + for o, a in opts: + if o in ("-h", "--help"): +- print sys.argv[0]+" [-h|--help] [-d dir |--dir dir] [-s |--short] [-r |--run] [-e |--error] [-p p |--prec p] [-t test |--test test] [-n | --number]" +- print " - h is to print this message" +- print " - r is to use to run the LAPACK tests then analyse the output (.out files). By default, the script will not run all the LAPACK tests" +- print " - d [dir] is to indicate where is the LAPACK testing directory (.out files). By default, the script will use ." +- print " LEVEL OF OUTPUT" +- print " - x is to print a detailed summary" +- print " - e is to print only the error summary" +- print " - s is to print a short summary" +- print " - n is to print the numbers of failing tests (turn on summary mode)" +- print " SECLECTION OF TESTS:" +- print " - p [s/c/d/z/x] is to indicate the PRECISION to run:" +- print " s=single" +- print " d=double" +- print " sd=single/double" +- print " c=complex" +- print " z=double complex" +- print " cz=complex/double complex" +- print " x=all [DEFAULT]" +- print " - t [lin/eig/mixed/rfp/all] is to indicate which TEST FAMILY to run:" +- print " lin=Linear Equation" +- print " eig=Eigen Problems" +- print " mixed=mixed-precision" +- print " rfp=rfp format" +- print " all=all tests [DEFAULT]" +- print " EXAMPLES:" +- print " ./lapack_testing.py -n" +- print " Will return the numbers of failed tests by analyzing the LAPACK output" +- print " ./lapack_testing.py -n -r -p s" +- print " Will return the numbers of failed tests in REAL precision by running the LAPACK Tests then analyzing the output" +- print " ./lapack_testing.py -n -p s -t eig " +- print " Will return the numbers of failed tests in REAL precision by analyzing only the LAPACK output of EIGEN testings" +- print "Written by Julie Langou (June 2011) " ++ print(sys.argv[0]+" [-h|--help] [-d dir |--dir dir] [-s |--short] [-r |--run] [-e |--error] [-p p |--prec p] [-t test |--test test] [-n | --number]") ++ print(" - h is to print this message") ++ print(" - r is to use to run the LAPACK tests then analyse the output (.out files). By default, the script will not run all the LAPACK tests") ++ print(" - d [dir] is to indicate where is the LAPACK testing directory (.out files). By default, the script will use .") ++ print(" LEVEL OF OUTPUT") ++ print(" - x is to print a detailed summary") ++ print(" - e is to print only the error summary") ++ print(" - s is to print a short summary") ++ print(" - n is to print the numbers of failing tests (turn on summary mode)") ++ print(" SECLECTION OF TESTS:") ++ print(" - p [s/c/d/z/x] is to indicate the PRECISION to run:") ++ print(" s=single") ++ print(" d=double") ++ print(" sd=single/double") ++ print(" c=complex") ++ print(" z=double complex") ++ print(" cz=complex/double complex") ++ print(" x=all [DEFAULT]") ++ print(" - t [lin/eig/mixed/rfp/all] is to indicate which TEST FAMILY to run:") ++ print(" lin=Linear Equation") ++ print(" eig=Eigen Problems") ++ print(" mixed=mixed-precision") ++ print(" rfp=rfp format") ++ print(" all=all tests [DEFAULT]") ++ print(" EXAMPLES:") ++ print(" ./lapack_testing.py -n") ++ print(" Will return the numbers of failed tests by analyzing the LAPACK output") ++ print(" ./lapack_testing.py -n -r -p s") ++ print(" Will return the numbers of failed tests in REAL precision by running the LAPACK Tests then analyzing the output") ++ print(" ./lapack_testing.py -n -p s -t eig ") ++ print(" Will return the numbers of failed tests in REAL precision by analyzing only the LAPACK output of EIGEN testings") ++ print("Written by Julie Langou (June 2011) ") + sys.exit(0) + else: + if o in ("-s", "--short"): +@@ -120,34 +120,34 @@ def run_summary_test( f, cmdline, short_summary): + error_message=cmdline+" did not work" + + if r != 0 and not with_file: +- print "---- TESTING " + cmdline.split()[0] + "... FAILED(" + error_message +") !" ++ print("---- TESTING " + cmdline.split()[0] + "... FAILED(" + error_message +") !") + for line in pipe.readlines(): + f.write(str(line)) + elif r != 0 and with_file and not short_summary: +- print "---- WARNING: please check that you have the LAPACK output : "+cmdline+"!" +- print "---- WARNING: with the option -r, we can run the LAPACK testing for you" ++ print("---- WARNING: please check that you have the LAPACK output : "+cmdline+"!") ++ print("---- WARNING: with the option -r, we can run the LAPACK testing for you") + # print "---- "+error_message + else: + for line in pipe.readlines(): +- f.write(str(line)) +- words_in_line=line.split() +- if (line.find("run")!=-1): +-# print line +- whereisrun=words_in_line.index("run)") +- nb_test_run+=int(words_in_line[whereisrun-2]) +- if (line.find("out of")!=-1): +- if (short_summary==0): print line, +- whereisout= words_in_line.index("out") +- nb_test_fail+=int(words_in_line[whereisout-1]) +- if (line.find("illegal")!=-1): +- if (short_summary==0):print line, +- nb_test_illegal+=1 +- if (line.find(" INFO")!=-1): +- if (short_summary==0):print line, +- nb_test_info+=1 +- if (with_file==1): +- pipe.close() +- ++ f.write(str(line)) ++ words_in_line=line.split() ++ if (line.find("run")!=-1): ++# print line ++ whereisrun=words_in_line.index("run)") ++ nb_test_run+=int(words_in_line[whereisrun-2]) ++ if (line.find("out of")!=-1): ++ if (short_summary==0): print(line), ++ whereisout= words_in_line.index("out") ++ nb_test_fail+=int(words_in_line[whereisout-1]) ++ if (line.find("illegal")!=-1): ++ if (short_summary==0):print(line), ++ nb_test_illegal+=1 ++ if (line.find(" INFO")!=-1): ++ if (short_summary==0):print(line), ++ nb_test_info+=1 ++ if (with_file==1): ++ pipe.close() ++ + f.flush(); + + return [nb_test_run,nb_test_fail,nb_test_illegal,nb_test_info] +@@ -161,10 +161,10 @@ except IOError: + f = sys.stdout + + if (short_summary==0): +- print " " +- print "---------------- Testing LAPACK Routines ----------------" +- print " " +- print "-- Detailed results are stored in", filename ++ print(" ") ++ print("---------------- Testing LAPACK Routines ----------------") ++ print(" ") ++ print("-- Detailed results are stored in", filename) + + dtypes = ( + ("s", "d", "c", "z"), +@@ -211,9 +211,9 @@ for dtype in range_prec: + name = dtypes[1][dtype] + + if (short_summary==0): +- print " " +- print "------------------------- %s ------------------------" % name +- print " " ++ print(" ") ++ print("------------------------- %s ------------------------" % name) ++ print(" ") + sys.stdout.flush() + + +@@ -260,8 +260,8 @@ for dtype in range_prec: + # EIG TESTS + cmdbase="xeigtst"+letter+" < "+dtests[0][dtest]+".in > "+dtests[2][dtest]+".out" + if (not just_errors and not short_summary): +- print "--> Testing "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]" +- # Run the process: either to read the file or run the LAPACK testing ++ print("--> Testing "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]") ++ # Run the process: either to read the file or run the LAPACK testing + nb_test = run_summary_test(f, cmdbase, short_summary) + list_results[0][dtype]+=nb_test[0] + list_results[1][dtype]+=nb_test[1] +@@ -271,21 +271,21 @@ for dtype in range_prec: + + if (not short_summary): + if (nb_test[0]>0 and just_errors==0): +- print "--> Tests passed: "+str(nb_test[0]) ++ print("--> Tests passed: "+str(nb_test[0])) + if (nb_test[1]>0): +- print "--> Tests failing to pass the threshold: "+str(nb_test[1]) ++ print("--> Tests failing to pass the threshold: "+str(nb_test[1])) + if (nb_test[2]>0): +- print "--> Illegal Error: "+str(nb_test[2]) ++ print("--> Illegal Error: "+str(nb_test[2])) + if (nb_test[3]>0): +- print "--> Info Error: "+str(nb_test[3]) ++ print("--> Info Error: "+str(nb_test[3])) + if (got_error>0 and just_errors==1): +- print "ERROR IS LOCATED IN "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]" +- print "" ++ print("ERROR IS LOCATED IN "+name+" "+dtests[1][dtest]+" [ "+cmdbase+" ]") ++ print("") + if (just_errors==0): +- print "" ++ print("") + # elif (got_error>0): +-# print dtests[2][dtest]+".out \t"+str(nb_test[1])+"\t"+str(nb_test[2])+"\t"+str(nb_test[3]) + ++# print(dtests[2][dtest]+".out \t"+str(nb_test[1])+"\t"+str(nb_test[2])+"\t"+str(nb_test[3])) + sys.stdout.flush() + if (list_results[0][dtype] > 0 ): + percent_num_error=float(list_results[1][dtype])/float(list_results[0][dtype])*100 +@@ -300,9 +300,9 @@ for dtype in range_prec: + list_results[3][4]+=list_results[3][dtype] + + if only_numbers==1: +- print str(list_results[1][4])+"\n"+str(list_results[2][4]+list_results[3][4]) ++ print(str(list_results[1][4])+"\n"+str(list_results[2][4]+list_results[3][4])) + else: +- print summary ++ print(summary) + if (list_results[0][4] > 0 ): + percent_num_error=float(list_results[1][4])/float(list_results[0][4])*100 + percent_error=float(list_results[2][4]+list_results[3][4])/float(list_results[0][4])*100 +@@ -310,9 +310,9 @@ else: + percent_num_error=0 + percent_error=0 + if (prec=='x'): +- print "--> ALL PRECISIONS\t"+str(list_results[0][4])+"\t\t"+str(list_results[1][4])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][4]+list_results[3][4])+"\t("+"%.3f" % percent_error+"%)\t""\n" ++ print("--> ALL PRECISIONS\t"+str(list_results[0][4])+"\t\t"+str(list_results[1][4])+"\t("+"%.3f" % percent_num_error+"%)\t"+str(list_results[2][4]+list_results[3][4])+"\t("+"%.3f" % percent_error+"%)\t""\n") + if list_results[0][4] == 0: +- print "NO TESTS WERE ANALYZED, please use the -r option to run the LAPACK TESTING" ++ print("NO TESTS WERE ANALYZED, please use the -r option to run the LAPACK TESTING") + + # This may close the sys.stdout stream, so make it the last statement + f.close() +-- +2.53.0 + diff --git a/dev-cpp/eigen/files/eigen-5.0.1-make-static-libs-optional.patch b/dev-cpp/eigen/files/eigen-5.0.1-make-static-libs-optional.patch new file mode 100644 index 000000000000..63272d4a82d8 --- /dev/null +++ b/dev-cpp/eigen/files/eigen-5.0.1-make-static-libs-optional.patch @@ -0,0 +1,61 @@ +From 9ddec05248d0084c4bfe737fa9ab3cf61f3ecd4a Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Thu, 12 Mar 2026 16:38:02 +0100 +Subject: make static libs optional + +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/blas/CMakeLists.txt b/blas/CMakeLists.txt +index 2bd498a11..0b605cc9e 100644 +--- a/blas/CMakeLists.txt ++++ b/blas/CMakeLists.txt +@@ -15,8 +15,10 @@ set(EigenBlas_SRCS single.cpp double.cpp complex_single.cpp complex_double.cpp + + set(EIGEN_BLAS_TARGETS "") + ++if (EIGEN_BUILD_STATIC_LIBS) + add_library(eigen_blas_static STATIC ${EigenBlas_SRCS}) + list(APPEND EIGEN_BLAS_TARGETS eigen_blas_static) ++endif() + + if (EIGEN_BUILD_SHARED_LIBS) + add_library(eigen_blas SHARED ${EigenBlas_SRCS} "eigen_blas.def") +@@ -34,7 +36,9 @@ foreach(target IN LISTS EIGEN_BLAS_TARGETS) + + add_dependencies(blas ${target}) + include(GNUInstallDirs) ++ if (NOT EIGEN_INSTALL_STATIC_LIBS AND NOT ${target} EQUAL eigen_blas_static) + install(TARGETS ${target}) ++ endif() + endforeach() + + if(EIGEN_BUILD_TESTING) +diff --git a/lapack/CMakeLists.txt b/lapack/CMakeLists.txt +index f98f77afc..4ea553b56 100644 +--- a/lapack/CMakeLists.txt ++++ b/lapack/CMakeLists.txt +@@ -101,9 +101,11 @@ endif() + + set(EIGEN_LAPACK_TARGETS "") + ++if (EIGEN_BUILD_STATIC_LIBS) + add_library(eigen_lapack_static STATIC ${EigenLapack_SRCS} ${ReferenceLapack_SRCS}) + target_link_libraries(eigen_lapack_static eigen_blas_static) + list(APPEND EIGEN_LAPACK_TARGETS eigen_lapack_static) ++endif() + + if (EIGEN_BUILD_SHARED_LIBS) + add_library(eigen_lapack SHARED ${EigenLapack_SRCS} ${EIGEN_LAPACK_DEF}) +@@ -123,7 +125,9 @@ foreach(target IN LISTS EIGEN_LAPACK_TARGETS) + target_link_libraries(${target} Eigen3::Eigen) + add_dependencies(lapack ${target}) + include(GNUInstallDirs) ++ if (NOT EIGEN_INSTALL_STATIC_LIBS AND NOT ${target} EQUAL eigen_lapack_static) + install(TARGETS ${target}) ++ endif() + endforeach() + + +-- +2.53.0 + diff --git a/dev-cpp/eigen/files/eigen-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch b/dev-cpp/eigen/files/eigen-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch new file mode 100644 index 000000000000..0d762191009c --- /dev/null +++ b/dev-cpp/eigen/files/eigen-9999-Do-not-show-deprecated-CUDA-device-properties-for-CU.patch @@ -0,0 +1,29 @@ +From f14dfe5022870966d0d888651f0d4f5b3af5f25c Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Mon, 22 Dec 2025 17:19:51 +0100 +Subject: Do not show deprecated CUDA device properties for CUDA-13 + +Fixes: 9e5714b93b3a0d7848e72db5fa2b58decaa60297 +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/test/gpu_common.h b/test/gpu_common.h +index 8c7049b17..f47742079 100644 +--- a/test/gpu_common.h ++++ b/test/gpu_common.h +@@ -153,7 +153,13 @@ void ei_test_init_gpu() { + std::cout << " warpSize: " << deviceProp.warpSize << "\n"; + std::cout << " regsPerBlock: " << deviceProp.regsPerBlock << "\n"; + std::cout << " concurrentKernels: " << deviceProp.concurrentKernels << "\n"; ++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000 ++ std::cout << " clockRate: " << deviceProp.clockRate << "\n"; ++#endif + std::cout << " canMapHostMemory: " << deviceProp.canMapHostMemory << "\n"; ++#if defined(EIGEN_CUDA_SDK_VER) && EIGEN_CUDA_SDK_VER < 130000 ++ std::cout << " computeMode: " << deviceProp.computeMode << "\n"; ++#endif + } + + #endif // EIGEN_TEST_GPU_COMMON_H +-- +2.53.0 + diff --git a/dev-cpp/eigen/files/eigen-9999-product_threaded_dont_parallelize.patch b/dev-cpp/eigen/files/eigen-9999-product_threaded_dont_parallelize.patch new file mode 100644 index 000000000000..4153896b3933 --- /dev/null +++ b/dev-cpp/eigen/files/eigen-9999-product_threaded_dont_parallelize.patch @@ -0,0 +1,22 @@ +From 056b77036b4c97fee25bbd7a747e55c75c79cd48 Mon Sep 17 00:00:00 2001 +From: Paul Zander <negril.nx+gentoo@gmail.com> +Date: Tue, 23 Sep 2025 00:40:14 +0200 +Subject: [PATCH] product_threaded don't parallelize + +Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com> + +diff --git a/test/product_threaded.cpp b/test/product_threaded.cpp +index 1782c28..85c2615 100644 +--- a/test/product_threaded.cpp ++++ b/test/product_threaded.cpp +@@ -8,6 +8,7 @@ + // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + // SPDX-License-Identifier: MPL-2.0 + ++#define EIGEN_DONT_PARALLELIZE + #define EIGEN_GEMM_THREADPOOL + #include "main.h" + +-- +2.51.0 + diff --git a/dev-cpp/eigen/metadata.xml b/dev-cpp/eigen/metadata.xml new file mode 100644 index 000000000000..c15af35ef933 --- /dev/null +++ b/dev-cpp/eigen/metadata.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://docs.baldeagleos.com/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="project"> + <email>sci@gentoo.org</email> + <name>Gentoo Science Project</name> + </maintainer> + <maintainer type="project"> + <email>kde@gentoo.org</email> + <name>Gentoo KDE Project</name> + </maintainer> + <longdescription> + Eigen is a lightweight C++ template library for vector and matrix math, + a.k.a. linear algebra. Unlike most other linear algebra libraries, Eigen + focuses on the simple mathematical needs of applications: games and other + OpenGL apps, spreadsheets and other office apps, etc. Eigen is dedicated to + providing optimal speed with GCC. + </longdescription> + <use> + <flag name="adolc">Add test support for Adolc (<pkg>sci-libs/adolc</pkg>)</flag> + <flag name="blas">Build the Eigen Blas library</flag> + <flag name="boost">Add test support for Boost.Multiprecision (<pkg>dev-libs/boost</pkg>)</flag> + <flag name="cholmod">Add test support for CHOLMOD (<pkg>sci-libs/cholmod</pkg>)</flag> + <flag name="clang">Use clang for cuda units compilation</flag> + <flag name="cuda-clang">Use clang for cuda units compilation</flag> + <flag name="fftw">Add test support for fftw (<pkg>sci-libs/fftw</pkg>)</flag> + <flag name="hip">Enable HIP GPU computing support</flag> + <flag name="klu">Add test support for KLU (<pkg>sci-libs/klu</pkg>)</flag> + <flag name="lapack">Build the included Eigen LAPACK library</flag> + <flag name="mathjax">Use MathJax for rendering math in HTML docs (dev-libs/mathjax)</flag> + <flag name="metis">Add test support for METIS (<pkg>sci-libs/metis</pkg>)</flag> + <flag name="opengl">Add test support for OpenGL</flag> + <flag name="openmp">Add test support for OpenMP (support parallel computing)</flag> + <flag name="pastix">Add test support for PaStiX (<pkg>sci-libs/pastix</pkg>)</flag> + <flag name="pocketfft">Add test support for pocketfft (<pkg>dev-libs/pocketfft</pkg>)</flag> + <flag name="sparsehash">Add test support for GoogleHash (<pkg>dev-cpp/sparsehash</pkg>)</flag> + <flag name="spqr">Add test support for SPQR (<pkg>sci-libs/spqr</pkg>)</flag> + <flag name="superlu">Add test support for SuperLU (<pkg>sci-libs/superlu</pkg>)</flag> + <flag name="umfpack">Add test support for UMFPACK (<pkg>sci-libs/umfpack</pkg>)</flag> + </use> + <origin>baldeagleos-repo</origin> +</pkgmetadata> |
