forked from OSchip/llvm-project
[cmake/multilib] Teach libc++abi's CMake build to support multilib
libdir suffixes like 'lib64' or 'lib32'. This support is currently very rhudimentary. We define a variable LIBCXXABI_LIBDIR_SUFFIX. In a standalone build of libc++abi this can be directly set as a cached variable to control the multilib suffix used. When building libc++abi within a larger LLVM build, it is hard wired to whatever LLVM libdir suffix has been selected. If this doesn't work for someone, just let me know. I'm happy to change it. Unfortunately, libc++abi's lit setup made this somewhat problematic to change. It was setting variables up in a way that caused the resulting build to not work with lit at all. To fix that, I've moved some variables around in the CMake build to more closely match where and how they are defined in the libc++ CMake build. This includes specifically defining a library root variable in the CMake build where the libdir suffix can be applied, and then using that rather than re-computing it from the object directory in the lit config. This is essentially new functionality for libc++abi so I don't expect it to have any impact for folks until they start setting these variables. However, I know libc++abi is built in a diverse set of environments so just let me know if this causes you any problems. llvm-svn: 224927
This commit is contained in:
parent
64be05a873
commit
24a6b05680
libcxxabi
|
@ -89,12 +89,16 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|||
set(LLVM_INCLUDE_TESTS OFF)
|
||||
endif()
|
||||
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
set(LIBCXXABI_LIBDIR_SUFFIX "" CACHE STRING
|
||||
"Define suffix of library directory name (32/64)")
|
||||
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LIBCXXABI_LIBDIR_SUFFIX})
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LIBCXXABI_LIBDIR_SUFFIX})
|
||||
|
||||
set(LIBCXXABI_BUILT_STANDALONE 1)
|
||||
else()
|
||||
set(LLVM_LIT "${CMAKE_SOURCE_DIR}/utils/lit/lit.py")
|
||||
set(LIBCXXABI_LIBDIR_SUFFIX ${LLVM_LIBDIR_SUFFIX})
|
||||
endif()
|
||||
|
||||
#===============================================================================
|
||||
|
@ -142,6 +146,11 @@ set(CMAKE_MODULE_PATH
|
|||
# Configure compiler.
|
||||
include(config-ix)
|
||||
|
||||
set(LIBCXXABI_COMPILER ${CMAKE_CXX_COMPILER})
|
||||
set(LIBCXXABI_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
set(LIBCXXABI_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
set(LIBCXXABI_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXXABI_LIBDIR_SUFFIX})
|
||||
|
||||
#===============================================================================
|
||||
# Setup Compiler Flags
|
||||
#===============================================================================
|
||||
|
|
|
@ -99,6 +99,6 @@ set_target_properties(cxxabi
|
|||
)
|
||||
|
||||
install(TARGETS cxxabi
|
||||
LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
|
||||
LIBRARY DESTINATION lib${LIBCXXABI_LIBDIR_SUFFIX}
|
||||
ARCHIVE DESTINATION lib${LIBCXXABI_LIBDIR_SUFFIX}
|
||||
)
|
||||
|
|
|
@ -6,9 +6,6 @@ macro(pythonize_bool var)
|
|||
endif()
|
||||
endmacro()
|
||||
|
||||
set(LIBCXXABI_COMPILER ${CMAKE_CXX_COMPILER})
|
||||
set(LIBCXXABI_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||
set(LIBCXXABI_BINARY_DIR ${CMAKE_BINARY_DIR})
|
||||
pythonize_bool(LIBCXXABI_ENABLE_SHARED)
|
||||
pythonize_bool(LIBCXXABI_ENABLE_THREADS)
|
||||
pythonize_bool(LIBCXXABI_USE_LLVM_UNWINDER)
|
||||
|
|
|
@ -163,11 +163,11 @@ if libcxxabi_src_root is None:
|
|||
if libcxxabi_src_root is None:
|
||||
libcxxabi_src_root = os.path.dirname(config.test_source_root)
|
||||
|
||||
libcxxabi_obj_root = lit_config.params.get('libcxxabi_obj_root', None)
|
||||
if libcxxabi_obj_root is None:
|
||||
libcxxabi_obj_root = getattr(config, 'libcxxabi_obj_root', None)
|
||||
if libcxxabi_obj_root is None:
|
||||
libcxxabi_obj_root = libcxxabi_src_root
|
||||
libcxxabi_library_root = lit_config.params.get('libcxxabi_library_root', None)
|
||||
if libcxxabi_library_root is None:
|
||||
libcxxabi_library_root = getattr(config, 'libcxxabi_library_root', None)
|
||||
if libcxxabi_library_root is None:
|
||||
lit_config.fatal("libcxxabi_library_root must be defined")
|
||||
|
||||
libcxx_includes = lit_config.params.get('libcxx_includes', None)
|
||||
if libcxx_includes is None:
|
||||
|
@ -195,7 +195,7 @@ if llvm_unwinder is None:
|
|||
# Compiler parameters
|
||||
include_paths = ['-I' + libcxxabi_src_root + '/include',
|
||||
'-I' + libcxx_includes]
|
||||
library_paths = ['-L' + libcxxabi_obj_root + '/lib']
|
||||
library_paths = ['-L' + libcxxabi_library_root]
|
||||
compile_flags = ['-std=c++11']
|
||||
link_flags = []
|
||||
exec_env = {}
|
||||
|
@ -277,9 +277,9 @@ if san:
|
|||
# Configure extra linker parameters.
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
exec_env['DYLD_LIBRARY_PATH'] = os.path.join(libcxxabi_obj_root, 'lib')
|
||||
exec_env['DYLD_LIBRARY_PATH'] = os.path.join(libcxxabi_library_root)
|
||||
elif sys.platform.startswith('linux'):
|
||||
link_flags += ['-Wl,-R', libcxxabi_obj_root + '/lib']
|
||||
link_flags += ['-Wl,-R', libcxxabi_library_root]
|
||||
else:
|
||||
lit_config.fatal("unrecognized system")
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
@AUTO_GEN_COMMENT@
|
||||
config.cxx_under_test = "@LIBCXXABI_COMPILER@"
|
||||
config.libcxxabi_src_root = "@LIBCXXABI_SOURCE_DIR@"
|
||||
config.libcxxabi_obj_root = "@LIBCXXABI_BINARY_DIR@"
|
||||
config.python_executable = "@PYTHON_EXECUTABLE@"
|
||||
config.enable_shared = @LIBCXXABI_ENABLE_SHARED@
|
||||
config.libcxx_includes = "@LIBCXXABI_LIBCXX_INCLUDES@"
|
||||
config.llvm_unwinder = @LIBCXXABI_USE_LLVM_UNWINDER@
|
||||
config.enable_threads = @LIBCXXABI_ENABLE_THREADS@
|
||||
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
|
||||
config.cxx_under_test = "@LIBCXXABI_COMPILER@"
|
||||
config.libcxxabi_src_root = "@LIBCXXABI_SOURCE_DIR@"
|
||||
config.libcxxabi_library_root = "@LIBCXXABI_LIBRARY_DIR@"
|
||||
config.python_executable = "@PYTHON_EXECUTABLE@"
|
||||
config.enable_shared = @LIBCXXABI_ENABLE_SHARED@
|
||||
config.libcxx_includes = "@LIBCXXABI_LIBCXX_INCLUDES@"
|
||||
config.llvm_unwinder = @LIBCXXABI_USE_LLVM_UNWINDER@
|
||||
config.enable_threads = @LIBCXXABI_ENABLE_THREADS@
|
||||
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
|
||||
|
||||
# Let the main config do the real work.
|
||||
lit_config.load_config(config, "@LIBCXXABI_SOURCE_DIR@/test/lit.cfg")
|
||||
|
|
Loading…
Reference in New Issue