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

Jonathan Roelofs via llvm-dev llvm-dev at lists.llvm.org
Mon Feb 13 07:53:07 PST 2017

On 2/9/17 5:18 PM, Eric Fiselier via llvm-dev wrote:
> 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.

Can you elaborate on what the problems are here?

Is this something we could fix by adding flags to clang to query for the 
appropriate flags? (i.e. like the kind of support given by 
-print-multi-directory/-print-multi-lib, but tailored for the problems 
related to building/using a c++ STL)


> 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++
> dylib.*
> *
> *
> 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 failures).
> 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++ --cxx-abi-library=libcxxabi
>   # 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.
> /Eric
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Jon Roelofs
jonathan at codesourcery.com
CodeSourcery / Mentor Embedded

More information about the llvm-dev mailing list