[llvm-dev] [RFC] Proposing libcxx-config.py: a configuration tool for building and using libc++

Eric Fiselier via llvm-dev llvm-dev at lists.llvm.org
Thu Feb 9 16:18:08 PST 2017

Hi All,

Configuring a compiler to target or build libc++ is tricky. It often
requires suppressing and rebuilding large parts of the CC1 compiler
invocation. Doing this manually can be prohibitive, even for experienced
users. Even doing it programmatically is hard and requires a lot of code
because of the sheer number of configurations libc++ support.

These problems affects both libc++ and it's users. For libc++ CMake's
statefulness makes it hard to generate the two different sets of flags
needed to initially build the library and then to target it afterwards.

Therefore I'm proposing a utility called `libcxx-config.py` which, similar
to llvm-config, when queried will output the flags required to compile and
link libc++. The tool will have two main purposes:

(1) Generating the compile and link flags required to *use the just-built
libc++ library*.
(2) Generating the compile and link flags required to *build the libc++

The goals for `libcxx-config.py` are:

(1) Reduce duplicate configuration logic between the CMake and test-suite.
(2) Allow non-CMake users to correctly generate the flags required to build
libc++. (Ex buildit)
(3) Make it easier for projects, including libc++, to correctly configure
to target the just-built libc++.
(4) Allow the creation of a `test-libc++` tool which can compile and link
test programs against libc++ (Often needed when debugging test suite

Would anybody else have a need for this? Are there use cases anybody would
like to see supported?

Some example usages I imagine for `libcxx-config.py` are:

  # Get the compile flags needed to build libc++.dylib
  $ libcxx-config.py --building-library --compile-flags --compiler=clang++

  # output: -nostdinc++ -I <libcxx-headers> -D_LIBCPP_BUILDING_LIBRARY
-DLIBCXX_BUILDING_LIBCXXABI -std=c++11 -fvisibility-inlines-hidden

  # Get the link flags needed to use libc++ with the specified compiler
  $ libcxx-config.py --link-flags --compiler=g++

  # Output: -nodefaultlibs -L <path> -Wl,-rpath <path> -lc++experimental
-lc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc

Any feedback is appreciated.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170209/436d4468/attachment.html>

More information about the llvm-dev mailing list