[PATCH] D62770: [libcxx] Use libtool when merging archives on Apple platforms

Petr Hosek via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 1 18:14:47 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL362311: [libcxx] Use libtool when merging archives on Apple platforms (authored by phosek, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D62770?vs=202537&id=202575#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62770/new/

https://reviews.llvm.org/D62770

Files:
  libcxx/trunk/src/CMakeLists.txt
  libcxx/trunk/utils/merge_archives.py
  libcxxabi/trunk/src/CMakeLists.txt


Index: libcxxabi/trunk/src/CMakeLists.txt
===================================================================
--- libcxxabi/trunk/src/CMakeLists.txt
+++ libcxxabi/trunk/src/CMakeLists.txt
@@ -226,6 +226,10 @@
     list(APPEND LIBCXXABI_INSTALL_TARGETS "cxxabi_static")
   endif()
 
+  if (APPLE)
+    set(MERGE_ARCHIVES_LIBTOOL "--use-libtool" "--libtool" "${CMAKE_LIBTOOL}")
+  endif()
+
   # Merge the the libc++abi.a and libunwind.a into one.
   if(LIBCXXABI_USE_LLVM_UNWINDER AND LIBCXXABI_STATICALLY_LINK_UNWINDER_IN_STATIC_LIBRARY)
     add_custom_command(TARGET cxxabi_static POST_BUILD
@@ -233,6 +237,7 @@
       ARGS
         -o "$<TARGET_LINKER_FILE:cxxabi_static>"
         --ar "${CMAKE_AR}"
+        ${MERGE_ARCHIVES_LIBTOOL}
         "$<TARGET_LINKER_FILE:cxxabi_static>"
         "$<TARGET_LINKER_FILE:unwind_static>"
       WORKING_DIRECTORY ${LIBCXXABI_BUILD_DIR}
Index: libcxx/trunk/utils/merge_archives.py
===================================================================
--- libcxx/trunk/utils/merge_archives.py
+++ libcxx/trunk/utils/merge_archives.py
@@ -98,6 +98,12 @@
         help='The ar executable to use, finds \'ar\' in the path if not given',
         type=str, action='store')
     parser.add_argument(
+        '--use-libtool', dest='use_libtool', action='store_true', default=False)
+    parser.add_argument(
+        '--libtool', dest='libtool_exe', required=False,
+        help='The libtool executable to use, finds \'libtool\' in the path if not given',
+        type=str, action='store')
+    parser.add_argument(
         'archives', metavar='archives',  nargs='+',
         help='The archives to merge')
 
@@ -109,6 +115,13 @@
     if not ar_exe:
         print_and_exit("failed to find 'ar' executable")
 
+    if args.use_libtool:
+        libtool_exe = args.libtool_exe
+        if not libtool_exe:
+            libtool_exe = distutils.spawn.find_executable('libtool')
+        if not libtool_exe:
+            print_and_exit("failed to find 'libtool' executable")
+
     if len(args.archives) < 2:
         print_and_exit('fewer than 2 inputs provided')
     archives = [find_and_diagnose_missing(ar, args.search_paths)
@@ -127,8 +140,13 @@
         out = execute_command_verbose([ar_exe, 't', arc])
         files.extend(out.splitlines())
 
-    execute_command_verbose([ar_exe, 'rcs', args.output] + files,
-                            cwd=temp_directory_root, verbose=args.verbose)
+    if args.use_libtool:
+        files = [f for f in files if not f.startswith('__.SYMDEF')]
+        execute_command_verbose([libtool_exe, '-static', '-o', args.output] + files,
+                                cwd=temp_directory_root, verbose=args.verbose)
+    else:
+        execute_command_verbose([ar_exe, 'rcs', args.output] + files,
+                                cwd=temp_directory_root, verbose=args.verbose)
 
 
 if __name__ == '__main__':
Index: libcxx/trunk/src/CMakeLists.txt
===================================================================
--- libcxx/trunk/src/CMakeLists.txt
+++ libcxx/trunk/src/CMakeLists.txt
@@ -375,12 +375,16 @@
       set(MERGE_ARCHIVES_ABI_TARGET
         "${CMAKE_STATIC_LIBRARY_PREFIX}${LIBCXX_CXX_STATIC_ABI_LIBRARY}${CMAKE_STATIC_LIBRARY_SUFFIX}")
     endif()
+    if (APPLE)
+      set(MERGE_ARCHIVES_LIBTOOL "--use-libtool" "--libtool" "${CMAKE_LIBTOOL}")
+    endif()
     add_custom_command(TARGET cxx_static POST_BUILD
     COMMAND
       ${PYTHON_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/merge_archives.py
     ARGS
       -o $<TARGET_LINKER_FILE:cxx_static>
       --ar "${CMAKE_AR}"
+      ${MERGE_ARCHIVES_LIBTOOL}
       "$<TARGET_LINKER_FILE:cxx_static>"
       "${MERGE_ARCHIVES_ABI_TARGET}"
       "${MERGE_ARCHIVES_SEARCH_PATHS}"


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62770.202575.patch
Type: text/x-patch
Size: 3724 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190602/63242f84/attachment.bin>


More information about the llvm-commits mailing list