[cfe-commits] [PATCH] [libcxx][CMake] Fix c++ abi library configuration on Linux.
Michael Spencer
bigcheesegs at gmail.com
Tue Dec 25 00:24:43 PST 2012
Hi chandlerc,
You can now configure from the command line using:
-DLIBCXX_CXX_ABI=libsupc++
-DLIBCXX_LIBSUPCXX_INCLUDE_PATHS="path;path
Also documents how to build on Linux.
http://llvm-reviews.chandlerc.com/D238
Files:
CMakeLists.txt
lib/CMakeLists.txt
www/index.html
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt
+++ CMakeLists.txt
@@ -40,6 +40,9 @@
option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON)
set(CXXABIS none libcxxabi libcxxrt libsupc++)
+if (NOT DEFINED LIBCXX_CXX_ABI)
+ set(LIBCXX_CXX_ABI "none")
+endif()
set(LIBCXX_CXX_ABI "${LIBCXX_CXX_ABI}" CACHE STRING
"Specify C++ ABI library to use." FORCE)
set_property(CACHE LIBCXX_CXX_ABI PROPERTY STRINGS "";${CXXABIS})
@@ -63,8 +66,8 @@
)
set(LIBCXX_TARGET_TRIPLE ${LIBCXX_TARGET_TRIPLE} CACHE STRING "Target triple.")
-if (${LIBCXX_CXX_ABI} STREQUAL "libsupc++")
- set(LIBCXX_LIBSUPCXX_INCLUDE_PATHS "" CACHE STRINGS
+if ("${LIBCXX_CXX_ABI}" STREQUAL "libsupc++")
+ set(LIBCXX_LIBSUPCXX_INCLUDE_PATHS "${LIBCXX_LIBSUPCXX_INCLUDE_PATHS}" CACHE STRINGS
"Paths to libsupc++ include directories. Separate by system separator")
set(LIBCXX_CXX_ABI_LIBRARIES stdc++)
set(LIBCXX_LIBSUPCXX_FILES
@@ -75,6 +78,9 @@
bits/cxxabi_tweaks.h
bits/cxxabi_forced.h
)
+ # Create include directories.
+ file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include")
+ file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include/bits")
set(LIBCXX_LIBSUPCXX_FILE_PATHS)
foreach(path ${LIBCXX_LIBSUPCXX_FILES})
set(found FALSE)
@@ -106,7 +112,7 @@
FILES_MATCHING
PATTERN "*"
)
-elseif (${LIBCXX_CXX_ABI} NOT STREQUAL "none")
+elseif (NOT "${LIBCXX_CXX_ABI}" STREQUAL "none")
message(FATAL_ERROR
"Currently only none and libsupc++ are supported for c++ abi.")
endif ()
Index: lib/CMakeLists.txt
===================================================================
--- lib/CMakeLists.txt
+++ lib/CMakeLists.txt
@@ -31,7 +31,9 @@
)
endif()
-add_dependencies(cxx ${LIBCXX_CXX_ABI_DEPS})
+if (DEFINED LIBCXX_CXX_ABI_DEPS)
+ add_dependencies(cxx ${LIBCXX_CXX_ABI_DEPS})
+endif()
# Generate library list.
set(libraries ${LIBCXX_CXX_ABI_LIBRARIES})
Index: www/index.html
===================================================================
--- www/index.html
+++ www/index.html
@@ -116,6 +116,7 @@
<!--=====================================================================-->
<p>libc++ is a 100% complete C++11 implementation on Apple's OS X. </p>
+ <p>LLVM and Clang can self host in C++ and C++11 mode with libc++ on Linux.</p>
<p>
Ports to other platforms are underway. Here are recent test
@@ -205,6 +206,60 @@
(<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">clang mailing list</a>).</p>
<!--=====================================================================-->
+ <h2>Build on Linux using CMake and libsupc++.</h2>
+ <!--=====================================================================-->
+
+ <p>
+ You will need libstdc++ in order to provide libsupc++.
+ </p>
+
+ <p>
+ Figure out where the libsupc++ headers are on your system. On Ubuntu this
+ is <code>/usr/include/c++/<version></code> and
+ <code>/usr/include/c++/<version>/<target-triple></code>
+ </p>
+
+ <p>
+ You can also figure this out by running
+ <pre>
+$ echo | g++ -Wp,-v -x c++ - -fsyntax-only
+ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
+ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
+#include "..." search starts here:
+#include <...> search starts here:
+ /usr/include/c++/4.7
+ /usr/include/c++/4.7/x86_64-linux-gnu
+ /usr/include/c++/4.7/backward
+ /usr/lib/gcc/x86_64-linux-gnu/4.7/include
+ /usr/local/include
+ /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
+ /usr/include/x86_64-linux-gnu
+ /usr/include
+End of search list.
+ </pre>
+
+ Note the first two entries happen to be what we are looking for. This
+ may not be correct on other platforms.
+ </p>
+
+ <p>
+ We can now run CMake:
+ <ul>
+ <li><code>CC=clang CXX=clang++ cmake -G "Unix Makefiles"
+ -DLIBCXX_CXX_ABI=libsupc++
+ -DLIBCXX_LIBSUPCXX_INCLUDE_PATHS="/usr/include/c++/4.7/;/usr/include/c++/4.7/x86_64-linux-gnu/"
+ -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX=/usr
+ <libc++-source-dir></code></li>
+ <li><code>make</code></li>
+ <li><code>sudo make install</code></li>
+ </ul>
+ <p>
+ You can now run clang with -stdlib=libc++.
+ </p>
+ </p>
+
+ <!--=====================================================================-->
<h2>Design Documents</h2>
<!--=====================================================================-->
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D238.1.patch
Type: text/x-patch
Size: 4657 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121225/1b3090fa/attachment.bin>
More information about the cfe-commits
mailing list