Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -52,7 +52,7 @@ # Basic options --------------------------------------------------------------- option(LIBCXX_ENABLE_ASSERTIONS "Enable assertions independent of build mode." ON) option(LIBCXX_ENABLE_SHARED "Build libc++ as a shared library." ON) - +option(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY "Build libc++experimental.a" ON) option(LIBCXX_INCLUDE_TESTS "Build the libc++ tests." ${LLVM_INCLUDE_TESTS}) option(LIBCXX_INCLUDE_DOCS "Build the libc++ documentation." ${LLVM_INCLUDE_DOCS}) set(LIBCXX_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}" CACHE STRING @@ -60,6 +60,7 @@ option(LIBCXX_INSTALL_HEADERS "Install the libc++ headers." ON) option(LIBCXX_INSTALL_LIBRARY "Install the libc++ library." ON) option(LIBCXX_INSTALL_SUPPORT_HEADERS "Install libc++ support headers." ON) +option(LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY "Install libc++experimental.a" OFF) set(LIBCXX_ABI_VERSION 1 CACHE STRING "ABI version of libc++.") option(LIBCXX_ABI_UNSTABLE "Unstable ABI of libc++." OFF) Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -138,6 +138,17 @@ SOVERSION "${LIBCXX_ABI_VERSION}" ) +if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY) + file(GLOB LIBCXX_EXPERIMENTAL_SOURCES ../src/experimental/*.cpp) + add_library(cxx_experimental STATIC ${LIBCXX_EXPERIMENTAL_SOURCES}) + target_link_libraries(cxx_experimental cxx) + set_target_properties(cxx_experimental + PROPERTIES + COMPILE_FLAGS "${LIBCXX_COMPILE_FLAGS}" + OUTPUT_NAME "c++experimental" + ) +endif() + # Generate a linker script inplace of a libc++.so symlink. Rerun this command # after cxx builds. if (LIBCXX_ENABLE_ABI_LINKER_SCRIPT) @@ -160,7 +171,10 @@ endif() if (LIBCXX_INSTALL_LIBRARY) - install(TARGETS cxx + if (LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY) + set(experimental_lib cxx_experimental) + endif() + install(TARGETS cxx ${experimental_lib} LIBRARY DESTINATION lib${LIBCXX_LIBDIR_SUFFIX} COMPONENT libcxx ARCHIVE DESTINATION lib${LIBCXX_LIBDIR_SUFFIX} COMPONENT libcxx ) @@ -180,11 +194,16 @@ if(LIBCXX_INSTALL_LIBRARY) set(lib_install_target cxx) endif() + if (LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY) + set(experimental_lib_install_target cxx_experimental) + endif() if(LIBCXX_INSTALL_HEADERS) set(header_install_target install-libcxx-headers) endif() add_custom_target(install-libcxx - DEPENDS ${lib_install_target} ${header_install_target} + DEPENDS ${lib_install_target} + ${experimental_lib_install_target} + ${header_install_target} COMMAND "${CMAKE_COMMAND}" -DCMAKE_INSTALL_COMPONENT=libcxx -P "${LIBCXX_BINARY_DIR}/cmake_install.cmake") Index: src/experimental/placeholder.cpp =================================================================== --- /dev/null +++ src/experimental/placeholder.cpp @@ -0,0 +1,14 @@ +//===--------------------------- TODO.cpp ---------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "experimental/__config" + +_LIBCPP_BEGIN_NAMESPACE_LFTS + +_LIBCPP_END_NAMESPACE_LFTS Index: test/CMakeLists.txt =================================================================== --- test/CMakeLists.txt +++ test/CMakeLists.txt @@ -10,6 +10,7 @@ "Configuration variant to use for LIT.") pythonize_bool(LIBCXX_ENABLE_EXCEPTIONS) +pythonize_bool(LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY) pythonize_bool(LIBCXX_ENABLE_RTTI) pythonize_bool(LIBCXX_ENABLE_SHARED) pythonize_bool(LIBCXX_BUILD_32_BITS) Index: test/libcxx/test/config.py =================================================================== --- test/libcxx/test/config.py +++ test/libcxx/test/config.py @@ -456,6 +456,10 @@ '-Wl,-rpath,' + self.abi_library_root] def configure_link_flags_cxx_library(self): + libcxx_experimental = self.get_lit_bool('enable_experimental', default=False) + if libcxx_experimental: + self.config.available_features.add('c++experimental') + self.cxx.link_flags += ['-lc++experimental'] libcxx_shared = self.get_lit_bool('enable_shared', default=True) if libcxx_shared: self.cxx.link_flags += ['-lc++'] Index: test/lit.site.cfg.in =================================================================== --- test/lit.site.cfg.in +++ test/lit.site.cfg.in @@ -5,6 +5,7 @@ config.libcxx_obj_root = "@LIBCXX_BINARY_DIR@" config.cxx_library_root = "@LIBCXX_LIBRARY_DIR@" config.enable_exceptions = "@LIBCXX_ENABLE_EXCEPTIONS@" +config.enable_experimental = "@LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY@" config.enable_rtti = "@LIBCXX_ENABLE_RTTI@" config.enable_shared = "@LIBCXX_ENABLE_SHARED@" config.enable_32bit = "@LIBCXX_BUILD_32_BITS@"