Gabe Black has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/49400 )
Change subject: scons: Pull makeDebugFlagHH into build_tools.
......................................................................
scons: Pull makeDebugFlagHH into build_tools.
Change-Id: I5c6f38a859b3d61aa47fc84e4e17d9ba8624389a
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/49400
Reviewed-by: Daniel Carvalho <[email protected]>
Reviewed-by: Bobby R. Bruce <[email protected]>
Maintainer: Bobby R. Bruce <[email protected]>
Tested-by: kokoro <[email protected]>
---
A build_tools/debugflaghh.py
M src/SConscript
2 files changed, 114 insertions(+), 58 deletions(-)
Approvals:
Daniel Carvalho: Looks good to me, but someone else must approve
Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved
kokoro: Regressions pass
diff --git a/build_tools/debugflaghh.py b/build_tools/debugflaghh.py
new file mode 100644
index 0000000..fc05bfc
--- /dev/null
+++ b/build_tools/debugflaghh.py
@@ -0,0 +1,86 @@
+# 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 argparse
+import sys
+
+from code_formatter import code_formatter
+
+parser = argparse.ArgumentParser()
+parser.add_argument("hh", help="the path of the debug flag header file")
+parser.add_argument("name", help="the name of the debug flag")
+parser.add_argument("fmt",
+ help="whether the flag is a format flag (True or False)")
+parser.add_argument("components",
+ help="components of a compound flag, if applicable, joined with :")
+
+args = parser.parse_args()
+
+fmt = eval(args.fmt)
+components = args.components.split(':') if args.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_${{args.name}}_HH__
+#define __DEBUG_${{args.name}}_HH__
+
+#include "base/compiler.hh" // For namespace deprecation
+
+namespace gem5
+{
+
+GEM5_DEPRECATED_NAMESPACE(Debug, debug);
+namespace debug
+{
+
+class SimpleFlag;
+class CompoundFlag;
+extern ${typename}& ${{args.name}};
+${component_flag_decls}
+
+} // namespace debug
+} // namespace gem5
+
+#endif // __DEBUG_${{args.name}}_HH__
+''')
+
+code.write(args.hh)
diff --git a/src/SConscript b/src/SConscript
index a2e5476..e181a6d 100644
--- a/src/SConscript
+++ b/src/SConscript
@@ -376,77 +376,33 @@
# 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'])
-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)
+ flag = DebugFlagInfo(name, desc, flags, fmt)
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=build_tools.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, flags, None)
- 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)
--
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: 21
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Bobby R. Bruce <[email protected]>
Gerrit-Reviewer: Daniel Carvalho <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Hoa Nguyen <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: kokoro <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s