#!/usr/bin/env python3 """Converts a .exports file to a format consumable by linkers. An .exports file is a file with one exported symbol per line. This script converts a .exports file into a format that linkers can understand: - It prepends a `_` to each line for use with -exported_symbols_list for Darwin - It writes a .def file for use with /DEF: for Windows - It writes a linker script for use with --version-script elsewhere """ import argparse import sys def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--format", required=True, choices=("linux", "mac", "win")) parser.add_argument("source") parser.add_argument("output") args = parser.parse_args() symbols = open(args.source).readlines() if args.format == "linux": output_lines = ( [ "LLVM_0 {\n", " global:\n", ] + [" %s;\n" % s.rstrip() for s in symbols] + [" local:\n", " *;\n", "};\n"] ) elif args.format == "mac": output_lines = ["_" + s for s in symbols] else: assert args.format == "win" output_lines = ["EXPORTS\n"] + [" " + s for s in symbols] open(args.output, "w").writelines(output_lines) if __name__ == "__main__": sys.exit(main())