45 lines
1.3 KiB
Python
Executable file
45 lines
1.3 KiB
Python
Executable file
#!/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())
|