mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-06 01:56:05 +00:00

The build should generally be quiet if there are no errors, and this script has been around long enough that we can remove the log output. If we ever need to debug something with this script, we can put back the logging then. Differential Revision: https://reviews.llvm.org/D66594 llvm-svn: 369757
59 lines
2.0 KiB
Python
Executable File
59 lines
2.0 KiB
Python
Executable File
#!/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)
|
|
|
|
if args.dryrun:
|
|
print("GENERATING SCRIPT: '%s' as file %s" % (contents, args.output))
|
|
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())
|