swr/rast: minimize codegen redundant work
[mesa.git] / src / gallium / drivers / swr / rasterizer / codegen / gen_knobs.py
index 2c271c7f5c54554bdc559a2260f002e10e81f21c..7733f86ec2bdf264708e29bb2ee187784e086538 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2016 Intel Corporation.   All Rights Reserved.
+# Copyright (C) 2014-2018 Intel Corporation.   All Rights Reserved.
 #
 # Permission is hereby granted, free of charge, to any person obtaining a
 # copy of this software and associated documentation files (the "Software"),
@@ -24,7 +24,7 @@ from __future__ import print_function
 import os
 import sys
 import knob_defs
-from gen_common import MakoTemplateWriter, ArgumentParser
+from gen_common import *
 
 def main(args=sys.argv[1:]):
 
@@ -37,27 +37,42 @@ def main(args=sys.argv[1:]):
     args = parser.parse_args()
 
     cur_dir = os.path.dirname(os.path.abspath(__file__))
-    template_file = os.path.join(cur_dir, 'templates', 'gen_knobs.cpp')
-
-    if args.gen_h:
-        MakoTemplateWriter.to_file(
-            template_file,
-            args.output,
-            cmdline=sys.argv,
-            filename='gen_knobs',
-            knobs=knob_defs.KNOBS,
-            includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'],
-            gen_header=True)
-
-    if args.gen_cpp:
-        MakoTemplateWriter.to_file(
-            template_file,
-            args.output,
-            cmdline=sys.argv,
-            filename='gen_knobs',
-            knobs=knob_defs.KNOBS,
-            includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'],
-            gen_header=False)
+    template_cpp = os.path.join(cur_dir, 'templates', 'gen_knobs.cpp')
+    template_h = os.path.join(cur_dir, 'templates', 'gen_knobs.h')
+
+    output_filename = os.path.basename(args.output)
+    output_dir = MakeTmpDir('_codegen')
+
+    output_file = os.path.join(output_dir, output_filename)
+
+    rval = 0
+
+    try:
+        if args.gen_h:
+            MakoTemplateWriter.to_file(
+                template_h,
+                output_file,
+                cmdline=sys.argv,
+                filename='gen_knobs',
+                knobs=knob_defs.KNOBS)
+
+        if args.gen_cpp:
+            MakoTemplateWriter.to_file(
+                template_cpp,
+                output_file,
+                cmdline=sys.argv,
+                filename='gen_knobs',
+                knobs=knob_defs.KNOBS,
+                includes=['core/knobs_init.h', 'common/os.h', 'sstream', 'iomanip'])
+
+        rval = CopyFileIfDifferent(output_file, args.output)
+
+    except:
+        rval = 1
+
+    finally:
+        # ignore errors from delete of tmp directory
+        DeleteDirTree(output_dir)
 
     return 0