[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 08:36:00 PDT 2014


On 07/23/2014 11:04 AM, Dan Liew wrote:
>>  llvm_map_components_to_libnames(llvm_libs native option bitreader)
>>  target_link_libraries(simple-tool ${llvm_libs})
> 
> Is it ever the case that a component does not directly map to a single library?

Yes, and they can map to multiple libraries.  Target architecture
names are transformed, for example.  I have one project that does:

 llvm_map_components_to_libnames(llvm_libs native option bitreader
                                 ${LLVM_TARGETS_TO_BUILD})

and the resulting list has many libraries for each target arch.
It is needed to link tools that do

  llvm::InitializeAllTargets();
  llvm::InitializeAllTargetMCs();
  llvm::InitializeAllAsmPrinters();
  llvm::InitializeAllAsmParsers();

> CMAKE_PREFIX_PATH. I've not used it before and based on reading its
> documentation (man cmake-variables) it globally effects what find_XXX
> directives do. This does not seem like a good idea. Imagine if user's
> application uses ``find_package(Boost)`` but also uses
> ``find_package(LLVM REQUIRED CONFIG)``.

CMAKE_PREFIX_PATH can be a list of prefixes:

 "-DCMAKE_PREFIX_PATH=/path/to/Boost;/path/to/LLVM"

It was originally created for users that have a bunch of stuff installed
in a custom installation prefix, but can be used for this too.

I'm fine with not mentioning it here though.

> Although looking at documentation for find_package() the search order
> is quite complicated so I'm probably wrong. It is also not obvious
> where using <package>_DIR is in that order from the documentation.

It says "A cache entry called ``<package>_DIR`` is created to
hold the directory containing the file".  In other words, if
the value is set to a valid location then there is no search
done at all.

> +``LLVM_INCLUDE_DIRS``
> +  The path to the LLVM header files directory.

This should be documented as a list so projects do not use it
expecting it to always be one value.

Thanks,
-Brad




More information about the llvm-commits mailing list