[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
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
(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...
More information about the llvm-dev