diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt --- a/libcxxabi/CMakeLists.txt +++ b/libcxxabi/CMakeLists.txt @@ -92,6 +92,14 @@ option(LIBCXXABI_ENABLE_SHARED "Build libc++abi as a shared library." ON) option(LIBCXXABI_ENABLE_STATIC "Build libc++abi as a static library." ON) +option(LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI + "Whether the libc++abi tests should link with the shared libc++abi library" + ${LIBCXXABI_ENABLE_SHARED}) + +option(LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX + "Whether the libc++abi tests should link with the shared libc++ library" + ${LIBCXX_ENABLE_SHARED}) + cmake_dependent_option(LIBCXXABI_INSTALL_STATIC_LIBRARY "Install the static libc++abi library." ON "LIBCXXABI_ENABLE_STATIC;LIBCXXABI_INSTALL_LIBRARY" OFF) @@ -115,6 +123,26 @@ message(FATAL_ERROR "libc++abi must be built as either a shared or static library.") endif() +if(LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI AND NOT LIBCXXABI_ENABLE_SHARED) + message(FATAL_ERROR "LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI being ON requires LIBCXXABI_ENABLE_SHARED to be ON") +endif() + +if(NOT LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI AND NOT LIBCXXABI_ENABLE_STATIC) + message(FATAL_ERROR "LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI being OFF requires LIBCXXABI_ENABLE_STATIC to be ON") +endif() + +if(DEFINED LIBCXX_ENABLE_SHARED + AND LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX + AND NOT LIBCXX_ENABLE_SHARED) + message(FATAL_ERROR "LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX being ON requires LIBCXX_ENABLE_SHARED to be ON") +endif() + +if(DEFINED LIBCXX_ENABLE_STATIC + AND NOT LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX + AND NOT LIBCXX_ENABLE_STATIC) + message(FATAL_ERROR "LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX being OFF requires LIBCXX_ENABLE_STATIC to be ON") +endif() + if (LLVM_EXTERNAL_LIBCXX_SOURCE_DIR) set(LIBCXXABI_LIBCXX_SRC_DIRS ${LLVM_EXTERNAL_LIBCXX_SOURCE_DIR}) else() @@ -209,7 +237,7 @@ # directory. if (NOT LIBCXXABI_LIBCXX_LIBRARY_PATH) set(LIBCXXABI_LIBCXX_LIBRARY_PATH "${LIBCXXABI_LIBRARY_DIR}" CACHE PATH - "The path to libc++ library.") + "The path to libc++ library." FORCE) endif() # Check that we can build with 32 bits if requested. diff --git a/libcxxabi/test/CMakeLists.txt b/libcxxabi/test/CMakeLists.txt --- a/libcxxabi/test/CMakeLists.txt +++ b/libcxxabi/test/CMakeLists.txt @@ -20,6 +20,8 @@ pythonize_bool(LIBCXXABI_USE_COMPILER_RT) pythonize_bool(LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY) pythonize_bool(LIBCXX_ENABLE_PARALLEL_ALGORITHMS) +pythonize_bool(LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX) +pythonize_bool(LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI) set(LIBCXXABI_TARGET_INFO "libcxx.test.target_info.LocalTI" CACHE STRING "TargetInfo to use when setting up test environment.") set(LIBCXXABI_EXECUTOR "None" CACHE STRING diff --git a/libcxxabi/test/lit.site.cfg.in b/libcxxabi/test/lit.site.cfg.in --- a/libcxxabi/test/lit.site.cfg.in +++ b/libcxxabi/test/lit.site.cfg.in @@ -16,8 +16,8 @@ config.enable_32bit = @LIBCXXABI_BUILD_32_BITS@ config.target_info = "@LIBCXXABI_TARGET_INFO@" config.executor = "@LIBCXXABI_EXECUTOR@" -config.libcxxabi_shared = @LIBCXXABI_ENABLE_SHARED@ -config.enable_shared = @LIBCXX_ENABLE_SHARED@ +config.libcxxabi_shared = @LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXXABI@ +config.enable_shared = @LIBCXXABI_LINK_TESTS_WITH_SHARED_LIBCXX@ config.enable_exceptions = @LIBCXXABI_ENABLE_EXCEPTIONS@ config.host_triple = "@LLVM_HOST_TRIPLE@" config.target_triple = "@TARGET_TRIPLE@"