blob: 733e5c88203c38aebaea1246633351396d0b3f6b [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os.path
import shutil
import subprocess
import sys
"""Populate the compiler-provided portions of the fusl sysroot.
In particular, crtbegin, ocrtend.o,libgcc.a, and so on must be copied
from the host sysroot to our sysroot.
"""
def parse_clang_dirs(clang):
"""Parse the output of |clang -print-search-dirs|.
This is used to find library search paths. One line of the output
is formatted something like:
libraries: =/usr/lib/gcc/4.8:/lib:/usr/lib
This functions strips the 'libraries: =' prefix and splits on the
colon, returning the list:
[ '/usr/lib/gcc/4.8', '/lib', '/usr/lib' ]
"""
clang_search_dirs = subprocess.check_output([clang, '-print-search-dirs'])
library_line = None
library_line_prefix = 'libraries: ='
for line in clang_search_dirs.split('\n'):
if line.startswith(library_line_prefix):
prefix_length = len(library_line_prefix)
library_line = line[prefix_length:]
break
assert(library_line)
return library_line.split(':')
def try_populate(artifact, library_paths, target):
"""Returns whether we found the artifact and copied it."""
for library_path in library_paths:
source = os.path.join(library_path, artifact)
if not os.path.isfile(source):
continue
shutil.copy(source, target)
return True
return False
def main():
clang = sys.argv[1]
target = sys.argv[2]
artifacts = sys.argv[3:]
assert(len(artifacts))
library_paths = parse_clang_dirs(clang)
for artifact in artifacts:
if not try_populate(artifact, library_paths, target):
print('Unable to locate %s in any of the following paths: %s' %
(artifact, library_paths))
exit(1)
if __name__ == '__main__':
main()