[PATCH] Document new LLVM CMake interface and emit warning when using llvm_map_components_to_libraries

Brad King brad.king at kitware.com
Wed Jul 23 06:02:11 PDT 2014


On 07/23/2014 06:49 AM, Dan Liew wrote:
> Here are my patches to document the LLVM CMake interface and also warn
> developers when using the old interface.

Thanks.  Good start.  Here are some comments:

> +  project(SimpleProject)

Precede this line with::

  cmake_minimum_required(VERSION 2.8.8)

since that is the minimum required by LLVM.  All CMake projects should
start with such a line so the example should show it.

> +  set(LLVM_DIR "" CACHE FILEPATH "Path to directory containing LLVMConfig.cmake")
> +  find_package(LLVM REQUIRED CONFIG)

The find_package command creates the LLVM_DIR cache entry automatically
so the set() line above is not needed.

> +  # Link against LLVM libraries
> +  target_link_libraries(simple-tool LLVMSupport LLVMCore LLVMIRReader)

IIUC applications should still use llvm_map_components_to_libnames
which maps LLVM components to a list of libraries but does not expand
dependencies.  For example:

 llvm_map_components_to_libnames(llvm_libs native option bitreader)
 target_link_libraries(simple-tool ${llvm_libs})

> +cmake manual for details). The ``LLVM_DIR`` variable can be set to hint to
> +``find_package(..)`` where to look for the ``LLVMConfig.cmake``.

LLVM_DIR is not just a hint.  It is the place that find_package
checks for an existing result and/or stores its new result.
Perhaps::

  It creates a ``LLVM_DIR`` cache entry to save the location where
  ``LLVMConfig.cmake`` is found or allow the user to specify the
  location.

> +This file is available in two different locations.

I think the install-tree location should be listed first since that
is what applications will typically use, especially when LLVM has
been installed by the package manager.  Also, this might be a good
location to recommend pointing CMAKE_PREFIX_PATH at the top of the
installation prefix (if it is not a system prefix) or build directory
when building an application.  Then find_package will be able to
locate LLVMConfig.cmake and set LLVM_DIR without the user having to
poke around to find share/llvm/cmake.

> +The ``LLVMConfig.cmake`` file sets various useful variables. Notable variables
> +include

Good.  I think the list of variables would be better formatted as
a definition list, and without the ":<type>" suffixes since they
are not cache entries.  For example::

  ``LLVM_CMAKE_DIR``
    The path to the directory containing LLVM CMake modules.

  ``LLVM_DEFINITIONS``
    A list of preprocessor defines that should be used with
    ``add_definitions()`` when building against LLVM.

> +  set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LLVM_CMAKE_DIR}")

This can be::

  list(APPEND CMAKE_MODULE_PATH ${LLVM_CMAKE_DIR})

In the second patch:

> +  message(AUTHOR_WARNING "Using llvm_map_components_to_libraries() is deprecated. Use LLVM libraries as imported targets instead.")

This message may need to be updated based on the decision about the
above comment suggesting use of llvm_map_components_to_libnames.

-Brad




More information about the llvm-commits mailing list