brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 708e2ed Raw
48 lines · python
1#!/usr/bin/env python32 3"""Converts a .exports file to a format consumable by linkers.4 5An .exports file is a file with one exported symbol per line.6This script converts a .exports file into a format that linkers7can understand:8- It prepends a `_` to each line for use with -exported_symbols_list for Darwin9- It writes a .def file for use with /DEF: for Windows10- It writes a linker script for use with --version-script elsewhere11"""12 13import argparse14import sys15 16 17def main():18    parser = argparse.ArgumentParser(19        description=__doc__,20        formatter_class=argparse.RawDescriptionHelpFormatter)21    parser.add_argument("--format", required=True, choices=("linux", "mac", "win"))22    parser.add_argument("source")23    parser.add_argument("output")24    args = parser.parse_args()25 26    symbols = open(args.source).readlines()27 28    if args.format == "linux":29        output_lines = (30            [31                "LLVM_0 {\n",32                "  global:\n",33            ]34            + ["    %s;\n" % s.rstrip() for s in symbols]35            + ["  local:\n", "    *;\n", "};\n"]36        )37    elif args.format == "mac":38        output_lines = ["_" + s for s in symbols]39    else:40        assert args.format == "win"41        output_lines = ["EXPORTS\n"] + ["  " + s for s in symbols]42 43    open(args.output, "w").writelines(output_lines)44 45 46if __name__ == "__main__":47    sys.exit(main())48