1#!/usr/bin/env python3 2# ===----------------------------------------------------------------------===## 3# 4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5# See https://llvm.org/LICENSE.txt for license information. 6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7# 8# ===----------------------------------------------------------------------===## 9 10""" 11Generate a linker script that links libc++ to the proper ABI library. 12An example script for c++abi would look like "INPUT(libc++.so.1 -lc++abi)". 13""" 14 15import argparse 16import os 17import sys 18 19 20def main(): 21 parser = argparse.ArgumentParser(description=__doc__) 22 parser.add_argument("--input", help="Path to libc++ library", required=True) 23 parser.add_argument("--output", help="Path to libc++ linker script", required=True) 24 parser.add_argument( 25 "libraries", nargs="+", help="List of libraries libc++ depends on" 26 ) 27 args = parser.parse_args() 28 29 # Use the relative path for the libc++ library. 30 libcxx = os.path.relpath(args.input, os.path.dirname(args.output)) 31 32 # Prepare the list of public libraries to link. 33 public_libs = ["-l%s" % l for l in args.libraries] 34 35 # Generate the linker script contents. 36 contents = "INPUT(%s)" % " ".join([libcxx] + public_libs) 37 38 # Remove the existing libc++ symlink if it exists. 39 if os.path.islink(args.output): 40 os.unlink(args.output) 41 42 # Replace it with the linker script. 43 with open(args.output, "w") as f: 44 f.write(contents + "\n") 45 46 return 0 47 48 49if __name__ == "__main__": 50 sys.exit(main()) 51