[Mesa-dev] [PATCH v3 10/10] swr: Modify gen_knobs.{cpp|h} creation script

George Kyriazis george.kyriazis at intel.com
Wed Nov 16 02:27:01 UTC 2016


Modify gen_knobs.py so that each invocation creates a single generated
file.  This is more similar to how the other generators behave.
---
 src/gallium/drivers/swr/Makefile.am                | 14 +++++-
 src/gallium/drivers/swr/SConscript                 | 17 +++++---
 .../drivers/swr/rasterizer/scripts/gen_knobs.py    | 51 ++++++++++++----------
 3 files changed, 49 insertions(+), 33 deletions(-)
 mode change 100644 => 100755 src/gallium/drivers/swr/Makefile.am

diff --git a/src/gallium/drivers/swr/Makefile.am b/src/gallium/drivers/swr/Makefile.am
old mode 100644
new mode 100755
index 305154f..5cac5f2
--- a/src/gallium/drivers/swr/Makefile.am
+++ b/src/gallium/drivers/swr/Makefile.am
@@ -71,11 +71,21 @@ swr_context_llvm.h: rasterizer/jitter/scripts/gen_llvm_types.py swr_context.h
 		--input $(srcdir)/swr_context.h \
 		--output swr_context_llvm.h
 
-rasterizer/scripts/gen_knobs.cpp rasterizer/scripts/gen_knobs.h: rasterizer/scripts/gen_knobs.py rasterizer/scripts/knob_defs.py rasterizer/scripts/templates/knobs.template
+rasterizer/scripts/gen_knobs.cpp: rasterizer/scripts/gen_knobs.py rasterizer/scripts/knob_defs.py rasterizer/scripts/templates/knobs.template
 	$(MKDIR_GEN)
 	$(PYTHON_GEN) \
 		$(srcdir)/rasterizer/scripts/gen_knobs.py \
-		rasterizer/scripts
+		--input $(srcdir)/rasterizer/scripts/templates/knobs.template \
+		--output rasterizer/scripts/gen_knobs.cpp \
+		--gen_cpp
+
+rasterizer/scripts/gen_knobs.h: rasterizer/scripts/gen_knobs.py rasterizer/scripts/knob_defs.py rasterizer/scripts/templates/knobs.template
+	$(MKDIR_GEN)
+	$(PYTHON_GEN) \
+		$(srcdir)/rasterizer/scripts/gen_knobs.py \
+		--input $(srcdir)/rasterizer/scripts/templates/knobs.template \
+		--output rasterizer/scripts/gen_knobs.h \
+		--gen_h
 
 rasterizer/jitter/state_llvm.h: rasterizer/jitter/scripts/gen_llvm_types.py rasterizer/core/state.h
 	$(MKDIR_GEN)
diff --git a/src/gallium/drivers/swr/SConscript b/src/gallium/drivers/swr/SConscript
index 0c8011e..0de51a7 100755
--- a/src/gallium/drivers/swr/SConscript
+++ b/src/gallium/drivers/swr/SConscript
@@ -55,15 +55,15 @@ swrroot = '#src/gallium/drivers/swr/'
 env.CodeGenerate(
     target = 'rasterizer/scripts/gen_knobs.cpp',
     script = swrroot + 'rasterizer/scripts/gen_knobs.py',
-    source = [],
-    command = python_cmd + ' $SCRIPT ' + Dir('rasterizer/scripts').abspath
+    source = 'rasterizer/scripts/templates/knobs.template',
+    command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_cpp'
 )
 
 env.CodeGenerate(
     target = 'rasterizer/scripts/gen_knobs.h',
     script = swrroot + 'rasterizer/scripts/gen_knobs.py',
-    source = [],
-    command = python_cmd + ' $SCRIPT ' + Dir('rasterizer/scripts').abspath
+    source = 'rasterizer/scripts/templates/knobs.template',
+    command = python_cmd + ' $SCRIPT --input $SOURCE --output $TARGET --gen_h'
 )
 
 env.CodeGenerate(
@@ -116,10 +116,10 @@ env.CodeGenerate(
 )
 
 env.CodeGenerate(
-    target = 'rasterizer/archrast/gen_ar.event.cpp',
+    target = 'rasterizer/archrast/gen_ar_event.cpp',
     script = swrroot + 'rasterizer/scripts/gen_archrast.py',
     source = 'rasterizer/archrast/events.proto',
-    command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen-event_cpp'
+    command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_event_cpp'
 )
 
 env.CodeGenerate(
@@ -136,12 +136,15 @@ env.CodeGenerate(
     command = python_cmd + ' $SCRIPT --proto $SOURCE --output $TARGET --gen_eventhandlerfile_h'
 )
 
-source = [
+# Auto-generated .cpp files (that need to generate object files)
+built_sources = [
     'rasterizer/scripts/gen_knobs.cpp',
     'rasterizer/jitter/builder_gen.cpp',
     'rasterizer/jitter/builder_x86.cpp',
+    'rasterizer/archrast/gen_ar_event.cpp',
     ]
 
+source = built_sources
 source += env.ParseSourceList(swrroot + 'Makefile.sources', [
     'CXX_SOURCES',
     'ARCHRAST_CXX_SOURCES',
diff --git a/src/gallium/drivers/swr/rasterizer/scripts/gen_knobs.py b/src/gallium/drivers/swr/rasterizer/scripts/gen_knobs.py
index 3d003fb..225082e 100644
--- a/src/gallium/drivers/swr/rasterizer/scripts/gen_knobs.py
+++ b/src/gallium/drivers/swr/rasterizer/scripts/gen_knobs.py
@@ -23,13 +23,14 @@
 from __future__ import print_function
 import os
 import sys
+import argparse
 import knob_defs
 from mako.template import Template
 from mako.exceptions import RichTraceback
 
 def write_template_to_string(template_filename, **kwargs):
     try:
-        template = Template(filename=template_filename)
+        template = Template(filename=os.path.abspath(template_filename))
         # Split + Join fixes line-endings for whatever platform you are using
         return '\n'.join(template.render(**kwargs).splitlines())
     except:
@@ -40,37 +41,39 @@ def write_template_to_string(template_filename, **kwargs):
         print("%s: %s" % (str(traceback.error.__class__.__name__), traceback.error))
 
 def write_template_to_file(template_filename, output_filename, **kwargs):
+    output_dirname = os.path.dirname(output_filename)
+    if not os.path.exists(output_dirname):
+        os.makedirs(output_dirname)
     with open(output_filename, "w") as outfile:
         print(write_template_to_string(template_filename, **kwargs), file=outfile)
 
 def main(args=sys.argv[1:]):
-    if len(args) != 1:
-        print('Usage:', sys.argv[0], '<output_directory>', file=sys.stderr)
-        return 1
 
-    output_dir = args[0]
-    if not os.path.isdir(output_dir):
-        if os.path.exists(output_dir):
-            print('ERROR: Invalid output directory:', output_dir, file=sys.stderr)
-            return 1
+    # parse args
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--input", "-i", help="Path to knobs.template", required=True)
+    parser.add_argument("--output", "-o", help="Path to output file", required=True)
+    parser.add_argument("--gen_h", "-gen_h", help="Generate gen_knobs.h", action="store_true", default=False)
+    parser.add_argument("--gen_cpp", "-gen_cpp", help="Generate gen_knobs.cpp", action="store_true", required=False)
 
-        try:
-            os.makedirs(output_dir)
-        except:
-            print('ERROR: Could not create output directory:', output_dir, file=sys.stderr)
-            return 1
+    args = parser.parse_args()
 
-    # Output path exists, now just run the template
-    template_file = os.sep.join([sys.path[0], 'templates', 'knobs.template'])
-    output_file = os.sep.join([output_dir, 'gen_knobs.cpp'])
-    output_header = os.sep.join([output_dir, 'gen_knobs.h'])
+    if args.input:
+        if args.gen_h:
+            write_template_to_file(args.input,
+                                   args.output,
+                                   filename='gen_knobs',
+                                   knobs=knob_defs.KNOBS,
+                                   includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'],
+                                   gen_header=True)
 
-    for f in [output_header, output_file]:
-        write_template_to_file(template_file, f,
-                filename='gen_knobs',
-                knobs=knob_defs.KNOBS,
-                includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'],
-                gen_header=True if f == output_header else False)
+        if args.gen_cpp:
+            write_template_to_file(args.input,
+                                   args.output,
+                                   filename='gen_knobs',
+                                   knobs=knob_defs.KNOBS,
+                                   includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'],
+                                   gen_header=False)
 
     return 0
 
-- 
2.10.0.windows.1



More information about the mesa-dev mailing list