123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #!/usr/bin/env python
- #===----------------------------------------------------------------------===##
- #
- # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- # See https://llvm.org/LICENSE.txt for license information.
- # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- #
- #===----------------------------------------------------------------------===##
- """
- Generate a linker script that links libc++ to the proper ABI library.
- An example script for c++abi would look like "INPUT(libc++.so.1 -lc++abi)".
- """
- import argparse
- import os
- import sys
- def main():
- parser = argparse.ArgumentParser(description=__doc__)
- parser.add_argument("--dryrun", help="Don't write any output",
- action="store_true", default=False)
- parser.add_argument("--rename", action="store_true", default=False,
- help="Rename the output as input so we can replace it")
- parser.add_argument("--input", help="Path to libc++ library", required=True)
- parser.add_argument("--output", help="Path to libc++ linker script", required=True)
- parser.add_argument("libraries", nargs="+",
- help="List of libraries libc++ depends on")
- args = parser.parse_args()
- # Use the relative path for the libc++ library.
- libcxx = os.path.relpath(args.input, os.path.dirname(args.output))
- # Prepare the list of public libraries to link.
- public_libs = ['-l%s' % l for l in args.libraries]
- # Generate the linker script contents.
- contents = "INPUT(%s)" % ' '.join([libcxx] + public_libs)
- print("GENERATING SCRIPT: '%s' as file %s" % (contents, args.output))
- if args.dryrun:
- return 0
- # Remove the existing libc++ symlink if it exists.
- if os.path.islink(args.output):
- os.unlink(args.output)
- # Replace it with the linker script.
- with open(args.output, 'w') as f:
- f.write(contents + "\n")
- return 0
- if __name__ == '__main__':
- sys.exit(main())
|