Skip to content

Commit

Permalink
Use CMAKE_AR instead of the system default 'ar' for merging static li…
Browse files Browse the repository at this point in the history
…braries

Using the system default 'ar' might not be the right choice when
cross compiling.

Don't prepend the ar options by a dash, not all ar implementations
support that (llvm-ar doesn't).

Also pass the 's' option when creating the merged library, to create
an index.

Differential Revision: https://reviews.llvm.org/D37134

llvm-svn: 313122
  • Loading branch information
mstorsjo committed Sep 13, 2017
1 parent 6cab129 commit fb8eb6f
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
1 change: 1 addition & 0 deletions libcxx/lib/CMakeLists.txt
Expand Up @@ -270,6 +270,7 @@ if (LIBCXX_ENABLE_STATIC)
${PYTHON_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/merge_archives.py
ARGS
-o $<TARGET_LINKER_FILE:cxx_static>
--ar "${CMAKE_AR}"
"$<TARGET_LINKER_FILE:cxx_static>"
"${MERGE_ARCHIVES_ABI_TARGET}"
"${MERGE_ARCHIVES_SEARCH_PATHS}"
Expand Down
12 changes: 9 additions & 3 deletions libcxx/utils/merge_archives.py
Expand Up @@ -93,13 +93,19 @@ def main():
'-L', dest='search_paths',
help='Paths to search for the libraries along', action='append',
nargs=1)
parser.add_argument(
'--ar', dest='ar_exe', required=False,
help='The ar executable to use, finds \'ar\' in the path if not given',
type=str, action='store')
parser.add_argument(
'archives', metavar='archives', nargs='+',
help='The archives to merge')

args = parser.parse_args()

ar_exe = distutils.spawn.find_executable('ar')
ar_exe = args.ar_exe
if not ar_exe:
ar_exe = distutils.spawn.find_executable('ar')
if not ar_exe:
print_and_exit("failed to find 'ar' executable")

Expand All @@ -115,13 +121,13 @@ def main():
temp_directory_root = tempfile.mkdtemp('.libcxx.merge.archives')

for arc in archives:
execute_command_verbose([ar_exe, '-x', arc], cwd=temp_directory_root,
execute_command_verbose([ar_exe, 'x', arc], cwd=temp_directory_root,
verbose=args.verbose)

files = glob.glob(os.path.join(temp_directory_root, '*.o*'))
if not files:
print_and_exit('Failed to glob for %s' % temp_directory_root)
cmd = [ar_exe, '-qc', args.output] + files
cmd = [ar_exe, 'qcs', args.output] + files
execute_command_verbose(cmd, cwd=temp_directory_root, verbose=args.verbose)


Expand Down

0 comments on commit fb8eb6f

Please sign in to comment.