mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-28 08:02:08 +00:00
[runtimes] Revert the libc++ __config_site change
This is a massive revert of the following commits (from most revent to oldest):2b9b7b5775
.529ac33197
28270234f1
69c2087283
b5aa67446e
5d796645d6
After checking-in the __config_site change, a lot of things started breaking due to widespread reliance on various aspects of libc++'s build, notably the fact that we can include the headers from the source tree, but also reliance on various "internal" CMake variables used by the runtimes build and compiler-rt. These were unintended consequences of the change, and after two days, we still haven't restored all the bots to being green. Instead, now that I understand what specific areas this will blow up in, I should be able to chop up the patch into smaller ones that are easier to digest. See https://reviews.llvm.org/D89041 for more details on this adventure.
This commit is contained in:
parent
1e0b6c1df0
commit
48e4b0fd3a
@ -397,11 +397,9 @@ endif ()
|
||||
# Configure System
|
||||
#===============================================================================
|
||||
|
||||
# TODO: Other projects rely on the location where we generate the libc++ headers
|
||||
# internally. We should get rid of these dependencies.
|
||||
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
|
||||
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
|
||||
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
|
||||
set(LIBCXX_HEADER_DIR ${LLVM_BINARY_DIR})
|
||||
set(LIBCXX_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
|
||||
if(LIBCXX_LIBDIR_SUBDIR)
|
||||
string(APPEND LIBCXX_LIBRARY_DIR /${LIBCXX_LIBDIR_SUBDIR})
|
||||
@ -409,11 +407,11 @@ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
|
||||
endif()
|
||||
elseif(LLVM_LIBRARY_OUTPUT_INTDIR)
|
||||
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
|
||||
set(LIBCXX_GENERATED_INCLUDE_DIR "${LLVM_BINARY_DIR}/include/c++/v1")
|
||||
set(LIBCXX_HEADER_DIR ${LLVM_BINARY_DIR})
|
||||
set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX})
|
||||
else()
|
||||
set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
|
||||
set(LIBCXX_GENERATED_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include/c++/v1")
|
||||
set(LIBCXX_HEADER_DIR ${CMAKE_BINARY_DIR})
|
||||
set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX})
|
||||
endif()
|
||||
|
||||
|
@ -8,7 +8,7 @@ include(CheckCXXCompilerFlag)
|
||||
set(BENCHMARK_LIBCXX_COMPILE_FLAGS
|
||||
-Wno-unused-command-line-argument
|
||||
-nostdinc++
|
||||
-isystem "${LIBCXX_GENERATED_INCLUDE_DIR}"
|
||||
-isystem ${LIBCXX_SOURCE_DIR}/include
|
||||
-L${LIBCXX_LIBRARY_DIR}
|
||||
-Wl,-rpath,${LIBCXX_LIBRARY_DIR}
|
||||
${SANITIZER_FLAGS}
|
||||
@ -18,6 +18,7 @@ if (DEFINED LIBCXX_CXX_ABI_LIBRARY_PATH)
|
||||
-L${LIBCXX_CXX_ABI_LIBRARY_PATH}
|
||||
-Wl,-rpath,${LIBCXX_CXX_ABI_LIBRARY_PATH})
|
||||
endif()
|
||||
list(APPEND BENCHMARK_LIBCXX_COMPILE_FLAGS -include "${LIBCXX_BINARY_DIR}/__config_site")
|
||||
split_list(BENCHMARK_LIBCXX_COMPILE_FLAGS)
|
||||
|
||||
ExternalProject_Add(google-benchmark-libcxx
|
||||
|
@ -52,10 +52,8 @@ macro(setup_abi_lib abidefines abishared abistatic abifiles abidirs)
|
||||
COMMENT "Copying C++ ABI header ${fpath}...")
|
||||
list(APPEND abilib_headers "${dst}")
|
||||
|
||||
if (LIBCXX_GENERATED_INCLUDE_DIR) # always true
|
||||
# TODO: libc++ shouldn't be responsible for copying the libc++abi
|
||||
# headers into the right location.
|
||||
set(dst "${LIBCXX_GENERATED_INCLUDE_DIR}/include/c++/v1/${dstdir}/${fpath}")
|
||||
if (LIBCXX_HEADER_DIR)
|
||||
set(dst "${LIBCXX_HEADER_DIR}/include/c++/v1/${dstdir}/${fpath}")
|
||||
add_custom_command(OUTPUT ${dst}
|
||||
DEPENDS ${src}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
|
||||
|
@ -26,8 +26,8 @@ Usage
|
||||
|
||||
After building libc++, you can run parts of the libc++ test suite by simply
|
||||
running ``llvm-lit`` on a specified test or directory. If you're unsure
|
||||
whether the required targets have been built, you can use the `check-cxx-deps`
|
||||
target to build them. For example:
|
||||
whether the required libraries have been built, you can use the
|
||||
`check-cxx-deps` target. For example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@ -37,12 +37,6 @@ target to build them. For example:
|
||||
$ <build>/bin/llvm-lit -sv libcxx/test/std/depr/depr.c.headers/stdlib_h.pass.cpp # Run a single test
|
||||
$ <build>/bin/llvm-lit -sv libcxx/test/std/atomics libcxx/test/std/threads # Test std::thread and std::atomic
|
||||
|
||||
In the default configuration, the tests are built against headers that form a
|
||||
fake installation root of libc++. This installation root has to be updated when
|
||||
changes are made to the headers, so you should re-run the `check-cxx-deps` target
|
||||
before running the tests manually with `lit` when you make any sort of change,
|
||||
including to the headers.
|
||||
|
||||
Sometimes you'll want to change the way LIT is running the tests. Custom options
|
||||
can be specified using the `--param=<name>=<val>` flag. The most common option
|
||||
you'll want to change is the standard dialect (ie -std=c++XX). By default the
|
||||
|
@ -2,7 +2,6 @@ set(files
|
||||
__bit_reference
|
||||
__bsd_locale_defaults.h
|
||||
__bsd_locale_fallbacks.h
|
||||
__config
|
||||
__errc
|
||||
__debug
|
||||
__functional_03
|
||||
@ -185,28 +184,62 @@ if(LIBCXX_INSTALL_SUPPORT_HEADERS)
|
||||
)
|
||||
endif()
|
||||
|
||||
if (LIBCXX_GENERATED_INCLUDE_DIR) # Always true
|
||||
configure_file("__config_site.in" "${LIBCXX_GENERATED_INCLUDE_DIR}/__config_site" @ONLY)
|
||||
configure_file("__config_site.in"
|
||||
"${LIBCXX_BINARY_DIR}/__config_site"
|
||||
@ONLY)
|
||||
|
||||
set(_all_includes "${LIBCXX_GENERATED_INCLUDE_DIR}/__config_site")
|
||||
# Generate a custom __config header. The new header is created
|
||||
# by prepending __config_site to the current __config header.
|
||||
add_custom_command(OUTPUT ${LIBCXX_BINARY_DIR}/__generated_config
|
||||
COMMAND ${Python3_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/cat_files.py
|
||||
${LIBCXX_BINARY_DIR}/__config_site
|
||||
${LIBCXX_SOURCE_DIR}/include/__config
|
||||
-o ${LIBCXX_BINARY_DIR}/__generated_config
|
||||
DEPENDS ${LIBCXX_SOURCE_DIR}/include/__config
|
||||
${LIBCXX_BINARY_DIR}/__config_site
|
||||
)
|
||||
# Add a target that executes the generation commands.
|
||||
add_custom_target(cxx-generated-config ALL
|
||||
DEPENDS ${LIBCXX_BINARY_DIR}/__generated_config)
|
||||
|
||||
if(LIBCXX_HEADER_DIR)
|
||||
set(output_dir ${LIBCXX_HEADER_DIR}/include/c++/v1)
|
||||
|
||||
set(out_files)
|
||||
foreach(f ${files})
|
||||
set(src "${CMAKE_CURRENT_SOURCE_DIR}/${f}")
|
||||
set(dst "${LIBCXX_GENERATED_INCLUDE_DIR}/${f}")
|
||||
set(src ${CMAKE_CURRENT_SOURCE_DIR}/${f})
|
||||
set(dst ${output_dir}/${f})
|
||||
add_custom_command(OUTPUT ${dst}
|
||||
DEPENDS ${src}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
|
||||
COMMENT "Copying CXX header ${f}")
|
||||
list(APPEND _all_includes "${dst}")
|
||||
list(APPEND out_files ${dst})
|
||||
endforeach()
|
||||
add_custom_target(generate-cxx-headers DEPENDS ${_all_includes})
|
||||
|
||||
# Copy the generated header as __config into build directory.
|
||||
set(src ${LIBCXX_BINARY_DIR}/__generated_config)
|
||||
set(dst ${output_dir}/__config)
|
||||
add_custom_command(OUTPUT ${dst}
|
||||
DEPENDS ${src} cxx-generated-config
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} ${dst}
|
||||
COMMENT "Copying CXX __config")
|
||||
list(APPEND out_files ${dst})
|
||||
add_custom_target(generate-cxx-headers DEPENDS ${out_files})
|
||||
|
||||
add_library(cxx-headers INTERFACE)
|
||||
add_dependencies(cxx-headers generate-cxx-headers ${LIBCXX_CXX_ABI_HEADER_TARGET})
|
||||
# TODO: Use target_include_directories once we figure out why that breaks the runtimes build
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
|
||||
target_compile_options(cxx-headers INTERFACE /I "${LIBCXX_GENERATED_INCLUDE_DIR}")
|
||||
target_compile_options(cxx-headers INTERFACE /I "${output_dir}")
|
||||
else()
|
||||
target_compile_options(cxx-headers INTERFACE -I "${LIBCXX_GENERATED_INCLUDE_DIR}")
|
||||
target_compile_options(cxx-headers INTERFACE -I "${output_dir}")
|
||||
endif()
|
||||
|
||||
# Make sure the generated __config_site header is included when we build the library.
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
|
||||
target_compile_options(cxx-headers INTERFACE /FI "${LIBCXX_BINARY_DIR}/__config_site")
|
||||
else()
|
||||
target_compile_options(cxx-headers INTERFACE -include "${LIBCXX_BINARY_DIR}/__config_site")
|
||||
endif()
|
||||
else()
|
||||
add_library(cxx-headers INTERFACE)
|
||||
@ -222,15 +255,16 @@ if (LIBCXX_INSTALL_HEADERS)
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# Install the generated __config_site.
|
||||
install(FILES ${LIBCXX_GENERATED_INCLUDE_DIR}/__config_site
|
||||
# Install the generated header as __config.
|
||||
install(FILES ${LIBCXX_BINARY_DIR}/__generated_config
|
||||
DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}include/c++/v1
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
||||
RENAME __config
|
||||
COMPONENT cxx-headers)
|
||||
|
||||
if (NOT CMAKE_CONFIGURATION_TYPES)
|
||||
add_custom_target(install-cxx-headers
|
||||
DEPENDS cxx-headers
|
||||
DEPENDS cxx-headers cxx-generated-config
|
||||
COMMAND "${CMAKE_COMMAND}"
|
||||
-DCMAKE_INSTALL_COMPONENT=cxx-headers
|
||||
-P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
|
||||
|
@ -10,8 +10,6 @@
|
||||
#ifndef _LIBCPP_CONFIG
|
||||
#define _LIBCPP_CONFIG
|
||||
|
||||
#include <__config_site>
|
||||
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||
# define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
|
||||
|
@ -3,7 +3,6 @@
|
||||
import os
|
||||
import site
|
||||
|
||||
config.cxx_headers = "@LIBCXX_GENERATED_INCLUDE_DIR@"
|
||||
config.cxx_under_test = "@CMAKE_CXX_COMPILER@"
|
||||
config.project_obj_root = "@CMAKE_BINARY_DIR@"
|
||||
config.libcxx_src_root = "@LIBCXX_SOURCE_DIR@"
|
||||
|
@ -331,6 +331,7 @@ class Configuration(object):
|
||||
|
||||
def configure_compile_flags_header_includes(self):
|
||||
support_path = os.path.join(self.libcxx_src_root, 'test', 'support')
|
||||
self.configure_config_site_header()
|
||||
if self.cxx_stdlib_under_test != 'libstdc++' and \
|
||||
not self.target_info.is_windows():
|
||||
self.cxx.compile_flags += [
|
||||
@ -347,12 +348,16 @@ class Configuration(object):
|
||||
'set_windows_crt_report_mode.h')
|
||||
]
|
||||
cxx_headers = self.get_lit_conf('cxx_headers')
|
||||
if cxx_headers is None and self.cxx_stdlib_under_test != 'libc++':
|
||||
if cxx_headers == '' or (cxx_headers is None
|
||||
and self.cxx_stdlib_under_test != 'libc++'):
|
||||
self.lit_config.note('using the system cxx headers')
|
||||
return
|
||||
self.cxx.compile_flags += ['-nostdinc++']
|
||||
if cxx_headers is None:
|
||||
cxx_headers = os.path.join(self.libcxx_src_root, 'include')
|
||||
if not os.path.isdir(cxx_headers):
|
||||
self.lit_config.fatal("cxx_headers='{}' is not a directory.".format(cxx_headers))
|
||||
self.lit_config.fatal("cxx_headers='%s' is not a directory."
|
||||
% cxx_headers)
|
||||
self.cxx.compile_flags += ['-I' + cxx_headers]
|
||||
if self.libcxx_obj_root is not None:
|
||||
cxxabi_headers = os.path.join(self.libcxx_obj_root, 'include',
|
||||
@ -360,6 +365,16 @@ class Configuration(object):
|
||||
if os.path.isdir(cxxabi_headers):
|
||||
self.cxx.compile_flags += ['-I' + cxxabi_headers]
|
||||
|
||||
def configure_config_site_header(self):
|
||||
# Check for a possible __config_site in the build directory. We
|
||||
# use this if it exists.
|
||||
if self.libcxx_obj_root is None:
|
||||
return
|
||||
config_site_header = os.path.join(self.libcxx_obj_root, '__config_site')
|
||||
if not os.path.isfile(config_site_header):
|
||||
return
|
||||
self.cxx.compile_flags += ['-include', config_site_header]
|
||||
|
||||
def configure_link_flags(self):
|
||||
# Configure library path
|
||||
self.configure_link_flags_cxx_library_path()
|
||||
|
@ -138,23 +138,9 @@ if (NOT LIBCXXABI_ENABLE_SHARED AND NOT LIBCXXABI_ENABLE_STATIC)
|
||||
message(FATAL_ERROR "libc++abi must be built as either a shared or static library.")
|
||||
endif()
|
||||
|
||||
# TODO: This is a hack for the fact that Standalone builds can't use targets
|
||||
# from the other runtimes (so the cxx-headers target doesn't exist).
|
||||
set(LIBCXXABI_LIBCXX_INCLUDES "" CACHE PATH
|
||||
"Specify path to the installed libc++ includes. This is only relevant for Standalone builds, where the location of the headers can't be determined automatically.")
|
||||
if (LIBCXXABI_STANDALONE_BUILD)
|
||||
if (NOT IS_DIRECTORY ${LIBCXXABI_LIBCXX_INCLUDES})
|
||||
message(FATAL_ERROR
|
||||
"LIBCXXABI_LIBCXX_INCLUDES=${LIBCXXABI_LIBCXX_INCLUDES} is not a valid directory. "
|
||||
"Please provide the path to where the libc++ headers have been installed.")
|
||||
endif()
|
||||
add_library(cxx-headers INTERFACE)
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC")
|
||||
target_compile_options(cxx-headers INTERFACE /I "${LIBCXXABI_LIBCXX_INCLUDES}")
|
||||
else()
|
||||
target_compile_options(cxx-headers INTERFACE -I "${LIBCXXABI_LIBCXX_INCLUDES}")
|
||||
endif()
|
||||
endif()
|
||||
set(LIBCXXABI_LIBCXX_INCLUDES "${LIBCXXABI_LIBCXX_PATH}/include" CACHE PATH
|
||||
"Specify path to libc++ includes.")
|
||||
message(STATUS "Libc++abi will be using libc++ includes from ${LIBCXXABI_LIBCXX_INCLUDES}")
|
||||
|
||||
option(LIBCXXABI_HERMETIC_STATIC_LIBRARY
|
||||
"Do not export any symbols from the static library." OFF)
|
||||
|
@ -55,6 +55,8 @@ if (MSVC_IDE OR XCODE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include_directories("${LIBCXXABI_LIBCXX_INCLUDES}")
|
||||
|
||||
if (LIBCXXABI_HAS_CXA_THREAD_ATEXIT_IMPL)
|
||||
add_definitions(-DHAVE___CXA_THREAD_ATEXIT_IMPL)
|
||||
endif()
|
||||
@ -166,7 +168,7 @@ if (LIBCXXABI_ENABLE_SHARED)
|
||||
if(COMMAND llvm_setup_rpath)
|
||||
llvm_setup_rpath(cxxabi_shared)
|
||||
endif()
|
||||
target_link_libraries(cxxabi_shared PRIVATE cxx-headers ${LIBCXXABI_SHARED_LIBRARIES} ${LIBCXXABI_LIBRARIES})
|
||||
target_link_libraries(cxxabi_shared PRIVATE ${LIBCXXABI_SHARED_LIBRARIES} ${LIBCXXABI_LIBRARIES})
|
||||
if (TARGET pstl::ParallelSTL)
|
||||
target_link_libraries(cxxabi_shared PUBLIC pstl::ParallelSTL)
|
||||
endif()
|
||||
@ -231,7 +233,7 @@ endif()
|
||||
# Build the static library.
|
||||
if (LIBCXXABI_ENABLE_STATIC)
|
||||
add_library(cxxabi_static STATIC ${LIBCXXABI_SOURCES} ${LIBCXXABI_HEADERS})
|
||||
target_link_libraries(cxxabi_static PRIVATE cxx-headers ${LIBCXXABI_STATIC_LIBRARIES} ${LIBCXXABI_LIBRARIES})
|
||||
target_link_libraries(cxxabi_static PRIVATE ${LIBCXXABI_STATIC_LIBRARIES} ${LIBCXXABI_LIBRARIES})
|
||||
if (TARGET pstl::ParallelSTL)
|
||||
target_link_libraries(cxxabi_static PUBLIC pstl::ParallelSTL)
|
||||
endif()
|
||||
|
@ -56,8 +56,10 @@ class Configuration(LibcxxConfiguration):
|
||||
super(Configuration, self).configure_compile_flags()
|
||||
|
||||
def configure_compile_flags_header_includes(self):
|
||||
cxx_headers = self.get_lit_conf('cxx_headers', None) or \
|
||||
os.path.join(self.project_obj_root, 'include', 'c++', 'v1')
|
||||
self.configure_config_site_header()
|
||||
cxx_headers = self.get_lit_conf(
|
||||
'cxx_headers',
|
||||
os.path.join(self.libcxx_src_root, '/include'))
|
||||
if cxx_headers == '':
|
||||
self.lit_config.note('using the systems c++ headers')
|
||||
else:
|
||||
|
@ -49,6 +49,8 @@ class Configuration(LibcxxConfiguration):
|
||||
super(Configuration, self).configure_compile_flags()
|
||||
|
||||
def configure_compile_flags_header_includes(self):
|
||||
self.configure_config_site_header()
|
||||
|
||||
libunwind_headers = self.get_lit_conf(
|
||||
'libunwind_headers',
|
||||
os.path.join(self.libunwind_src_root, 'include'))
|
||||
|
@ -133,13 +133,11 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
string(REPLACE "-" "_" canon_name ${projName})
|
||||
string(TOUPPER ${canon_name} canon_name)
|
||||
|
||||
# compiler-rt needs to treat this as standalone builds. D57992 tried
|
||||
# to get rid of it for compiler-rt, but it treats *_STANDALONE_BUILD=OFF
|
||||
# as if llvm & clang are configured in the same CMake, and setup dependencies
|
||||
# The subdirectories need to treat this as standalone builds. D57992 tried
|
||||
# to get rid of this, but the runtimes treat *_STANDALONE_BUILD=OFF as if
|
||||
# llvm & clang are configured in the same CMake, and setup dependencies
|
||||
# against their targets.
|
||||
if ("${canon_name}" STREQUAL "COMPILER_RT")
|
||||
set(${canon_name}_STANDALONE_BUILD ON)
|
||||
endif()
|
||||
set(${canon_name}_STANDALONE_BUILD ON)
|
||||
|
||||
if(LLVM_RUNTIMES_LIBDIR_SUBDIR)
|
||||
set(${canon_name}_LIBDIR_SUBDIR "${LLVM_RUNTIMES_LIBDIR_SUBDIR}" CACHE STRING "" FORCE)
|
||||
|
Loading…
Reference in New Issue
Block a user