diff armadillo-2.4.4/CMakeLists.txt @ 0:8b6102e2a9b0

Armadillo Library
author maxzanoni76 <max.zanoni@eecs.qmul.ac.uk>
date Wed, 11 Apr 2012 09:27:06 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/armadillo-2.4.4/CMakeLists.txt	Wed Apr 11 09:27:06 2012 +0100
@@ -0,0 +1,378 @@
+
+# Copyright (C) 2008-2011 NICTA (www.nicta.com.au)
+# Copyright (C) 2008-2011 Conrad Sanderson
+# Copyright (C)      2011 Clement Creusot
+# 
+# This file is part of the Armadillo C++ library.
+# It is provided without any warranty of fitness
+# for any purpose. You can redistribute this file
+# and/or modify it under the terms of the GNU
+# Lesser General Public License (LGPL) as published
+# by the Free Software Foundation, either version 3
+# of the License or (at your option) any later version.
+# (see http://www.opensource.org/licenses for more info)
+
+cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
+
+set(ARMA_MAJOR 2)
+set(ARMA_MINOR 4)
+set(ARMA_PATCH 4)
+
+message(STATUS "Configuring Armadillo ${ARMA_MAJOR}.${ARMA_MINOR}.${ARMA_PATCH}")
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/build_aux/cmake/Modules/")
+
+include(CheckIncludeFileCXX)
+include(CheckLibraryExists)
+include(FindBoost)
+include(ARMA_CheckProto)
+include(ARMA_CheckMathProto)
+
+project(armadillo CXX)
+
+#CMAKE_REQUIRED_FLAGS = string of compile command line flags
+#CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
+#CMAKE_REQUIRED_LIBRARIES = list of libraries to link
+
+
+set(ARMA_USE_LAPACK  false)
+set(ARMA_USE_BLAS    false)
+set(ARMA_USE_ATLAS   false)
+set(ARMA_USE_BOOST   false)
+set(ARMA_USE_WRAPPER true )
+
+
+if(WIN32)
+  message(STATUS "")
+  message(STATUS "WARNING:")
+  message(STATUS "Automatic installation is currently not available for this platform.")
+  message(STATUS "Please use the manual installation, as described in the README.txt file.")
+  message(STATUS "You can also use the 'include' folder directly, but you may want to edit")
+  message(STATUS "'include/armadillo_bits/config.hpp' if you have LAPACK installed.")
+  message(STATUS "")
+endif()
+
+
+
+#
+# Find LAPACK and BLAS libraries, or their optimised versions
+#
+
+if(APPLE)
+  set(ARMA_OS macos)
+  
+  set(ARMA_USE_LAPACK true)
+  set(ARMA_USE_BLAS   true)
+  
+  # Under MacOS, the current version of ARMA_FindCLAPACK can get confused between
+  # two incompatible versions of "clapack.h" (one provided by the system and one
+  # provided by ATLAS).  As such, use of ATLAS under MacOS is disabled for now.
+  
+else()
+  set(ARMA_OS unix)
+  
+  include(ARMA_FindMKL)
+  include(ARMA_FindACMLMP)
+  include(ARMA_FindACML)
+  
+  message(STATUS "MKL_FOUND     = ${MKL_FOUND}")
+  message(STATUS "ACMLMP_FOUND  = ${ACMLMP_FOUND}")
+  message(STATUS "ACML_FOUND    = ${ACML_FOUND}")
+  
+  if(MKL_FOUND OR ACMLMP_FOUND OR ACML_FOUND)
+    
+    set(ARMA_USE_BLAS true)
+    set(ARMA_USE_LAPACK true)
+    
+    message(STATUS "*** If the MKL or ACML libraries are installed in a non-standard location,")
+    message(STATUS "*** make sure the run-time linker can find them.")
+    message(STATUS "*** On Linux systems this can be done by editing /etc/ld.so.conf")
+    message(STATUS "*** or modifying the LD_LIBRARY_PATH environment variable.")
+    message(STATUS "*** On systems with SELinux enabled (e.g. Fedora, RHEL),")
+    message(STATUS "*** you may need to change the SELinux type of all MKL/ACML libraries")
+    message(STATUS "*** to fix permission problems that may occur during run-time.")
+    message(STATUS "*** See README.txt for more information")
+    
+  else()
+    
+    include(ARMA_FindLAPACK)
+    include(ARMA_FindBLAS)
+    include(ARMA_FindCLAPACK)
+    include(ARMA_FindCBLAS)
+    
+    message(STATUS "LAPACK_FOUND  = ${LAPACK_FOUND}")
+    message(STATUS "BLAS_FOUND    = ${BLAS_FOUND}")
+    message(STATUS "CLAPACK_FOUND = ${CLAPACK_FOUND}")
+    message(STATUS "CBLAS_FOUND   = ${CBLAS_FOUND}")
+    
+    if(LAPACK_FOUND)
+      set(ARMA_USE_LAPACK true)
+    endif()
+    
+    if(BLAS_FOUND)
+      set(ARMA_USE_BLAS true)
+    endif()
+    
+    if(CLAPACK_FOUND AND CBLAS_FOUND)
+      message(STATUS "CLAPACK_INCLUDE_DIR = ${CLAPACK_INCLUDE_DIR}")
+      message(STATUS "CBLAS_INCLUDE_DIR   = ${CBLAS_INCLUDE_DIR}")
+      if(${CLAPACK_INCLUDE_DIR} STREQUAL ${CBLAS_INCLUDE_DIR})
+        set(ARMA_USE_ATLAS true)
+        set(ARMA_ATLAS_INCLUDE_DIR ${CLAPACK_INCLUDE_DIR})
+      endif()
+    endif()
+    
+  endif()
+  
+endif()
+
+
+if(MKL_FOUND OR ACMLMP_FOUND OR ACML_FOUND)
+  
+  if(MKL_FOUND)
+    set(ARMA_LIBS ${ARMA_LIBS} ${MKL_LIBRARIES})
+    
+    if(ACMLMP_FOUND OR ACML_FOUND)
+      message(STATUS "*** Intel MKL as well as AMD ACML libraries were found.")
+      message(STATUS "*** Using only the MKL library to avoid linking conflicts.")
+      message(STATUS "*** If you wish to use ACML instead, please link manually with")
+      message(STATUS "*** acml or acml_mp instead of the armadillo run-time component.")
+      message(STATUS "*** Alternatively, remove MKL from your system and rerun")
+      message(STATUS "*** Armadillo's configuration using ./configure") 
+    endif()
+    
+  else()
+    
+    if(ACMLMP_FOUND)
+      set(ARMA_LIBS ${ARMA_LIBS} ${ACMLMP_LIBRARIES})
+      
+      message(STATUS "*** Both single-core and multi-core ACML libraries were found.")
+      message(STATUS "*** Using only the multi-core library to avoid linking conflicts.")
+    else()
+      if(ACML_FOUND)
+        set(ARMA_LIBS ${ARMA_LIBS} ${ACML_LIBRARIES})
+      endif()
+    endif()
+    
+  endif()
+  
+else()
+  
+  if(ARMA_USE_BLAS STREQUAL true)
+    set(ARMA_LIBS ${ARMA_LIBS} ${BLAS_LIBRARIES})
+  endif()
+  
+  if(ARMA_USE_LAPACK STREQUAL true)
+    set(ARMA_LIBS ${ARMA_LIBS} ${LAPACK_LIBRARIES})
+  endif()
+  
+  if(ARMA_USE_ATLAS STREQUAL true)
+    set(ARMA_LIBS ${ARMA_LIBS} ${CBLAS_LIBRARIES})
+    set(ARMA_LIBS ${ARMA_LIBS} ${CLAPACK_LIBRARIES})
+  endif()
+  
+endif()
+
+
+if(APPLE)
+  set(ARMA_LIBS ${ARMA_LIBS} "-framework Accelerate")  # or "-framework accelerate" ?
+  message(STATUS "MacOS X detected. Added '-framework Accelerate' to compiler flags")
+endif()
+
+message(STATUS "*** ")
+message(STATUS "*** The Armadillo run-time library component will be an alias for the following libraries:")
+message(STATUS "*** ARMA_LIBS = ${ARMA_LIBS}")
+message(STATUS "*** ")
+
+find_package(Boost)
+
+if(Boost_FOUND)
+  
+  message(STATUS "Boost_MAJOR_VERSION = ${Boost_MAJOR_VERSION}")
+  message(STATUS "Boost_MINOR_VERSION = ${Boost_MINOR_VERSION}")
+  
+  if(Boost_MAJOR_VERSION GREATER 0)
+    if(Boost_MINOR_VERSION GREATER 33)
+      set(ARMA_USE_BOOST true)
+      message(STATUS "Boost_INCLUDE_DIR = ${Boost_INCLUDE_DIR}")
+    endif()
+  endif()
+  
+endif()
+
+if(ARMA_USE_BOOST STREQUAL false)
+  message(STATUS "Boost libraries either not found or their version is too low (version 1.34 or later is good).")
+  message(STATUS "( It's possible that CMake didn't find the particular version of Boost you may have. )")
+  message(STATUS "( If that's the case, please edit include/armadillo_bits/config.hpp manually. )")
+endif()
+
+
+# If Boost libraries were found, explicitly check if Boost's date_time library is also present.
+# This is due to the non-standard packaging of Boost libraries on Debian and Ubuntu systems,
+# where certain individual Boost libraries are packaged separately.
+
+if(ARMA_USE_BOOST STREQUAL true)
+  set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${Boost_INCLUDE_DIR})
+  CHECK_INCLUDE_FILE_CXX("boost/date_time/posix_time/posix_time.hpp" ARMA_USE_BOOST_DATE)
+endif()
+
+ARMA_CHECK_MATH_PROTO("isfinite" "std" "cmath"  ARMA_HAVE_STD_ISFINITE)
+ARMA_CHECK_MATH_PROTO("isinf"    "std" "cmath"  ARMA_HAVE_STD_ISINF)
+ARMA_CHECK_MATH_PROTO("isnan"    "std" "cmath"  ARMA_HAVE_STD_ISNAN)
+ARMA_CHECK_MATH_PROTO("log1p"    ""    "cmath"  ARMA_HAVE_LOG1P)
+
+ARMA_CHECK_PROTO("snprintf"     "std" "cstdio"     ARMA_HAVE_STD_SNPRINTF)
+ARMA_CHECK_PROTO("gettimeofday" ""    "sys/time.h" ARMA_HAVE_GETTIMEOFDAY)
+
+
+message(STATUS "Generating 'include/armadillo_bits/config.hpp'")
+configure_file(include/armadillo_bits/config.hpp.cmake include/armadillo_bits/config.hpp)
+
+message(STATUS "Generating 'examples/Makefile'")
+configure_file(examples/Makefile.cmake examples/Makefile)
+
+
+if(ARMA_USE_BOOST STREQUAL true)
+  include_directories(include ${Boost_INCLUDE_DIR})
+else()
+  include_directories(include)
+endif()
+
+
+## For any library that is not in a default location,
+## embed its path into the Armadillo runtime library.
+## Examples of default locations are "/lib", "/usr/lib",
+## or as specified in "/etc/ld.so.conf".
+##
+## Path embedding is not recommended unless you know
+## what you're doing.  It might be better to add the
+## path to the "/etc/ld.so.conf" file and then run "ldconfig".
+##
+#set(CMAKE_SKIP_BUILD_RPATH  FALSE)
+#set(CMAKE_BUILD_WITH_INSTALL_RPATH  FALSE)
+#set(CMAKE_INSTALL_RPATH_USE_LINK_PATH  TRUE)
+
+
+add_library( armadillo SHARED src/wrap_libs )
+target_link_libraries( armadillo ${ARMA_LIBS} )
+
+set_target_properties(armadillo PROPERTIES VERSION ${ARMA_MAJOR}.${ARMA_MINOR}.${ARMA_PATCH} SOVERSION 2)
+
+
+
+################################################################################
+# INSTALL CONFIGURATION
+
+
+# As Red Hat Enterprise Linux (and related systems such as Fedora)
+# does not search /usr/local/lib by default, we need to place the
+# library in either /usr/lib or /usr/lib64
+
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+  set(CMAKE_INSTALL_PREFIX "/usr")
+endif()
+
+# Allow for the "lib" directory to be specified on the command line
+if(NOT INSTALL_LIB_DIR)
+  set(INSTALL_LIB_DIR "lib")
+  if(UNIX AND NOT APPLE)   # I don't know how Mac OS handles 64 bit systems
+    if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+      message(STATUS "Detected 64 bit system")
+        if(IS_DIRECTORY "${CMAKE_INSTALL_PREFIX}/lib64")
+          unset(INSTALL_LIB_DIR)
+          set(INSTALL_LIB_DIR "lib64")
+        endif()
+    endif()
+  endif()
+endif()
+
+# Allow for the "include" directory to be specified on the command line
+
+if(NOT INSTALL_INCLUDE_DIR)
+  set(INSTALL_INCLUDE_DIR "include")
+endif()
+
+# We use data dir to store files shared with other programs 
+# like the ArmadilloConfig.cmake file.
+if(NOT INSTALL_DATA_DIR)
+  set(INSTALL_DATA_DIR "share")
+endif()
+
+# Make relative paths absolute so we can write them in Config.cmake files
+foreach(p LIB INCLUDE DATA)
+  set(var INSTALL_${p}_DIR)
+  if(NOT IS_ABSOLUTE "${${var}}")
+    set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
+  endif()
+endforeach()
+
+message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
+message(STATUS "INSTALL_LIB_DIR      = ${INSTALL_LIB_DIR}"     )
+message(STATUS "INSTALL_INCLUDE_DIR  = ${INSTALL_INCLUDE_DIR}" )
+message(STATUS "INSTALL_DATA_DIR     = ${INSTALL_DATA_DIR}"    )
+
+
+# Note that the trailing / character in "include/" is critical
+
+install(DIRECTORY include/ DESTINATION ${INSTALL_INCLUDE_DIR}
+PATTERN ".svn" EXCLUDE
+PATTERN "*.cmake" EXCLUDE
+PATTERN "*~" EXCLUDE
+PATTERN "*orig" EXCLUDE
+)
+
+install(TARGETS armadillo 
+  DESTINATION ${INSTALL_LIB_DIR}
+  EXPORT ArmadilloLibraryDepends)
+
+# Export the package for use from the build-tree
+# (this registers the build-tree with a global CMake-registry)
+if(CMAKE_VERSION VERSION_GREATER "2.7")
+ export(PACKAGE armadillo)
+endif()
+
+## LOCAL FILES
+# Create ArmadilloConfig.cmake file for the use from the build tree
+set(ARMADILLO_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}")
+set(ARMADILLO_LIB_DIR      "${PROJECT_BINARY_DIR}")
+set(ARMADILLO_CMAKE_DIR    "${PROJECT_BINARY_DIR}")
+
+
+message(STATUS "Generating '${PROJECT_BINARY_DIR}/ArmadilloConfig.cmake'")
+# copy/change config and configVersion file (modify only the @xyz@ variables)
+configure_file(build_aux/cmake/InstallFiles/ArmadilloConfig.cmake.in
+  "${PROJECT_BINARY_DIR}/ArmadilloConfig.cmake" @ONLY)
+
+message(STATUS "Generating '${PROJECT_BINARY_DIR}/ArmadilloConfigVersion.cmake'")
+configure_file(build_aux/cmake/InstallFiles/ArmadilloConfigVersion.cmake.in
+  "${PROJECT_BINARY_DIR}/ArmadilloConfigVersion.cmake" @ONLY)
+
+
+# Install the export set for use with the install-tree
+install(EXPORT ArmadilloLibraryDepends DESTINATION
+  "${INSTALL_DATA_DIR}/Armadillo/CMake"
+  COMPONENT dev)
+
+
+## GLOBAL INSTALL FILES
+# Create ArmadilloConfig.cmake file for the use from the install tree
+# and install it
+set(ARMADILLO_INCLUDE_DIRS "${INSTALL_INCLUDE_DIR}")
+set(ARMADILLO_LIB_DIR      "${INSTALL_LIB_DIR}")
+set(ARMADILLO_CMAKE_DIR    "${INSTALL_DATA_DIR}/Armadillo/CMake")
+
+
+message(STATUS "Generating '${PROJECT_BINARY_DIR}/InstallFiles/ArmadilloConfig.cmake'")
+# copy/change config and configVersion file (modify only the @xyz@ variables)
+configure_file(build_aux/cmake/InstallFiles/ArmadilloConfig.cmake.in
+  "${PROJECT_BINARY_DIR}/InstallFiles/ArmadilloConfig.cmake" @ONLY)
+
+message(STATUS "Generating '${PROJECT_BINARY_DIR}/InstallFiles/ArmadilloConfigVersion.cmake'")
+configure_file(build_aux/cmake/InstallFiles/ArmadilloConfigVersion.cmake.in
+  "${PROJECT_BINARY_DIR}/InstallFiles/ArmadilloConfigVersion.cmake" @ONLY)
+
+# Install files to be found by cmake users with find_package()
+install(FILES
+  "${PROJECT_BINARY_DIR}/InstallFiles/ArmadilloConfig.cmake"
+  "${PROJECT_BINARY_DIR}/InstallFiles/ArmadilloConfigVersion.cmake"
+  DESTINATION "${ARMADILLO_CMAKE_DIR}" COMPONENT dev)