summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/gen-symbol-redefs.py
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2013-09-27 15:14:56 -0700
committerEric Anholt <[email protected]>2013-10-24 14:13:09 -0700
commitba10d79cca8d93c9f366f3734bebd79c7a5257c8 (patch)
treed9f8320af65065fc03ecef01cc30cd4b3479027d /src/mesa/drivers/dri/gen-symbol-redefs.py
parentead86e378fd4a8b19f7a3f185c751a41b2530b2f (diff)
dri: Add a tool for generating #defines to namespace driver global symbols.
Acked-by: Matt Turner <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/gen-symbol-redefs.py')
-rwxr-xr-xsrc/mesa/drivers/dri/gen-symbol-redefs.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/gen-symbol-redefs.py b/src/mesa/drivers/dri/gen-symbol-redefs.py
new file mode 100755
index 00000000000..ebe4aaa650b
--- /dev/null
+++ b/src/mesa/drivers/dri/gen-symbol-redefs.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# Copyright © 2013 Intel Corporation
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import sys
+import argparse
+import re
+import subprocess
+
+# Example usages:
+# ./gen-symbol-redefs.py i915/.libs/libi915_dri.a old_ i915 i830
+# ./gen-symbol-redefs.py r200/.libs/libr200_dri.a r200_ r200
+
+argparser = argparse.ArgumentParser(description="Generates #defines to hide driver global symbols outside of a driver's namespace.")
+argparser.add_argument("file",
+ metavar = 'file',
+ help='libdrivername.a file to read')
+argparser.add_argument("newprefix",
+ metavar = 'newprefix',
+ help='New prefix to give non-driver global symbols')
+argparser.add_argument('prefixes',
+ metavar='prefix',
+ nargs='*',
+ help='driver-specific prefixes')
+args = argparser.parse_args()
+
+stdout = subprocess.check_output(['nm', args.file])
+
+for line in stdout.splitlines():
+ m = re.match("[0-9a-z]+ [BT] (.*)", line)
+ if not m:
+ continue
+
+ symbol = m.group(1)
+
+ has_good_prefix = re.match(args.newprefix, symbol) != None
+ for prefix in args.prefixes:
+ if re.match(prefix, symbol):
+ has_good_prefix = True
+ break
+ if has_good_prefix:
+ continue
+
+ # This is the single public entrypoint.
+ if re.match("__driDriverGetExtensions", symbol):
+ continue
+
+ print '#define {0:35} {1}{0}'.format(symbol, args.newprefix)