summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-12-29 12:22:04 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-12-29 12:22:04 +0000
commit24a6b05680c2f428272350ae63918f119069636c (patch)
tree0a9ab5bd9648feb4365fe2bd0068ba763b16bf19
parent64be05a87321216adf9cf34ac1dad8670af54870 (diff)
downloadbcm5719-llvm-24a6b05680c2f428272350ae63918f119069636c.tar.gz
bcm5719-llvm-24a6b05680c2f428272350ae63918f119069636c.zip
[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
-rw-r--r--libcxxabi/CMakeLists.txt13
-rw-r--r--libcxxabi/src/CMakeLists.txt4
-rw-r--r--libcxxabi/test/CMakeLists.txt3
-rw-r--r--libcxxabi/test/lit.cfg16
-rw-r--r--libcxxabi/test/lit.site.cfg.in18
5 files changed, 30 insertions, 24 deletions
diff --git a/libcxxabi/CMakeLists.txt b/libcxxabi/CMakeLists.txt
index c3262652704..667c5197df6 100644
--- a/libcxxabi/CMakeLists.txt
+++ b/libcxxabi/CMakeLists.txt
@@ -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
#===============================================================================
diff --git a/libcxxabi/src/CMakeLists.txt b/libcxxabi/src/CMakeLists.txt
index a623a492d01..5c9e38b0c78 100644
--- a/libcxxabi/src/CMakeLists.txt
+++ b/libcxxabi/src/CMakeLists.txt
@@ -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}
)
diff --git a/libcxxabi/test/CMakeLists.txt b/libcxxabi/test/CMakeLists.txt
index 57468dcc849..7e833e14664 100644
--- a/libcxxabi/test/CMakeLists.txt
+++ b/libcxxabi/test/CMakeLists.txt
@@ -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)
diff --git a/libcxxabi/test/lit.cfg b/libcxxabi/test/lit.cfg
index 1b67817e3e1..9b70e292765 100644
--- a/libcxxabi/test/lit.cfg
+++ b/libcxxabi/test/lit.cfg
@@ -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")
diff --git a/libcxxabi/test/lit.site.cfg.in b/libcxxabi/test/lit.site.cfg.in
index 9753e1d9123..56ebd27feae 100644
--- a/libcxxabi/test/lit.site.cfg.in
+++ b/libcxxabi/test/lit.site.cfg.in
@@ -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")
OpenPOWER on IntegriCloud