2008-12-02 12:59:10 +00:00
project ( Eigen )
2008-08-27 06:43:42 +00:00
2015-11-07 21:29:24 -05:00
cmake_minimum_required ( VERSION 2.8.5 )
2009-08-14 21:58:41 -04:00
2010-04-19 11:19:22 -04:00
# guard against in-source builds
2009-11-15 00:11:33 -05:00
if ( ${ CMAKE_SOURCE_DIR } STREQUAL ${ CMAKE_BINARY_DIR } )
2011-02-05 18:57:29 -05:00
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. " )
2009-11-15 00:11:33 -05:00
endif ( )
2010-10-25 10:15:22 -04:00
# guard against bad build-type strings
2011-01-19 10:15:36 -05:00
if ( NOT CMAKE_BUILD_TYPE )
set ( CMAKE_BUILD_TYPE "Release" )
endif ( )
2010-10-25 10:15:22 -04:00
string ( TOLOWER "${CMAKE_BUILD_TYPE}" cmake_build_type_tolower )
if ( NOT cmake_build_type_tolower STREQUAL "debug"
A N D N O T c m a k e _ b u i l d _ t y p e _ t o l o w e r S T R E Q U A L " r e l e a s e "
2011-01-19 10:15:36 -05:00
A N D N O T c m a k e _ b u i l d _ t y p e _ t o l o w e r S T R E Q U A L " r e l w i t h d e b i n f o " )
message ( FATAL_ERROR "Unknown build type \" ${ CMAKE_BUILD_TYPE } \". Allowed values are Debug, Release, RelWithDebInfo ( case-insensitive ) . " )
2010-10-25 10:15:22 -04:00
endif ( )
2010-04-19 11:19:22 -04:00
#############################################################################
# retrieve version infomation #
#############################################################################
2009-05-20 00:04:08 +02:00
# automatically parse the version number
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
2009-08-14 21:58:41 -04:00
# if the mercurial program is absent, this will leave the EIGEN_HG_CHANGESET string empty,
2009-05-20 00:04:08 +02:00
# but won't stop CMake.
execute_process ( COMMAND hg tip -R ${ CMAKE_SOURCE_DIR } OUTPUT_VARIABLE EIGEN_HGTIP_OUTPUT )
2009-08-14 21:58:41 -04:00
execute_process ( COMMAND hg branch -R ${ CMAKE_SOURCE_DIR } OUTPUT_VARIABLE EIGEN_BRANCH_OUTPUT )
# if this is the default (aka development) branch, extract the mercurial changeset number from the hg tip output...
if ( EIGEN_BRANCH_OUTPUT MATCHES "default" )
string ( REGEX MATCH "^changeset: *[0-9]*:([0-9;a-f]+).*" EIGEN_HG_CHANGESET_MATCH "${EIGEN_HGTIP_OUTPUT}" )
set ( EIGEN_HG_CHANGESET "${CMAKE_MATCH_1}" )
endif ( EIGEN_BRANCH_OUTPUT MATCHES "default" )
#...and show it next to the version number
if ( EIGEN_HG_CHANGESET )
set ( EIGEN_VERSION "${EIGEN_VERSION_NUMBER} (mercurial changeset ${EIGEN_HG_CHANGESET})" )
else ( EIGEN_HG_CHANGESET )
2008-12-02 12:59:10 +00:00
set ( EIGEN_VERSION "${EIGEN_VERSION_NUMBER}" )
2009-08-14 21:58:41 -04:00
endif ( EIGEN_HG_CHANGESET )
2008-05-31 23:21:49 +00:00
2010-04-19 11:19:22 -04:00
2009-05-06 08:15:54 +00:00
include ( CheckCXXCompilerFlag )
2015-11-07 21:29:24 -05:00
include ( GNUInstallDirs )
2009-05-06 08:15:54 +00:00
2008-08-23 17:40:52 +00:00
set ( CMAKE_MODULE_PATH ${ PROJECT_SOURCE_DIR } /cmake )
2008-08-23 17:25:54 +00:00
2010-04-19 11:19:22 -04:00
#############################################################################
# find how to link to the standard libraries #
#############################################################################
find_package ( StandardMathLibrary )
2011-12-09 10:50:13 +01:00
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." )
2010-04-19 11:19:22 -04:00
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 ( )
endif ( )
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" )
endif ( )
2008-12-02 12:59:10 +00:00
option ( EIGEN_BUILD_BTL "Build benchmark suite" OFF )
2009-05-19 11:48:50 -05:00
if ( NOT WIN32 )
option ( EIGEN_BUILD_PKGCONFIG "Build pkg-config .pc file for Eigen" ON )
endif ( NOT WIN32 )
2008-07-09 14:04:48 +00:00
2008-12-02 12:59:10 +00:00
set ( CMAKE_INCLUDE_CURRENT_DIR ON )
2007-05-30 06:57:40 +00:00
2010-12-17 09:42:17 +01:00
option ( EIGEN_SPLIT_LARGE_TESTS "Split large tests into smaller executables" ON )
2010-05-18 08:59:39 -04:00
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" )
endif ( )
2011-07-12 14:41:00 +02:00
set ( EIGEN_TEST_MAX_SIZE "320" CACHE STRING "Maximal matrix/vector size, default is 320" )
2013-04-12 15:24:41 +02:00
macro ( ei_add_cxx_compiler_flag FLAG )
2014-07-17 13:34:26 +02:00
string ( REGEX REPLACE "-" "" SFLAG1 ${ FLAG } )
string ( REGEX REPLACE "\\+" "p" SFLAG ${ SFLAG1 } )
2013-04-12 15:24:41 +02:00
check_cxx_compiler_flag ( ${ FLAG } COMPILER_SUPPORT_ ${ SFLAG } )
if ( COMPILER_SUPPORT_ ${ SFLAG } )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}" )
endif ( )
endmacro ( ei_add_cxx_compiler_flag )
if ( NOT MSVC )
# We assume that other compilers are partly compatible with GNUCC
2015-11-30 17:05:42 +01:00
2013-04-12 15:24:41 +02:00
# clang outputs some warnings for unknwon 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" )
2010-02-20 17:39:58 +01:00
endif ( )
2013-04-12 15:24:41 +02:00
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" )
2014-09-29 10:33:16 +02:00
ei_add_cxx_compiler_flag ( "-Wshorten-64-to-32" )
2014-07-17 13:34:26 +02:00
ei_add_cxx_compiler_flag ( "-Wenum-conversion" )
ei_add_cxx_compiler_flag ( "-Wc++11-extensions" )
2013-04-12 15:24:41 +02:00
2015-06-09 17:44:18 +02:00
# -Wshadow is insanely too strict with gcc, hopefully it will become usable with gcc 6
# if(NOT CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "5.0.0"))
if ( NOT CMAKE_COMPILER_IS_GNUCXX )
ei_add_cxx_compiler_flag ( "-Wshadow" )
endif ( )
2013-04-12 15:24:41 +02:00
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" )
2013-06-12 13:02:30 +02:00
ei_add_cxx_compiler_flag ( "-wd981" ) # disable ICC's "operands are evaluated in unspecified order" remark
ei_add_cxx_compiler_flag ( "-wd2304" ) # disbale ICC's "warning #2304: non-explicit constructor with single argument may cause implicit type conversion" produced by -Wnon-virtual-dtor
2013-04-12 15:24:41 +02:00
2014-07-17 13:34:26 +02:00
2013-04-12 15:24:41 +02:00
# The -ansi flag must be added last, otherwise it is also used as a linker flag by check_cxx_compiler_flag making it fails
2013-04-12 15:51:40 +02:00
# Moreover we should not set both -strict-ansi and -ansi
check_cxx_compiler_flag ( "-strict-ansi" COMPILER_SUPPORT_STRICTANSI )
2013-06-21 09:24:57 +02:00
ei_add_cxx_compiler_flag ( "-Qunused-arguments" ) # disable clang warning: argument unused during compilation: '-ansi'
2013-04-12 15:51:40 +02:00
if ( COMPILER_SUPPORT_STRICTANSI )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -strict-ansi" )
else ( )
ei_add_cxx_compiler_flag ( "-ansi" )
endif ( )
2015-04-07 14:03:21 -04:00
if ( ANDROID_NDK )
ei_add_cxx_compiler_flag ( "-pie" )
ei_add_cxx_compiler_flag ( "-fPIE" )
endif ( )
2013-04-12 15:24:41 +02:00
set ( CMAKE_REQUIRED_FLAGS "" )
2010-02-20 17:39:58 +01:00
option ( EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF )
if ( EIGEN_TEST_SSE2 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling SSE2 in tests/examples" )
2010-02-20 17:39:58 +01:00
endif ( )
option ( EIGEN_TEST_SSE3 "Enable/Disable SSE3 in tests/examples" OFF )
if ( EIGEN_TEST_SSE3 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse3" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling SSE3 in tests/examples" )
2010-02-20 17:39:58 +01:00
endif ( )
option ( EIGEN_TEST_SSSE3 "Enable/Disable SSSE3 in tests/examples" OFF )
if ( EIGEN_TEST_SSSE3 )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling SSSE3 in tests/examples" )
2010-02-20 17:39:58 +01:00
endif ( )
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" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling SSE4.1 in tests/examples" )
2010-02-20 17:39:58 +01:00
endif ( )
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" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling SSE4.2 in tests/examples" )
2010-02-20 17:39:58 +01:00
endif ( )
2014-03-24 09:52:45 -07:00
option ( EIGEN_TEST_AVX "Enable/Disable AVX in tests/examples" OFF )
2014-01-29 11:43:05 -08:00
if ( EIGEN_TEST_AVX )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx" )
message ( STATUS "Enabling AVX in tests/examples" )
endif ( )
2014-03-24 09:52:45 -07:00
option ( EIGEN_TEST_FMA "Enable/Disable FMA in tests/examples" OFF )
2015-04-07 14:03:21 -04:00
if ( EIGEN_TEST_FMA AND NOT EIGEN_TEST_NEON )
2014-03-24 09:52:45 -07:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma" )
message ( STATUS "Enabling FMA in tests/examples" )
endif ( )
2010-03-03 13:16:21 -05:00
option ( EIGEN_TEST_ALTIVEC "Enable/Disable AltiVec in tests/examples" OFF )
2010-02-20 17:39:58 +01:00
if ( EIGEN_TEST_ALTIVEC )
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec -mabi=altivec" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling AltiVec in tests/examples" )
2010-02-20 17:39:58 +01:00
endif ( )
2010-03-03 11:25:41 -06:00
2014-08-29 20:03:49 +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 ( )
2010-03-03 13:16:21 -05:00
option ( EIGEN_TEST_NEON "Enable/Disable Neon in tests/examples" OFF )
2010-03-03 11:25:41 -06:00
if ( EIGEN_TEST_NEON )
2015-04-07 14:03:21 -04:00
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=softfp" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling NEON in tests/examples" )
2010-03-03 11:25:41 -06:00
endif ( )
2014-10-21 18:10:01 +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 ( )
2010-03-05 10:22:27 +01: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" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling OpenMP in tests/examples" )
2010-03-05 10:22:27 +01:00
endif ( )
endif ( )
2013-04-12 15:24:41 +02:00
else ( NOT MSVC )
2007-05-30 06:57:40 +00:00
2010-02-20 17:39:58 +01:00
# C4127 - conditional expression is constant
2010-05-19 19:35:42 +02:00
# 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 deactive selectively)
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /wd4127 /wd4505 /wd4714" )
2010-07-01 07:28:16 +02:00
# replace all /Wx by /W4
2010-02-21 15:23:51 +01:00
string ( REGEX REPLACE "/W[0-9]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
2010-07-01 07:28:16 +02:00
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" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling OpenMP in tests/examples" )
2010-07-01 07:28:16 +02:00
endif ( )
endif ( )
2008-12-18 09:07:36 +00:00
option ( EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF )
if ( EIGEN_TEST_SSE2 )
2009-08-28 00:05:44 +02:00
if ( NOT CMAKE_CL_64 )
2009-09-25 13:08:39 +02:00
# arch is not supported on 64 bit systems, SSE is enabled automatically.
2009-08-28 00:05:44 +02:00
set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2" )
endif ( NOT CMAKE_CL_64 )
2010-12-29 22:02:01 +01:00
message ( STATUS "Enabling SSE2 in tests/examples" )
2008-12-18 09:07:36 +00:00
endif ( EIGEN_TEST_SSE2 )
2013-04-12 15:24:41 +02:00
endif ( NOT MSVC )
2008-12-18 09:07:36 +00:00
2009-01-14 14:24:10 +00:00
option ( EIGEN_TEST_NO_EXPLICIT_VECTORIZATION "Disable explicit vectorization in tests/examples" OFF )
2010-10-13 09:04:59 -04:00
option ( EIGEN_TEST_X87 "Force using X87 instructions. Implies no vectorization." OFF )
2011-02-27 17:27:23 -05:00
option ( EIGEN_TEST_32BIT "Force generating 32bit code." OFF )
2010-10-13 09:04:59 -04: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" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Forcing use of x87 instructions in tests/examples" )
2010-10-13 09:04:59 -04:00
else ( )
2010-12-29 22:02:01 +01:00
message ( STATUS "EIGEN_TEST_X87 ignored on your compiler" )
2010-10-13 09:04:59 -04:00
endif ( )
endif ( )
2011-02-27 17:27:23 -05: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 ( )
2009-01-14 14:24:10 +00:00
if ( EIGEN_TEST_NO_EXPLICIT_VECTORIZATION )
2009-01-15 08:26:40 +00:00
add_definitions ( -DEIGEN_DONT_VECTORIZE=1 )
2010-12-29 22:02:01 +01:00
message ( STATUS "Disabling vectorization in tests/examples" )
2010-03-06 02:17:37 -05:00
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 )
2010-12-29 22:02:01 +01:00
message ( STATUS "Disabling alignment in tests/examples" )
2010-03-06 02:17:37 -05:00
endif ( )
2009-01-14 14:24:10 +00:00
2014-07-22 13:16:44 +02:00
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 ( )
2015-02-20 09:31:27 +01:00
option ( EIGEN_TEST_CXX11 "Enable testing with C++11 and C++11 features (e.g. Tensor module)." OFF )
2009-09-21 19:59:58 +02:00
2016-02-25 09:06:18 -08:00
set ( EIGEN_CUDA_COMPUTE_ARCH 30 CACHE STRING "The CUDA compute architecture level to target when compiling CUDA code" )
2008-12-02 12:59:10 +00:00
include_directories ( ${ CMAKE_CURRENT_SOURCE_DIR } ${ CMAKE_CURRENT_BINARY_DIR } )
2007-05-30 06:57:40 +00:00
2015-12-10 15:47:06 +01:00
# 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." )
endif ( )
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 _ P R E F I X _ P A T H 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 " )
else ( )
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 _ P R E F I X _ P A T H 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 "
)
endif ( )
2015-11-07 21:29:24 -05:00
set ( CMAKEPACKAGE_INSTALL_DIR
" $ { C M A K E _ I N S T A L L _ L I B D I R } / c m a k e / 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 _ P R E F I X _ P A T H 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 _ P R E F I X _ P A T H w h e r e e i g e n 3 . p c i s i n s t a l l e d "
)
2010-04-08 13:28:21 +02:00
2009-02-05 09:37:53 +00:00
2010-06-28 00:05:11 +02:00
# similar to set_target_properties but append the property instead of overwriting it
macro ( ei_add_target_property target prop value )
get_target_property ( previous ${ target } ${ prop } )
# if the property wasn't previously set, ${previous} is now "previous-NOTFOUND" which cmake allows catching with plain if()
if ( NOT previous )
set ( previous "" )
endif ( NOT previous )
set_target_properties ( ${ target } PROPERTIES ${ prop } "${previous} ${value}" )
endmacro ( ei_add_target_property )
2009-11-19 12:41:28 -05: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
)
2009-05-19 11:48:50 -05:00
if ( EIGEN_BUILD_PKGCONFIG )
2015-11-07 21:29:24 -05:00
configure_file ( eigen3.pc.in eigen3.pc @ONLY )
2009-11-19 12:09:04 -05:00
install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /eigen3.pc
2015-11-07 21:29:24 -05:00
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 }
2009-05-19 11:48:50 -05:00
)
endif ( EIGEN_BUILD_PKGCONFIG )
2008-12-02 12:59:10 +00:00
add_subdirectory ( Eigen )
2008-07-09 14:04:48 +00:00
2009-09-27 17:48:53 -04:00
add_subdirectory ( doc EXCLUDE_FROM_ALL )
2009-02-27 16:19:13 +00:00
2011-02-20 11:54:07 +01:00
include ( EigenConfigureTesting )
2013-03-20 08:40:13 +01:00
2011-11-09 21:19:05 +01:00
# fixme, not sure this line is still needed:
2009-09-27 17:48:53 -04:00
enable_testing ( ) # must be called from the root CMakeLists, see man page
2011-02-15 12:39:45 +01:00
2011-02-15 11:40:43 +01:00
2009-11-12 12:07:18 -05:00
if ( EIGEN_LEAVE_TEST_IN_ALL_TARGET )
2009-11-13 13:05:57 +00:00
add_subdirectory ( test ) # can't do EXCLUDE_FROM_ALL here, breaks CTest
2009-11-12 12:07:18 -05:00
else ( )
2009-11-13 13:05:57 +00:00
add_subdirectory ( test EXCLUDE_FROM_ALL )
2009-11-12 12:07:18 -05:00
endif ( )
2008-12-02 12:59:10 +00:00
2011-11-05 13:26:53 +01:00
if ( EIGEN_LEAVE_TEST_IN_ALL_TARGET )
add_subdirectory ( blas )
add_subdirectory ( lapack )
else ( )
add_subdirectory ( blas EXCLUDE_FROM_ALL )
add_subdirectory ( lapack EXCLUDE_FROM_ALL )
2011-09-21 10:27:38 +02:00
endif ( )
2009-09-25 13:08:39 +02:00
2011-02-23 09:25:32 +01:00
add_subdirectory ( unsupported )
add_subdirectory ( demos EXCLUDE_FROM_ALL )
2009-11-25 21:26:37 -05:00
# must be after test and unsupported, for configuring buildtests.in
2009-11-12 12:07:18 -05:00
add_subdirectory ( scripts EXCLUDE_FROM_ALL )
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 )
2008-12-02 12:59:10 +00:00
endif ( EIGEN_BUILD_BTL )
2009-02-27 16:19:13 +00:00
2012-06-07 18:31:09 +02:00
if ( NOT WIN32 )
add_subdirectory ( bench/spbench EXCLUDE_FROM_ALL )
endif ( NOT WIN32 )
2012-03-29 14:32:54 +02:00
2013-03-20 08:40:13 +01:00
configure_file ( scripts/cdashtesting.cmake.in cdashtesting.cmake @ONLY )
2009-09-27 17:48:53 -04:00
ei_testing_print_summary ( )
2009-10-19 15:56:03 -04:00
2010-12-29 22:02:01 +01:00
message ( STATUS "" )
message ( STATUS "Configured Eigen ${EIGEN_VERSION_NUMBER}" )
message ( STATUS "" )
2009-10-19 15:56:03 -04:00
2011-02-06 13:43:08 +01:00
option ( EIGEN_FAILTEST "Enable failtests." OFF )
2011-02-05 18:57:29 -05:00
if ( EIGEN_FAILTEST )
add_subdirectory ( failtest )
endif ( )
2010-12-17 09:42:17 +01:00
string ( TOLOWER "${CMAKE_GENERATOR}" cmake_generator_tolower )
2009-10-19 15:56:03 -04:00
if ( cmake_generator_tolower MATCHES "makefile" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Some things you can do now:" )
2011-01-01 12:02:55 +01:00
message ( STATUS "--------------+--------------------------------------------------------------" )
2010-12-29 22:02:01 +01:00
message ( STATUS "Command | Description" )
2011-01-01 12:02:55 +01:00
message ( STATUS "--------------+--------------------------------------------------------------" )
2015-11-07 21:29:24 -05:00
message ( STATUS "make 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" )
2010-12-29 22:02:01 +01:00
message ( STATUS "make doc | Generate the API documentation, requires Doxygen & LaTeX" )
message ( STATUS "make check | Build and run the unit-tests. Read this page:" )
message ( STATUS " | http://eigen.tuxfamily.org/index.php?title=Tests" )
message ( STATUS "make blas | Build BLAS library (not the same thing as Eigen)" )
2014-12-04 02:57:03 -05:00
message ( STATUS "make uninstall| Removes files installed by make install" )
2011-01-01 12:02:55 +01:00
message ( STATUS "--------------+--------------------------------------------------------------" )
2009-11-15 21:12:15 -05:00
else ( )
2010-12-29 22:02:01 +01:00
message ( STATUS "To build/run the unit tests, read this page:" )
message ( STATUS " http://eigen.tuxfamily.org/index.php?title=Tests" )
2009-10-19 15:56:03 -04:00
endif ( )
2009-11-12 12:07:18 -05:00
2010-12-29 22:02:01 +01:00
message ( STATUS "" )
2013-10-09 10:25:50 +02:00
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 } )
set ( EIGEN_DEFINITIONS "" )
2015-11-07 21:29:24 -05:00
set ( EIGEN_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}" )
2013-10-09 10:25:50 +02:00
set ( EIGEN_INCLUDE_DIRS ${ EIGEN_INCLUDE_DIR } )
set ( EIGEN_ROOT_DIR ${ CMAKE_INSTALL_PREFIX } )
2014-06-06 11:06:44 +02:00
configure_file ( ${ CMAKE_CURRENT_SOURCE_DIR } /cmake/Eigen3Config.cmake.in
2013-10-09 10:25:50 +02:00
$ { 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
@ O N L Y E S C A P E _ Q U O T E S
)
2014-06-06 11:06:44 +02:00
install ( FILES ${ CMAKE_CURRENT_SOURCE_DIR } /cmake/UseEigen3.cmake
2013-10-09 10:25:50 +02:00
$ { 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
2015-11-07 21:29:24 -05:00
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 }
2013-10-09 10:25:50 +02:00
)
2014-12-04 02:57:03 -05:00
# Add uninstall target
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 )