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