Accepting request 913225 from home:badshah400:branches:science

* Update to version 3.4.0
* Drop patches incorporated or otherwise fixed upstream: * eigen3-CastXML-support-for-aarch64.patch.  * eigen3-make-sparseqr-unit-test-stable.patch.  * eigen3-failtests-handling.patch.
* Rebase following patches for updated sources: * 0001-Disable-Altivec-for-ppc64le.patch.  * 0001-Do-stack-allignment-on-ppc.patch.
* Minor line offset adjustments of other patches to apply cleanly.

OBS-URL: https://build.opensuse.org/request/show/913225
OBS-URL: https://build.opensuse.org/package/show/science/eigen3?expand=0&rev=39
This commit is contained in:
Dirk Stoecker 2021-08-22 19:38:49 +00:00 committed by Git OBS Bridge
parent 6abcd6dc23
commit 534ab5c97e
11 changed files with 45 additions and 287 deletions

View File

@ -7,16 +7,16 @@ Subject: [PATCH] Disable Altivec for ppc64le
Eigen/Core | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: eigen-3.3.8/Eigen/Core
Index: eigen-3.4.0/Eigen/src/Core/util/ConfigureVectorization.h
===================================================================
--- eigen-3.3.8.orig/Eigen/Core
+++ eigen-3.3.8/Eigen/Core
@@ -220,7 +220,7 @@
#undef bool
--- eigen-3.4.0.orig/Eigen/src/Core/util/ConfigureVectorization.h
+++ eigen-3.4.0/Eigen/src/Core/util/ConfigureVectorization.h
@@ -374,7 +374,7 @@
#undef vector
#undef pixel
- #elif defined __ALTIVEC__
+ #elif defined __ALTIVEC__ && _CALL_ELF != 2
#define EIGEN_VECTORIZE
#define EIGEN_VECTORIZE_ALTIVEC
#include <altivec.h>

View File

@ -7,16 +7,16 @@ Subject: [PATCH] Do stack allignment on ppc
Eigen/src/Core/util/Macros.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: eigen-3.3.8/Eigen/src/Core/util/Macros.h
Index: eigen-3.4.0/Eigen/src/Core/util/ConfigureVectorization.h
===================================================================
--- eigen-3.3.8.orig/Eigen/src/Core/util/Macros.h
+++ eigen-3.3.8/Eigen/src/Core/util/Macros.h
@@ -718,7 +718,7 @@ namespace Eigen {
--- eigen-3.4.0.orig/Eigen/src/Core/util/ConfigureVectorization.h
+++ eigen-3.4.0/Eigen/src/Core/util/ConfigureVectorization.h
@@ -103,7 +103,7 @@
// certain common platform (compiler+architecture combinations) to avoid these problems.
// Only static alignment is really problematic (relies on nonstandard compiler extensions),
// try to keep heap alignment even when we have to disable static alignment.
- #if EIGEN_COMP_GNUC && !(EIGEN_ARCH_i386_OR_x86_64 || EIGEN_ARCH_ARM_OR_ARM64 || EIGEN_ARCH_PPC || EIGEN_ARCH_IA64)
+ #if EIGEN_COMP_GNUC && !(EIGEN_ARCH_i386_OR_x86_64 || EIGEN_ARCH_ARM_OR_ARM64 || EIGEN_ARCH_IA64)
- #if EIGEN_COMP_GNUC && !(EIGEN_ARCH_i386_OR_x86_64 || EIGEN_ARCH_ARM_OR_ARM64 || EIGEN_ARCH_PPC || EIGEN_ARCH_IA64 || EIGEN_ARCH_MIPS)
+ #if EIGEN_COMP_GNUC && !(EIGEN_ARCH_i386_OR_x86_64 || EIGEN_ARCH_ARM_OR_ARM64 || EIGEN_ARCH_IA64 || EIGEN_ARCH_MIPS)
#define EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT 1
#elif EIGEN_ARCH_ARM_OR_ARM64 && EIGEN_COMP_GNUC_STRICT && EIGEN_GNUC_AT_MOST(4, 6)
// Old versions of GCC on ARM, at least 4.4, were once seen to have buggy static alignment support.

View File

@ -1,8 +1,8 @@
Index: eigen-3.3.8/CMakeLists.txt
Index: eigen-3.4.0/CMakeLists.txt
===================================================================
--- eigen-3.3.8.orig/CMakeLists.txt
+++ eigen-3.3.8/CMakeLists.txt
@@ -429,6 +429,11 @@ install(FILES
--- eigen-3.4.0.orig/CMakeLists.txt
+++ eigen-3.4.0/CMakeLists.txt
@@ -466,6 +466,11 @@ install(FILES
DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel
)

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0fa5cafe78f66d2b501b43016858070d52ba47bd9b1016b0165a7b8e04675677
size 1667231

BIN
eigen-3.4.0.tar.bz2 (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,8 +1,8 @@
Index: eigen-3.3.8/CMakeLists.txt
Index: eigen-3.4.0/CMakeLists.txt
===================================================================
--- eigen-3.3.8.orig/CMakeLists.txt
+++ eigen-3.3.8/CMakeLists.txt
@@ -536,7 +536,7 @@ set ( EIGEN_VERSION_MAJOR ${EIGEN_WORLD
--- eigen-3.4.0.orig/CMakeLists.txt
+++ eigen-3.4.0/CMakeLists.txt
@@ -598,7 +598,7 @@ set ( EIGEN_VERSION_MAJOR ${EIGEN_WORLD
set ( EIGEN_VERSION_MINOR ${EIGEN_MAJOR_VERSION} )
set ( EIGEN_VERSION_PATCH ${EIGEN_MINOR_VERSION} )
set ( EIGEN_DEFINITIONS "")
@ -10,4 +10,4 @@ Index: eigen-3.3.8/CMakeLists.txt
+set ( EIGEN_INCLUDE_DIR ${INCLUDE_INSTALL_DIR} )
set ( EIGEN_ROOT_DIR ${CMAKE_INSTALL_PREFIX} )
# Interface libraries require at least CMake 3.0
include (CMakePackageConfigHelpers)

View File

@ -1,54 +0,0 @@
From 880fa43b2ba9c25f45ae3ad4871a6aabe558329f Mon Sep 17 00:00:00 2001
From: Brad King <brad.king@kitware.com>
Date: Wed, 16 Sep 2020 13:37:27 -0400
Subject: [PATCH] Add support for CastXML on ARM aarch64
CastXML simulates the preprocessors of other compilers, but actually
parses the translation unit with an internal Clang compiler.
Use the same `vld1q_u64` workaround that we do for Clang.
Fixes: #1979
---
Eigen/src/Core/arch/NEON/Complex.h | 4 ++--
Eigen/src/Core/util/Macros.h | 6 ++++++
2 files changed, 8 insertions(+), 2 deletions(-)
Index: eigen-3.3.8/Eigen/src/Core/arch/NEON/Complex.h
===================================================================
--- eigen-3.3.8.orig/Eigen/src/Core/arch/NEON/Complex.h
+++ eigen-3.3.8/Eigen/src/Core/arch/NEON/Complex.h
@@ -17,7 +17,7 @@ namespace internal {
inline uint32x4_t p4ui_CONJ_XOR() {
// See bug 1325, clang fails to call vld1q_u64.
-#if EIGEN_COMP_CLANG
+#if EIGEN_COMP_CLANG || EIGEN_COMP_CASTXML
uint32x4_t ret = { 0x00000000, 0x80000000, 0x00000000, 0x80000000 };
return ret;
#else
@@ -291,7 +291,7 @@ ptranspose(PacketBlock<Packet2cf,2>& ker
#if EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG
// See bug 1325, clang fails to call vld1q_u64.
-#if EIGEN_COMP_CLANG
+#if EIGEN_COMP_CLANG || EIGEN_COMP_CASTXML
static uint64x2_t p2ul_CONJ_XOR = {0x0, 0x8000000000000000};
#else
const uint64_t p2ul_conj_XOR_DATA[] = { 0x0, 0x8000000000000000 };
Index: eigen-3.3.8/Eigen/src/Core/util/Macros.h
===================================================================
--- eigen-3.3.8.orig/Eigen/src/Core/util/Macros.h
+++ eigen-3.3.8/Eigen/src/Core/util/Macros.h
@@ -35,6 +35,12 @@
#define EIGEN_COMP_CLANG 0
#endif
+/// \internal EIGEN_COMP_CASTXML set to 1 if being preprocessed by CastXML
+#if defined(__castxml__)
+ #define EIGEN_COMP_CASTXML 1
+#else
+ #define EIGEN_COMP_CASTXML 0
+#endif
/// \internal EIGEN_COMP_LLVM set to 1 if the compiler backend is llvm
#if defined(__llvm__)

View File

@ -1,132 +0,0 @@
From 72c0bbe2bd1c49c75b6efdb81d0558f8b62578d1 Mon Sep 17 00:00:00 2001
From: Gael Guennebaud <g.gael@free.fr>
Date: Wed, 12 Dec 2018 15:48:36 +0100
Subject: [PATCH] Simplify handling of tests that must fail to compile. Each
test is now a normal ctest target, and build properties (compiler+flags) are
preserved (instead of starting a new build-dir from scratch).
---
CMakeLists.txt | 5 +----
cmake/EigenTesting.cmake | 45 ++++++++++++++++++----------------------
failtest/CMakeLists.txt | 10 ---------
test/CMakeLists.txt | 5 -----
4 files changed, 21 insertions(+), 44 deletions(-)
Index: eigen-3.3.8/CMakeLists.txt
===================================================================
--- eigen-3.3.8.orig/CMakeLists.txt
+++ eigen-3.3.8/CMakeLists.txt
@@ -497,10 +497,7 @@ message(STATUS "")
message(STATUS "Configured Eigen ${EIGEN_VERSION_NUMBER}")
message(STATUS "")
-option(EIGEN_FAILTEST "Enable failtests." OFF)
-if(EIGEN_FAILTEST)
- add_subdirectory(failtest)
-endif()
+add_subdirectory(failtest)
string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_tolower)
if(cmake_generator_tolower MATCHES "makefile")
Index: eigen-3.3.8/cmake/EigenTesting.cmake
===================================================================
--- eigen-3.3.8.orig/cmake/EigenTesting.cmake
+++ eigen-3.3.8/cmake/EigenTesting.cmake
@@ -320,37 +320,32 @@ endmacro(ei_add_test_sycl)
# note that the test runner for these is CMake itself, when passed -DEIGEN_FAILTEST=ON
# so here we're just running CMake commands immediately, we're not adding any targets.
macro(ei_add_failtest testname)
- get_property(EIGEN_FAILTEST_FAILURE_COUNT GLOBAL PROPERTY EIGEN_FAILTEST_FAILURE_COUNT)
- get_property(EIGEN_FAILTEST_COUNT GLOBAL PROPERTY EIGEN_FAILTEST_COUNT)
- message(STATUS "Checking failtest: ${testname}")
- set(filename "${testname}.cpp")
- file(READ "${filename}" test_source)
-
- try_compile(succeeds_when_it_should_fail
- "${CMAKE_CURRENT_BINARY_DIR}"
- "${CMAKE_CURRENT_SOURCE_DIR}/${filename}"
- COMPILE_DEFINITIONS "-DEIGEN_SHOULD_FAIL_TO_BUILD")
- if (succeeds_when_it_should_fail)
- message(STATUS "FAILED: ${testname} build succeeded when it should have failed")
- endif()
-
- try_compile(succeeds_when_it_should_succeed
- "${CMAKE_CURRENT_BINARY_DIR}"
- "${CMAKE_CURRENT_SOURCE_DIR}/${filename}"
- COMPILE_DEFINITIONS)
- if (NOT succeeds_when_it_should_succeed)
- message(STATUS "FAILED: ${testname} build failed when it should have succeeded")
- endif()
-
- if (succeeds_when_it_should_fail OR NOT succeeds_when_it_should_succeed)
- math(EXPR EIGEN_FAILTEST_FAILURE_COUNT ${EIGEN_FAILTEST_FAILURE_COUNT}+1)
- endif()
+ set(test_target_ok ${testname}_ok)
+ set(test_target_ko ${testname}_ko)
- math(EXPR EIGEN_FAILTEST_COUNT ${EIGEN_FAILTEST_COUNT}+1)
+ # Add executables
+ add_executable(${test_target_ok} ${testname}.cpp)
+ add_executable(${test_target_ko} ${testname}.cpp)
+
+ # Remove them from the normal build process
+ set_target_properties(${test_target_ok} ${test_target_ko} PROPERTIES
+ EXCLUDE_FROM_ALL TRUE
+ EXCLUDE_FROM_DEFAULT_BUILD TRUE)
+
+ # Configure the failing test
+ target_compile_definitions(${test_target_ko} PRIVATE EIGEN_SHOULD_FAIL_TO_BUILD)
+
+ # Add the tests to ctest.
+ add_test(NAME ${test_target_ok}
+ COMMAND ${CMAKE_COMMAND} --build . --target ${test_target_ok} --config $<CONFIGURATION>
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+ add_test(NAME ${test_target_ko}
+ COMMAND ${CMAKE_COMMAND} --build . --target ${test_target_ko} --config $<CONFIGURATION>
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
- set_property(GLOBAL PROPERTY EIGEN_FAILTEST_FAILURE_COUNT ${EIGEN_FAILTEST_FAILURE_COUNT})
- set_property(GLOBAL PROPERTY EIGEN_FAILTEST_COUNT ${EIGEN_FAILTEST_COUNT})
+ # Expect the second test to fail
+ set_tests_properties(${test_target_ko} PROPERTIES WILL_FAIL TRUE)
endmacro(ei_add_failtest)
# print a summary of the different options
Index: eigen-3.3.8/failtest/CMakeLists.txt
===================================================================
--- eigen-3.3.8.orig/failtest/CMakeLists.txt
+++ eigen-3.3.8/failtest/CMakeLists.txt
@@ -1,4 +1,3 @@
-message(STATUS "Running the failtests")
ei_add_failtest("failtest_sanity_check")
@@ -64,12 +63,3 @@ ei_add_failtest("bdcsvd_int")
ei_add_failtest("eigensolver_int")
ei_add_failtest("eigensolver_cplx")
-if (EIGEN_FAILTEST_FAILURE_COUNT)
- message(FATAL_ERROR
- "${EIGEN_FAILTEST_FAILURE_COUNT} out of ${EIGEN_FAILTEST_COUNT} failtests FAILED. "
- "To debug these failures, manually compile these programs in ${CMAKE_CURRENT_SOURCE_DIR}, "
- "with and without #define EIGEN_SHOULD_FAIL_TO_BUILD.")
-else()
- message(STATUS "Failtest SUCCESS: all ${EIGEN_FAILTEST_COUNT} failtests passed.")
- message(STATUS "")
-endif()
Index: eigen-3.3.8/test/CMakeLists.txt
===================================================================
--- eigen-3.3.8.orig/test/CMakeLists.txt
+++ eigen-3.3.8/test/CMakeLists.txt
@@ -380,10 +380,6 @@ endif(CUDA_FOUND)
endif(EIGEN_TEST_CUDA)
-
-file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/failtests)
-add_test(NAME failtests WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/failtests COMMAND ${CMAKE_COMMAND} ${Eigen_SOURCE_DIR} -G "${CMAKE_GENERATOR}" -DEIGEN_FAILTEST=ON)
-
option(EIGEN_TEST_BUILD_DOCUMENTATION "Test building the doxygen documentation" OFF)
IF(EIGEN_TEST_BUILD_DOCUMENTATION)
add_dependencies(buildtests doc)

View File

@ -1,66 +0,0 @@
From 3b5deeb546d4017b24846f5b0dc3296a50a039fe Mon Sep 17 00:00:00 2001
From: Gael Guennebaud <g.gael@free.fr>
Date: Tue, 19 Feb 2019 22:57:51 +0100
Subject: [PATCH] bug #899: make sparseqr unit test more stable by 1) trying
with larger threshold and 2) relax rank computation for rank-deficient
problems.
---
test/sparseqr.cpp | 31 ++++++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)
diff --git a/test/sparseqr.cpp b/test/sparseqr.cpp
index 3ffe62314..3576cc626 100644
--- a/test/sparseqr.cpp
+++ b/test/sparseqr.cpp
@@ -43,6 +43,7 @@ int generate_sparse_rectangular_problem(MatrixType& A, DenseMat& dA, int maxRows
template<typename Scalar> void test_sparseqr_scalar()
{
+ typedef typename NumTraits<Scalar>::Real RealScalar;
typedef SparseMatrix<Scalar,ColMajor> MatrixType;
typedef Matrix<Scalar,Dynamic,Dynamic> DenseMat;
typedef Matrix<Scalar,Dynamic,1> DenseVector;
@@ -91,14 +92,34 @@ template<typename Scalar> void test_sparseqr_scalar()
exit(0);
return;
}
-
- VERIFY_IS_APPROX(A * x, b);
-
- //Compare with a dense QR solver
+
+ // Compare with a dense QR solver
ColPivHouseholderQR<DenseMat> dqr(dA);
refX = dqr.solve(b);
- VERIFY_IS_EQUAL(dqr.rank(), solver.rank());
+ bool rank_deficient = A.cols()>A.rows() || dqr.rank()<A.cols();
+ if(rank_deficient)
+ {
+ // rank deficient problem -> we might have to increase the threshold
+ // to get a correct solution.
+ RealScalar th = RealScalar(20)*dA.colwise().norm().maxCoeff()*(A.rows()+A.cols()) * NumTraits<RealScalar>::epsilon();
+ for(Index k=0; (k<16) && !test_isApprox(A*x,b); ++k)
+ {
+ th *= RealScalar(10);
+ solver.setPivotThreshold(th);
+ solver.compute(A);
+ x = solver.solve(b);
+ }
+ }
+
+ VERIFY_IS_APPROX(A * x, b);
+
+ // For rank deficient problem, the estimated rank might
+ // be slightly off, so let's only raise a warning in such cases.
+ if(rank_deficient) ++g_test_level;
+ VERIFY_IS_EQUAL(solver.rank(), dqr.rank());
+ if(rank_deficient) --g_test_level;
+
if(solver.rank()==A.cols()) // full rank
VERIFY_IS_APPROX(x, refX);
// else
--
GitLab

View File

@ -1,3 +1,18 @@
-------------------------------------------------------------------
Fri Aug 20 01:01:50 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
- Update to version 3.4.0
* Long list of changes, see
<https://eigen.tuxfamily.org/index.php?title=3.4>.
- Drop patches incorporated or otherwise fixed upstream:
* eigen3-CastXML-support-for-aarch64.patch.
* eigen3-make-sparseqr-unit-test-stable.patch.
* eigen3-failtests-handling.patch.
- Rebase following patches for updated sources:
* 0001-Disable-Altivec-for-ppc64le.patch.
* 0001-Do-stack-allignment-on-ppc.patch.
- Minor line offset adjustments of other patches to apply cleanly.
-------------------------------------------------------------------
Tue Dec 8 19:27:09 UTC 2020 - Atri Bhattacharya <badshah400@gmail.com>

View File

@ -1,7 +1,7 @@
#
# spec file for package eigen3
# spec file
#
# Copyright (c) 2020 SUSE LLC
# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -33,10 +33,10 @@
%endif
Name: eigen3%{?pkgsuffix}
Version: 3.3.9
Version: 3.4.0
Release: 0
Summary: C++ Template Library for Linear Algebra
License: MPL-2.0 AND LGPL-2.1-only AND LGPL-2.1-or-later AND BSD-3-Clause
License: BSD-3-Clause AND LGPL-2.1-only AND MPL-2.0 AND LGPL-2.1-or-later
URL: http://eigen.tuxfamily.org/
Source0: https://gitlab.com/libeigen/eigen/-/archive/%{version}/%{srcname}-%{version}.tar.bz2
Patch0: 0001-Disable-Altivec-for-ppc64le.patch
@ -45,14 +45,8 @@ Patch1: 0001-Do-stack-allignment-on-ppc.patch
Patch3: 01_install_FindEigen3.patch
# PATCH-FIX-OPENSUSE eigen3-3.3.1-fixcmake.patch -- Fix double {prefix} as we use INCLUDE_INSTALL_DIR with {_includedir}
Patch4: eigen3-3.3.1-fixcmake.patch
# PATCH-FIX-UPSTREAM eigen3-CastXML-support-for-aarch64.patch badshah400@gmail.com -- Add CastXML support for ARM aarch64 [https://gitlab.com/libeigen/eigen/-/issues/1979]
Patch5: eigen3-CastXML-support-for-aarch64.patch
%if %{with tests}
# SECTION Patches to fix tests
# PATCH-FIX-UPSTREAM https://gitlab.com/libeigen/eigen/-/commit/72c0bbe2bd1c49c75b6efdb81d0558f8b62578d1
Patch7: eigen3-failtests-handling.patch
# PATCH-FIX-UPSTREAM eigen3-make-sparseqr-unit-test-stable.patch https://gitlab.com/libeigen/eigen/-/issues/899 badshah400@gmail.com -- Make sparseqr test more stable to prevent random failures; patch taken from upstream commit
Patch8: eigen3-make-sparseqr-unit-test-stable.patch
# PATCH-FIX-UPSTREAM eigen3-googlehash-detection.patch badshah400@gmail.com -- GoogleHash needs C++11 std to compile test code and be succesfully detected
Patch9: eigen3-googlehash-detection.patch
# PATCH-FIX-UPSTREAM eigen3-fix-forward_adolc-unit-test.patch badshah400@gmail -- Prevent conflict of std::min/max with eigen's macros by importing eigen test-suite's main.h header only after all system headers have been included
@ -122,7 +116,7 @@ echo "HTML_TIMESTAMP = NO" >> doc/Doxyfile.in
%build
%cmake \
-DINCLUDE_INSTALL_DIR=include/eigen3 \
-DINCLUDE_INSTALL_DIR:PATH=include/eigen3 \
-DCMAKE_SKIP_RPATH:BOOL=OFF \
-DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \
-DEIGEN_TEST_CXX11:Bool=%{?with_tests:ON}%{!?with_tests:OFF} \
@ -160,6 +154,7 @@ export EIGEN_REPEAT=1
%doc build/doc/html/
%else
%files devel
%license COPYING.*
%{_includedir}/eigen3/