blob: 73faf2a8b8efd5216bb271e96b5b252b031dced2 [file] [log] [blame]
Dmitriy Ivanov284b4682015-10-28 15:14:13 -07001#!/usr/bin/python
2
3# This tool is used to generate the version scripts for libc and libm
4# for every architecture.
5
6import atexit
7import os.path
8import shutil
9import tempfile
10
11
12all_arches = ["arm", "arm64", "mips", "mips64", "x86", "x86_64"]
13bionic_libc_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libc")
14bionic_libm_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libm")
15libc_script = os.path.join(bionic_libc_root, "libc.map.txt")
16libm_script = os.path.join(bionic_libm_root, "libm.map.txt")
17
18# TODO (dimity): generate architecture-specific version scripts as part of build
19
20# temp directory where we store all intermediate files
21bionic_temp = tempfile.mkdtemp(prefix="bionic_genversionscripts")
22# Make sure the directory is deleted when the script exits.
23atexit.register(shutil.rmtree, bionic_temp)
24
25bionic_libc_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libc")
26
27warning = "Generated by genversionscripts.py. Do not edit."
28
29
30class VersionScriptGenerator(object):
31
32 def run(self):
33 for script in [libc_script, libm_script]:
34 basename = os.path.basename(script)
35 dirname = os.path.dirname(script)
36 for arch in all_arches:
37 name = basename.split(".")[0] + "." + arch + ".map"
38 tmp_path = os.path.join(bionic_temp, name)
39 dest_path = os.path.join(dirname, name)
40 with open(tmp_path, "w") as fout:
41 with open(script, "r") as fin:
42 fout.write("# %s\n" % warning)
43 for line in fin:
44 index = line.find("#")
45 if index != -1:
46 arches = line[index+1:].split()
47 if arch not in arches:
48 continue
49 fout.write(line)
50 shutil.copyfile(tmp_path, dest_path)
51
52
53generator = VersionScriptGenerator()
54generator.run()
55