aboutsummaryrefslogtreecommitdiff
path: root/libc/tools/genversion-scripts.py
blob: 37fb5e92811a52476f4454ffa146ba654479dc5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/python

# This tool is used to generate the version scripts for libc and libm
# for every architecture.

import atexit
import os.path
import shutil
import tempfile


all_arches = ["arm", "arm64", "mips", "mips64", "x86", "x86_64"]
bionic_libc_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libc")
bionic_libm_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libm")
bionic_libdl_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libdl")
libc_script = os.path.join(bionic_libc_root, "libc.map.txt")
libm_script = os.path.join(bionic_libm_root, "libm.map.txt")
libdl_script = os.path.join(bionic_libdl_root, "libdl.map.txt")

# TODO (dimity): generate architecture-specific version scripts as part of build

# temp directory where we store all intermediate files
bionic_temp = tempfile.mkdtemp(prefix="bionic_genversionscripts")
# Make sure the directory is deleted when the script exits.
atexit.register(shutil.rmtree, bionic_temp)

bionic_libc_root = os.path.join(os.environ["ANDROID_BUILD_TOP"], "bionic/libc")

warning = "Generated by genversionscripts.py. Do not edit."


class VersionScriptGenerator(object):

  def run(self):
    for script in [libc_script, libm_script, libdl_script]:
      basename = os.path.basename(script)
      dirname = os.path.dirname(script)
      for arch in all_arches:
        name = basename.split(".")[0] + "." + arch + ".map"
        tmp_path = os.path.join(bionic_temp, name)
        dest_path = os.path.join(dirname, name)
        with open(tmp_path, "w") as fout:
          with open(script, "r") as fin:
            fout.write("# %s\n" % warning)
            for line in fin:
              index = line.find("#")
              if index != -1:
                arches = line[index+1:].split()
                if arch not in arches:
                  continue
              fout.write(line)
        shutil.copyfile(tmp_path, dest_path)


generator = VersionScriptGenerator()
generator.run()