[CMake] Fix c++ abi library configuration on Linux.
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. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@171316 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ed9f69d342
commit
db8a030bd3
@ -40,6 +40,9 @@ option(LIBCXX_ENABLE_CXX0X "Enable -std=c++0x and use of c++0x language features
|
|||||||
option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON)
|
option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON)
|
||||||
|
|
||||||
set(CXXABIS none libcxxabi libcxxrt libsupc++)
|
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
|
set(LIBCXX_CXX_ABI "${LIBCXX_CXX_ABI}" CACHE STRING
|
||||||
"Specify C++ ABI library to use." FORCE)
|
"Specify C++ ABI library to use." FORCE)
|
||||||
set_property(CACHE LIBCXX_CXX_ABI PROPERTY STRINGS "";${CXXABIS})
|
set_property(CACHE LIBCXX_CXX_ABI PROPERTY STRINGS "";${CXXABIS})
|
||||||
@ -63,9 +66,10 @@ get_target_triple(LIBCXX_TARGET_TRIPLE
|
|||||||
)
|
)
|
||||||
set(LIBCXX_TARGET_TRIPLE ${LIBCXX_TARGET_TRIPLE} CACHE STRING "Target triple.")
|
set(LIBCXX_TARGET_TRIPLE ${LIBCXX_TARGET_TRIPLE} CACHE STRING "Target triple.")
|
||||||
|
|
||||||
if (${LIBCXX_CXX_ABI} STREQUAL "libsupc++")
|
if ("${LIBCXX_CXX_ABI}" STREQUAL "libsupc++")
|
||||||
set(LIBCXX_LIBSUPCXX_INCLUDE_PATHS "" CACHE STRINGS
|
set(LIBCXX_LIBSUPCXX_INCLUDE_PATHS "${LIBCXX_LIBSUPCXX_INCLUDE_PATHS}"
|
||||||
"Paths to libsupc++ include directories. Separate by system separator")
|
CACHE STRINGS
|
||||||
|
"Paths to libsupc++ include directories separate by ';'.")
|
||||||
set(LIBCXX_CXX_ABI_LIBRARIES stdc++)
|
set(LIBCXX_CXX_ABI_LIBRARIES stdc++)
|
||||||
set(LIBCXX_LIBSUPCXX_FILES
|
set(LIBCXX_LIBSUPCXX_FILES
|
||||||
cxxabi.h
|
cxxabi.h
|
||||||
@ -75,6 +79,9 @@ if (${LIBCXX_CXX_ABI} STREQUAL "libsupc++")
|
|||||||
bits/cxxabi_tweaks.h
|
bits/cxxabi_tweaks.h
|
||||||
bits/cxxabi_forced.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)
|
set(LIBCXX_LIBSUPCXX_FILE_PATHS)
|
||||||
foreach(path ${LIBCXX_LIBSUPCXX_FILES})
|
foreach(path ${LIBCXX_LIBSUPCXX_FILES})
|
||||||
set(found FALSE)
|
set(found FALSE)
|
||||||
@ -106,7 +113,7 @@ if (${LIBCXX_CXX_ABI} STREQUAL "libsupc++")
|
|||||||
FILES_MATCHING
|
FILES_MATCHING
|
||||||
PATTERN "*"
|
PATTERN "*"
|
||||||
)
|
)
|
||||||
elseif (${LIBCXX_CXX_ABI} NOT STREQUAL "none")
|
elseif (NOT "${LIBCXX_CXX_ABI}" STREQUAL "none")
|
||||||
message(FATAL_ERROR
|
message(FATAL_ERROR
|
||||||
"Currently only none and libsupc++ are supported for c++ abi.")
|
"Currently only none and libsupc++ are supported for c++ abi.")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -31,7 +31,9 @@ else()
|
|||||||
)
|
)
|
||||||
endif()
|
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.
|
# Generate library list.
|
||||||
set(libraries ${LIBCXX_CXX_ABI_LIBRARIES})
|
set(libraries ${LIBCXX_CXX_ABI_LIBRARIES})
|
||||||
|
@ -116,6 +116,7 @@
|
|||||||
<!--=====================================================================-->
|
<!--=====================================================================-->
|
||||||
|
|
||||||
<p>libc++ is a 100% complete C++11 implementation on Apple's OS X. </p>
|
<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>
|
<p>
|
||||||
Ports to other platforms are underway. Here are recent test
|
Ports to other platforms are underway. Here are recent test
|
||||||
@ -204,6 +205,60 @@ against it with <code>-fno-rtti</code> is supported.
|
|||||||
<p>Send discussions to the
|
<p>Send discussions to the
|
||||||
(<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">clang mailing list</a>).</p>
|
(<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>
|
<h2>Design Documents</h2>
|
||||||
<!--=====================================================================-->
|
<!--=====================================================================-->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user