[libcxxabi] r224927 - [cmake/multilib] Teach libc++abi's CMake build to support multilib

Chandler Carruth chandlerc at gmail.com
Mon Dec 29 04:22:04 PST 2014


Author: chandlerc
Date: Mon Dec 29 06:22:04 2014
New Revision: 224927

URL: http://llvm.org/viewvc/llvm-project?rev=224927&view=rev
Log:
[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.

Modified:
    libcxxabi/trunk/CMakeLists.txt
    libcxxabi/trunk/src/CMakeLists.txt
    libcxxabi/trunk/test/CMakeLists.txt
    libcxxabi/trunk/test/lit.cfg
    libcxxabi/trunk/test/lit.site.cfg.in

Modified: libcxxabi/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/CMakeLists.txt?rev=224927&r1=224926&r2=224927&view=diff
==============================================================================
--- libcxxabi/trunk/CMakeLists.txt (original)
+++ libcxxabi/trunk/CMakeLists.txt Mon Dec 29 06:22:04 2014
@@ -89,12 +89,16 @@ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURR
     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
 #===============================================================================

Modified: libcxxabi/trunk/src/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/CMakeLists.txt?rev=224927&r1=224926&r2=224927&view=diff
==============================================================================
--- libcxxabi/trunk/src/CMakeLists.txt (original)
+++ libcxxabi/trunk/src/CMakeLists.txt Mon Dec 29 06:22:04 2014
@@ -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}
   )

Modified: libcxxabi/trunk/test/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/CMakeLists.txt?rev=224927&r1=224926&r2=224927&view=diff
==============================================================================
--- libcxxabi/trunk/test/CMakeLists.txt (original)
+++ libcxxabi/trunk/test/CMakeLists.txt Mon Dec 29 06:22:04 2014
@@ -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)

Modified: libcxxabi/trunk/test/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/lit.cfg?rev=224927&r1=224926&r2=224927&view=diff
==============================================================================
--- libcxxabi/trunk/test/lit.cfg (original)
+++ libcxxabi/trunk/test/lit.cfg Mon Dec 29 06:22:04 2014
@@ -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")
 

Modified: libcxxabi/trunk/test/lit.site.cfg.in
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/lit.site.cfg.in?rev=224927&r1=224926&r2=224927&view=diff
==============================================================================
--- libcxxabi/trunk/test/lit.site.cfg.in (original)
+++ libcxxabi/trunk/test/lit.site.cfg.in Mon Dec 29 06:22:04 2014
@@ -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")





More information about the cfe-commits mailing list