Schlottke-Lakemper, Michael
2015-Jul-28 11:10 UTC
[LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
Hi, I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ compiler for building LLVM is clang, and if this clang has support for libc++ with libc++Abi, that both lib++ and libc++abi should be used (instead of linking to the default, which at least on Linux is libstdc++)? If not, what is the canonical way of building LLVM with libc++? I am asking since I seem to have problems linking libLLVMSupport.a to a program while using clang with libc++, whereas the used clang/LLVM compiler was originally built with clang and libstdc++. Related to the first question: do the above flags also make clang use libc++ by default, or is this configurable via a different set of flags? Thanks a lot in advance Michael -- Michael Schlottke-Lakemper SimLab Highly Scalable Fluids & Solids Engineering Jülich Aachen Research Alliance (JARA-HPC) RWTH Aachen University Wüllnerstraße 5a 52062 Aachen Germany Phone: +49 (241) 80 95188 Fax: +49 (241) 80 92257 Mail: m.schlottke-lakemper at aia.rwth-aachen.de Web: http://www.jara.org/jara-hpc
Martell Malone
2015-Jul-28 11:30 UTC
[LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
Hi Michael, I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX and> LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ compiler > for building LLVM is clang, and if this clang has support for libc++ with > libc++Abi, that both lib++ and libc++abi should be used (instead of linking > to the default, which at least on Linux is libstdc++)?Yes that is actually what they are used for. Please see http://reviews.llvm.org/D2381 Kind Regards Martell On Tue, Jul 28, 2015 at 12:10 PM, Schlottke-Lakemper, Michael < m.schlottke-lakemper at aia.rwth-aachen.de> wrote:> Hi, > > I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX and > LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ compiler > for building LLVM is clang, and if this clang has support for libc++ with > libc++Abi, that both lib++ and libc++abi should be used (instead of linking > to the default, which at least on Linux is libstdc++)? If not, what is the > canonical way of building LLVM with libc++? I am asking since I seem to > have problems linking libLLVMSupport.a to a program while using clang with > libc++, whereas the used clang/LLVM compiler was originally built with > clang and libstdc++. > > Related to the first question: do the above flags also make clang use > libc++ by default, or is this configurable via a different set of flags? > > Thanks a lot in advance > > Michael > > -- > Michael Schlottke-Lakemper > > SimLab Highly Scalable Fluids & Solids Engineering > Jülich Aachen Research Alliance (JARA-HPC) > RWTH Aachen University > > Wüllnerstraße 5a > 52062 Aachen > Germany > > Phone: +49 (241) 80 95188 > Fax: +49 (241) 80 92257 > Mail: m.schlottke-lakemper at aia.rwth-aachen.de > Web: http://www.jara.org/jara-hpc > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150728/c253bb02/attachment.html>
Martell Malone
2015-Jul-28 11:32 UTC
[LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
Also please note that there is a description of each option in the CMakeLists.txt :) llvm/trunk/CMakeLists.txt option(LLVM_ENABLE_MODULES "Compile with C++ modules enabled." OFF) option(LLVM_ENABLE_CXX1Y "Compile with C++1y enabled." OFF) option(LLVM_ENABLE_LIBCXX "Use libc++ if available." OFF) option(LLVM_ENABLE_LIBCXXABI "Use libc++abi when using libc++." OFF) option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON) option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF) Kind Regards Martell On Tue, Jul 28, 2015 at 12:30 PM, Martell Malone <martellmalone at gmail.com> wrote:> Hi Michael, > > I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX and >> LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ compiler >> for building LLVM is clang, and if this clang has support for libc++ with >> libc++Abi, that both lib++ and libc++abi should be used (instead of linking >> to the default, which at least on Linux is libstdc++)? > > > Yes that is actually what they are used for. > > Please see > http://reviews.llvm.org/D2381 > > Kind Regards > Martell > > On Tue, Jul 28, 2015 at 12:10 PM, Schlottke-Lakemper, Michael < > m.schlottke-lakemper at aia.rwth-aachen.de> wrote: > >> Hi, >> >> I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX >> and LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ >> compiler for building LLVM is clang, and if this clang has support for >> libc++ with libc++Abi, that both lib++ and libc++abi should be used >> (instead of linking to the default, which at least on Linux is libstdc++)? >> If not, what is the canonical way of building LLVM with libc++? I am asking >> since I seem to have problems linking libLLVMSupport.a to a program while >> using clang with libc++, whereas the used clang/LLVM compiler was >> originally built with clang and libstdc++. >> >> Related to the first question: do the above flags also make clang use >> libc++ by default, or is this configurable via a different set of flags? >> >> Thanks a lot in advance >> >> Michael >> >> -- >> Michael Schlottke-Lakemper >> >> SimLab Highly Scalable Fluids & Solids Engineering >> Jülich Aachen Research Alliance (JARA-HPC) >> RWTH Aachen University >> >> Wüllnerstraße 5a >> 52062 Aachen >> Germany >> >> Phone: +49 (241) 80 95188 >> Fax: +49 (241) 80 92257 >> Mail: m.schlottke-lakemper at aia.rwth-aachen.de >> Web: http://www.jara.org/jara-hpc >> >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150728/055fd3c3/attachment.html>
Renato Golin
2015-Jul-28 12:06 UTC
[LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
On 28 July 2015 at 12:10, Schlottke-Lakemper, Michael <m.schlottke-lakemper at aia.rwth-aachen.de> wrote:> I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ compiler for building LLVM is clang, and if this clang has support for libc++ with libc++Abi, that both lib++ and libc++abi should be used (instead of linking to the default, which at least on Linux is libstdc++)? If not, what is the canonical way of building LLVM with libc++? I am asking since I seem to have problems linking libLLVMSupport.a to a program while using clang with libc++, whereas the used clang/LLVM compiler was originally built with clang and libstdc++.Hi Michael, Just cloning the libc++ / libc++abi / libunwind repositories in llvm/projects (or symlinking them there) is enough for CMake to pick it up, build and test on check-all. The libraries will be available on build/lib.> Related to the first question: do the above flags also make clang use libc++ by default, or is this configurable via a different set of flags?No. I believe this is an old flag when that wasn't enable by default (and now it's used to disable it if you have the dirs). But maybe heavier users of libc++ can help you there. You still have to use LDFLAGS="--stdlib=libc++ -lc++abi -lunwind" and, if you're not installing it anywhere (but using the build directory), add LD_LIBRARY_PATH=build/lib to your environment. If you run into inconsistencies because libgcc_s / libgcc_eh are included, or if libstdc++ is included as well, you may have to use -nostdlibc++ to clean up the internal options, and then use --stdlib and friends to create a new set. It is confusing, but we don't want to make those libraries the default on any environment that might still need/use libstdc++/libgcc by default. This is more of a system-wide decision. For testing purposes, though, it works well. cheers, --renato
Martell Malone
2015-Jul-28 12:40 UTC
[LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
Hi Renato I had the impression that Michael actually wanted the latter, like GCC> has autoconf options to change the default behaviour of the compiler > at build time. > > I may be wrong, though.yes I thought that was what he wanted because he said Are they used to indicate that if the C/C++ compiler for building LLVM is> clang >That combined with the standard cmake flags cmake_cxx_compiler and cmake_c_compiler should result in the host being clang and using libc++ and libc++abi I was a little thrown off by the wording of the question I think you are more correct though I misread the second part of the question where he said what he actually wanted the resulting compiler to use libc++ Sorry for the noise Michael In short Michael it should not matter if clang was build with libc++ or libstdc++ the resulting compiler can use both after the fact As Renato described above in more detail LDFLAGS="--stdlib=libc++ -lc++abi -lunwind" would be used to tell that resulting compiler to link its programs with libc++, libc++abi and libunwind Rather than using libstdc++ and libgcc_eh If you want to know how to change the default to do this without touching the LDFLAGS for your target this you must look in the clang repo under lib/driver If you have any trouble doing this I'd be glad to help you change the default behavior if let me know what your target is. Kind Regards Martell On Tue, Jul 28, 2015 at 1:06 PM, Renato Golin <renato.golin at linaro.org> wrote:> On 28 July 2015 at 12:10, Schlottke-Lakemper, Michael > <m.schlottke-lakemper at aia.rwth-aachen.de> wrote: > > I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX > and LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ > compiler for building LLVM is clang, and if this clang has support for > libc++ with libc++Abi, that both lib++ and libc++abi should be used > (instead of linking to the default, which at least on Linux is libstdc++)? > If not, what is the canonical way of building LLVM with libc++? I am asking > since I seem to have problems linking libLLVMSupport.a to a program while > using clang with libc++, whereas the used clang/LLVM compiler was > originally built with clang and libstdc++. > > Hi Michael, > > Just cloning the libc++ / libc++abi / libunwind repositories in > llvm/projects (or symlinking them there) is enough for CMake to pick > it up, build and test on check-all. The libraries will be available on > build/lib. > > > > Related to the first question: do the above flags also make clang use > libc++ by default, or is this configurable via a different set of flags? > > No. I believe this is an old flag when that wasn't enable by default > (and now it's used to disable it if you have the dirs). But maybe > heavier users of libc++ can help you there. > > You still have to use LDFLAGS="--stdlib=libc++ -lc++abi -lunwind" and, > if you're not installing it anywhere (but using the build directory), > add LD_LIBRARY_PATH=build/lib to your environment. > > If you run into inconsistencies because libgcc_s / libgcc_eh are > included, or if libstdc++ is included as well, you may have to use > -nostdlibc++ to clean up the internal options, and then use --stdlib > and friends to create a new set. > > It is confusing, but we don't want to make those libraries the default > on any environment that might still need/use libstdc++/libgcc by > default. This is more of a system-wide decision. For testing purposes, > though, it works well. > > cheers, > --renato > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150728/fb1c7a89/attachment.html>
Schlottke-Lakemper, Michael
2015-Jul-28 15:38 UTC
[LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
Hi Martell, I am wondering about the meaning of the cmake flags LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI. Are they used to indicate that if the C/C++ compiler for building LLVM is clang, and if this clang has support for libc++ with libc++Abi, that both lib++ and libc++abi should be used (instead of linking to the default, which at least on Linux is libstdc++)? Yes that is actually what they are used for. Thank you for the confirmation. I saw the help text in CMakeLists.txt but was not sure whether it refers to the build process itself or the behavior of the resulting compiler. Michael -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150728/89cb1d8c/attachment.html>
Schlottke-Lakemper, Michael
2015-Jul-28 15:51 UTC
[LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
Hi Renato,>> Related to the first question: do the above flags also make clang use libc++ by default, or is this configurable via a different set of flags? > > No. I believe this is an old flag when that wasn't enable by default > (and now it's used to disable it if you have the dirs). But maybe > heavier users of libc++ can help you there. > > You still have to use LDFLAGS="--stdlib=libc++ -lc++abi -lunwind" and, > if you're not installing it anywhere (but using the build directory), > add LD_LIBRARY_PATH=build/lib to your environment. > > If you run into inconsistencies because libgcc_s / libgcc_eh are > included, or if libstdc++ is included as well, you may have to use > -nostdlibc++ to clean up the internal options, and then use --stdlib > and friends to create a new set.Thanks for the clarification and the hint with -nostdlibc++. Michael
Seemingly Similar Threads
- [LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
- [LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
- [LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
- [LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI
- [LLVMdev] Purpose of LLVM_ENABLE_LIBCXX and LLVM_ENABLE_LIBCXXABI