mirror of
https://github.com/crystalidea/qt-build-tools.git
synced 2025-02-23 19:34:47 +08:00
well, looks like cmake 3.17 is required though
This commit is contained in:
parent
595eafc085
commit
c386aac06f
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,70 +0,0 @@
|
||||
message
|
||||
-------
|
||||
|
||||
Display a message to the user.
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
message([<mode>] "message to display" ...)
|
||||
|
||||
The optional ``<mode>`` keyword determines the type of message:
|
||||
|
||||
``FATAL_ERROR``
|
||||
CMake Error, stop processing and generation.
|
||||
|
||||
``SEND_ERROR``
|
||||
CMake Error, continue processing, but skip generation.
|
||||
|
||||
``WARNING``
|
||||
CMake Warning, continue processing.
|
||||
|
||||
``AUTHOR_WARNING``
|
||||
CMake Warning (dev), continue processing.
|
||||
|
||||
``DEPRECATION``
|
||||
CMake Deprecation Error or Warning if variable
|
||||
:variable:`CMAKE_ERROR_DEPRECATED` or :variable:`CMAKE_WARN_DEPRECATED`
|
||||
is enabled, respectively, else no message.
|
||||
|
||||
(none) or ``NOTICE``
|
||||
Important message printed to stderr to attract user's attention.
|
||||
|
||||
``STATUS``
|
||||
The main interesting messages that project users might be interested in.
|
||||
Ideally these should be concise, no more than a single line, but still
|
||||
informative.
|
||||
|
||||
``VERBOSE``
|
||||
Detailed informational messages intended for project users. These messages
|
||||
should provide additional details that won't be of interest in most cases,
|
||||
but which may be useful to those building the project when they want deeper
|
||||
insight into what's happening.
|
||||
|
||||
``DEBUG``
|
||||
Detailed informational messages intended for developers working on the
|
||||
project itself as opposed to users who just want to build it. These messages
|
||||
will not typically be of interest to other users building the project and
|
||||
will often be closely related to internal implementation details.
|
||||
|
||||
``TRACE``
|
||||
Fine-grained messages with very low-level implementation details. Messages
|
||||
using this log level would normally only be temporary and would expect to be
|
||||
removed before releasing the project, packaging up the files, etc.
|
||||
|
||||
The CMake command-line tool displays ``STATUS`` to ``TRACE`` messages on stdout
|
||||
with the message preceded by two hyphens and a space. All other message types
|
||||
are sent to stderr and are not prefixed with hyphens. The
|
||||
:manual:`CMake GUI <cmake-gui(1)>` displays all messages in its log area.
|
||||
The :manual:`curses interface <ccmake(1)>` shows ``STATUS`` to ``TRACE``
|
||||
messages one at a time on a status line and other messages in an
|
||||
interactive pop-up box. The ``--log-level`` command-line option to each of
|
||||
these tools can be used to control which messages will be shown.
|
||||
|
||||
Messages of log levels ``NOTICE`` and below will also have each line preceded
|
||||
by the content of the :variable:`CMAKE_MESSAGE_INDENT` variable (converted to
|
||||
a single string by concatenating its list items). For ``STATUS`` to ``TRACE``
|
||||
messages, this indenting content will be inserted after the hyphens.
|
||||
|
||||
CMake Warning and Error message text displays using a simple markup
|
||||
language. Non-indented text is formatted in line-wrapped paragraphs
|
||||
delimited by newlines. Indented text is considered pre-formatted.
|
@ -1,23 +0,0 @@
|
||||
CPack PackageMaker Generator
|
||||
----------------------------
|
||||
|
||||
PackageMaker CPack generator (macOS).
|
||||
|
||||
Variables specific to CPack PackageMaker generator
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The following variable is specific to installers built on Mac
|
||||
macOS using PackageMaker:
|
||||
|
||||
.. variable:: CPACK_OSX_PACKAGE_VERSION
|
||||
|
||||
The version of macOS that the resulting PackageMaker archive should be
|
||||
compatible with. Different versions of macOS support different
|
||||
features. For example, CPack can only build component-based installers for
|
||||
macOS 10.4 or newer, and can only build installers that download
|
||||
component son-the-fly for macOS 10.5 or newer. If left blank, this value
|
||||
will be set to the minimum version of macOS that supports the requested
|
||||
features. Set this variable to some value (e.g., 10.4) only if you want to
|
||||
guarantee that your installer will work on that version of macOS, and
|
||||
don't mind missing extra features available in the installer shipping with
|
||||
later versions of macOS.
|
@ -1,73 +0,0 @@
|
||||
.. title:: CMake Reference Documentation
|
||||
|
||||
Command-Line Tools
|
||||
##################
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
/manual/cmake.1
|
||||
/manual/ctest.1
|
||||
/manual/cpack.1
|
||||
|
||||
Interactive Dialogs
|
||||
###################
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
/manual/cmake-gui.1
|
||||
/manual/ccmake.1
|
||||
|
||||
Reference Manuals
|
||||
#################
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
/manual/cmake-buildsystem.7
|
||||
/manual/cmake-commands.7
|
||||
/manual/cmake-compile-features.7
|
||||
/manual/cmake-developer.7
|
||||
/manual/cmake-env-variables.7
|
||||
/manual/cmake-file-api.7
|
||||
/manual/cmake-generator-expressions.7
|
||||
/manual/cmake-generators.7
|
||||
/manual/cmake-language.7
|
||||
/manual/cmake-modules.7
|
||||
/manual/cmake-packages.7
|
||||
/manual/cmake-policies.7
|
||||
/manual/cmake-properties.7
|
||||
/manual/cmake-qt.7
|
||||
/manual/cmake-server.7
|
||||
/manual/cmake-toolchains.7
|
||||
/manual/cmake-variables.7
|
||||
/manual/cpack-generators.7
|
||||
|
||||
.. only:: not man
|
||||
|
||||
Guides
|
||||
######
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
/guide/tutorial/index
|
||||
|
||||
.. only:: html or text
|
||||
|
||||
Release Notes
|
||||
#############
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
/release/index
|
||||
|
||||
.. only:: html
|
||||
|
||||
Index and Search
|
||||
################
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`search`
|
@ -1,23 +0,0 @@
|
||||
GENERATED
|
||||
---------
|
||||
|
||||
Is this source file generated as part of the build or CMake process.
|
||||
|
||||
Tells the internal CMake engine that a source file is generated by an outside
|
||||
process such as another build step, or the execution of CMake itself. This
|
||||
information is then used to exempt the file from any existence or validity
|
||||
checks. Generated files are created by the execution of commands such as
|
||||
:command:`add_custom_command` and :command:`file(GENERATE)`.
|
||||
|
||||
When a generated file created by an :command:`add_custom_command` command
|
||||
is explicitly listed as a source file for any target in the same
|
||||
directory scope (which usually means the same ``CMakeLists.txt`` file),
|
||||
CMake will automatically create a dependency to make sure the file is
|
||||
generated before building that target.
|
||||
|
||||
Generated sources may be hidden in some IDE tools, while in others they might
|
||||
be shown. For the special case of sources generated by CMake's :prop_tgt:`AUTOMOC`
|
||||
or :prop_tgt:`AUTORCC` functionality, the :prop_gbl:`AUTOGEN_SOURCE_GROUP`,
|
||||
:prop_gbl:`AUTOMOC_SOURCE_GROUP` and :prop_gbl:`AUTORCC_SOURCE_GROUP` target
|
||||
properties may influence where the generated sources are grouped in the project's
|
||||
file lists.
|
@ -1,13 +0,0 @@
|
||||
DOTNET_TARGET_FRAMEWORK_VERSION
|
||||
-------------------------------
|
||||
|
||||
Specify the .NET target framework version.
|
||||
|
||||
Used to specify the .NET target framework version for C++/CLI. For
|
||||
example: ``v4.5``.
|
||||
|
||||
This property is only evaluated for :ref:`Visual Studio Generators`
|
||||
VS 2010 and above.
|
||||
|
||||
Can be initialized for all targets using the variable
|
||||
:variable:`CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION`.
|
@ -1,10 +0,0 @@
|
||||
INSTALL_RPATH_USE_LINK_PATH
|
||||
---------------------------
|
||||
|
||||
Add paths to linker search and installed rpath.
|
||||
|
||||
``INSTALL_RPATH_USE_LINK_PATH`` is a boolean that if set to ``True`` will
|
||||
append directories in the linker search path and outside the project
|
||||
to the :prop_tgt:`INSTALL_RPATH`. This property is initialized by the value of
|
||||
the variable ``CMAKE_INSTALL_RPATH_USE_LINK_PATH`` if it is set when a
|
||||
target is created.
|
@ -1,8 +0,0 @@
|
||||
CMAKE_HOST_SYSTEM_PROCESSOR
|
||||
---------------------------
|
||||
|
||||
The name of the CPU CMake is running on.
|
||||
|
||||
On systems that support ``uname``, this variable is set to the output of
|
||||
``uname -p``. On Windows it is set to the value of the environment variable
|
||||
``PROCESSOR_ARCHITECTURE``.
|
@ -1,9 +0,0 @@
|
||||
CMAKE_INSTALL_RPATH_USE_LINK_PATH
|
||||
---------------------------------
|
||||
|
||||
Add paths to linker search and installed rpath.
|
||||
|
||||
``CMAKE_INSTALL_RPATH_USE_LINK_PATH`` is a boolean that if set to ``true``
|
||||
will append directories in the linker search path and outside the
|
||||
project to the :prop_tgt:`INSTALL_RPATH`. This is used to initialize the
|
||||
target property :prop_tgt:`INSTALL_RPATH_USE_LINK_PATH` for all targets.
|
@ -1,8 +0,0 @@
|
||||
CMAKE_VS_WINRT_BY_DEFAULT
|
||||
-------------------------
|
||||
|
||||
Tell :ref:`Visual Studio Generators` for VS 2010 and above that the
|
||||
target platform compiles as WinRT by default (compiles with ``/ZW``).
|
||||
|
||||
This variable is meant to be set by a
|
||||
:variable:`toolchain file <CMAKE_TOOLCHAIN_FILE>` for such platforms.
|
@ -1,14 +0,0 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
# support for the MS assembler, masm and masm64
|
||||
|
||||
set(ASM_DIALECT "_MASM")
|
||||
|
||||
set(CMAKE_ASM${ASM_DIALECT}_SOURCE_FILE_EXTENSIONS asm)
|
||||
|
||||
set(CMAKE_ASM${ASM_DIALECT}_COMPILE_OBJECT "<CMAKE_ASM${ASM_DIALECT}_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /c /Fo <OBJECT> <SOURCE>")
|
||||
|
||||
include(CMakeASMInformation)
|
||||
set(ASM_DIALECT)
|
@ -1,123 +0,0 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
CMakeGraphVizOptions
|
||||
--------------------
|
||||
|
||||
The builtin graphviz support of CMake.
|
||||
|
||||
Variables specific to the graphviz support
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
CMake
|
||||
can generate `graphviz <http://www.graphviz.org/>`_ files, showing the dependencies between the
|
||||
targets in a project and also external libraries which are linked
|
||||
against. When CMake is run with the ``--graphviz=foo.dot`` option, it will
|
||||
produce:
|
||||
|
||||
* a ``foo.dot`` file showing all dependencies in the project
|
||||
* a ``foo.dot.<target>`` file for each target, file showing on which other targets the respective target depends
|
||||
* a ``foo.dot.<target>.dependers`` file, showing which other targets depend on the respective target
|
||||
|
||||
The different dependency types ``PUBLIC``, ``PRIVATE`` and ``INTERFACE``
|
||||
are represented as solid, dashed and dotted edges.
|
||||
|
||||
This can result in huge graphs. Using the file
|
||||
``CMakeGraphVizOptions.cmake`` the look and content of the generated
|
||||
graphs can be influenced. This file is searched first in
|
||||
:variable:`CMAKE_BINARY_DIR` and then in :variable:`CMAKE_SOURCE_DIR`. If found, it is
|
||||
read and the variables set in it are used to adjust options for the
|
||||
generated graphviz files.
|
||||
|
||||
.. variable:: GRAPHVIZ_GRAPH_TYPE
|
||||
|
||||
The graph type.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : "digraph"
|
||||
|
||||
Valid graph types are:
|
||||
|
||||
* "graph" : Nodes are joined with lines
|
||||
* "digraph" : Nodes are joined with arrows showing direction
|
||||
* "strict graph" : Like "graph" but max one line between each node
|
||||
* "strict digraph" : Like "graph" but max one line between each node in each direction
|
||||
|
||||
.. variable:: GRAPHVIZ_GRAPH_NAME
|
||||
|
||||
The graph name.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : "GG"
|
||||
|
||||
.. variable:: GRAPHVIZ_GRAPH_HEADER
|
||||
|
||||
The header written at the top of the graphviz file.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : "node [n fontsize = "12"];"
|
||||
|
||||
.. variable:: GRAPHVIZ_NODE_PREFIX
|
||||
|
||||
The prefix for each node in the graphviz file.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : "node"
|
||||
|
||||
.. variable:: GRAPHVIZ_EXECUTABLES
|
||||
|
||||
Set this to FALSE to exclude executables from the generated graphs.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : TRUE
|
||||
|
||||
.. variable:: GRAPHVIZ_STATIC_LIBS
|
||||
|
||||
Set this to FALSE to exclude static libraries from the generated graphs.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : TRUE
|
||||
|
||||
.. variable:: GRAPHVIZ_SHARED_LIBS
|
||||
|
||||
Set this to FALSE to exclude shared libraries from the generated graphs.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : TRUE
|
||||
|
||||
.. variable:: GRAPHVIZ_MODULE_LIBS
|
||||
|
||||
Set this to FALSE to exclude module libraries from the generated graphs.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : TRUE
|
||||
|
||||
.. variable:: GRAPHVIZ_EXTERNAL_LIBS
|
||||
|
||||
Set this to FALSE to exclude external libraries from the generated graphs.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : TRUE
|
||||
|
||||
.. variable:: GRAPHVIZ_IGNORE_TARGETS
|
||||
|
||||
A list of regular expressions for ignoring targets.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : empty
|
||||
|
||||
.. variable:: GRAPHVIZ_GENERATE_PER_TARGET
|
||||
|
||||
Set this to FALSE to exclude per target graphs ``foo.dot.<target>``.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : TRUE
|
||||
|
||||
.. variable:: GRAPHVIZ_GENERATE_DEPENDERS
|
||||
|
||||
Set this to FALSE to exclude depender graphs ``foo.dot.<target>.dependers``.
|
||||
|
||||
* Mandatory : NO
|
||||
* Default : TRUE
|
||||
#]=======================================================================]
|
@ -1,6 +0,0 @@
|
||||
include(Compiler/GNU)
|
||||
__compiler_gnu(OBJC)
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.2)
|
||||
set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
|
||||
endif()
|
@ -1,10 +0,0 @@
|
||||
include(Compiler/GNU)
|
||||
__compiler_gnu(OBJC)
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.2)
|
||||
set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_OBJCXX_LINK_FLAGS)
|
||||
set(CMAKE_OBCXX_LINK_FLAGS "-lstdc++")
|
||||
endif()
|
@ -1,48 +0,0 @@
|
||||
set(CMAKE_CUDA_COMPILER_HAS_DEVICE_LINK_PHASE True)
|
||||
set(CMAKE_CUDA_VERBOSE_FLAG "-v")
|
||||
set(CMAKE_CUDA_VERBOSE_COMPILE_FLAG "-Xcompiler=-v")
|
||||
|
||||
if(NOT "x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
set(CMAKE_CUDA_COMPILE_OPTIONS_PIE -Xcompiler=-fPIE)
|
||||
set(CMAKE_CUDA_COMPILE_OPTIONS_PIC -Xcompiler=-fPIC)
|
||||
set(CMAKE_CUDA_COMPILE_OPTIONS_VISIBILITY -Xcompiler=-fvisibility=)
|
||||
# CMAKE_SHARED_LIBRARY_CUDA_FLAGS is sent to the host linker so we
|
||||
# don't need to forward it through nvcc.
|
||||
set(CMAKE_SHARED_LIBRARY_CUDA_FLAGS -fPIC)
|
||||
string(APPEND CMAKE_CUDA_FLAGS_INIT " ")
|
||||
string(APPEND CMAKE_CUDA_FLAGS_DEBUG_INIT " -g")
|
||||
string(APPEND CMAKE_CUDA_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
|
||||
string(APPEND CMAKE_CUDA_FLAGS_MINSIZEREL_INIT " -O1 -DNDEBUG")
|
||||
string(APPEND CMAKE_CUDA_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")
|
||||
endif()
|
||||
set(CMAKE_SHARED_LIBRARY_CREATE_CUDA_FLAGS -shared)
|
||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_CUDA -isystem=)
|
||||
|
||||
if("x${CMAKE_CUDA_SIMULATE_ID}" STREQUAL "xMSVC")
|
||||
set(CMAKE_CUDA_STANDARD_DEFAULT "")
|
||||
else()
|
||||
set(CMAKE_CUDA_STANDARD_DEFAULT 98)
|
||||
set(CMAKE_CUDA98_STANDARD_COMPILE_OPTION "")
|
||||
set(CMAKE_CUDA98_EXTENSION_COMPILE_OPTION "")
|
||||
set(CMAKE_CUDA11_STANDARD_COMPILE_OPTION "-std=c++11")
|
||||
set(CMAKE_CUDA11_EXTENSION_COMPILE_OPTION "-std=c++11")
|
||||
|
||||
if (NOT CMAKE_CUDA_COMPILER_VERSION VERSION_LESS 9.0)
|
||||
set(CMAKE_CUDA98_STANDARD_COMPILE_OPTION "-std=c++03")
|
||||
set(CMAKE_CUDA98_EXTENSION_COMPILE_OPTION "-std=c++03")
|
||||
set(CMAKE_CUDA14_STANDARD_COMPILE_OPTION "-std=c++14")
|
||||
set(CMAKE_CUDA14_EXTENSION_COMPILE_OPTION "-std=c++14")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
# FIXME: investigate use of --options-file.
|
||||
# Tell Makefile generator that nvcc does not support @<rspfile> syntax.
|
||||
set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_INCLUDES 0)
|
||||
set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_LIBRARIES 0)
|
||||
set(CMAKE_CUDA_USE_RESPONSE_FILE_FOR_OBJECTS 0)
|
||||
|
||||
if (CMAKE_CUDA_COMPILER_VERSION VERSION_GREATER_EQUAL "9.0")
|
||||
set(CMAKE_CUDA_RESPONSE_FILE_LINK_FLAG "--options-file ")
|
||||
set(CMAKE_CUDA_RESPONSE_FILE_FLAG "--options-file ")
|
||||
endif()
|
@ -1,820 +0,0 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
FindBLAS
|
||||
--------
|
||||
|
||||
Find Basic Linear Algebra Subprograms (BLAS) library
|
||||
|
||||
This module finds an installed Fortran library that implements the
|
||||
BLAS linear-algebra interface (see http://www.netlib.org/blas/). The
|
||||
list of libraries searched for is taken from the ``autoconf`` macro file,
|
||||
``acx_blas.m4`` (distributed at
|
||||
http://ac-archive.sourceforge.net/ac-archive/acx_blas.html).
|
||||
|
||||
Input Variables
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
The following variables may be set to influence this module's behavior:
|
||||
|
||||
``BLA_STATIC``
|
||||
if ``ON`` use static linkage
|
||||
|
||||
``BLA_VENDOR``
|
||||
If set, checks only the specified vendor, if not set checks all the
|
||||
possibilities. List of vendors valid in this module:
|
||||
|
||||
* Goto
|
||||
* OpenBLAS
|
||||
* FLAME
|
||||
* ATLAS PhiPACK
|
||||
* CXML
|
||||
* DXML
|
||||
* SunPerf
|
||||
* SCSL
|
||||
* SGIMATH
|
||||
* IBMESSL
|
||||
* Intel10_32 (intel mkl v10 32 bit)
|
||||
* Intel10_64lp (intel mkl v10+ 64 bit, threaded code, lp64 model)
|
||||
* Intel10_64lp_seq (intel mkl v10+ 64 bit, sequential code, lp64 model)
|
||||
* Intel10_64ilp (intel mkl v10+ 64 bit, threaded code, ilp64 model)
|
||||
* Intel10_64ilp_seq (intel mkl v10+ 64 bit, sequential code, ilp64 model)
|
||||
* Intel (obsolete versions of mkl 32 and 64 bit)
|
||||
* ACML
|
||||
* ACML_MP
|
||||
* ACML_GPU
|
||||
* Apple
|
||||
* NAS
|
||||
* Generic
|
||||
|
||||
``BLA_F95``
|
||||
if ``ON`` tries to find the BLAS95 interfaces
|
||||
|
||||
``BLA_PREFER_PKGCONFIG``
|
||||
if set ``pkg-config`` will be used to search for a BLAS library first
|
||||
and if one is found that is preferred
|
||||
|
||||
Result Variables
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
This module defines the following variables:
|
||||
|
||||
``BLAS_FOUND``
|
||||
library implementing the BLAS interface is found
|
||||
``BLAS_LINKER_FLAGS``
|
||||
uncached list of required linker flags (excluding ``-l`` and ``-L``).
|
||||
``BLAS_LIBRARIES``
|
||||
uncached list of libraries (using full path name) to link against
|
||||
to use BLAS (may be empty if compiler implicitly links BLAS)
|
||||
``BLAS95_LIBRARIES``
|
||||
uncached list of libraries (using full path name) to link against
|
||||
to use BLAS95 interface
|
||||
``BLAS95_FOUND``
|
||||
library implementing the BLAS95 interface is found
|
||||
|
||||
.. note::
|
||||
|
||||
C or CXX must be enabled to use Intel Math Kernel Library (MKL)
|
||||
|
||||
For example, to use Intel MKL libraries and/or Intel compiler:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
set(BLA_VENDOR Intel10_64lp)
|
||||
find_package(BLAS)
|
||||
|
||||
Hints
|
||||
^^^^^
|
||||
|
||||
Set ``MKLROOT`` environment variable to a directory that contains an MKL
|
||||
installation.
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
|
||||
cmake_push_check_state()
|
||||
set(CMAKE_REQUIRED_QUIET ${BLAS_FIND_QUIETLY})
|
||||
|
||||
set(_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
|
||||
# Check the language being used
|
||||
if( NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED) )
|
||||
if(BLAS_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "FindBLAS requires Fortran, C, or C++ to be enabled.")
|
||||
else()
|
||||
message(STATUS "Looking for BLAS... - NOT found (Unsupported languages)")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(BLA_PREFER_PKGCONFIG)
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PKGC_BLAS blas)
|
||||
if(PKGC_BLAS_FOUND)
|
||||
set(BLAS_FOUND ${PKGC_BLAS_FOUND})
|
||||
set(BLAS_LIBRARIES "${PKGC_BLAS_LINK_LIBRARIES}")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread)
|
||||
# This macro checks for the existence of the combination of fortran libraries
|
||||
# given by _list. If the combination is found, this macro checks (using the
|
||||
# Check_Fortran_Function_Exists macro) whether can link against that library
|
||||
# combination using the name of a routine given by _name using the linker
|
||||
# flags given by _flags. If the combination of libraries is found and passes
|
||||
# the link test, LIBRARIES is set to the list of complete library paths that
|
||||
# have been found. Otherwise, LIBRARIES is set to FALSE.
|
||||
|
||||
# N.B. _prefix is the prefix applied to the names of all cached variables that
|
||||
# are generated internally and marked advanced by this macro.
|
||||
|
||||
set(_libdir ${ARGN})
|
||||
|
||||
set(_libraries_work TRUE)
|
||||
set(${LIBRARIES})
|
||||
set(_combined_name)
|
||||
if (NOT _libdir)
|
||||
if (WIN32)
|
||||
set(_libdir ENV LIB)
|
||||
elseif (APPLE)
|
||||
set(_libdir ENV DYLD_LIBRARY_PATH)
|
||||
else ()
|
||||
set(_libdir ENV LD_LIBRARY_PATH)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
list(APPEND _libdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
|
||||
|
||||
foreach(_library ${_list})
|
||||
set(_combined_name ${_combined_name}_${_library})
|
||||
if(NOT "${_thread}" STREQUAL "")
|
||||
set(_combined_name ${_combined_name}_thread)
|
||||
endif()
|
||||
if(_libraries_work)
|
||||
if (BLA_STATIC)
|
||||
if (WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif ()
|
||||
if (APPLE)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
else ()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif ()
|
||||
else ()
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
# for ubuntu's libblas3gf and liblapack3gf packages
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
|
||||
endif ()
|
||||
endif ()
|
||||
find_library(${_prefix}_${_library}_LIBRARY
|
||||
NAMES ${_library}
|
||||
PATHS ${_libdir}
|
||||
)
|
||||
mark_as_advanced(${_prefix}_${_library}_LIBRARY)
|
||||
set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
|
||||
set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
|
||||
endif()
|
||||
endforeach()
|
||||
if(_libraries_work)
|
||||
# Test this combination of libraries.
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_thread})
|
||||
# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
|
||||
if (CMAKE_Fortran_COMPILER_LOADED)
|
||||
check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS)
|
||||
else()
|
||||
check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
|
||||
endif()
|
||||
set(CMAKE_REQUIRED_LIBRARIES)
|
||||
set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
|
||||
endif()
|
||||
if(_libraries_work)
|
||||
if("${_list}" STREQUAL "")
|
||||
set(${LIBRARIES} "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
|
||||
else()
|
||||
set(${LIBRARIES} ${${LIBRARIES}} ${_thread}) # for static link
|
||||
endif()
|
||||
else()
|
||||
set(${LIBRARIES} FALSE)
|
||||
endif()
|
||||
#message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}")
|
||||
endmacro()
|
||||
|
||||
set(BLAS_LINKER_FLAGS)
|
||||
set(BLAS_LIBRARIES)
|
||||
set(BLAS95_LIBRARIES)
|
||||
if (NOT $ENV{BLA_VENDOR} STREQUAL "")
|
||||
set(BLA_VENDOR $ENV{BLA_VENDOR})
|
||||
else ()
|
||||
if(NOT BLA_VENDOR)
|
||||
set(BLA_VENDOR "All")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
# Implicitly linked BLAS libraries
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
""
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
#BLAS in intel mkl 10+ library? (em64t 64bit)
|
||||
if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
|
||||
if (NOT BLAS_LIBRARIES)
|
||||
|
||||
# System-specific settings
|
||||
if (WIN32)
|
||||
if (BLA_STATIC)
|
||||
set(BLAS_mkl_DLL_SUFFIX "")
|
||||
else()
|
||||
set(BLAS_mkl_DLL_SUFFIX "_dll")
|
||||
endif()
|
||||
else()
|
||||
# Switch to GNU Fortran support layer if needed (but not on Apple, where MKL does not provide it)
|
||||
if(CMAKE_Fortran_COMPILER_LOADED AND CMAKE_Fortran_COMPILER_ID STREQUAL "GNU" AND NOT APPLE)
|
||||
set(BLAS_mkl_INTFACE "gf")
|
||||
set(BLAS_mkl_THREADING "gnu")
|
||||
set(BLAS_mkl_OMP "gomp")
|
||||
else()
|
||||
set(BLAS_mkl_INTFACE "intel")
|
||||
set(BLAS_mkl_THREADING "intel")
|
||||
set(BLAS_mkl_OMP "iomp5")
|
||||
endif()
|
||||
set(BLAS_mkl_LM "-lm")
|
||||
set(BLAS_mkl_LDL "-ldl")
|
||||
endif()
|
||||
|
||||
if (BLA_VENDOR MATCHES "_64ilp")
|
||||
set(BLAS_mkl_ILP_MODE "ilp64")
|
||||
else ()
|
||||
set(BLAS_mkl_ILP_MODE "lp64")
|
||||
endif ()
|
||||
|
||||
if (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)
|
||||
if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
|
||||
find_package(Threads)
|
||||
else()
|
||||
find_package(Threads REQUIRED)
|
||||
endif()
|
||||
|
||||
set(BLAS_SEARCH_LIBS "")
|
||||
|
||||
if(BLA_F95)
|
||||
set(BLAS_mkl_SEARCH_SYMBOL sgemm_f95)
|
||||
set(_LIBRARIES BLAS95_LIBRARIES)
|
||||
if (WIN32)
|
||||
# Find the main file (32-bit or 64-bit)
|
||||
set(BLAS_SEARCH_LIBS_WIN_MAIN "")
|
||||
if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
|
||||
"mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif()
|
||||
if (BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
|
||||
"mkl_blas95_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX} mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif ()
|
||||
|
||||
# Add threading/sequential libs
|
||||
set(BLAS_SEARCH_LIBS_WIN_THREAD "")
|
||||
if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
|
||||
"mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif()
|
||||
if (NOT BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||
# old version
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
|
||||
"libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
|
||||
# mkl >= 10.3
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
|
||||
"libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif()
|
||||
|
||||
# Cartesian product of the above
|
||||
foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
|
||||
foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
|
||||
endforeach()
|
||||
endforeach()
|
||||
else ()
|
||||
if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
|
||||
# old version
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
|
||||
|
||||
# mkl >= 10.3
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_blas95 mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
||||
endif ()
|
||||
if (BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
|
||||
# old version
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_blas95 mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
|
||||
|
||||
# mkl >= 10.3
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
||||
endif ()
|
||||
if (BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core")
|
||||
endif ()
|
||||
endif ()
|
||||
else ()
|
||||
set(BLAS_mkl_SEARCH_SYMBOL sgemm)
|
||||
set(_LIBRARIES BLAS_LIBRARIES)
|
||||
if (WIN32)
|
||||
# Find the main file (32-bit or 64-bit)
|
||||
set(BLAS_SEARCH_LIBS_WIN_MAIN "")
|
||||
if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
|
||||
"mkl_intel_c${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif()
|
||||
if (BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN
|
||||
"mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif ()
|
||||
|
||||
# Add threading/sequential libs
|
||||
set(BLAS_SEARCH_LIBS_WIN_THREAD "")
|
||||
if (NOT BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||
# old version
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
|
||||
"libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
|
||||
# mkl >= 10.3
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
|
||||
"libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif()
|
||||
if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD
|
||||
"mkl_sequential${BLAS_mkl_DLL_SUFFIX}")
|
||||
endif()
|
||||
|
||||
# Cartesian product of the above
|
||||
foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN})
|
||||
foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD})
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}")
|
||||
endforeach()
|
||||
endforeach()
|
||||
else ()
|
||||
if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All")
|
||||
# old version
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
|
||||
|
||||
# mkl >= 10.3
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_${BLAS_mkl_INTFACE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
||||
endif ()
|
||||
if (BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All")
|
||||
# old version
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core guide")
|
||||
|
||||
# mkl >= 10.3
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_${BLAS_mkl_THREADING}_thread mkl_core ${BLAS_mkl_OMP}")
|
||||
endif ()
|
||||
if (BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_${BLAS_mkl_INTFACE}_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core")
|
||||
endif ()
|
||||
|
||||
#older vesions of intel mkl libs
|
||||
if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All")
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl")
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_ia32")
|
||||
list(APPEND BLAS_SEARCH_LIBS
|
||||
"mkl_em64t")
|
||||
endif ()
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{MKLROOT})
|
||||
if (BLA_VENDOR STREQUAL "Intel10_32")
|
||||
set(_BLAS_MKLROOT_LIB_DIR "$ENV{MKLROOT}/lib/ia32")
|
||||
elseif (BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$")
|
||||
set(_BLAS_MKLROOT_LIB_DIR "$ENV{MKLROOT}/lib/intel64")
|
||||
endif ()
|
||||
endif ()
|
||||
if (_BLAS_MKLROOT_LIB_DIR)
|
||||
if (WIN32)
|
||||
string(APPEND _BLAS_MKLROOT_LIB_DIR "_win")
|
||||
elseif (APPLE)
|
||||
string(APPEND _BLAS_MKLROOT_LIB_DIR "_mac")
|
||||
else ()
|
||||
string(APPEND _BLAS_MKLROOT_LIB_DIR "_lin")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
foreach (IT ${BLAS_SEARCH_LIBS})
|
||||
string(REPLACE " " ";" SEARCH_LIBS ${IT})
|
||||
if (NOT ${_LIBRARIES})
|
||||
check_fortran_libraries(
|
||||
${_LIBRARIES}
|
||||
BLAS
|
||||
${BLAS_mkl_SEARCH_SYMBOL}
|
||||
""
|
||||
"${SEARCH_LIBS}"
|
||||
"${CMAKE_THREAD_LIBS_INIT};${BLAS_mkl_LM};${BLAS_mkl_LDL}"
|
||||
"${_BLAS_MKLROOT_LIB_DIR}"
|
||||
)
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
endif ()
|
||||
unset(BLAS_mkl_ILP_MODE)
|
||||
unset(BLAS_mkl_INTFACE)
|
||||
unset(BLAS_mkl_THREADING)
|
||||
unset(BLAS_mkl_OMP)
|
||||
unset(BLAS_mkl_DLL_SUFFIX)
|
||||
unset(BLAS_mkl_LM)
|
||||
unset(BLAS_mkl_LDL)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if(BLA_F95)
|
||||
find_package_handle_standard_args(BLAS REQUIRED_VARS BLAS95_LIBRARIES)
|
||||
set(BLAS95_FOUND ${BLAS_FOUND})
|
||||
if(BLAS_FOUND)
|
||||
set(BLAS_LIBRARIES "${BLAS95_LIBRARIES}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
# gotoblas (http://www.tacc.utexas.edu/tacc-projects/gotoblas2)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"goto2"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
# OpenBLAS (http://www.openblas.net)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"openblas"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
if(NOT BLAS_LIBRARIES AND (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED))
|
||||
if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED)
|
||||
find_package(Threads)
|
||||
else()
|
||||
find_package(Threads REQUIRED)
|
||||
endif()
|
||||
# OpenBLAS (http://www.openblas.net)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"openblas"
|
||||
"${CMAKE_THREAD_LIBS_INIT}"
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
# FLAME's blis library (https://github.com/flame/blis)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"blis"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
# BLAS in ATLAS library? (http://math-atlas.sourceforge.net/)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
dgemm
|
||||
""
|
||||
"f77blas;atlas"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# BLAS in PhiPACK libraries? (requires generic BLAS lib, too)
|
||||
if (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"sgemm;dgemm;blas"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# BLAS in Alpha CXML library?
|
||||
if (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"cxml"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# BLAS in Alpha DXML library? (now called CXML, see above)
|
||||
if (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"dxml"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# BLAS in Sun Performance library?
|
||||
if (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
"-xlic_lib=sunperf"
|
||||
"sunperf;sunmath"
|
||||
""
|
||||
)
|
||||
if(BLAS_LIBRARIES)
|
||||
set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf")
|
||||
endif()
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# BLAS in SCSL library? (SGI/Cray Scientific Library)
|
||||
if (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"scsl"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# BLAS in SGIMATH library?
|
||||
if (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"complib.sgimath"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
# BLAS in IBM ESSL library? (requires generic BLAS lib, too)
|
||||
if (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"essl;blas"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
#BLAS in acml library?
|
||||
if (BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All")
|
||||
if( ((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR
|
||||
((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR
|
||||
((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS))
|
||||
)
|
||||
# try to find acml in "standard" paths
|
||||
if( WIN32 )
|
||||
file( GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt" )
|
||||
else()
|
||||
file( GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt" )
|
||||
endif()
|
||||
if( WIN32 )
|
||||
file( GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples" )
|
||||
else()
|
||||
file( GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples" )
|
||||
endif()
|
||||
list(GET _ACML_ROOT 0 _ACML_ROOT)
|
||||
list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT)
|
||||
if( _ACML_ROOT )
|
||||
get_filename_component( _ACML_ROOT ${_ACML_ROOT} PATH )
|
||||
if( SIZEOF_INTEGER EQUAL 8 )
|
||||
set( _ACML_PATH_SUFFIX "_int64" )
|
||||
else()
|
||||
set( _ACML_PATH_SUFFIX "" )
|
||||
endif()
|
||||
if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" )
|
||||
set( _ACML_COMPILER32 "ifort32" )
|
||||
set( _ACML_COMPILER64 "ifort64" )
|
||||
elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" )
|
||||
set( _ACML_COMPILER32 "sun32" )
|
||||
set( _ACML_COMPILER64 "sun64" )
|
||||
elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" )
|
||||
set( _ACML_COMPILER32 "pgi32" )
|
||||
if( WIN32 )
|
||||
set( _ACML_COMPILER64 "win64" )
|
||||
else()
|
||||
set( _ACML_COMPILER64 "pgi64" )
|
||||
endif()
|
||||
elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Open64" )
|
||||
# 32 bit builds not supported on Open64 but for code simplicity
|
||||
# We'll just use the same directory twice
|
||||
set( _ACML_COMPILER32 "open64_64" )
|
||||
set( _ACML_COMPILER64 "open64_64" )
|
||||
elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" )
|
||||
set( _ACML_COMPILER32 "nag32" )
|
||||
set( _ACML_COMPILER64 "nag64" )
|
||||
else()
|
||||
set( _ACML_COMPILER32 "gfortran32" )
|
||||
set( _ACML_COMPILER64 "gfortran64" )
|
||||
endif()
|
||||
|
||||
if( BLA_VENDOR STREQUAL "ACML_MP" )
|
||||
set(_ACML_MP_LIB_DIRS
|
||||
"${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib"
|
||||
"${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib" )
|
||||
else()
|
||||
set(_ACML_LIB_DIRS
|
||||
"${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib"
|
||||
"${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib" )
|
||||
endif()
|
||||
endif()
|
||||
elseif(BLAS_${BLA_VENDOR}_LIB_DIRS)
|
||||
set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS})
|
||||
endif()
|
||||
|
||||
if( BLA_VENDOR STREQUAL "ACML_MP" )
|
||||
foreach( BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS})
|
||||
check_fortran_libraries (
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
"" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS}
|
||||
)
|
||||
if( BLAS_LIBRARIES )
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
elseif( BLA_VENDOR STREQUAL "ACML_GPU" )
|
||||
foreach( BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS})
|
||||
check_fortran_libraries (
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
"" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS}
|
||||
)
|
||||
if( BLAS_LIBRARIES )
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
else()
|
||||
foreach( BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS} )
|
||||
check_fortran_libraries (
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
"" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS}
|
||||
)
|
||||
if( BLAS_LIBRARIES )
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
# Either acml or acml_mp should be in LD_LIBRARY_PATH but not both
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"acml;acml_mv"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"acml_mp;acml_mv"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"acml;acml_mv;CALBLAS"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif () # ACML
|
||||
|
||||
# Apple BLAS library?
|
||||
if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
dgemm
|
||||
""
|
||||
"Accelerate"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
|
||||
if ( NOT BLAS_LIBRARIES )
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
dgemm
|
||||
""
|
||||
"vecLib"
|
||||
""
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Generic BLAS library?
|
||||
if (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT BLAS_LIBRARIES)
|
||||
check_fortran_libraries(
|
||||
BLAS_LIBRARIES
|
||||
BLAS
|
||||
sgemm
|
||||
""
|
||||
"blas"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if(NOT BLA_F95)
|
||||
find_package_handle_standard_args(BLAS REQUIRED_VARS BLAS_LIBRARIES)
|
||||
endif()
|
||||
|
||||
# On compilers that implicitly link BLAS (such as ftn, cc, and CC on Cray HPC machines)
|
||||
# we used a placeholder for empty BLAS_LIBRARIES to get through our logic above.
|
||||
if (BLAS_LIBRARIES STREQUAL "BLAS_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
|
||||
set(BLAS_LIBRARIES "")
|
||||
endif()
|
||||
|
||||
cmake_pop_check_state()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
|
@ -1,442 +0,0 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
FindLAPACK
|
||||
----------
|
||||
|
||||
Find Linear Algebra PACKage (LAPACK) library
|
||||
|
||||
This module finds an installed fortran library that implements the
|
||||
LAPACK linear-algebra interface (see http://www.netlib.org/lapack/).
|
||||
|
||||
The approach follows that taken for the autoconf macro file,
|
||||
``acx_lapack.m4`` (distributed at
|
||||
http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html).
|
||||
|
||||
Input Variables
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
The following variables may be set to influence this module's behavior:
|
||||
|
||||
``BLA_STATIC``
|
||||
if ``ON`` use static linkage
|
||||
|
||||
``BLA_VENDOR``
|
||||
If set, checks only the specified vendor, if not set checks all the
|
||||
possibilities. List of vendors valid in this module:
|
||||
|
||||
* ``Intel10_32`` (intel mkl v10 32 bit)
|
||||
* ``Intel10_64lp`` (intel mkl v10+ 64 bit, threaded code, lp64 model)
|
||||
* ``Intel10_64lp_seq`` (intel mkl v10+ 64 bit, sequential code, lp64 model)
|
||||
* ``Intel10_64ilp`` (intel mkl v10+ 64 bit, threaded code, ilp64 model)
|
||||
* ``Intel10_64ilp_seq`` (intel mkl v10+ 64 bit, sequential code, ilp64 model)
|
||||
* ``Intel`` (obsolete versions of mkl 32 and 64 bit)
|
||||
* ``OpenBLAS``
|
||||
* ``FLAME``
|
||||
* ``ACML``
|
||||
* ``Apple``
|
||||
* ``NAS``
|
||||
* ``Generic``
|
||||
|
||||
``BLA_F95``
|
||||
if ``ON`` tries to find BLAS95/LAPACK95
|
||||
|
||||
Result Variables
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
This module defines the following variables:
|
||||
|
||||
``LAPACK_FOUND``
|
||||
library implementing the LAPACK interface is found
|
||||
``LAPACK_LINKER_FLAGS``
|
||||
uncached list of required linker flags (excluding -l and -L).
|
||||
``LAPACK_LIBRARIES``
|
||||
uncached list of libraries (using full path name) to link against
|
||||
to use LAPACK
|
||||
``LAPACK95_LIBRARIES``
|
||||
uncached list of libraries (using full path name) to link against
|
||||
to use LAPACK95
|
||||
``LAPACK95_FOUND``
|
||||
library implementing the LAPACK95 interface is found
|
||||
|
||||
.. note::
|
||||
|
||||
C or CXX must be enabled to use Intel MKL
|
||||
|
||||
For example, to use Intel MKL libraries and/or Intel compiler:
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
set(BLA_VENDOR Intel10_64lp)
|
||||
find_package(LAPACK)
|
||||
#]=======================================================================]
|
||||
|
||||
set(_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
|
||||
# Check the language being used
|
||||
if( NOT (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED OR CMAKE_Fortran_COMPILER_LOADED) )
|
||||
if(LAPACK_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "FindLAPACK requires Fortran, C, or C++ to be enabled.")
|
||||
else()
|
||||
message(STATUS "Looking for LAPACK... - NOT found (Unsupported languages)")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (CMAKE_Fortran_COMPILER_LOADED)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake)
|
||||
else ()
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
|
||||
endif ()
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/CMakePushCheckState.cmake)
|
||||
|
||||
cmake_push_check_state()
|
||||
set(CMAKE_REQUIRED_QUIET ${LAPACK_FIND_QUIETLY})
|
||||
|
||||
set(LAPACK_FOUND FALSE)
|
||||
set(LAPACK95_FOUND FALSE)
|
||||
|
||||
# TODO: move this stuff to separate module
|
||||
|
||||
macro(Check_Lapack_Libraries LIBRARIES _prefix _name _flags _list _blas _threads)
|
||||
# This macro checks for the existence of the combination of fortran libraries
|
||||
# given by _list. If the combination is found, this macro checks (using the
|
||||
# Check_Fortran_Function_Exists macro) whether can link against that library
|
||||
# combination using the name of a routine given by _name using the linker
|
||||
# flags given by _flags. If the combination of libraries is found and passes
|
||||
# the link test, LIBRARIES is set to the list of complete library paths that
|
||||
# have been found. Otherwise, LIBRARIES is set to FALSE.
|
||||
|
||||
# N.B. _prefix is the prefix applied to the names of all cached variables that
|
||||
# are generated internally and marked advanced by this macro.
|
||||
|
||||
set(_libraries_work TRUE)
|
||||
set(${LIBRARIES})
|
||||
set(_combined_name)
|
||||
if (NOT _libdir)
|
||||
if (WIN32)
|
||||
set(_libdir ENV LIB)
|
||||
elseif (APPLE)
|
||||
set(_libdir ENV DYLD_LIBRARY_PATH)
|
||||
else ()
|
||||
set(_libdir ENV LD_LIBRARY_PATH)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
list(APPEND _libdir "${CMAKE_C_IMPLICIT_LINK_DIRECTORIES}")
|
||||
|
||||
foreach(_library ${_list})
|
||||
set(_combined_name ${_combined_name}_${_library})
|
||||
|
||||
if(_libraries_work)
|
||||
if (BLA_STATIC)
|
||||
if (WIN32)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif ()
|
||||
if (APPLE)
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
else ()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
||||
endif ()
|
||||
else ()
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
# for ubuntu's libblas3gf and liblapack3gf packages
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf)
|
||||
endif ()
|
||||
endif ()
|
||||
find_library(${_prefix}_${_library}_LIBRARY
|
||||
NAMES ${_library}
|
||||
PATHS ${_libdir}
|
||||
)
|
||||
mark_as_advanced(${_prefix}_${_library}_LIBRARY)
|
||||
set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY})
|
||||
set(_libraries_work ${${_prefix}_${_library}_LIBRARY})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(_libraries_work)
|
||||
# Test this combination of libraries.
|
||||
if(UNIX AND BLA_STATIC)
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${_flags} "-Wl,--start-group" ${${LIBRARIES}} ${_blas} "-Wl,--end-group" ${_threads})
|
||||
else()
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_blas} ${_threads})
|
||||
endif()
|
||||
# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}")
|
||||
if (NOT CMAKE_Fortran_COMPILER_LOADED)
|
||||
check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS)
|
||||
else ()
|
||||
check_fortran_function_exists(${_name} ${_prefix}${_combined_name}_WORKS)
|
||||
endif ()
|
||||
set(CMAKE_REQUIRED_LIBRARIES)
|
||||
set(_libraries_work ${${_prefix}${_combined_name}_WORKS})
|
||||
#message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}")
|
||||
endif()
|
||||
|
||||
if(_libraries_work)
|
||||
if("${_list}${_blas}" STREQUAL "")
|
||||
set(${LIBRARIES} "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
|
||||
else()
|
||||
set(${LIBRARIES} ${${LIBRARIES}} ${_blas} ${_threads})
|
||||
endif()
|
||||
else()
|
||||
set(${LIBRARIES} FALSE)
|
||||
endif()
|
||||
|
||||
endmacro()
|
||||
|
||||
|
||||
set(LAPACK_LINKER_FLAGS)
|
||||
set(LAPACK_LIBRARIES)
|
||||
set(LAPACK95_LIBRARIES)
|
||||
|
||||
|
||||
if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
|
||||
find_package(BLAS)
|
||||
else()
|
||||
find_package(BLAS REQUIRED)
|
||||
endif()
|
||||
|
||||
|
||||
if(BLAS_FOUND)
|
||||
set(LAPACK_LINKER_FLAGS ${BLAS_LINKER_FLAGS})
|
||||
if (NOT $ENV{BLA_VENDOR} STREQUAL "")
|
||||
set(BLA_VENDOR $ENV{BLA_VENDOR})
|
||||
else ()
|
||||
if(NOT BLA_VENDOR)
|
||||
set(BLA_VENDOR "All")
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
#intel lapack
|
||||
if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT LAPACK_LIBRARIES)
|
||||
if (NOT WIN32)
|
||||
set(LAPACK_mkl_LM "-lm")
|
||||
set(LAPACK_mkl_LDL "-ldl")
|
||||
endif ()
|
||||
if (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED)
|
||||
if(LAPACK_FIND_QUIETLY OR NOT LAPACK_FIND_REQUIRED)
|
||||
find_PACKAGE(Threads)
|
||||
else()
|
||||
find_package(Threads REQUIRED)
|
||||
endif()
|
||||
|
||||
if (BLA_VENDOR MATCHES "_64ilp")
|
||||
set(LAPACK_mkl_ILP_MODE "ilp64")
|
||||
else ()
|
||||
set(LAPACK_mkl_ILP_MODE "lp64")
|
||||
endif ()
|
||||
|
||||
set(LAPACK_SEARCH_LIBS "")
|
||||
|
||||
if (BLA_F95)
|
||||
set(LAPACK_mkl_SEARCH_SYMBOL "cheev_f95")
|
||||
set(_LIBRARIES LAPACK95_LIBRARIES)
|
||||
set(_BLAS_LIBRARIES ${BLAS95_LIBRARIES})
|
||||
|
||||
# old
|
||||
list(APPEND LAPACK_SEARCH_LIBS
|
||||
"mkl_lapack95")
|
||||
# new >= 10.3
|
||||
list(APPEND LAPACK_SEARCH_LIBS
|
||||
"mkl_intel_c")
|
||||
list(APPEND LAPACK_SEARCH_LIBS
|
||||
"mkl_lapack95_${LAPACK_mkl_ILP_MODE}")
|
||||
else()
|
||||
set(LAPACK_mkl_SEARCH_SYMBOL "cheev")
|
||||
set(_LIBRARIES LAPACK_LIBRARIES)
|
||||
set(_BLAS_LIBRARIES ${BLAS_LIBRARIES})
|
||||
|
||||
# old
|
||||
list(APPEND LAPACK_SEARCH_LIBS
|
||||
"mkl_lapack")
|
||||
endif()
|
||||
|
||||
# First try empty lapack libs
|
||||
if (NOT ${_LIBRARIES})
|
||||
check_lapack_libraries(
|
||||
${_LIBRARIES}
|
||||
LAPACK
|
||||
${LAPACK_mkl_SEARCH_SYMBOL}
|
||||
""
|
||||
""
|
||||
"${_BLAS_LIBRARIES}"
|
||||
""
|
||||
)
|
||||
endif ()
|
||||
# Then try the search libs
|
||||
foreach (IT ${LAPACK_SEARCH_LIBS})
|
||||
if (NOT ${_LIBRARIES})
|
||||
check_lapack_libraries(
|
||||
${_LIBRARIES}
|
||||
LAPACK
|
||||
${LAPACK_mkl_SEARCH_SYMBOL}
|
||||
""
|
||||
"${IT}"
|
||||
"${_BLAS_LIBRARIES}"
|
||||
"${CMAKE_THREAD_LIBS_INIT};${LAPACK_mkl_LM};${LAPACK_mkl_LDL}"
|
||||
)
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
unset(LAPACK_mkl_ILP_MODE)
|
||||
unset(LAPACK_mkl_SEARCH_SYMBOL)
|
||||
unset(LAPACK_mkl_LM)
|
||||
unset(LAPACK_mkl_LDL)
|
||||
endif ()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT LAPACK_LIBRARIES)
|
||||
check_lapack_libraries(
|
||||
LAPACK_LIBRARIES
|
||||
LAPACK
|
||||
cheev
|
||||
""
|
||||
"goto2"
|
||||
"${BLAS_LIBRARIES}"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT LAPACK_LIBRARIES)
|
||||
check_lapack_libraries(
|
||||
LAPACK_LIBRARIES
|
||||
LAPACK
|
||||
cheev
|
||||
""
|
||||
"openblas"
|
||||
"${BLAS_LIBRARIES}"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
if (BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT LAPACK_LIBRARIES)
|
||||
check_lapack_libraries(
|
||||
LAPACK_LIBRARIES
|
||||
LAPACK
|
||||
cheev
|
||||
""
|
||||
"flame"
|
||||
"${BLAS_LIBRARIES}"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
#acml lapack
|
||||
if (BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All")
|
||||
if (BLAS_LIBRARIES MATCHES ".+acml.+")
|
||||
set (LAPACK_LIBRARIES ${BLAS_LIBRARIES})
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
# Apple LAPACK library?
|
||||
if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All")
|
||||
if(NOT LAPACK_LIBRARIES)
|
||||
check_lapack_libraries(
|
||||
LAPACK_LIBRARIES
|
||||
LAPACK
|
||||
cheev
|
||||
""
|
||||
"Accelerate"
|
||||
"${BLAS_LIBRARIES}"
|
||||
""
|
||||
)
|
||||
endif()
|
||||
endif ()
|
||||
if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All")
|
||||
if ( NOT LAPACK_LIBRARIES )
|
||||
check_lapack_libraries(
|
||||
LAPACK_LIBRARIES
|
||||
LAPACK
|
||||
cheev
|
||||
""
|
||||
"vecLib"
|
||||
"${BLAS_LIBRARIES}"
|
||||
""
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
# Generic LAPACK library?
|
||||
if (BLA_VENDOR STREQUAL "Generic" OR
|
||||
BLA_VENDOR STREQUAL "ATLAS" OR
|
||||
BLA_VENDOR STREQUAL "All")
|
||||
if ( NOT LAPACK_LIBRARIES )
|
||||
check_lapack_libraries(
|
||||
LAPACK_LIBRARIES
|
||||
LAPACK
|
||||
cheev
|
||||
""
|
||||
"lapack"
|
||||
"${BLAS_LIBRARIES}"
|
||||
""
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
else()
|
||||
message(STATUS "LAPACK requires BLAS")
|
||||
endif()
|
||||
|
||||
if(BLA_F95)
|
||||
if(LAPACK95_LIBRARIES)
|
||||
set(LAPACK95_FOUND TRUE)
|
||||
else()
|
||||
set(LAPACK95_FOUND FALSE)
|
||||
endif()
|
||||
if(NOT LAPACK_FIND_QUIETLY)
|
||||
if(LAPACK95_FOUND)
|
||||
message(STATUS "A library with LAPACK95 API found.")
|
||||
else()
|
||||
if(LAPACK_FIND_REQUIRED)
|
||||
message(FATAL_ERROR
|
||||
"A required library with LAPACK95 API not found. Please specify library location."
|
||||
)
|
||||
else()
|
||||
message(STATUS
|
||||
"A library with LAPACK95 API not found. Please specify library location."
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
set(LAPACK_FOUND "${LAPACK95_FOUND}")
|
||||
set(LAPACK_LIBRARIES "${LAPACK95_LIBRARIES}")
|
||||
else()
|
||||
if(LAPACK_LIBRARIES)
|
||||
set(LAPACK_FOUND TRUE)
|
||||
else()
|
||||
set(LAPACK_FOUND FALSE)
|
||||
endif()
|
||||
|
||||
if(NOT LAPACK_FIND_QUIETLY)
|
||||
if(LAPACK_FOUND)
|
||||
message(STATUS "A library with LAPACK API found.")
|
||||
else()
|
||||
if(LAPACK_FIND_REQUIRED)
|
||||
message(FATAL_ERROR
|
||||
"A required library with LAPACK API not found. Please specify library location."
|
||||
)
|
||||
else()
|
||||
message(STATUS
|
||||
"A library with LAPACK API not found. Please specify library location."
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# On compilers that implicitly link LAPACK (such as ftn, cc, and CC on Cray HPC machines)
|
||||
# we used a placeholder for empty LAPACK_LIBRARIES to get through our logic above.
|
||||
if (LAPACK_LIBRARIES STREQUAL "LAPACK_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES")
|
||||
set(LAPACK_LIBRARIES "")
|
||||
endif()
|
||||
|
||||
cmake_pop_check_state()
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
|
@ -7,10 +7,12 @@ Add preprocessor definitions to the compilation of source files.
|
||||
|
||||
add_compile_definitions(<definition> ...)
|
||||
|
||||
Adds preprocessor definitions to the compiler command line for targets in the
|
||||
current directory and below (whether added before or after this command is
|
||||
invoked). See documentation of the :prop_dir:`directory <COMPILE_DEFINITIONS>`
|
||||
and :prop_tgt:`target <COMPILE_DEFINITIONS>` ``COMPILE_DEFINITIONS`` properties.
|
||||
Adds preprocessor definitions to the compiler command line.
|
||||
|
||||
The preprocessor definitions are added to the :prop_dir:`COMPILE_DEFINITIONS`
|
||||
directory property for the current ``CMakeLists`` file. They are also added to
|
||||
the :prop_tgt:`COMPILE_DEFINITIONS` target property for each target in the
|
||||
current ``CMakeLists`` file.
|
||||
|
||||
Definitions are specified using the syntax ``VAR`` or ``VAR=value``.
|
||||
Function-style definitions are not supported. CMake will automatically
|
@ -68,6 +68,9 @@ The options are:
|
||||
order-only dependencies to ensure the byproducts will be
|
||||
available before their dependents build.
|
||||
|
||||
The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
|
||||
:prop_sf:`GENERATED` files during ``make clean``.
|
||||
|
||||
``COMMAND``
|
||||
Specify the command-line(s) to execute at build time.
|
||||
If more than one ``COMMAND`` is specified they will be executed in order,
|
||||
@ -112,24 +115,42 @@ The options are:
|
||||
build time.
|
||||
|
||||
``DEPENDS``
|
||||
Specify files on which the command depends. If any dependency is
|
||||
an ``OUTPUT`` of another custom command in the same directory
|
||||
(``CMakeLists.txt`` file) CMake automatically brings the other
|
||||
Specify files on which the command depends. Each argument is converted
|
||||
to a dependency as follows:
|
||||
|
||||
1. If the argument is the name of a target (created by the
|
||||
:command:`add_custom_target`, :command:`add_executable`, or
|
||||
:command:`add_library` command) a target-level dependency is
|
||||
created to make sure the target is built before any target
|
||||
using this custom command. Additionally, if the target is an
|
||||
executable or library, a file-level dependency is created to
|
||||
cause the custom command to re-run whenever the target is
|
||||
recompiled.
|
||||
|
||||
2. If the argument is an absolute path, a file-level dependency
|
||||
is created on that path.
|
||||
|
||||
3. If the argument is the name of a source file that has been
|
||||
added to a target or on which a source file property has been set,
|
||||
a file-level dependency is created on that source file.
|
||||
|
||||
4. If the argument is a relative path and it exists in the current
|
||||
source directory, a file-level dependency is created on that
|
||||
file in the current source directory.
|
||||
|
||||
5. Otherwise, a file-level dependency is created on that path relative
|
||||
to the current binary directory.
|
||||
|
||||
If any dependency is an ``OUTPUT`` of another custom command in the same
|
||||
directory (``CMakeLists.txt`` file), CMake automatically brings the other
|
||||
custom command into the target in which this command is built.
|
||||
A target-level dependency is added if any dependency is listed as
|
||||
``BYPRODUCTS`` of a target or any of its build events in the same
|
||||
directory to ensure the byproducts will be available.
|
||||
If ``DEPENDS`` is not specified the command will run whenever
|
||||
|
||||
If ``DEPENDS`` is not specified, the command will run whenever
|
||||
the ``OUTPUT`` is missing; if the command does not actually
|
||||
create the ``OUTPUT`` then the rule will always run.
|
||||
If ``DEPENDS`` specifies any target (created by the
|
||||
:command:`add_custom_target`, :command:`add_executable`, or
|
||||
:command:`add_library` command) a target-level dependency is
|
||||
created to make sure the target is built before any target
|
||||
using this custom command. Additionally, if the target is an
|
||||
executable or library a file-level dependency is created to
|
||||
cause the custom command to re-run whenever the target is
|
||||
recompiled.
|
||||
create the ``OUTPUT``, the rule will always run.
|
||||
|
||||
Arguments to ``DEPENDS`` may use
|
||||
:manual:`generator expressions <cmake-generator-expressions(7)>`.
|
@ -49,6 +49,9 @@ The options are:
|
||||
order-only dependencies to ensure the byproducts will be
|
||||
available before their dependents build.
|
||||
|
||||
The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
|
||||
:prop_sf:`GENERATED` files during ``make clean``.
|
||||
|
||||
``COMMAND``
|
||||
Specify the command-line(s) to execute at build time.
|
||||
If more than one ``COMMAND`` is specified they will be executed in order,
|
@ -8,9 +8,9 @@ Add -D define flags to the compilation of source files.
|
||||
add_definitions(-DFOO -DBAR ...)
|
||||
|
||||
Adds definitions to the compiler command line for targets in the current
|
||||
directory and below (whether added before or after this command is invoked).
|
||||
This command can be used to add any flags, but it is intended to add
|
||||
preprocessor definitions.
|
||||
directory, whether added before or after this command is invoked, and for
|
||||
the ones in sub-directories added after. This command can be used to add any
|
||||
flags, but it is intended to add preprocessor definitions.
|
||||
|
||||
.. note::
|
||||
|
@ -23,6 +23,7 @@ Perform the :ref:`CTest Test Step` as a :ref:`Dashboard Client`.
|
||||
[STOP_TIME <time-of-day>]
|
||||
[RETURN_VALUE <result-var>]
|
||||
[CAPTURE_CMAKE_ERROR <result-var>]
|
||||
[REPEAT <mode>:<n>]
|
||||
[QUIET]
|
||||
)
|
||||
|
||||
@ -95,6 +96,25 @@ The options are:
|
||||
and then the ``--test-load`` command-line argument to :manual:`ctest(1)`.
|
||||
See also the ``TestLoad`` setting in the :ref:`CTest Test Step`.
|
||||
|
||||
``REPEAT <mode>:<n>``
|
||||
Run tests repeatedly based on the given ``<mode>`` up to ``<n>`` times.
|
||||
The modes are:
|
||||
|
||||
``UNTIL_FAIL``
|
||||
Require each test to run ``<n>`` times without failing in order to pass.
|
||||
This is useful in finding sporadic failures in test cases.
|
||||
|
||||
``UNTIL_PASS``
|
||||
Allow each test to run up to ``<n>`` times in order to pass.
|
||||
Repeats tests if they fail for any reason.
|
||||
This is useful in tolerating sporadic failures in test cases.
|
||||
|
||||
``AFTER_TIMEOUT``
|
||||
Allow each test to run up to ``<n>`` times in order to pass.
|
||||
Repeats tests only if they timeout.
|
||||
This is useful in tolerating sporadic timeouts in test cases
|
||||
on busy machines.
|
||||
|
||||
``SCHEDULE_RANDOM <ON|OFF>``
|
||||
Launch tests in a random order. This may be useful for detecting
|
||||
implicit test dependencies.
|
@ -540,7 +540,7 @@ are only traversed if ``FOLLOW_SYMLINKS`` is given or policy
|
||||
By default ``GLOB_RECURSE`` omits directories from result list - setting
|
||||
``LIST_DIRECTORIES`` to true adds directories to result list.
|
||||
If ``FOLLOW_SYMLINKS`` is given or policy :policy:`CMP0009` is not set to
|
||||
``OLD`` then ``LIST_DIRECTORIES`` treats symlinks as directories.
|
||||
``NEW`` then ``LIST_DIRECTORIES`` treats symlinks as directories.
|
||||
|
||||
Examples of recursive globbing include::
|
||||
|
@ -47,7 +47,7 @@ of undocumented behavior that may change in future releases.
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
foreach(loop_var IN [LISTS [<lists>]] [ITEMS [<items>]])
|
||||
foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])
|
||||
|
||||
In this variant, ``<lists>`` is a whitespace or semicolon
|
||||
separated list of list-valued variables. The ``foreach``
|
||||
@ -82,3 +82,46 @@ yields
|
||||
-- X=6
|
||||
-- X=7
|
||||
-- X=8
|
||||
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
foreach(<loop_var>... IN ZIP_LISTS <lists>)
|
||||
|
||||
In this variant, ``<lists>`` is a whitespace or semicolon
|
||||
separated list of list-valued variables. The ``foreach``
|
||||
command iterates over each list simultaneously setting the
|
||||
iteration variables as follows:
|
||||
|
||||
- if the only ``loop_var`` given, then it sets a series of
|
||||
``loop_var_N`` variables to the current item from the
|
||||
corresponding list;
|
||||
- if multiple variable names passed, their count should match
|
||||
the lists variables count;
|
||||
- if any of the lists are shorter, the corresponding iteration
|
||||
variable is not defined for the current iteration.
|
||||
|
||||
.. code-block:: cmake
|
||||
|
||||
list(APPEND English one two three four)
|
||||
list(APPEND Bahasa satu dua tiga)
|
||||
|
||||
foreach(num IN ZIP_LISTS English Bahasa)
|
||||
message(STATUS "num_0=${num_0}, num_1=${num_1}")
|
||||
endforeach()
|
||||
|
||||
foreach(en ba IN ZIP_LISTS English Bahasa)
|
||||
message(STATUS "en=${en}, ba=${ba}")
|
||||
endforeach()
|
||||
|
||||
yields
|
||||
::
|
||||
|
||||
-- num_0=one, num_1=satu
|
||||
-- num_0=two, num_1=dua
|
||||
-- num_0=three, num_1=tiga
|
||||
-- num_0=four, num_1=
|
||||
-- en=one, ba=satu
|
||||
-- en=two, ba=dua
|
||||
-- en=three, ba=tiga
|
||||
-- en=four, ba=
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user