Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/49400 )

Change subject: util,scons: Pull makeDebugFlagHH out of src/SConscript into util.
......................................................................

util,scons: Pull makeDebugFlagHH out of src/SConscript into util.

Change-Id: I5c6f38a859b3d61aa47fc84e4e17d9ba8624389a
---
M src/SConscript
A util/bld/debugflaghh.py
2 files changed, 95 insertions(+), 58 deletions(-)



diff --git a/src/SConscript b/src/SConscript
index b079553..5c48187 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -361,78 +361,34 @@
 # Debug Flags
 #

-def makeDebugFlagHH(target, source, env):
-    assert len(target) == 1
-
-    flag = env['DEBUG_FLAG'][0]
-    name, desc, components, fmt = \
-            flag.name, flag.desc, flag.components, flag.fmt
-
-    code = code_formatter()
-
-    typename = "CompoundFlag" if flag.components else "SimpleFlag"
-    component_flag_decls = ''.join('extern SimpleFlag& %s;\n' % simple for
-            simple in components)
-
-    # file header boilerplate
-    code('''\
-#ifndef __DEBUG_${name}_HH__
-#define __DEBUG_${name}_HH__
-
-#include "base/compiler.hh" // For namespace deprecation
-
-namespace gem5
-{
-
-GEM5_DEPRECATED_NAMESPACE(Debug, debug);
-namespace debug
-{
-
-class SimpleFlag;
-class CompoundFlag;
-extern ${typename}& ${name};
-${component_flag_decls}
-
-} // namespace debug
-} // namespace gem5
-
-#endif // __DEBUG_${name}_HH__
-''')
-
-    code.write(str(target[0]))
-
 DebugFlagInfo = collections.namedtuple('DebugFlag',
         ['name', 'desc', 'components', 'fmt'],
         defaults=[(), False])
-def DebugFlag(name, desc=None, fmt=False):
+def DebugFlagCommon(name, flags, desc, fmt):
     if name == "All":
         raise AttributeError('The "All" flag name is reserved')
     debug_flags = env.get('DEBUG_FLAGS', [])
     if any(name == flag.name for flag in debug_flags):
         raise AttributeError(f'Flag {name} already specified')

-    flag = DebugFlagInfo(name, desc, fmt=fmt)
+    flag = DebugFlagInfo(name, desc, fmt=fmt, components=flags)
     env.Append(DEBUG_FLAGS=[flag])

     hh_file = Dir(env['BUILDDIR']).Dir('debug').File(f'{name}.hh')
-    env.Command(hh_file, [], DEBUG_FLAG=[flag],
-            action=MakeAction(makeDebugFlagHH, Transform("TRACING", 0),
-                varlist=['DEBUG_FLAG']))
+    gem5py_env.Command(hh_file,
+        [ '${GEM5PY}', '${DEBUGFLAGHH_PY}' ],
+ MakeAction('"${GEM5PY}" "${DEBUGFLAGHH_PY}" "${TARGET}" "${NAME}" ' \
+                   '"${FMT}" "${COMPONENTS}"',
+        Transform("TRACING", 0)),
+        DEBUGFLAGHH_PY=util_bld.File('debugflaghh.py'),
+        NAME=name, FMT=('True' if fmt else 'False'),
+        COMPONENTS=':'.join(flags))
+
+def DebugFlag(name, desc=None, fmt=False):
+    DebugFlagCommon(name, (), desc, fmt)

 def CompoundFlag(name, flags, desc=None):
-    if name == "All":
-        raise AttributeError('The "All" flag name is reserved')
-    debug_flags = env.get('DEBUG_FLAGS', [])
-    if any(name == flag[0] for flag in debug_flags):
-        raise AttributeError(f'Flag {name} already specified')
-
-    flag = DebugFlagInfo(name, desc, components=flags)
-    env.Append(DEBUG_FLAGS=[flag])
-
-    hh_file = Dir(env['BUILDDIR']).Dir('debug').File(f'{name}.hh')
-    env.Command(hh_file, [], DEBUG_FLAG=[flag],
-            action=MakeAction(makeDebugFlagHH, Transform("TRACING", 0),
-                varlist=['DEBUG_FLAG']))
+    DebugFlagCommon(name, flags, desc, False)

 def DebugFormatFlag(name, desc=None):
     DebugFlag(name, desc, True)
diff --git a/util/bld/debugflaghh.py b/util/bld/debugflaghh.py
new file mode 100644
index 0000000..19b8579
--- /dev/null
+++ b/util/bld/debugflaghh.py
@@ -0,0 +1,81 @@
+# Copyright (c) 2018, 2020 ARM Limited
+#
+# The license below extends only to copyright in the software and shall
+# not be construed as granting a license to any other intellectual
+# property including but not limited to intellectual property relating
+# to a hardware implementation of the functionality of the software
+# licensed hereunder.  You may use the software subject to the license
+# terms below provided that you ensure that this notice is replicated
+# unmodified and in its entirety in all distributions of the software,
+# modified or unmodified, in source code or in binary form.
+#
+# Copyright (c) 2004-2005 The Regents of The University of Michigan
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met: redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer;
+# redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution;
+# neither the name of the copyright holders nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import sys
+
+from code_formatter import code_formatter
+
+if len(sys.argv) < 4:
+ print(f"Usage: {sys.argv[0]} HH NAME FMT [components]", file=sys.stderr)
+    sys.exit(1)
+
+hh, name, fmt, components = sys.argv[1:5]
+fmt = eval(fmt)
+components = components.split(':') if components else []
+
+
+code = code_formatter()
+
+typename = "CompoundFlag" if components else "SimpleFlag"
+component_flag_decls = ''.join(f'extern SimpleFlag &{simple};\n' for
+        simple in components)
+
+code('''\
+#ifndef __DEBUG_${name}_HH__
+#define __DEBUG_${name}_HH__
+
+#include "base/compiler.hh" // For namespace deprecation
+
+namespace gem5
+{
+
+GEM5_DEPRECATED_NAMESPACE(Debug, debug);
+namespace debug
+{
+
+class SimpleFlag;
+class CompoundFlag;
+extern ${typename}& ${name};
+${component_flag_decls}
+
+} // namespace debug
+} // namespace gem5
+
+#endif // __DEBUG_${name}_HH__
+''')
+
+code.write(hh)

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/49400
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I5c6f38a859b3d61aa47fc84e4e17d9ba8624389a
Gerrit-Change-Number: 49400
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to