Gabe Black has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/56589 )
(
9 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the
submitted one.
)Change subject: scons: Put internal build files in a gem5.build directory.
......................................................................
scons: Put internal build files in a gem5.build directory.
This keeps them organized, and also creates an anchor for the build
directory other than a directory named "build".
Change-Id: I3ed2f569e9fcd62eb4eca1c4556b45cd0c3552d4
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/56589
Reviewed-by: Bobby Bruce <bbr...@ucdavis.edu>
Maintainer: Gabe Black <gabe.bl...@gmail.com>
Tested-by: kokoro <noreply+kok...@google.com>
---
M SConstruct
M site_scons/gem5_scons/configure.py
2 files changed, 248 insertions(+), 220 deletions(-)
Approvals:
Bobby Bruce: Looks good to me, approved
Gabe Black: Looks good to me, approved
kokoro: Regressions pass
diff --git a/SConstruct b/SConstruct
index 0bd879a..684cc8c 100755
--- a/SConstruct
+++ b/SConstruct
@@ -80,7 +80,7 @@
import os
import sys
-from os import mkdir, environ
+from os import mkdir, remove, environ
from os.path import abspath, dirname, expanduser
from os.path import isdir, isfile
from os.path import join, split
@@ -238,8 +238,6 @@
mkdir(build_root)
main['BUILDROOT'] = build_root
-main.SConsignFile(os.path.join(build_root, "sconsign"))
-
########################################################################
#
@@ -281,154 +279,6 @@
if main['GCC'] + main['CLANG'] > 1:
error('Two compilers enabled at once?')
-# Set up default C++ compiler flags
-if main['GCC'] or main['CLANG']:
- # As gcc and clang share many flags, do the common parts here
- main.Append(CCFLAGS=['-pipe'])
- main.Append(CCFLAGS=['-fno-strict-aliasing'])
-
- # Enable -Wall and -Wextra and then disable the few warnings that
- # we consistently violate
- main.Append(CCFLAGS=['-Wall', '-Wundef', '-Wextra',
- '-Wno-sign-compare', '-Wno-unused-parameter'])
-
- # We always compile using C++17
- main.Append(CXXFLAGS=['-std=c++17'])
-
- if sys.platform.startswith('freebsd'):
- main.Append(CCFLAGS=['-I/usr/local/include'])
- main.Append(CXXFLAGS=['-I/usr/local/include'])
- # On FreeBSD we need libthr.
- main.Append(LIBS=['thr'])
-
- with gem5_scons.Configure(main) as conf:
- conf.CheckLinkFlag('-Wl,--as-needed')
-
- linker = GetOption('linker')
- if linker:
- with gem5_scons.Configure(main) as conf:
- if not conf.CheckLinkFlag(f'-fuse-ld={linker}'):
- error(f'Linker "{linker}" is not supported')
- if linker == 'gold' and not GetOption('with_lto'):
- # Tell the gold linker to use threads. The gold linker
- # segfaults if both threads and LTO are enabled.
- conf.CheckLinkFlag('-Wl,--threads')
- conf.CheckLinkFlag(
- '-Wl,--thread-count=%d' % GetOption('num_jobs'))
-
- # Treat warnings as errors but white list some warnings that we
- # want to allow (e.g., deprecation warnings).
- main.Append(CCFLAGS=['-Werror',
- '-Wno-error=deprecated-declarations',
- '-Wno-error=deprecated',
- ])
-
-else:
- error('\n'.join((
- "Don't know what compiler options to use for your compiler.",
- "compiler: " + main['CXX'],
- "version: " + CXX_version.replace('\n', '<nl>') if
- CXX_version else 'COMMAND NOT FOUND!',
- "If you're trying to use a compiler other than GCC",
- "or clang, there appears to be something wrong with your",
- "environment.",
- "",
- "If you are trying to use a compiler other than those listed",
- "above you will need to ease fix SConstruct and ",
- "src/SConscript to support that compiler.")))
-
-if main['GCC']:
- if compareVersions(main['CXXVERSION'], "7") < 0:
- error('gcc version 7 or newer required.\n'
- 'Installed version:', main['CXXVERSION'])
-
- with gem5_scons.Configure(main) as conf:
- # This warning has a false positive in the systemc code in g++
11.1.
- conf.CheckCxxFlag('-Wno-free-nonheap-object')
-
- # Add the appropriate Link-Time Optimization (LTO) flags if
`--with-lto` is
- # set.
- if GetOption('with_lto'):
- # g++ uses "make" to parallelize LTO. The program can be overriden
with
- # the environment variable "MAKE", but we currently make no
attempt to
- # plumb that variable through.
- parallelism = ''
- if main.Detect('make'):
- parallelism = '=%d' % GetOption('num_jobs')
- else:
- warning('"make" not found, link time optimization will be '
- 'single threaded.')
-
- for var in 'LTO_CCFLAGS', 'LTO_LINKFLAGS':
- # Use the same amount of jobs for LTO as we are running scons
with.
- main[var] = ['-flto%s' % parallelism]
-
-
main.Append(TCMALLOC_CCFLAGS=['-fno-builtin-malloc', '-fno-builtin-calloc',
- '-fno-builtin-realloc', '-fno-builtin-free'])
-
-elif main['CLANG']:
- if compareVersions(main['CXXVERSION'], "6") < 0:
- error('clang version 6 or newer required.\n'
- 'Installed version:', main['CXXVERSION'])
-
- # Set the Link-Time Optimization (LTO) flags if enabled.
- if GetOption('with_lto'):
- for var in 'LTO_CCFLAGS', 'LTO_LINKFLAGS':
- main[var] = ['-flto']
-
- # clang has a few additional warnings that we disable.
- with gem5_scons.Configure(main) as conf:
- conf.CheckCxxFlag('-Wno-c99-designator')
- conf.CheckCxxFlag('-Wno-defaulted-function-deleted')
-
- main.Append(TCMALLOC_CCFLAGS=['-fno-builtin'])
-
- # On Mac OS X/Darwin we need to also use libc++ (part of XCode) as
- # opposed to libstdc++, as the later is dated.
- if sys.platform == "darwin":
- main.Append(CXXFLAGS=['-stdlib=libc++'])
- main.Append(LIBS=['c++'])
-
-# Add sanitizers flags
-sanitizers=[]
-if GetOption('with_ubsan'):
- sanitizers.append('undefined')
-if GetOption('with_asan'):
- # Available for gcc >= 5 or llvm >= 3.1 both a requirement
- # by the build system
- sanitizers.append('address')
- suppressions_file = Dir('util').File('lsan-suppressions').get_abspath()
- suppressions_opt = 'suppressions=%s' % suppressions_file
- suppressions_opts
= ':'.join([suppressions_opt, 'print_suppressions=0'])
- main['ENV']['LSAN_OPTIONS'] = suppressions_opts
- print()
- warning('To suppress false positive leaks, set the LSAN_OPTIONS '
- 'environment variable to "%s" when running gem5' %
- suppressions_opts)
- warning('LSAN_OPTIONS=%s' % suppressions_opts)
- print()
-if sanitizers:
- sanitizers = ','.join(sanitizers)
- if main['GCC'] or main['CLANG']:
- main.Append(CCFLAGS=['-fsanitize=%s' % sanitizers,
- '-fno-omit-frame-pointer'],
- LINKFLAGS='-fsanitize=%s' % sanitizers)
- else:
- warning("Don't know how to enable %s sanitizer(s) for your "
- "compiler." % sanitizers)
-
-if sys.platform == 'cygwin':
- # cygwin has some header file issues...
- main.Append(CCFLAGS=["-Wno-uninitialized"])
-
-
-if not GetOption('no_compress_debug'):
- with gem5_scons.Configure(main) as conf:
- if not conf.CheckCxxFlag('-gz'):
- warning("Can't enable object file debug section compression")
- if not conf.CheckLinkFlag('-gz'):
- warning("Can't enable executable debug section compression")
-
########################################################################
#
@@ -493,49 +343,6 @@
warning('Embedded python library too new. '
f'Python 3 expected, found {ver_string}.')
-if main['USE_PYTHON']:
- config_embedded_python(main)
- gem5py_env = main.Clone()
-else:
- gem5py_env = main.Clone()
- config_embedded_python(gem5py_env)
-
-# Bare minimum environment that only includes python
-gem5py_env.Append(CCFLAGS=['${GEM5PY_CCFLAGS_EXTRA}'])
-gem5py_env.Append(LINKFLAGS=['${GEM5PY_LINKFLAGS_EXTRA}'])
-
-if GetOption('gprof') and GetOption('pprof'):
- error('Only one type of profiling should be enabled at a time')
-if GetOption('gprof'):
- main.Append(CCFLAGS=['-g', '-pg'], LINKFLAGS=['-pg'])
-if GetOption('pprof'):
- main.Append(CCFLAGS=['-g'],
-
LINKFLAGS=['-Wl,--no-as-needed', '-lprofiler', '-Wl,--as-needed'])
-
-main['HAVE_PKG_CONFIG'] = main.Detect('pkg-config')
-
-with gem5_scons.Configure(main) as conf:
- # On Solaris you need to use libsocket for socket ops
- if not conf.CheckLibWithHeader(
- [None, 'socket'], 'sys/socket.h', 'C++', 'accept(0,0,0);'):
- error("Can't find library with socket calls (e.g. accept()).")
-
- if not conf.CheckLibWithHeader('z', 'zlib.h', 'C++','zlibVersion();'):
- error('Did not find needed zlib compression library '
- 'and/or zlib.h header file.\n'
- 'Please install zlib and try again.')
-
-if not GetOption('without_tcmalloc'):
- with gem5_scons.Configure(main) as conf:
- if conf.CheckLib('tcmalloc'):
- conf.env.Append(CCFLAGS=conf.env['TCMALLOC_CCFLAGS'])
- elif conf.CheckLib('tcmalloc_minimal'):
- conf.env.Append(CCFLAGS=conf.env['TCMALLOC_CCFLAGS'])
- else:
- warning("You can get a 12% performance improvement by "
- "installing tcmalloc (libgoogle-perftools-dev package "
- "on Ubuntu or RedHat).")
-
########################################################################
#
@@ -544,13 +351,213 @@
########################################################################
for variant_path in variant_paths:
- if not GetOption('silent'):
- print("Building in", variant_path)
-
# Make a copy of the build-root environment to use for this config.
env = main.Clone()
env['BUILDDIR'] = variant_path
+ gem5_build = os.path.join(build_root, variant_path, 'gem5.build')
+ env['GEM5BUILD'] = gem5_build
+ Execute(Mkdir(gem5_build))
+
+ env.SConsignFile(os.path.join(gem5_build, 'sconsign'))
+
+ # Set up default C++ compiler flags
+ if env['GCC'] or env['CLANG']:
+ # As gcc and clang share many flags, do the common parts here
+ env.Append(CCFLAGS=['-pipe'])
+ env.Append(CCFLAGS=['-fno-strict-aliasing'])
+
+ # Enable -Wall and -Wextra and then disable the few warnings that
+ # we consistently violate
+ env.Append(CCFLAGS=['-Wall', '-Wundef', '-Wextra',
+ '-Wno-sign-compare', '-Wno-unused-parameter'])
+
+ # We always compile using C++17
+ env.Append(CXXFLAGS=['-std=c++17'])
+
+ if sys.platform.startswith('freebsd'):
+ env.Append(CCFLAGS=['-I/usr/local/include'])
+ env.Append(CXXFLAGS=['-I/usr/local/include'])
+ # On FreeBSD we need libthr.
+ env.Append(LIBS=['thr'])
+
+ with gem5_scons.Configure(env) as conf:
+ conf.CheckLinkFlag('-Wl,--as-needed')
+
+ linker = GetOption('linker')
+ if linker:
+ with gem5_scons.Configure(env) as conf:
+ if not conf.CheckLinkFlag(f'-fuse-ld={linker}'):
+ error(f'Linker "{linker}" is not supported')
+ if linker == 'gold' and not GetOption('with_lto'):
+ # Tell the gold linker to use threads. The gold linker
+ # segfaults if both threads and LTO are enabled.
+ conf.CheckLinkFlag('-Wl,--threads')
+ conf.CheckLinkFlag(
+ '-Wl,--thread-count=%d' %
GetOption('num_jobs'))
+
+ # Treat warnings as errors but white list some warnings that we
+ # want to allow (e.g., deprecation warnings).
+ env.Append(CCFLAGS=['-Werror',
+ '-Wno-error=deprecated-declarations',
+ '-Wno-error=deprecated',
+ ])
+
+ else:
+ error('\n'.join((
+ "Don't know what compiler options to use for your compiler.",
+ "compiler: " + env['CXX'],
+ "version: " + CXX_version.replace('\n', '<nl>') if
+ CXX_version else 'COMMAND NOT FOUND!',
+ "If you're trying to use a compiler other than GCC",
+ "or clang, there appears to be something wrong with your",
+ "environment.",
+ "",
+ "If you are trying to use a compiler other than those
listed",
+ "above you will need to ease fix SConstruct and ",
+ "src/SConscript to support that compiler.")))
+
+ if env['GCC']:
+ if compareVersions(env['CXXVERSION'], "7") < 0:
+ error('gcc version 7 or newer required.\n'
+ 'Installed version:', env['CXXVERSION'])
+
+ with gem5_scons.Configure(env) as conf:
+ # This warning has a false positive in the systemc in g++ 11.1.
+ conf.CheckCxxFlag('-Wno-free-nonheap-object')
+
+ # Add the appropriate Link-Time Optimization (LTO) flags if
+ # `--with-lto` is set.
+ if GetOption('with_lto'):
+ # g++ uses "make" to parallelize LTO. The program can be
overriden
+ # with the environment variable "MAKE", but we currently make
no
+ # attempt to plumb that variable through.
+ parallelism = ''
+ if env.Detect('make'):
+ parallelism = '=%d' % GetOption('num_jobs')
+ else:
+ warning('"make" not found, link time optimization will be '
+ 'single threaded.')
+
+ for var in 'LTO_CCFLAGS', 'LTO_LINKFLAGS':
+ # Use the same amount of jobs for LTO as scons.
+ env[var] = ['-flto%s' % parallelism]
+
+ env.Append(TCMALLOC_CCFLAGS=[
+ '-fno-builtin-malloc', '-fno-builtin-calloc',
+ '-fno-builtin-realloc', '-fno-builtin-free'])
+
+ elif env['CLANG']:
+ if compareVersions(env['CXXVERSION'], "6") < 0:
+ error('clang version 6 or newer required.\n'
+ 'Installed version:', env['CXXVERSION'])
+
+ # Set the Link-Time Optimization (LTO) flags if enabled.
+ if GetOption('with_lto'):
+ for var in 'LTO_CCFLAGS', 'LTO_LINKFLAGS':
+ env[var] = ['-flto']
+
+ # clang has a few additional warnings that we disable.
+ with gem5_scons.Configure(env) as conf:
+ conf.CheckCxxFlag('-Wno-c99-designator')
+ conf.CheckCxxFlag('-Wno-defaulted-function-deleted')
+
+ env.Append(TCMALLOC_CCFLAGS=['-fno-builtin'])
+
+ # On Mac OS X/Darwin we need to also use libc++ (part of XCode) as
+ # opposed to libstdc++, as the later is dated.
+ if sys.platform == "darwin":
+ env.Append(CXXFLAGS=['-stdlib=libc++'])
+ env.Append(LIBS=['c++'])
+
+ # Add sanitizers flags
+ sanitizers=[]
+ if GetOption('with_ubsan'):
+ sanitizers.append('undefined')
+ if GetOption('with_asan'):
+ # Available for gcc >= 5 or llvm >= 3.1 both a requirement
+ # by the build system
+ sanitizers.append('address')
+ suppressions_file =
Dir('util').File('lsan-suppressions').get_abspath()
+ suppressions_opt = 'suppressions=%s' % suppressions_file
+ suppressions_opts = ':'.join([suppressions_opt,
+ 'print_suppressions=0'])
+ env['ENV']['LSAN_OPTIONS'] = suppressions_opts
+ print()
+ warning('To suppress false positive leaks, set the LSAN_OPTIONS '
+ 'environment variable to "%s" when running gem5' %
+ suppressions_opts)
+ warning('LSAN_OPTIONS=%s' % suppressions_opts)
+ print()
+ if sanitizers:
+ sanitizers = ','.join(sanitizers)
+ if env['GCC'] or env['CLANG']:
+ env.Append(CCFLAGS=['-fsanitize=%s' % sanitizers,
+ '-fno-omit-frame-pointer'],
+ LINKFLAGS='-fsanitize=%s' % sanitizers)
+ else:
+ warning("Don't know how to enable %s sanitizer(s) for your "
+ "compiler." % sanitizers)
+
+ if sys.platform == 'cygwin':
+ # cygwin has some header file issues...
+ env.Append(CCFLAGS=["-Wno-uninitialized"])
+
+
+ if not GetOption('no_compress_debug'):
+ with gem5_scons.Configure(env) as conf:
+ if not conf.CheckCxxFlag('-gz'):
+ warning("Can't enable object file debug section
compression")
+ if not conf.CheckLinkFlag('-gz'):
+ warning("Can't enable executable debug section
compression")
+
+ if env['USE_PYTHON']:
+ config_embedded_python(env)
+ gem5py_env = env.Clone()
+ else:
+ gem5py_env = env.Clone()
+ config_embedded_python(gem5py_env)
+
+ # Bare minimum environment that only includes python
+ gem5py_env.Append(CCFLAGS=['${GEM5PY_CCFLAGS_EXTRA}'])
+ gem5py_env.Append(LINKFLAGS=['${GEM5PY_LINKFLAGS_EXTRA}'])
+
+ if GetOption('gprof') and GetOption('pprof'):
+ error('Only one type of profiling should be enabled at a time')
+ if GetOption('gprof'):
+ env.Append(CCFLAGS=['-g', '-pg'], LINKFLAGS=['-pg'])
+ if GetOption('pprof'):
+ env.Append(CCFLAGS=['-g'],
+ LINKFLAGS=['-Wl,--no-as-needed', '-lprofiler',
+ '-Wl,--as-needed'])
+
+ env['HAVE_PKG_CONFIG'] = env.Detect('pkg-config')
+
+ with gem5_scons.Configure(env) as conf:
+ # On Solaris you need to use libsocket for socket ops
+ if not conf.CheckLibWithHeader(
+ [None, 'socket'], 'sys/socket.h', 'C++', 'accept(0,0,0);'):
+ error("Can't find library with socket calls (e.g. accept()).")
+
+ if not
conf.CheckLibWithHeader('z', 'zlib.h', 'C++','zlibVersion();'):
+ error('Did not find needed zlib compression library '
+ 'and/or zlib.h header file.\n'
+ 'Please install zlib and try again.')
+
+ if not GetOption('without_tcmalloc'):
+ with gem5_scons.Configure(env) as conf:
+ if conf.CheckLib('tcmalloc'):
+ conf.env.Append(CCFLAGS=conf.env['TCMALLOC_CCFLAGS'])
+ elif conf.CheckLib('tcmalloc_minimal'):
+ conf.env.Append(CCFLAGS=conf.env['TCMALLOC_CCFLAGS'])
+ else:
+ warning("You can get a 12% performance improvement by "
+ "installing tcmalloc (libgoogle-perftools-dev
package "
+ "on Ubuntu or RedHat).")
+
+ if not GetOption('silent'):
+ print("Building in", variant_path)
+
# variant_dir is the tail component of build path, and is used to
# determine the build parameters (e.g., 'X86')
(build_root, variant_dir) = os.path.split(variant_path)
@@ -580,21 +587,20 @@
# Set env variables according to the build directory config.
sticky_vars.files = []
# Variables for $BUILD_ROOT/$VARIANT_DIR are stored in
- # $BUILD_ROOT/variables/$VARIANT_DIR so you can nuke
- # $BUILD_ROOT/$VARIANT_DIR without losing your variables settings.
- current_vars_file = os.path.join(build_root, 'variables', variant_dir)
- if isfile(current_vars_file):
- sticky_vars.files.append(current_vars_file)
+ # $BUILD_ROOT/$VARIANT_DIR/gem5.build/variables
+
+ gem5_build_vars = os.path.join(gem5_build, 'variables')
+ build_root_vars = os.path.join(build_root, 'variables', variant_dir)
+ current_vars_files = [gem5_build_vars, build_root_vars]
+ existing_vars_files = list(filter(isfile, current_vars_files))
+ if existing_vars_files:
+ sticky_vars.files.extend(existing_vars_files)
if not GetOption('silent'):
- print("Using saved variables file %s" % current_vars_file)
+ print('Using saved variables file(s) %s' %
+ ', '.join(existing_vars_files))
else:
# Variant specific variables file doesn't exist.
- # Make sure the directory is there so we can create the file later.
- opt_dir = dirname(current_vars_file)
- if not isdir(opt_dir):
- mkdir(opt_dir)
-
# Get default build variables from source tree. Variables are
# normally determined by name of $VARIANT_DIR, but can be
# overridden by '--default=' arg on command line.
@@ -602,20 +608,22 @@
opts_dir = Dir('#build_opts').abspath
if default:
default_vars_files = [
- os.path.join(build_root, 'variables', default),
+ gem5_build_vars,
+ build_root_vars,
os.path.join(opts_dir, default)
]
else:
default_vars_files = [os.path.join(opts_dir, variant_dir)]
- existing_files = list(filter(isfile, default_vars_files))
- if existing_files:
- default_vars_file = existing_files[0]
+ existing_default_files = list(filter(isfile, default_vars_files))
+ if existing_default_files:
+ default_vars_file = existing_default_files[0]
sticky_vars.files.append(default_vars_file)
- print("Variables file %s not found,\n using defaults in %s"
- % (current_vars_file, default_vars_file))
+ print("Variables file(s) %s not found,\n using defaults
in %s" %
+ (' or '.join(current_vars_files), default_vars_file))
else:
- error("Cannot find variables file %s or default file(s) %s"
- % (current_vars_file, ' or '.join(default_vars_files)))
+ error("Cannot find variables file(s) %s or default
file(s) %s" %
+ (' or '.join(current_vars_file),
+ ' or '.join(default_vars_files)))
Exit(1)
# Apply current settings for EXTRAS to env.
@@ -666,8 +674,12 @@
'''.format(dir=variant_dir, help=sticky_vars.GenerateHelpText(env)),
append=True)
- # Save sticky variable settings back to current variables file
- sticky_vars.Save(current_vars_file, env)
+ # If the old vars file exists, delete it to avoid confusion/stale
values.
+ if isfile(build_root_vars):
+ warning(f'Deleting old variant variables file "{build_root_vars}"')
+ remove(build_root_vars)
+ # Save sticky variables back to the gem5.build variant variables file.
+ sticky_vars.Save(gem5_build_vars, env)
# Pull all the sticky variables into the CONF dict.
env['CONF'].update({key: env[key] for key in sticky_vars.keys()})
diff --git a/site_scons/gem5_scons/configure.py
b/site_scons/gem5_scons/configure.py
index 24a4a3d..53ee14a 100644
--- a/site_scons/gem5_scons/configure.py
+++ b/site_scons/gem5_scons/configure.py
@@ -144,9 +144,9 @@
@contextlib.contextmanager
def Configure(env, *args, **kwargs):
kwargs.setdefault('conf_dir',
- os.path.join(env['BUILDROOT'], '.scons_config'))
+ os.path.join(env['GEM5BUILD'], 'scons_config'))
kwargs.setdefault('log_file',
- os.path.join(env['BUILDROOT'], 'scons_config.log'))
+ os.path.join(env['GEM5BUILD'], 'scons_config.log'))
kwargs.setdefault('custom_tests', {})
kwargs['custom_tests'].update({
'CheckCxxFlag' : CheckCxxFlag,
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/56589
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: I3ed2f569e9fcd62eb4eca1c4556b45cd0c3552d4
Gerrit-Change-Number: 56589
Gerrit-PatchSet: 14
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-Reviewer: Andreas Sandberg <andreas.sandb...@arm.com>
Gerrit-Reviewer: Bobby Bruce <bbr...@ucdavis.edu>
Gerrit-Reviewer: Gabe Black <gabe.bl...@gmail.com>
Gerrit-Reviewer: Jason Lowe-Power <ja...@lowepower.com>
Gerrit-Reviewer: kokoro <noreply+kok...@google.com>
Gerrit-CC: Jason Lowe-Power <power...@gmail.com>
Gerrit-MessageType: merged
_______________________________________________
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