2021-11-29 20:24:20 +00:00
cmake_minimum_required ( VERSION 3.10.0 )
2009-08-14 21:58:41 -04:00
2024-05-01 17:42:53 +00:00
#==============================================================================
# CMake Policy issues.
#==============================================================================
# Allow overriding options in a parent project via `set` before including Eigen.
if ( POLICY CMP0077 )
cmake_policy ( SET CMP0077 NEW )
endif ( POLICY CMP0077 )
2021-09-02 16:05:33 +02:00
# NOTE Remove setting the policy once the minimum required CMake version is
# increased to at least 3.15. Retain enabling the export to package registry.
if ( POLICY CMP0090 )
# The export command does not populate package registry by default
cmake_policy ( SET CMP0090 NEW )
# Unless otherwise specified, always export to package registry to ensure
# backwards compatibility.
if ( NOT DEFINED CMAKE_EXPORT_PACKAGE_REGISTRY )
set ( CMAKE_EXPORT_PACKAGE_REGISTRY ON )
endif ( NOT DEFINED CMAKE_EXPORT_PACKAGE_REGISTRY )
endif ( POLICY CMP0090 )
2024-02-29 20:49:41 +00:00
# Disable warning about find_package(CUDA).
# CUDA language support is lacking for clang as the CUDA compiler
# until at least cmake version 3.18. Even then, there seems to be
# issues on Windows+Ninja in passing build flags. Continue using
# the "old" way for now.
if ( POLICY CMP0146 )
cmake_policy ( SET CMP0146 OLD )
endif ( )
2024-05-01 17:42:53 +00:00
#==============================================================================
# CMake Project.
#==============================================================================
2020-08-28 07:41:31 -05:00
project ( Eigen3 )
2021-10-24 21:00:11 +02:00
# Remove this block after bumping CMake to v3.21.0
# PROJECT_IS_TOP_LEVEL is defined then by default
if ( CMAKE_VERSION VERSION_LESS 3.21.0 )
if ( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
2024-05-01 17:42:53 +00:00
set ( PROJECT_IS_TOP_LEVEL ON )
2021-10-24 21:00:11 +02:00
else ( )
2024-05-01 17:42:53 +00:00
set ( PROJECT_IS_TOP_LEVEL OFF )
2021-10-24 21:00:11 +02:00
endif ( )
endif ( )
2024-05-01 17:42:53 +00:00
#==============================================================================
# Build ON/OFF Settings.
#==============================================================================
# Determine if we should build tests.
include ( CMakeDependentOption )
cmake_dependent_option ( BUILD_TESTING "Enable creation of tests." ON "PROJECT_IS_TOP_LEVEL" OFF )
option ( EIGEN_BUILD_TESTING "Enable creation of Eigen tests." ${ BUILD_TESTING } )
option ( EIGEN_LEAVE_TEST_IN_ALL_TARGET "Leaves tests in the all target, needed by ctest for automatic building." OFF )
# Determine if we should build BLAS/LAPACK implementations.
option ( EIGEN_BUILD_BLAS "Toggles the building of the Eigen Blas library" ${ PROJECT_IS_TOP_LEVEL } )
option ( EIGEN_BUILD_LAPACK "Toggles the building of the included Eigen LAPACK library" ${ PROJECT_IS_TOP_LEVEL } )
if ( EIGEN_BUILD_BLAS OR EIGEN_BUILD_LAPACK )
# BLAS and LAPACK currently need a fortran compiler.
include ( CMakeDetermineFortranCompiler )
if ( NOT CMAKE_Fortran_COMPILER )
set ( EIGEN_BUILD_BLAS OFF )
set ( EIGEN_BUILD_LAPACK OFF )
else ( )
# Determine if we should build shared libraries for BLAS/LAPACK on this platform.
get_cmake_property ( EIGEN_BUILD_SHARED_LIBS TARGET_SUPPORTS_SHARED_LIBS )
endif ( )
2023-03-07 14:39:45 +00:00
endif ( )
2021-08-25 11:02:42 -07:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_BUILD_BTL "Build benchmark suite" OFF )
option ( EIGEN_BUILD_SPBENCH "Build sparse benchmark suite" OFF )
# Avoid building docs if included from another project.
# Building documentation requires creating and running executables on the host
# platform. We shouldn't do this if cross-compiling.
if ( PROJECT_IS_TOP_LEVEL AND NOT CMAKE_CROSSCOMPILING )
set ( EIGEN_BUILD_DOC_DEFAULT ON )
2009-11-15 00:11:33 -05:00
endif ( )
2024-05-01 17:42:53 +00:00
option ( EIGEN_BUILD_DOC "Enable creation of Eigen documentation" ${ EIGEN_BUILD_DOC_DEFAULT } )
2009-11-15 00:11:33 -05:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_BUILD_DEMOS "Toggles the building of the Eigen demos" ${ PROJECT_IS_TOP_LEVEL } )
2018-07-17 00:11:20 +02:00
2024-05-01 17:42:53 +00:00
# Disable pkgconfig only for native Windows builds
if ( NOT WIN32 OR NOT CMAKE_HOST_SYSTEM_NAME MATCHES Windows )
option ( EIGEN_BUILD_PKGCONFIG "Build pkg-config .pc file for Eigen" ${ PROJECT_IS_TOP_LEVEL } )
2011-01-19 10:15:36 -05:00
endif ( )
2024-05-01 17:42:53 +00:00
option ( EIGEN_BUILD_CMAKE_PACKAGE "Enables the creation of EigenConfig.cmake and related files" ${ PROJECT_IS_TOP_LEVEL } )
2011-01-19 10:15:36 -05:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_TESTING OR EIGEN_BUILD_BLAS OR EIGEN_BUILD_LAPACK OR EIGEN_BUILT_BTL OR EIGEN_BUILD_BTL OR EIGEN_BUILD_SPBENCH OR EIGEN_BUILD_DOC OR EIGEN_BUILD_DEMOS )
set ( EIGEN_IS_BUILDING_ ON )
endif ( )
2010-10-25 10:15:22 -04:00
2024-05-01 17:42:53 +00:00
#==============================================================================
# Version Info.
#==============================================================================
2010-04-19 11:19:22 -04:00
2024-05-01 17:42:53 +00:00
# Automatically parse the version number from header files.
2011-01-17 09:59:40 -05:00
file ( READ "${PROJECT_SOURCE_DIR}/Eigen/src/Core/util/Macros.h" _eigen_version_header )
2009-11-19 12:09:04 -05:00
string ( REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen_world_version_match "${_eigen_version_header}" )
set ( EIGEN_WORLD_VERSION "${CMAKE_MATCH_1}" )
string ( REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen_major_version_match "${_eigen_version_header}" )
set ( EIGEN_MAJOR_VERSION "${CMAKE_MATCH_1}" )
string ( REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen_minor_version_match "${_eigen_version_header}" )
set ( EIGEN_MINOR_VERSION "${CMAKE_MATCH_1}" )
set ( EIGEN_VERSION_NUMBER ${ EIGEN_WORLD_VERSION } . ${ EIGEN_MAJOR_VERSION } . ${ EIGEN_MINOR_VERSION } )
2009-01-04 17:32:20 +00:00
2024-05-01 17:42:53 +00:00
# If we are in a git repo, extract a changeset.
2019-12-04 11:24:06 +01:00
if ( IS_DIRECTORY ${ CMAKE_SOURCE_DIR } /.git )
# if the git program is absent or this will leave the EIGEN_GIT_REVNUM string empty,
2018-05-31 21:21:57 +02:00
# but won't stop CMake.
2019-12-04 11:24:06 +01:00
execute_process ( COMMAND git ls-remote --refs -q ${ CMAKE_SOURCE_DIR } HEAD OUTPUT_VARIABLE EIGEN_GIT_OUTPUT )
2018-05-31 21:21:57 +02:00
endif ( )
2019-12-04 11:24:06 +01:00
# extract the git rev number from the git output...
if ( EIGEN_GIT_OUTPUT )
string ( REGEX MATCH "^([0-9;a-f]+).*" EIGEN_GIT_CHANGESET_MATCH "${EIGEN_GIT_OUTPUT}" )
set ( EIGEN_GIT_REVNUM "${CMAKE_MATCH_1}" )
2019-10-31 11:36:27 -05:00
endif ( )
2009-08-14 21:58:41 -04:00
#...and show it next to the version number
2019-12-04 11:24:06 +01:00
if ( EIGEN_GIT_REVNUM )
set ( EIGEN_VERSION "${EIGEN_VERSION_NUMBER} (git rev ${EIGEN_GIT_REVNUM})" )
2019-10-31 11:36:27 -05:00
else ( )
2008-12-02 12:59:10 +00:00
set ( EIGEN_VERSION "${EIGEN_VERSION_NUMBER}" )
2019-10-31 11:36:27 -05:00
endif ( )
2008-05-31 23:21:49 +00:00
2024-05-01 17:42:53 +00:00
#==============================================================================
2024-05-07 21:21:08 +00:00
# Install Path Configuration.
2024-05-01 17:42:53 +00:00
#==============================================================================
2010-04-19 11:19:22 -04:00
2024-05-01 17:42:53 +00:00
# Unconditionally allow install of targets to support nested dependency
# installations.
#
# Note: projects that depend on Eigen should _probably_ exclude installing
# Eigen by default (e.g. by using EXCLUDE_FROM_ALL when using
# FetchContent_Declare or add_subdirectory) to avoid overwriting a previous
# installation.
2010-04-19 11:19:22 -04:00
2024-05-01 17:42:53 +00:00
include ( GNUInstallDirs )
# Backward compatibility support for EIGEN_INCLUDE_INSTALL_DIR
if ( EIGEN_INCLUDE_INSTALL_DIR )
message ( WARNING "EIGEN_INCLUDE_INSTALL_DIR is deprecated. Use INCLUDE_INSTALL_DIR instead." )
2010-04-19 11:19:22 -04:00
endif ( )
2024-05-01 17:42:53 +00:00
if ( EIGEN_INCLUDE_INSTALL_DIR AND NOT INCLUDE_INSTALL_DIR )
set ( INCLUDE_INSTALL_DIR ${ EIGEN_INCLUDE_INSTALL_DIR }
C A C H E P A T H " T h e d i r e c t o r y r e l a t i v e t o C M A K E _ I N S T A L L _ P R E F I X w h e r e E i g e n h e a d e r f i l e s a r e i n s t a l l e d " )
2010-04-19 11:19:22 -04:00
else ( )
2024-05-01 17:42:53 +00:00
set ( INCLUDE_INSTALL_DIR
" $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } / e i g e n 3 "
C A C H E P A T H " T h e d i r e c t o r y r e l a t i v e t o C M A K E _ I N S T A L L _ P R E F I X w h e r e E i g e n h e a d e r f i l e s a r e i n s t a l l e d "
)
2016-06-27 16:43:08 +00:00
endif ( )
2024-05-01 17:42:53 +00:00
set ( CMAKEPACKAGE_INSTALL_DIR
" $ { C M A K E _ I N S T A L L _ D A T A D I R } / e i g e n 3 / c m a k e "
C A C H E P A T H " T h e d i r e c t o r y r e l a t i v e t o C M A K E _ I N S T A L L _ P R E F I X w h e r e E i g e n 3 C o n f i g . c m a k e i s i n s t a l l e d "
)
set ( PKGCONFIG_INSTALL_DIR
" $ { C M A K E _ I N S T A L L _ D A T A D I R } / p k g c o n f i g "
C A C H E P A T H " T h e d i r e c t o r y r e l a t i v e t o C M A K E _ I N S T A L L _ P R E F I X w h e r e e i g e n 3 . p c i s i n s t a l l e d "
)
2008-07-09 14:04:48 +00:00
2024-05-01 17:42:53 +00:00
foreach ( var INCLUDE_INSTALL_DIR CMAKEPACKAGE_INSTALL_DIR PKGCONFIG_INSTALL_DIR )
# If an absolute path is specified, make it relative to "{CMAKE_INSTALL_PREFIX}".
if ( IS_ABSOLUTE "${${var}}" )
file ( RELATIVE_PATH "${var}" "${CMAKE_INSTALL_PREFIX}" "${${var}}" )
endif ( )
endforeach ( )
2007-05-30 06:57:40 +00:00
2024-05-07 21:21:08 +00:00
#==============================================================================
# Eigen Library.
#==============================================================================
set ( EIGEN_VERSION_STRING ${ EIGEN_VERSION_NUMBER } )
set ( EIGEN_VERSION_MAJOR ${ EIGEN_WORLD_VERSION } )
set ( EIGEN_VERSION_MINOR ${ EIGEN_MAJOR_VERSION } )
set ( EIGEN_VERSION_PATCH ${ EIGEN_MINOR_VERSION } )
# Alias Eigen_*_DIR to Eigen3_*_DIR:
set ( Eigen_SOURCE_DIR ${ Eigen3_SOURCE_DIR } )
set ( Eigen_BINARY_DIR ${ Eigen3_BINARY_DIR } )
# Imported target support
add_library ( eigen INTERFACE )
add_library ( Eigen3::Eigen ALIAS eigen )
target_include_directories ( eigen INTERFACE
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } >
$ < I N S T A L L _ I N T E R F A C E : $ { I N C L U D E _ I N S T A L L _ D I R } >
)
# Export as title case Eigen
set_target_properties ( eigen PROPERTIES EXPORT_NAME Eigen )
#==============================================================================
# Install Rule Configuration.
#==============================================================================
2024-05-01 17:42:53 +00:00
install ( FILES
s i g n a t u r e _ o f _ e i g e n 3 _ m a t r i x _ l i b r a r y
D E S T I N A T I O N $ { I N C L U D E _ I N S T A L L _ D I R } C O M P O N E N T D e v e l
)
2010-05-18 08:59:39 -04:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_PKGCONFIG )
configure_file ( eigen3.pc.in eigen3.pc @ONLY )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /eigen3.pc
D E S T I N A T I O N $ { P K G C O N F I G _ I N S T A L L _ D I R } )
2010-05-18 08:59:39 -04:00
endif ( )
2024-05-01 17:42:53 +00:00
install ( DIRECTORY Eigen DESTINATION ${ INCLUDE_INSTALL_DIR } COMPONENT Devel )
2011-07-12 14:41:00 +02:00
2024-05-01 17:42:53 +00:00
install ( TARGETS eigen EXPORT Eigen3Targets )
2015-11-30 17:05:42 +01:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_CMAKE_PACKAGE )
include ( CMakePackageConfigHelpers )
configure_package_config_file (
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / E i g e n 3 C o n f i g . c m a k e . i n
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / E i g e n 3 C o n f i g . c m a k e
I N S T A L L _ D E S T I N A T I O N $ { C M A K E P A C K A G E _ I N S T A L L _ D I R }
N O _ S E T _ A N D _ C H E C K _ M A C R O # Eigen does not provide legacy style defines
N O _ C H E C K _ R E Q U I R E D _ C O M P O N E N T S _ M A C R O # Eigen does not provide components
)
2018-09-18 04:15:01 -04:00
2024-05-01 17:42:53 +00:00
# NOTE Remove the first code path once the minimum required CMake version is
# bumped to 3.14 or above.
if ( CMAKE_VERSION VERSION_LESS 3.14 )
# Remove CMAKE_SIZEOF_VOID_P from Eigen3ConfigVersion.cmake since Eigen does
# not depend on architecture specific settings or libraries. More
# specifically, an Eigen3Config.cmake generated from a 64 bit target can be
# used for 32 bit targets as well (and vice versa).
set ( _Eigen3_CMAKE_SIZEOF_VOID_P ${ CMAKE_SIZEOF_VOID_P } )
unset ( CMAKE_SIZEOF_VOID_P )
write_basic_package_version_file ( Eigen3ConfigVersion.cmake
V E R S I O N $ { E I G E N _ V E R S I O N _ N U M B E R }
C O M P A T I B I L I T Y S a m e M a j o r V e r s i o n )
set ( CMAKE_SIZEOF_VOID_P ${ _Eigen3_CMAKE_SIZEOF_VOID_P } )
else ( CMAKE_VERSION VERSION_LESS 3.14 )
write_basic_package_version_file ( Eigen3ConfigVersion.cmake
V E R S I O N $ { E I G E N _ V E R S I O N _ N U M B E R }
C O M P A T I B I L I T Y S a m e M a j o r V e r s i o n
A R C H _ I N D E P E N D E N T )
endif ( CMAKE_VERSION VERSION_LESS 3.14 )
# The Eigen target will be located in the Eigen3 namespace. Other CMake
# targets can refer to it using Eigen3::Eigen.
export ( TARGETS eigen NAMESPACE Eigen3:: FILE Eigen3Targets.cmake )
# Export Eigen3 package to CMake registry such that it can be easily found by
# CMake even if it has not been installed to a standard directory.
export ( PACKAGE Eigen3 )
install ( EXPORT Eigen3Targets NAMESPACE Eigen3:: DESTINATION ${ CMAKEPACKAGE_INSTALL_DIR } )
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /Eigen3Config.cmake
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / E i g e n 3 C o n f i g V e r s i o n . c m a k e
D E S T I N A T I O N $ { C M A K E P A C K A G E _ I N S T A L L _ D I R } )
# Add uninstall target
if ( NOT TARGET uninstall )
add_custom_target ( uninstall
C O M M A N D $ { C M A K E _ C O M M A N D } - P $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / E i g e n U n i n s t a l l . c m a k e )
endif ( )
endif ( )
#==============================================================================
# General Build Configuration.
#==============================================================================
# Avoid setting the standard in a parent if unset.
if ( PROJECT_IS_TOP_LEVEL )
set ( CMAKE_CXX_STANDARD 14 CACHE STRING "Default C++ standard" )
set ( CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL "Require C++ standard" )
set ( CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Allow C++ extensions" )
endif ( )
2010-02-20 17:39:58 +01:00
2024-05-01 17:42:53 +00:00
# Guard against in-source builds
if ( ${ CMAKE_SOURCE_DIR } STREQUAL ${ CMAKE_BINARY_DIR } )
message ( FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. " )
endif ( )
2010-02-20 17:39:58 +01:00
2024-05-01 17:42:53 +00:00
# Guard against bad build-type strings
if ( PROJECT_IS_TOP_LEVEL AND NOT CMAKE_BUILD_TYPE )
set ( CMAKE_BUILD_TYPE "Release" )
endif ( )
2010-02-20 17:39:58 +01:00
2024-05-01 17:42:53 +00:00
# Only try to figure out how to link the math library if we are building something.
# Otherwise, let the parent project deal with dependencies.
if ( EIGEN_IS_BUILDING_ )
# Use Eigen's cmake files.
set ( CMAKE_MODULE_PATH ${ PROJECT_SOURCE_DIR } /cmake )
2010-02-20 17:39:58 +01:00
2024-05-01 17:42:53 +00:00
set ( CMAKE_INCLUDE_CURRENT_DIR OFF )
2010-02-20 17:39:58 +01:00
2024-05-01 17:42:53 +00:00
find_package ( StandardMathLibrary )
set ( EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "" )
if ( NOT STANDARD_MATH_LIBRARY_FOUND )
message ( FATAL_ERROR
" C a n ' t l i n k t o t h e s t a n d a r d m a t h l i b r a r y . P l e a s e r e p o r t t o t h e E i g e n d e v e l o p e r s , t e l l i n g t h e m a b o u t y o u r p l a t f o r m . " )
else ( )
if ( EIGEN_STANDARD_LIBRARIES_TO_LINK_TO )
set ( EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO} ${STANDARD_MATH_LIBRARY}" )
else ( )
set ( EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "${STANDARD_MATH_LIBRARY}" )
endif ( )
2010-02-20 17:39:58 +01:00
endif ( )
2024-05-01 17:42:53 +00:00
if ( EIGEN_STANDARD_LIBRARIES_TO_LINK_TO )
message ( STATUS "Standard libraries to link to explicitly: ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}" )
else ( )
message ( STATUS "Standard libraries to link to explicitly: none" )
2014-01-29 11:43:05 -08:00
endif ( )
2024-05-01 17:42:53 +00:00
# Default tests/examples/libraries to row-major.
option ( EIGEN_DEFAULT_TO_ROW_MAJOR "Use row-major as default matrix storage order" OFF )
if ( EIGEN_DEFAULT_TO_ROW_MAJOR )
add_definitions ( "-DEIGEN_DEFAULT_TO_ROW_MAJOR" )
2020-07-14 01:34:03 +00:00
endif ( )
2024-05-01 17:42:53 +00:00
endif ( )
2020-07-14 01:34:03 +00:00
2024-05-01 17:42:53 +00:00
#==============================================================================
# Test Configuration.
#==============================================================================
2014-03-24 09:52:45 -07:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_TESTING )
function ( ei_maybe_separate_arguments variable mode args )
# Use separate_arguments if the input is a single string containing a space.
# Otherwise, if it is already a list or doesn't have a space, just propagate
# the original value. This is to better support multi-argument lists.
list ( LENGTH args list_length )
if ( ${ list_length } EQUAL 1 )
string ( FIND "${args}" " " has_space )
if ( ${ has_space } GREATER -1 )
separate_arguments ( args ${ mode } "${args}" )
endif ( )
endif ( )
set ( ${ variable } ${ args } PARENT_SCOPE )
endfunction ( ei_maybe_separate_arguments )
include ( CheckCXXCompilerFlag )
macro ( ei_add_cxx_compiler_flag FLAG )
string ( REGEX REPLACE "-" "" SFLAG1 ${ FLAG } )
string ( REGEX REPLACE "\\+" "p" SFLAG ${ SFLAG1 } )
check_cxx_compiler_flag ( ${ FLAG } COMPILER_SUPPORT_ ${ SFLAG } )
if ( COMPILER_SUPPORT_ ${ SFLAG } )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}" )
endif ( )
endmacro ( )
set ( EIGEN_TEST_CUSTOM_LINKER_FLAGS "" CACHE STRING "Additional linker flags when linking unit tests." )
set ( EIGEN_TEST_CUSTOM_CXX_FLAGS "" CACHE STRING "Additional compiler flags when compiling unit tests." )
# Convert space-separated arguments into CMake lists for downstream consumption.
ei_maybe_separate_arguments ( EIGEN_TEST_CUSTOM_LINKER_FLAGS NATIVE_COMMAND "${EIGEN_TEST_CUSTOM_LINKER_FLAGS}" )
ei_maybe_separate_arguments ( EIGEN_TEST_CUSTOM_CXX_FLAGS NATIVE_COMMAND "${EIGEN_TEST_CUSTOM_CXX_FLAGS}" )
option ( EIGEN_SPLIT_LARGE_TESTS "Split large tests into smaller executables" ON )
set ( EIGEN_TEST_MAX_SIZE "320" CACHE STRING "Maximal matrix/vector size, default is 320" )
# Flags for tests.
if ( NOT MSVC )
# We assume that other compilers are partly compatible with GNUCC
# clang outputs some warnings for unknown flags that are not caught by check_cxx_compiler_flag
# adding -Werror turns such warnings into errors
check_cxx_compiler_flag ( "-Werror" COMPILER_SUPPORT_WERROR )
if ( COMPILER_SUPPORT_WERROR )
set ( CMAKE_REQUIRED_FLAGS "-Werror" )
endif ( )
ei_add_cxx_compiler_flag ( "-pedantic" )
ei_add_cxx_compiler_flag ( "-Wall" )
ei_add_cxx_compiler_flag ( "-Wextra" )
# ei_add_cxx_compiler_flag("-Weverything") # clang
ei_add_cxx_compiler_flag ( "-Wundef" )
ei_add_cxx_compiler_flag ( "-Wcast-align" )
ei_add_cxx_compiler_flag ( "-Wchar-subscripts" )
ei_add_cxx_compiler_flag ( "-Wnon-virtual-dtor" )
ei_add_cxx_compiler_flag ( "-Wunused-local-typedefs" )
ei_add_cxx_compiler_flag ( "-Wpointer-arith" )
ei_add_cxx_compiler_flag ( "-Wwrite-strings" )
ei_add_cxx_compiler_flag ( "-Wformat-security" )
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")
ei_add_cxx_compiler_flag ( "-Wshadow" )
ei_add_cxx_compiler_flag ( "-Wno-psabi" )
ei_add_cxx_compiler_flag ( "-Wno-variadic-macros" )
ei_add_cxx_compiler_flag ( "-Wno-long-long" )
ei_add_cxx_compiler_flag ( "-fno-check-new" )
ei_add_cxx_compiler_flag ( "-fno-common" )
ei_add_cxx_compiler_flag ( "-fstrict-aliasing" )
ei_add_cxx_compiler_flag ( "-wd981" ) # disable ICC's "operands are evaluated in unspecified order" remark
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 ( ANDROID_NDK )
ei_add_cxx_compiler_flag ( "-pie" )
ei_add_cxx_compiler_flag ( "-fPIE" )
endif ( )
2016-04-29 13:42:22 -07:00
2024-05-01 17:42:53 +00:00
set ( CMAKE_REQUIRED_FLAGS "" )
2023-10-23 17:55:01 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF )
if ( EIGEN_TEST_SSE2 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2" )
message ( STATUS "Enabling SSE2 in tests/examples" )
endif ( )
2020-06-20 19:16:24 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_SSE3 "Enable/Disable SSE3 in tests/examples" OFF )
if ( EIGEN_TEST_SSE3 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse3" )
message ( STATUS "Enabling SSE3 in tests/examples" )
endif ( )
2016-01-05 10:02:49 -08:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_SSSE3 "Enable/Disable SSSE3 in tests/examples" OFF )
if ( EIGEN_TEST_SSSE3 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3" )
message ( STATUS "Enabling SSSE3 in tests/examples" )
endif ( )
2010-03-03 11:25:41 -06:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_SSE4_1 "Enable/Disable SSE4.1 in tests/examples" OFF )
if ( EIGEN_TEST_SSE4_1 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1" )
message ( STATUS "Enabling SSE4.1 in tests/examples" )
endif ( )
2014-08-29 20:03:49 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_SSE4_2 "Enable/Disable SSE4.2 in tests/examples" OFF )
if ( EIGEN_TEST_SSE4_2 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2" )
message ( STATUS "Enabling SSE4.2 in tests/examples" )
endif ( )
2018-07-06 16:04:30 -07:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_AVX "Enable/Disable AVX in tests/examples" OFF )
if ( EIGEN_TEST_AVX )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx" )
message ( STATUS "Enabling AVX in tests/examples" )
2015-04-07 14:03:21 -04:00
endif ( )
2010-03-03 11:25:41 -06:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_FMA "Enable/Disable FMA in tests/examples" OFF )
if ( EIGEN_TEST_FMA AND NOT EIGEN_TEST_NEON )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma" )
message ( STATUS "Enabling FMA in tests/examples" )
endif ( )
2014-10-21 18:10:01 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_AVX2 "Enable/Disable AVX2 in tests/examples" OFF )
if ( EIGEN_TEST_AVX2 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2 -mfma" )
message ( STATUS "Enabling AVX2 in tests/examples" )
endif ( )
2014-10-21 18:10:01 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_AVX512 "Enable/Disable AVX512 in tests/examples" OFF )
if ( EIGEN_TEST_AVX512 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mfma" )
message ( STATUS "Enabling AVX512 in tests/examples" )
endif ( )
2017-10-12 15:38:34 -04:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_AVX512DQ "Enable/Disable AVX512DQ in tests/examples" OFF )
if ( EIGEN_TEST_AVX512DQ )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512dq -mfma" )
message ( STATUS "Enabling AVX512DQ in tests/examples" )
2010-03-05 10:22:27 +01:00
endif ( )
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_AVX512FP16 "Enable/Disable AVX512-FP16 in tests/examples" OFF )
if ( EIGEN_TEST_AVX512FP16 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mfma -mavx512vl -mavx512fp16" )
message ( STATUS "Enabling AVX512-FP16 in tests/examples" )
endif ( )
2007-05-30 06:57:40 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_F16C "Enable/Disable F16C in tests/examples" OFF )
if ( EIGEN_TEST_F16C )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mf16c" )
message ( STATUS "Enabling F16C in tests/examples" )
2010-07-01 07:28:16 +02:00
endif ( )
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_ALTIVEC "Enable/Disable AltiVec in tests/examples" OFF )
if ( EIGEN_TEST_ALTIVEC )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec -mabi=altivec" )
message ( STATUS "Enabling AltiVec in tests/examples" )
2019-10-31 11:36:27 -05:00
endif ( )
2018-12-07 15:14:50 +01:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_VSX "Enable/Disable VSX in tests/examples" OFF )
if ( EIGEN_TEST_VSX )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64 -mvsx" )
message ( STATUS "Enabling VSX in tests/examples" )
endif ( )
2018-12-07 15:14:50 +01:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_MSA "Enable/Disable MSA in tests/examples" OFF )
if ( EIGEN_TEST_MSA )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmsa" )
message ( STATUS "Enabling MSA in tests/examples" )
endif ( )
2018-12-07 15:14:50 +01:00
2025-01-20 18:37:44 +00:00
option ( EIGEN_TEST_LSX "Enable/Disable LSX in tests/examples" OFF )
if ( EIGEN_TEST_LSX )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlsx" )
message ( STATUS "Enabling LSX in tests/examples" )
endif ( )
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_NEON "Enable/Disable Neon in tests/examples" OFF )
if ( EIGEN_TEST_NEON )
if ( EIGEN_TEST_FMA )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-vfpv4" )
else ( )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon" )
endif ( )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard" )
message ( STATUS "Enabling NEON in tests/examples" )
endif ( )
2022-03-18 16:04:53 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_NEON64 "Enable/Disable Neon in tests/examples" OFF )
if ( EIGEN_TEST_NEON64 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
message ( STATUS "Enabling NEON in tests/examples" )
endif ( )
2008-12-18 09:07:36 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_Z13 "Enable/Disable S390X(zEC13) ZVECTOR in tests/examples" OFF )
if ( EIGEN_TEST_Z13 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z13 -mzvector" )
message ( STATUS "Enabling S390X(zEC13) ZVECTOR in tests/examples" )
endif ( )
2010-10-13 09:04:59 -04:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_Z14 "Enable/Disable S390X(zEC14) ZVECTOR in tests/examples" OFF )
if ( EIGEN_TEST_Z14 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z14 -mzvector" )
message ( STATUS "Enabling S390X(zEC13) ZVECTOR in tests/examples" )
endif ( )
2010-10-13 09:04:59 -04:00
2024-05-01 17:42:53 +00:00
check_cxx_compiler_flag ( "-fopenmp" COMPILER_SUPPORT_OPENMP )
if ( COMPILER_SUPPORT_OPENMP )
option ( EIGEN_TEST_OPENMP "Enable/Disable OpenMP in tests/examples" OFF )
if ( EIGEN_TEST_OPENMP )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp" )
message ( STATUS "Enabling OpenMP in tests/examples" )
endif ( )
endif ( )
2011-02-27 17:27:23 -05:00
2024-05-01 17:42:53 +00:00
else ( )
# C4127 - conditional expression is constant
# C4714 - marked as __forceinline not inlined (I failed to deactivate it selectively)
# We can disable this warning in the unit tests since it is clear that it occurs
# because we are oftentimes returning objects that have a destructor or may
# throw exceptions - in particular in the unit tests we are throwing extra many
# exceptions to cover indexing errors.
# C4505 - unreferenced local function has been removed (impossible to deactivate selectively)
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /wd4127 /wd4505 /wd4714" )
# replace all /Wx by /W4
string ( REGEX REPLACE "/W[0-9]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
check_cxx_compiler_flag ( "/openmp" COMPILER_SUPPORT_OPENMP )
if ( COMPILER_SUPPORT_OPENMP )
option ( EIGEN_TEST_OPENMP "Enable/Disable OpenMP in tests/examples" OFF )
if ( EIGEN_TEST_OPENMP )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp" )
message ( STATUS "Enabling OpenMP in tests/examples" )
endif ( )
endif ( )
2010-03-06 02:17:37 -05:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF )
if ( EIGEN_TEST_SSE2 )
if ( NOT CMAKE_CL_64 )
# arch is not supported on 64 bit systems, SSE is enabled automatically.
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2" )
endif ( )
message ( STATUS "Enabling SSE2 in tests/examples" )
endif ( )
2009-01-14 14:24:10 +00:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_AVX "Enable/Disable AVX in tests/examples" OFF )
if ( EIGEN_TEST_AVX )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX" )
message ( STATUS "Enabling AVX in tests/examples" )
endif ( )
2014-07-22 13:16:44 +02:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_FMA "Enable/Disable FMA/AVX2 in tests/examples" OFF )
option ( EIGEN_TEST_AVX2 "Enable/Disable FMA/AVX2 in tests/examples" OFF )
if ( ( EIGEN_TEST_FMA AND NOT EIGEN_TEST_NEON ) OR EIGEN_TEST_AVX2 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2" )
message ( STATUS "Enabling FMA/AVX2 in tests/examples" )
endif ( )
2016-02-25 09:06:18 -08:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_AVX512 "Enable/Disable AVX512 in tests/examples" OFF )
option ( EIGEN_TEST_AVX512DQ "Enable/Disable AVX512DQ in tests/examples" OFF )
if ( EIGEN_TEST_AVX512 OR EIGEN_TEST_AVX512DQ )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX512" )
message ( STATUS "Enabling AVX512 in tests/examples" )
endif ( )
2007-05-30 06:57:40 +00:00
2024-05-01 17:42:53 +00:00
endif ( NOT MSVC )
2015-12-10 15:47:06 +01:00
2024-05-01 17:42:53 +00:00
option ( EIGEN_TEST_NO_EXPLICIT_VECTORIZATION "Disable explicit vectorization in tests/examples" OFF )
option ( EIGEN_TEST_X87 "Force using X87 instructions. Implies no vectorization." OFF )
option ( EIGEN_TEST_32BIT "Force generating 32bit code." OFF )
2010-04-08 13:28:21 +02:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_TEST_X87 )
set ( EIGEN_TEST_NO_EXPLICIT_VECTORIZATION ON )
if ( CMAKE_COMPILER_IS_GNUCXX )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=387" )
message ( STATUS "Forcing use of x87 instructions in tests/examples" )
else ( )
message ( STATUS "EIGEN_TEST_X87 ignored on your compiler" )
endif ( )
2020-09-28 16:39:48 +00:00
endif ( )
2009-05-19 11:48:50 -05:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_TEST_32BIT )
if ( CMAKE_COMPILER_IS_GNUCXX )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32" )
message ( STATUS "Forcing generation of 32-bit code in tests/examples" )
else ( )
message ( STATUS "EIGEN_TEST_32BIT ignored on your compiler" )
endif ( )
endif ( )
2020-11-18 10:08:23 +11:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_TEST_NO_EXPLICIT_VECTORIZATION )
2019-11-28 10:08:54 +00:00
add_definitions ( -DEIGEN_DONT_VECTORIZE=1 )
2024-05-01 17:42:53 +00:00
message ( STATUS "Disabling vectorization in tests/examples" )
endif ( )
option ( EIGEN_TEST_NO_EXPLICIT_ALIGNMENT "Disable explicit alignment (hence vectorization) in tests/examples" OFF )
if ( EIGEN_TEST_NO_EXPLICIT_ALIGNMENT )
add_definitions ( -DEIGEN_DONT_ALIGN=1 )
message ( STATUS "Disabling alignment in tests/examples" )
endif ( )
option ( EIGEN_TEST_NO_EXCEPTIONS "Disables C++ exceptions" OFF )
if ( EIGEN_TEST_NO_EXCEPTIONS )
ei_add_cxx_compiler_flag ( "-fno-exceptions" )
message ( STATUS "Disabling exceptions in tests/examples" )
endif ( )
set ( EIGEN_CUDA_CXX_FLAGS "" CACHE STRING "Additional flags to pass to the cuda compiler." )
set ( EIGEN_CUDA_COMPUTE_ARCH 30 CACHE STRING "The CUDA compute architecture(s) to target when compiling CUDA code" )
option ( EIGEN_TEST_SYCL "Add Sycl support." OFF )
if ( EIGEN_TEST_SYCL )
option ( EIGEN_SYCL_DPCPP "Use the DPCPP Sycl implementation (DPCPP is default SYCL-Compiler)." ON )
option ( EIGEN_SYCL_TRISYCL "Use the triSYCL Sycl implementation." OFF )
option ( EIGEN_SYCL_ComputeCpp "Use the ComputeCPP Sycl implementation." OFF )
# Building options
# https://developer.codeplay.com/products/computecpp/ce/2.11.0/guides/eigen-overview/options-for-building-eigen-sycl
option ( EIGEN_SYCL_USE_DEFAULT_SELECTOR "Use sycl default selector to select the preferred device." OFF )
option ( EIGEN_SYCL_NO_LOCAL_MEM "Build for devices without dedicated shared memory." OFF )
option ( EIGEN_SYCL_LOCAL_MEM "Allow the use of local memory (enabled by default)." ON )
option ( EIGEN_SYCL_LOCAL_THREAD_DIM0 "Set work group size for dimension 0." 16 )
option ( EIGEN_SYCL_LOCAL_THREAD_DIM1 "Set work group size for dimension 1." 16 )
option ( EIGEN_SYCL_ASYNC_EXECUTION "Allow asynchronous execution (enabled by default)." ON )
option ( EIGEN_SYCL_DISABLE_SKINNY "Disable optimization for tall/skinny matrices." OFF )
option ( EIGEN_SYCL_DISABLE_DOUBLE_BUFFER "Disable double buffer." OFF )
option ( EIGEN_SYCL_DISABLE_SCALAR "Disable scalar contraction." OFF )
option ( EIGEN_SYCL_DISABLE_GEMV "Disable GEMV and create a single kernel to calculate contraction instead." OFF )
set ( EIGEN_SYCL ON )
set ( CMAKE_CXX_STANDARD 17 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations -Wno-shorten-64-to-32 -Wno-cast-align" )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-copy-with-user-provided-copy -Wno-unused-variable" )
set ( CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules" "cmake/Modules/" "${CMAKE_MODULE_PATH}" )
find_package ( Threads REQUIRED )
if ( EIGEN_SYCL_TRISYCL )
message ( STATUS "Using triSYCL" )
include ( FindTriSYCL )
elseif ( EIGEN_SYCL_ComputeCpp )
message ( STATUS "Using ComputeCPP SYCL" )
include ( FindComputeCpp )
set ( COMPUTECPP_DRIVER_DEFAULT_VALUE OFF )
if ( NOT MSVC )
set ( COMPUTECPP_DRIVER_DEFAULT_VALUE ON )
endif ( )
option ( COMPUTECPP_USE_COMPILER_DRIVER
" U s e C o m p u t e C p p d r i v e r i n s t e a d o f a 2 s t e p s c o m p i l a t i o n "
$ { C O M P U T E C P P _ D R I V E R _ D E F A U L T _ V A L U E }
)
else ( ) #Default SYCL compiler is DPCPP (EIGEN_SYCL_DPCPP)
set ( DPCPP_SYCL_TARGET "spir64" CACHE STRING "Default target for Intel CPU/GPU" )
message ( STATUS "Using DPCPP" )
find_package ( DPCPP )
add_definitions ( -DSYCL_COMPILER_IS_DPCPP )
endif ( EIGEN_SYCL_TRISYCL )
if ( EIGEN_DONT_VECTORIZE_SYCL )
message ( STATUS "Disabling SYCL vectorization in tests/examples" )
# When disabling SYCL vectorization, also disable Eigen default vectorization
add_definitions ( -DEIGEN_DONT_VECTORIZE=1 )
add_definitions ( -DEIGEN_DONT_VECTORIZE_SYCL=1 )
endif ( )
2019-10-31 11:36:27 -05:00
endif ( )
2016-09-19 12:44:13 +01:00
2023-07-28 15:45:08 +00:00
include ( EigenConfigureTesting )
if ( EIGEN_LEAVE_TEST_IN_ALL_TARGET )
2024-05-01 17:42:53 +00:00
# CTest automatic test building relies on the "all" target.
add_subdirectory ( test )
add_subdirectory ( failtest )
2023-07-28 15:45:08 +00:00
else ( )
add_subdirectory ( test EXCLUDE_FROM_ALL )
2024-05-01 17:42:53 +00:00
add_subdirectory ( failtest EXCLUDE_FROM_ALL )
2023-07-28 15:45:08 +00:00
endif ( )
2024-05-01 17:42:53 +00:00
ei_testing_print_summary ( )
2023-07-28 15:45:08 +00:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_SPLIT_TESTSUITE )
ei_split_testsuite ( "${EIGEN_SPLIT_TESTSUITE}" )
endif ( )
endif ( EIGEN_BUILD_TESTING )
2023-07-28 15:45:08 +00:00
2024-05-01 17:42:53 +00:00
#==============================================================================
# Other Build Configurations.
#==============================================================================
2011-02-23 09:25:32 +01:00
add_subdirectory ( unsupported )
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_BLAS )
add_subdirectory ( blas )
endif ( )
if ( EIGEN_BUILD_LAPACK )
add_subdirectory ( lapack )
endif ( )
2011-02-23 09:25:32 +01:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_DOC )
add_subdirectory ( doc EXCLUDE_FROM_ALL )
endif ( )
2009-11-12 12:07:18 -05:00
2009-09-27 17:48:53 -04:00
# TODO: consider also replacing EIGEN_BUILD_BTL by a custom target "make btl"?
2008-12-02 12:59:10 +00:00
if ( EIGEN_BUILD_BTL )
2009-09-27 17:48:53 -04:00
add_subdirectory ( bench/btl EXCLUDE_FROM_ALL )
2019-10-31 11:36:27 -05:00
endif ( )
2009-02-27 16:19:13 +00:00
2022-09-02 16:43:14 +00:00
if ( NOT WIN32 AND EIGEN_BUILD_SPBENCH )
2012-06-07 18:31:09 +02:00
add_subdirectory ( bench/spbench EXCLUDE_FROM_ALL )
2019-10-31 11:36:27 -05:00
endif ( )
2012-03-29 14:32:54 +02:00
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_DEMOS )
add_subdirectory ( demos EXCLUDE_FROM_ALL )
endif ( )
2013-03-20 08:40:13 +01:00
2024-05-01 17:42:53 +00:00
if ( PROJECT_IS_TOP_LEVEL )
# must be after test and unsupported, for configuring buildtests.in
add_subdirectory ( scripts EXCLUDE_FROM_ALL )
configure_file ( scripts/cdashtesting.cmake.in cdashtesting.cmake @ONLY )
2017-01-02 09:09:21 +01:00
endif ( )
2009-10-19 15:56:03 -04:00
2024-05-01 17:42:53 +00:00
#==============================================================================
# Summary.
#==============================================================================
2009-10-19 15:56:03 -04:00
2021-10-24 21:00:11 +02:00
if ( PROJECT_IS_TOP_LEVEL )
string ( TOLOWER "${CMAKE_GENERATOR}" cmake_generator_tolower )
if ( cmake_generator_tolower MATCHES "makefile" )
message ( STATUS "Available targets (use: make TARGET):" )
else ( )
message ( STATUS "Available targets (use: cmake --build . --target TARGET):" )
endif ( )
message ( STATUS "---------+--------------------------------------------------------------" )
message ( STATUS "Target | Description" )
message ( STATUS "---------+--------------------------------------------------------------" )
message ( STATUS "install | Install Eigen. Headers will be installed to:" )
message ( STATUS " | <CMAKE_INSTALL_PREFIX>/<INCLUDE_INSTALL_DIR>" )
message ( STATUS " | Using the following values:" )
message ( STATUS " | CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}" )
message ( STATUS " | INCLUDE_INSTALL_DIR: ${INCLUDE_INSTALL_DIR}" )
message ( STATUS " | Change the install location of Eigen headers using:" )
message ( STATUS " | cmake . -DCMAKE_INSTALL_PREFIX=yourprefix" )
message ( STATUS " | Or:" )
message ( STATUS " | cmake . -DINCLUDE_INSTALL_DIR=yourdir" )
2024-05-01 17:42:53 +00:00
message ( STATUS "uninstall| Remove files installed by the install target" )
if ( EIGEN_BUILD_DOC )
message ( STATUS "doc | Generate the API documentation, requires Doxygen & LaTeX" )
endif ( )
2021-10-24 21:00:11 +02:00
if ( EIGEN_BUILD_TESTING )
message ( STATUS "check | Build and run the unit-tests. Read this page:" )
message ( STATUS " | http://eigen.tuxfamily.org/index.php?title=Tests" )
endif ( )
2024-05-01 17:42:53 +00:00
if ( EIGEN_BUILD_BLAS )
message ( STATUS "blas | Build BLAS library (not the same thing as Eigen)" )
endif ( )
if ( EIGEN_BUILD_LAPACK )
message ( STATUS "lapack | Build LAPACK subset library (not the same thing as Eigen)" )
2021-11-09 23:49:01 +01:00
endif ( )
2021-10-24 21:00:11 +02:00
message ( STATUS "---------+--------------------------------------------------------------" )
message ( STATUS "" )
2020-06-16 21:04:33 +00:00
endif ( )
2013-10-09 10:25:50 +02:00
2024-05-01 17:42:53 +00:00
message ( STATUS "" )
message ( STATUS "Configured Eigen ${EIGEN_VERSION_NUMBER}" )
message ( STATUS "" )