mirror of
https://github.com/crystalidea/qt-build-tools.git
synced 2025-02-24 03:44:48 +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> ...)
|
add_compile_definitions(<definition> ...)
|
||||||
|
|
||||||
Adds preprocessor definitions to the compiler command line for targets in the
|
Adds preprocessor definitions to the compiler command line.
|
||||||
current directory and below (whether added before or after this command is
|
|
||||||
invoked). See documentation of the :prop_dir:`directory <COMPILE_DEFINITIONS>`
|
The preprocessor definitions are added to the :prop_dir:`COMPILE_DEFINITIONS`
|
||||||
and :prop_tgt:`target <COMPILE_DEFINITIONS>` ``COMPILE_DEFINITIONS`` properties.
|
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``.
|
Definitions are specified using the syntax ``VAR`` or ``VAR=value``.
|
||||||
Function-style definitions are not supported. CMake will automatically
|
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
|
order-only dependencies to ensure the byproducts will be
|
||||||
available before their dependents build.
|
available before their dependents build.
|
||||||
|
|
||||||
|
The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
|
||||||
|
:prop_sf:`GENERATED` files during ``make clean``.
|
||||||
|
|
||||||
``COMMAND``
|
``COMMAND``
|
||||||
Specify the command-line(s) to execute at build time.
|
Specify the command-line(s) to execute at build time.
|
||||||
If more than one ``COMMAND`` is specified they will be executed in order,
|
If more than one ``COMMAND`` is specified they will be executed in order,
|
||||||
@ -112,25 +115,43 @@ The options are:
|
|||||||
build time.
|
build time.
|
||||||
|
|
||||||
``DEPENDS``
|
``DEPENDS``
|
||||||
Specify files on which the command depends. If any dependency is
|
Specify files on which the command depends. Each argument is converted
|
||||||
an ``OUTPUT`` of another custom command in the same directory
|
to a dependency as follows:
|
||||||
(``CMakeLists.txt`` file) CMake automatically brings the other
|
|
||||||
custom command into the target in which this command is built.
|
1. If the argument is the name of a target (created by the
|
||||||
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
|
|
||||||
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_custom_target`, :command:`add_executable`, or
|
||||||
:command:`add_library` command) a target-level dependency is
|
:command:`add_library` command) a target-level dependency is
|
||||||
created to make sure the target is built before any target
|
created to make sure the target is built before any target
|
||||||
using this custom command. Additionally, if the target is an
|
using this custom command. Additionally, if the target is an
|
||||||
executable or library a file-level dependency is created to
|
executable or library, a file-level dependency is created to
|
||||||
cause the custom command to re-run whenever the target is
|
cause the custom command to re-run whenever the target is
|
||||||
recompiled.
|
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
|
||||||
|
the ``OUTPUT`` is missing; if the command does not actually
|
||||||
|
create the ``OUTPUT``, the rule will always run.
|
||||||
|
|
||||||
Arguments to ``DEPENDS`` may use
|
Arguments to ``DEPENDS`` may use
|
||||||
:manual:`generator expressions <cmake-generator-expressions(7)>`.
|
:manual:`generator expressions <cmake-generator-expressions(7)>`.
|
||||||
|
|
@ -49,6 +49,9 @@ The options are:
|
|||||||
order-only dependencies to ensure the byproducts will be
|
order-only dependencies to ensure the byproducts will be
|
||||||
available before their dependents build.
|
available before their dependents build.
|
||||||
|
|
||||||
|
The :ref:`Makefile Generators` will remove ``BYPRODUCTS`` and other
|
||||||
|
:prop_sf:`GENERATED` files during ``make clean``.
|
||||||
|
|
||||||
``COMMAND``
|
``COMMAND``
|
||||||
Specify the command-line(s) to execute at build time.
|
Specify the command-line(s) to execute at build time.
|
||||||
If more than one ``COMMAND`` is specified they will be executed in order,
|
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 ...)
|
add_definitions(-DFOO -DBAR ...)
|
||||||
|
|
||||||
Adds definitions to the compiler command line for targets in the current
|
Adds definitions to the compiler command line for targets in the current
|
||||||
directory and below (whether added before or after this command is invoked).
|
directory, whether added before or after this command is invoked, and for
|
||||||
This command can be used to add any flags, but it is intended to add
|
the ones in sub-directories added after. This command can be used to add any
|
||||||
preprocessor definitions.
|
flags, but it is intended to add preprocessor definitions.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
@ -23,6 +23,7 @@ Perform the :ref:`CTest Test Step` as a :ref:`Dashboard Client`.
|
|||||||
[STOP_TIME <time-of-day>]
|
[STOP_TIME <time-of-day>]
|
||||||
[RETURN_VALUE <result-var>]
|
[RETURN_VALUE <result-var>]
|
||||||
[CAPTURE_CMAKE_ERROR <result-var>]
|
[CAPTURE_CMAKE_ERROR <result-var>]
|
||||||
|
[REPEAT <mode>:<n>]
|
||||||
[QUIET]
|
[QUIET]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -95,6 +96,25 @@ The options are:
|
|||||||
and then the ``--test-load`` command-line argument to :manual:`ctest(1)`.
|
and then the ``--test-load`` command-line argument to :manual:`ctest(1)`.
|
||||||
See also the ``TestLoad`` setting in the :ref:`CTest Test Step`.
|
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>``
|
``SCHEDULE_RANDOM <ON|OFF>``
|
||||||
Launch tests in a random order. This may be useful for detecting
|
Launch tests in a random order. This may be useful for detecting
|
||||||
implicit test dependencies.
|
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
|
By default ``GLOB_RECURSE`` omits directories from result list - setting
|
||||||
``LIST_DIRECTORIES`` to true adds directories to result list.
|
``LIST_DIRECTORIES`` to true adds directories to result list.
|
||||||
If ``FOLLOW_SYMLINKS`` is given or policy :policy:`CMP0009` is not set to
|
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::
|
Examples of recursive globbing include::
|
||||||
|
|
@ -47,7 +47,7 @@ of undocumented behavior that may change in future releases.
|
|||||||
|
|
||||||
.. code-block:: cmake
|
.. 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
|
In this variant, ``<lists>`` is a whitespace or semicolon
|
||||||
separated list of list-valued variables. The ``foreach``
|
separated list of list-valued variables. The ``foreach``
|
||||||
@ -82,3 +82,46 @@ yields
|
|||||||
-- X=6
|
-- X=6
|
||||||
-- X=7
|
-- X=7
|
||||||
-- X=8
|
-- 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