scons: Change to Kconfig build system (#69)

The PR contains the following changes:
- Move all of the config options(`env["CONF"]`) from SConsopt to Kconfig
files
- Update `build_opts` files to Kconfig option formats
- The Ruby Protocol files are only built if `RUBY=y`
- Remove the default-default build target
- Kconfig commands are included in the PR:
    - defconfig
    - setconfig
    - meunconfig
    - guiconfig
    - listnewconfig
    - savedefconfig
    - oldconfig
    - olddefconfig
- Add the `python3-tk` package dependencies
 
Jira issue: https://gem5.atlassian.net/browse/GEM5-1211
This commit is contained in:
Bobby R. Bruce
2023-11-27 13:59:18 -08:00
committed by GitHub
95 changed files with 1444 additions and 491 deletions

View File

@@ -28,15 +28,20 @@ jobs:
# the default is to add -j $(nproc), but some images
# require more specifications when built
include:
- command-line: -j $(nproc)
- setconfig-option: ''
- isa-option: ''
- image: ALL_CHI
command-line: --default=ALL PROTOCOL=CHI -j $(nproc)
setconfig-option: RUBY_PROTOCOL_CHI=y
isa-option: ALL
- image: ALL_MSI
command-line: --default=ALL PROTOCOL=MSI -j $(nproc)
setconfig-option: RUBY_PROTOCOL_MSI=y
isa-option: ALL
- image: ALL_MESI_Two_Level
command-line: --default=ALL PROTOCOL=MESI_Two_Level -j $(nproc)
setconfig-option: RUBY_PROTOCOL_MESI_TWO_LEVEL=y
isa-option: ALL
- image: NULL_MI_example
command-line: --default=NULL PROTOCOL=MI_example -j $(nproc)
setconfig-option: RUBY_PROTOCOL_MI_EXAMPLE=y
isa-option: 'NULL'
runs-on: [self-hosted, linux, x64]
needs: name-artifacts
container: ghcr.io/gem5/ubuntu-22.04_all-dependencies:latest
@@ -46,8 +51,14 @@ jobs:
# Scheduled workflows run on the default branch by default. We
# therefore need to explicitly checkout the develop branch.
ref: develop
- name: defconfig gem5
if: ${{ matrix.setconfig-option != '' }}
run: scons defconfig build/${{ matrix.image }} build_opts/${{ matrix.isa-option }}
- name: setconfig gem5
if: ${{ matrix.setconfig-option != '' }}
run: scons setconfig build/${{ matrix.image }} ${{ matrix.setconfig-option }}
- name: Build gem5
run: scons build/${{ matrix.image }}/gem5.opt ${{ matrix.command-line }}
run: scons build/${{ matrix.image }}/gem5.opt -j $(nproc)
- uses: actions/upload-artifact@v3
with:
name: ${{ needs.name-artifacts.outputs.build-name }}${{ matrix.image }}
@@ -245,8 +256,10 @@ jobs:
ref: develop
- name: Build ARM/gem5.opt
run: scons build/ARM/gem5.opt --ignore-style --duplicate-sources -j$(nproc)
- name: disable systemc
run: scons setconfig build/ARM --ignore-style USE_SYSTEMC=n
- name: Build ARM/libgem5_opt.so
run: scons build/ARM/libgem5_opt.so --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 -j$(nproc) --duplicate-sources
run: scons build/ARM/libgem5_opt.so --with-cxx-config --without-python --without-tcmalloc -j$(nproc) --duplicate-sources
- name: Compile gem5 withing SystemC
working-directory: ${{ github.workspace }}/util/systemc/gem5_within_systemc
run: make

View File

@@ -1,53 +0,0 @@
# Copyright (c) 2013, 2015-2020 ARM Limited
# All rights reserved.
#
# 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) 2011 Advanced Micro Devices, Inc.
# Copyright (c) 2009 The Hewlett-Packard Development Company
# 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 os
import os.path
from gem5_scons import warning
Import('*')
sticky_vars.AddVariables(
('BATCH', 'Use batch pool for build and tests', False),
('BATCH_CMD', 'Batch pool submission command name', 'qdo'),
('M5_BUILD_CACHE', 'Cache built objects in this directory', False),
('USE_EFENCE', 'Link with Electric Fence malloc debugger', False),
)

View File

@@ -44,15 +44,6 @@
#
# SCons top-level build description (SConstruct) file.
#
# While in this directory ('gem5'), just type 'scons' to build the default
# configuration (see below), or type 'scons build/<CONFIG>/<binary>'
# to build some other configuration (e.g., 'build/X86/gem5.opt' for
# the optimized X86 version).
#
# You can build gem5 in a different directory as long as there is a
# 'build/<CONFIG>' somewhere along the target path. The build system
# expects that all configs under the same build directory are being
# built for the same host system.
#
# Examples:
#
@@ -77,10 +68,11 @@
# Global Python imports
import atexit
import itertools
import os
import sys
from os import mkdir, remove, environ
from os import mkdir, remove, environ, listdir
from os.path import abspath, dirname, expanduser
from os.path import isdir, isfile
from os.path import join, split
@@ -115,8 +107,6 @@ AddOption('--no-colors', dest='use_colors', action='store_false',
help="Don't add color to abbreviated scons output")
AddOption('--with-cxx-config', action='store_true',
help="Build with support for C++-based configuration")
AddOption('--default',
help='Override which build_opts file to use for defaults')
AddOption('--ignore-style', action='store_true',
help='Disable style checking hooks')
AddOption('--linker', action='store', default=None, choices=linker_options,
@@ -162,6 +152,7 @@ sys.path[1:1] = [ Dir('#build_tools').abspath ]
# declared above.
from gem5_scons import error, warning, summarize_warnings, parse_build_path
from gem5_scons import TempFileSpawn, EnvDefaults, MakeAction, MakeActionTool
from gem5_scons import kconfig
import gem5_scons
from gem5_scons.builders import ConfigFile, AddLocalRPATH, SwitchingHeaders
from gem5_scons.builders import Blob
@@ -205,7 +196,71 @@ if not ('CC' in main and 'CXX' in main):
error("No C++ compiler installed (package g++ on Ubuntu and RedHat)")
# Find default configuration & binary.
Default(environ.get('M5_DEFAULT_BINARY', 'build/ARM/gem5.debug'))
default_target = environ.get('M5_DEFAULT_BINARY', None)
if default_target:
Default(default_target)
# If no target is set, even a default, print help instead.
if not BUILD_TARGETS:
warning("No target specified, and no default.")
SetOption('help', True)
buildopts_dir = Dir('#build_opts')
buildopts = list([f for f in os.listdir(buildopts_dir.abspath) if
isfile(os.path.join(buildopts_dir.abspath, f))])
buildopts.sort()
buildopt_list = '\n'.join(' ' * 10 + buildopt for buildopt in buildopts)
Help(f"""
Targets:
To build gem5 using a predefined configuration, use a target with
a directory called "build" in the path, followed by a directory named
after a predefined configuration in "build_opts" directory, and then
the actual target, likely a gem5 binary. For example:
scons build/ALL/gem5.opt
The "build" component tells SCons that the next part names an initial
configuration, and the part after that is the actual target.
The predefined targets currently available are:
{buildopt_list}
The extension on the gem5 binary specifies what type of binary to
build. Options are:
debug: A debug binary with optimizations turned off and debug info
turned on.
opt: An optimized binary with debugging still turned on.
fast: An optimized binary with debugging, asserts, and tracing
disabled.
gem5 can also be built as a static or dynamic library. In that case,
the extension is determined by the operating system, so the binary type
is part of the target file name. For example:
scons build/ARM/libgem5_opt.so
In MacOS, the extension should change to "dylib" like this:
scons build/ARM/libgem5_opt.dylib
To build unit tests, you can use a target like this:
scons build/RISCV/unittests.debug
The unittests.debug part of the target is actual a directory which
holds the results for all the unit tests built with the "debug"
settings. When that's used as the target, SCons will build all the
files under that directory, which will run all the tests.
To build and run an individual test, you can built it's binary
specifically and then run it manually:
scons build/SPARC/base/bitunion.test.opt
build/SPARC/base/bitunion.test.opt
""", append=True)
########################################################################
@@ -215,52 +270,134 @@ Default(environ.get('M5_DEFAULT_BINARY', 'build/ARM/gem5.debug'))
#
########################################################################
# helper function: find last occurrence of element in list
def rfind(l, elt, offs = -1):
for i in range(len(l)+offs, 0, -1):
if l[i] == elt:
return i
raise ValueError("element not found")
kconfig_actions = (
'defconfig',
'guiconfig',
'listnewconfig',
'menuconfig',
'oldconfig',
'olddefconfig',
'savedefconfig',
'setconfig',
)
Help("""
Kconfig:
In addition to the default configs, you can also create your own
configs, or edit one that already exists. To use one of the kconfig
tools with a particular directory, use a target which is the directory
to configure, and then the name of the tool. For example, to run
menuconfig on directory build_foo/bar, run:
scons menuconfig build_foo/bar
will set up a build directory in build_foo/bar if one doesn't already
exist, and open the menuconfig editor to view/set configuration
values.
Kconfig tools:
defconfig:
Set up a config using values specified in a defconfig file, or if no
value is given, use the default. The second argument specifies the
defconfig file. A defconfig file in the build_opts directory can be
implicitly specified in the build path via `build/<defconfig file>/`
scons defconfig build_foo/bar build_opts/MIPS
guiconfig:
Opens the guiconfig editor which will let you view and edit config
values, and view help text. guiconfig runs as a graphical application.
scons guiconfig build_foo/bar
listnewconfig:
Lists config options which are new in the Kconfig and which are not
currently set in the existing config file.
scons listnewconfig build_foo/bar
menuconfig:
Opens the menuconfig editor which will let you view and edit config
values, and view help text. menuconfig runs in text mode.
scons menuconfig build_foo/bar
oldconfig:
Update an existing config by adding settings for new options. This is
the same as the olddefconfig tool, except it asks what values you want
for the new settings.
scons oldconfig build_foo/bar
olddefconfig:
Update an existing config by adding settings for new options. This is
the same as the oldconfig tool, except it uses the default for any new
setting.
scons olddefconfig build_foo/bar
savedefconfig:
Save a defconfig file which would give rise to the current config.
For instance, you could use menuconfig to set up a config how you want
it with the options you cared about, and then use savedefconfig to save
a minimal config file. These files would be suitable to use in the
defconfig directory. The second argument specifies the filename for
the new defconfig file.
scons savedefconfig build_foo/bar new_def_config
setconfig:
Set values in an existing config directory as specified on the command
line. For example, to enable gem5's built in systemc kernel:
scons setconfig build_foo/bar USE_SYSTEMC=y
""", append=True)
# Take a list of paths (or SCons Nodes) and return a list with all
# paths made absolute and ~-expanded. Paths will be interpreted
# relative to the launch directory unless a different root is provided
def makePathAbsolute(path, root=GetLaunchDir()):
return abspath(os.path.join(root, expanduser(str(path))))
def makePathListAbsolute(path_list, root=GetLaunchDir()):
return [abspath(os.path.join(root, expanduser(str(p))))
for p in path_list]
return [makePathAbsolute(p, root) for p in path_list]
# Each target must have 'build' in the interior of the path; the
# directory below this will determine the build parameters. For
# example, for target 'foo/bar/build/X86/arch/x86/blah.do' we
# recognize that X86 specifies the configuration because it
# follow 'build' in the build path.
if BUILD_TARGETS and BUILD_TARGETS[0] in kconfig_actions:
# The build targets are really arguments for the kconfig action.
kconfig_args = BUILD_TARGETS[:]
BUILD_TARGETS[:] = []
# The funky assignment to "[:]" is needed to replace the list contents
# in place rather than reassign the symbol to a new list, which
# doesn't work (obviously!).
BUILD_TARGETS[:] = makePathListAbsolute(BUILD_TARGETS)
kconfig_action = kconfig_args[0]
if len(kconfig_args) < 2:
error(f'Missing arguments for kconfig action {kconfig_action}')
dir_to_configure = makePathAbsolute(kconfig_args[1])
# Generate a list of the unique build roots and configs that the
# collected targets reference.
variant_paths = set()
build_root = None
for t in BUILD_TARGETS:
this_build_root, variant = parse_build_path(t)
kconfig_args = kconfig_args[2:]
# Make sure all targets use the same build root.
if not build_root:
build_root = this_build_root
elif this_build_root != build_root:
error("build targets not under same build root\n %s\n %s" %
(build_root, this_build_root))
variant_paths = {dir_to_configure}
else:
# Each target must have 'build' in the interior of the path; the
# directory below this will determine the build parameters. For
# example, for target 'foo/bar/build/X86/arch/x86/blah.do' we
# recognize that X86 specifies the configuration because it
# follow 'build' in the build path.
# Collect all the variants into a set.
variant_paths.add(os.path.join('/', build_root, variant))
# The funky assignment to "[:]" is needed to replace the list contents
# in place rather than reassign the symbol to a new list, which
# doesn't work (obviously!).
BUILD_TARGETS[:] = makePathListAbsolute(BUILD_TARGETS)
# Make sure build_root exists (might not if this is the first build there)
if not isdir(build_root):
mkdir(build_root)
main['BUILDROOT'] = build_root
# Generate a list of the unique build directories that the collected
# targets reference.
variant_paths = set(map(parse_build_path, BUILD_TARGETS))
kconfig_action = None
########################################################################
@@ -395,10 +532,14 @@ for variant_path in variant_paths:
env = main.Clone()
env['BUILDDIR'] = variant_path
gem5_build = os.path.join(build_root, variant_path, 'gem5.build')
gem5_build = os.path.join(variant_path, 'gem5.build')
env['GEM5BUILD'] = gem5_build
Execute(Mkdir(gem5_build))
config_file = Dir(gem5_build).File('config')
kconfig_file = Dir(gem5_build).File('Kconfig')
gem5_kconfig_file = Dir('#src').File('Kconfig')
env.SConsignFile(os.path.join(gem5_build, 'sconsign'))
# Set up default C++ compiler flags
@@ -680,59 +821,13 @@ for variant_path in variant_paths:
after_sconsopts_callbacks.append(cb)
Export('AfterSConsopts')
# Sticky variables get saved in the variables file so they persist from
# one invocation to the next (unless overridden, in which case the new
# value becomes sticky).
sticky_vars = Variables(args=ARGUMENTS)
Export('sticky_vars')
extras_file = os.path.join(gem5_build, 'extras')
extras_var = Variables(extras_file, args=ARGUMENTS)
# EXTRAS is special since it affects what SConsopts need to be read.
sticky_vars.Add(('EXTRAS', 'Add extra directories to the compilation', ''))
# Set env variables according to the build directory config.
sticky_vars.files = []
# Variables for $BUILD_ROOT/$VARIANT_DIR are stored in
# $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) %s' %
', '.join(existing_vars_files))
else:
# Variant specific variables file doesn't exist.
# 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.
default = GetOption('default')
opts_dir = Dir('#build_opts').abspath
if default:
default_vars_files = [
gem5_build_vars,
build_root_vars,
os.path.join(opts_dir, default)
]
else:
default_vars_files = [os.path.join(opts_dir, variant_dir)]
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) %s not found,\n using defaults in %s" %
(' or '.join(current_vars_files), default_vars_file))
else:
error("Cannot find variables file(s) %s or default file(s) %s" %
(' or '.join(current_vars_files),
' or '.join(default_vars_files)))
Exit(1)
extras_var.Add(('EXTRAS', 'Add extra directories to the compilation', ''))
# Apply current settings for EXTRAS to env.
sticky_vars.Update(env)
extras_var.Update(env)
# Parse EXTRAS variable to build list of all directories where we're
# look for sources etc. This list is exported as extras_dir_list.
@@ -743,6 +838,17 @@ for variant_path in variant_paths:
Export('extras_dir_list')
# Generate a Kconfig that will source the main gem5 one, and any in any
# EXTRAS directories.
kconfig_base_py = Dir('#build_tools').File('kconfig_base.py')
kconfig_base_cmd_parts = [f'"{kconfig_base_py}" "{kconfig_file.abspath}"',
f'"{gem5_kconfig_file.abspath}"']
for ed in extras_dir_list:
kconfig_base_cmd_parts.append(f'"{ed}"')
kconfig_base_cmd = ' '.join(kconfig_base_cmd_parts)
if env.Execute(kconfig_base_cmd) != 0:
error("Failed to build base Kconfig file")
# Variables which were determined with Configure.
env['CONF'] = {}
@@ -770,24 +876,48 @@ for variant_path in variant_paths:
for cb in after_sconsopts_callbacks:
cb()
# Update env for new variables added by the SConsopts.
sticky_vars.Update(env)
# Handle any requested kconfig action, then exit.
if kconfig_action:
if kconfig_action == 'defconfig':
if len(kconfig_args) != 1:
error('Usage: scons defconfig <build dir> <defconfig file>')
defconfig_path = makePathAbsolute(kconfig_args[0])
kconfig.defconfig(env, kconfig_file.abspath,
defconfig_path, config_file.abspath)
elif kconfig_action == 'guiconfig':
kconfig.guiconfig(env, kconfig_file.abspath, config_file.abspath,
variant_path)
elif kconfig_action == 'listnewconfig':
kconfig.listnewconfig(env, kconfig_file.abspath,
config_file.abspath)
elif kconfig_action == 'menuconfig':
kconfig.menuconfig(env, kconfig_file.abspath, config_file.abspath,
variant_path)
elif kconfig_action == 'oldconfig':
kconfig.oldconfig(env, kconfig_file.abspath, config_file.abspath)
elif kconfig_action == 'olddefconfig':
kconfig.olddefconfig(env, kconfig_file.abspath,
config_file.abspath)
elif kconfig_action == 'savedefconfig':
if len(kconfig_args) != 1:
error('Usage: scons defconfig <build dir> <defconfig file>')
defconfig_path = makePathAbsolute(kconfig_args[0])
kconfig.savedefconfig(env, kconfig_file.abspath,
config_file.abspath, defconfig_path)
elif kconfig_action == 'setconfig':
kconfig.setconfig(env, kconfig_file.abspath, config_file.abspath,
ARGUMENTS)
Exit(0)
Help('''
Build variables for {dir}:
{help}
'''.format(dir=variant_dir, help=sticky_vars.GenerateHelpText(env)),
append=True)
# If no config exists yet, see if we know how to make one?
if not isfile(config_file.abspath):
buildopts_file = Dir('#build_opts').File(variant_dir)
if not isfile(buildopts_file.abspath):
error('No config found, and no implicit config recognized')
kconfig.defconfig(env, kconfig_file.abspath, buildopts_file.abspath,
config_file.abspath)
# 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()})
kconfig.update_env(env, kconfig_file.abspath, config_file.abspath)
# Do this after we save setting back, or else we'll tack on an
# extra 'qdo' every time we run scons.

View File

@@ -1,7 +1,9 @@
USE_ARM_ISA = True
USE_MIPS_ISA = True
USE_POWER_ISA = True
USE_RISCV_ISA = True
USE_SPARC_ISA = True
USE_X86_ISA = True
PROTOCOL = 'MESI_Two_Level'
RUBY=y
RUBY_PROTOCOL_MESI_TWO_LEVEL=y
BUILD_ISA=y
USE_ARM_ISA=y
USE_MIPS_ISA=y
USE_POWER_ISA=y
USE_RISCV_ISA=y
USE_SPARC_ISA=y
USE_X86_ISA=y

View File

@@ -1,2 +1,4 @@
USE_ARM_ISA = True
PROTOCOL = 'CHI'
BUILD_ISA=y
USE_ARM_ISA=y
RUBY=y
RUBY_PROTOCOL_CHI=y

View File

@@ -1,5 +1,4 @@
# Copyright (c) 2019 ARM Limited
# All rights reserved.
USE_ARM_ISA = True
PROTOCOL = 'MESI_Three_Level'
BUILD_ISA=y
USE_ARM_ISA=y
RUBY=y
RUBY_PROTOCOL_MESI_THREE_LEVEL=y

View File

@@ -1,5 +1,4 @@
# Copyright (c) 2019 ARM Limited
# All rights reserved.
USE_ARM_ISA = True
PROTOCOL = 'MESI_Three_Level_HTM'
BUILD_ISA=y
USE_ARM_ISA=y
RUBY=y
RUBY_PROTOCOL_MESI_THREE_LEVEL_HTM=y

View File

@@ -1,5 +1,4 @@
# Copyright (c) 2019 ARM Limited
# All rights reserved.
USE_ARM_ISA = True
PROTOCOL = 'MOESI_hammer'
BUILD_ISA=y
USE_ARM_ISA=y
RUBY=y
RUBY_PROTOCOL_MOESI_HAMMER=y

View File

@@ -1,4 +1,6 @@
PROTOCOL = 'GPU_VIPER'
USE_X86_ISA = True
TARGET_GPU_ISA = 'gcn3'
BUILD_GPU = True
RUBY=y
RUBY_PROTOCOL_GPU_VIPER=y
BUILD_ISA=y
USE_X86_ISA=y
GCN3_GPU_ISA=y
BUILD_GPU=y

View File

@@ -1,2 +1,2 @@
USE_NULL_ISA = True
PROTOCOL = 'Garnet_standalone'
RUBY=y
RUBY_PROTOCOL_GARNET_STANDALONE=y

View File

@@ -1,2 +1,4 @@
USE_MIPS_ISA = True
PROTOCOL = 'MI_example'
RUBY=y
RUBY_PROTOCOL_MI_EXAMPLE=y
BUILD_ISA=y
USE_MIPS_ISA=y

View File

@@ -1,2 +1,2 @@
USE_NULL_ISA = True
PROTOCOL='MI_example'
RUBY=y
RUBY_PROTOCOL_MI_EXAMPLE=y

View File

@@ -1,2 +1,2 @@
USE_NULL_ISA = True
PROTOCOL = 'MESI_Two_Level'
RUBY=y
RUBY_PROTOCOL_MESI_TWO_LEVEL=y

View File

@@ -1,2 +1,2 @@
USE_NULL_ISA = True
PROTOCOL='MOESI_CMP_directory'
RUBY=y
RUBY_PROTOCOL_MOESI_CMP_DIRECTORY=y

View File

@@ -1,2 +1,2 @@
USE_NULL_ISA = True
PROTOCOL='MOESI_CMP_token'
RUBY=y
RUBY_PROTOCOL_MOESI_CMP_TOKEN=y

View File

@@ -1,2 +1,2 @@
USE_NULL_ISA = True
PROTOCOL='MOESI_hammer'
RUBY=y
RUBY_PROTOCOL_MOESI_HAMMER=y

View File

@@ -1,2 +1,4 @@
USE_POWER_ISA = True
PROTOCOL = 'MI_example'
RUBY=y
RUBY_PROTOCOL_MI_EXAMPLE=y
BUILD_ISA=y
USE_POWER_ISA=y

View File

@@ -1,2 +1,4 @@
USE_RISCV_ISA = True
PROTOCOL = 'MI_example'
RUBY=y
RUBY_PROTOCOL_MI_EXAMPLE=y
BUILD_ISA=y
USE_RISCV_ISA=y

View File

@@ -1,2 +1,4 @@
USE_SPARC_ISA = True
PROTOCOL = 'MI_example'
RUBY=y
RUBY_PROTOCOL_MI_EXAMPLE=y
BUILD_ISA=y
USE_SPARC_ISA=y

View File

@@ -1,4 +1,6 @@
PROTOCOL = 'GPU_VIPER'
USE_X86_ISA = True
TARGET_GPU_ISA = 'vega'
BUILD_GPU = True
RUBY=y
RUBY_PROTOCOL_GPU_VIPER=y
BUILD_ISA=y
USE_X86_ISA=y
VEGA_GPU_ISA=y
BUILD_GPU=y

View File

@@ -1,3 +1,5 @@
USE_X86_ISA = True
PROTOCOL = 'MESI_Two_Level'
NUMBER_BITS_PER_SET = '128'
RUBY=y
NUMBER_BITS_PER_SET=128
RUBY_PROTOCOL_MESI_TWO_LEVEL=y
BUILD_ISA=y
USE_X86_ISA=y

View File

@@ -1,3 +1,5 @@
USE_X86_ISA = True
PROTOCOL = 'MESI_Two_Level'
NUMBER_BITS_PER_SET = '128'
RUBY=y
NUMBER_BITS_PER_SET=128
RUBY_PROTOCOL_MESI_TWO_LEVEL=y
BUILD_ISA=y
USE_X86_ISA=y

View File

@@ -1,2 +1,4 @@
USE_X86_ISA = True
PROTOCOL = 'MI_example'
RUBY=y
RUBY_PROTOCOL_MI_EXAMPLE=y
BUILD_ISA=y
USE_X86_ISA=y

View File

@@ -1,2 +1,4 @@
PROTOCOL = 'MOESI_AMD_Base'
USE_X86_ISA = True
RUBY=y
RUBY_PROTOCOL_MOESI_AMD_BASE=y
BUILD_ISA=y
USE_X86_ISA=y

55
build_tools/kconfig_base.py Executable file
View File

@@ -0,0 +1,55 @@
#! /usr/bin/env python3
#
# Copyright 2022 Google LLC
#
# 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
from code_formatter import code_formatter
parser = argparse.ArgumentParser()
parser.add_argument("output", help="path of generated base Kconfig file")
parser.add_argument("main", help="relative path to the main gem5 Kconfig file")
parser.add_argument("extras_dirs", nargs="*", help="EXTRAS paths")
args = parser.parse_args()
code = code_formatter()
code(
f"""# Automatically generated base Kconfig file, DO NOT EDIT!
source "{args.main}"
"""
)
for extras_dir in args.extras_dirs:
code(
f"""
osource "{extras_dir}/Kconfig"
"""
)
code.write(args.output)

View File

@@ -39,6 +39,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import os
import os.path
import pickle
import sys
import tempfile
@@ -56,7 +57,7 @@ termcap = get_termcap()
def strip_build_path(path, env):
path = str(path)
build_base = "build/"
variant_base = env["BUILDROOT"] + os.path.sep
variant_base = os.path.dirname(env["BUILDDIR"]) + os.path.sep
if path.startswith(variant_base):
path = path[len(variant_base) :]
elif path.startswith(build_base):
@@ -117,7 +118,7 @@ class Transform:
source = source[0 : self.max_sources]
def strip(f):
return strip_build_path(str(f), env)
return strip_build_path(f, env)
if len(source) > 0:
srcs = list(map(strip, source))
@@ -255,18 +256,21 @@ def error(*args, **kwargs):
def parse_build_path(target):
path_dirs = target.split("/")
# Pop off the target file.
path_dirs.pop()
# Search backwards for the "build" directory. Whatever was just before it
# was the name of the variant.
variant_dir = path_dirs.pop()
while path_dirs and path_dirs[-1] != "build":
variant_dir = path_dirs.pop()
if not path_dirs:
error("No non-leaf 'build' dir found on target path.", target)
return os.path.join("/", *path_dirs), variant_dir
# Search backwards for a directory with a gem5.build sub-directory, or a
# directory who's parent is called "build". gem5.build identifies an
# existing gem5 build directory. A directory called "build" is an anchor
# for a legacy "build/${VARIANT}/${TARGET}" style build path, where the
# variant selects a default config to use.
while path_dirs:
dot_gem5 = os.path.join("/", *path_dirs, "gem5.build")
if (
os.path.isdir(dot_gem5)
or len(path_dirs) > 1
and path_dirs[-2] == "build"
):
return os.path.join("/", *path_dirs)
path_dirs.pop()
error(f"No existing build directory and no variant for {target}")
# The MakeAction wrapper, and a SCons tool to set up the *COMSTR variables.

View File

@@ -0,0 +1,228 @@
# Copyright 2022 Google LLC
#
# 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 os
from . import error
import kconfiglib
_kconfig_helpers = {
"DEFCONFIG_PY": "defconfig.py",
"GUICONFIG_PY": "guiconfig.py",
"LISTNEWCONFIG_PY": "listnewconfig.py",
"MENUCONFIG_PY": "menuconfig.py",
"OLDCONFIG_PY": "oldconfig.py",
"OLDDEFCONFIG_PY": "olddefconfig.py",
"SAVEDEFCONFIG_PY": "savedefconfig.py",
"SETCONFIG_PY": "setconfig.py",
}
def _prep_env(env, base_kconfig, config_path=None):
"""
Prepare the required env vars for Kconfiglib
return the Scons env with Kconfiglib env
:param env: Scons env
:param base_kconfig: path to the Top-level Kconfig file
:param config_path: path to the configuration file
"""
kconfig_env = env.Clone()
for key, val in kconfig_env["CONF"].items():
if isinstance(val, bool):
val = "y" if val else "n"
kconfig_env["ENV"][key] = val
kconfig_env["ENV"]["CONFIG_"] = ""
if config_path:
kconfig_env["ENV"]["KCONFIG_CONFIG"] = config_path
kconfig_env["BASE_KCONFIG"] = base_kconfig
ext = env.Dir("#ext")
kconfiglib_dir = ext.Dir("Kconfiglib")
for key, name in _kconfig_helpers.items():
kconfig_env[key] = kconfiglib_dir.File(name)
return kconfig_env
def _process_kconfig(env, base_kconfig):
"""
Create the kconfig instance by given Scons env vars
:param env: Scons env
:param base_kconfig: path to the Top-level Kconfig file
"""
saved_env = os.environ
try:
os.environ.update({key: str(val) for key, val in env["ENV"].items()})
kconfig = kconfiglib.Kconfig(filename=base_kconfig)
finally:
os.environ = saved_env
return kconfig
def defconfig(env, base_kconfig, config_in, config_out):
"""
Interface of handling defconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_out)
kconfig_env["CONFIG_IN"] = config_in
if (
kconfig_env.Execute(
'"${DEFCONFIG_PY}" --kconfig "${BASE_KCONFIG}" ' '"${CONFIG_IN}"'
)
!= 0
):
error("Failed to run defconfig")
def guiconfig(env, base_kconfig, config_path, main_menu_text):
"""
Interface of handling guiconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_path)
kconfig_env["ENV"]["MAIN_MENU_TEXT"] = main_menu_text
if kconfig_env.Execute('"${GUICONFIG_PY}" "${BASE_KCONFIG}"') != 0:
error("Failed to run guiconfig")
def listnewconfig(env, base_kconfig, config_path):
"""
Interface of handling listnewconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_path)
# Provide a little visual separation between SCons output and
# listnewconfig output.
print()
if kconfig_env.Execute('"${LISTNEWCONFIG_PY}" "${BASE_KCONFIG}"') != 0:
error("Failed to run listnewconfig")
def oldconfig(env, base_kconfig, config_path):
"""
Interface of handling oldconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_path)
if kconfig_env.Execute('"${OLDCONFIG_PY}" "${BASE_KCONFIG}"') != 0:
error("Failed to run oldconfig")
def olddefconfig(env, base_kconfig, config_path):
"""
Interface of handling olddefconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_path)
if kconfig_env.Execute('"${OLDDEFCONFIG_PY}" "${BASE_KCONFIG}"') != 0:
error("Failed to run oldconfig")
def menuconfig(
env, base_kconfig, config_path, main_menu_text, style="aquatic"
):
"""
Interface of handling menuconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_path)
kconfig_env["ENV"]["MENUCONFIG_STYLE"] = style
kconfig_env["ENV"]["MAIN_MENU_TEXT"] = main_menu_text
if kconfig_env.Execute('"${MENUCONFIG_PY}" "${BASE_KCONFIG}"') != 0:
error("Failed to run menuconfig")
def savedefconfig(env, base_kconfig, config_in, config_out):
"""
Interface of handling savedefconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_in)
kconfig_env["CONFIG_OUT"] = config_out
if (
kconfig_env.Execute(
'"${SAVEDEFCONFIG_PY}" '
'--kconfig "${BASE_KCONFIG}" --out "${CONFIG_OUT}"'
)
!= 0
):
error("Failed to run savedefconfig")
def setconfig(env, base_kconfig, config_path, assignments):
"""
Interface of handling setconfig.py of Kconfiglib
"""
kconfig_env = _prep_env(env, base_kconfig, config_path)
kconfig = _process_kconfig(kconfig_env, base_kconfig)
sym_names = list(sym.name for sym in kconfig.unique_defined_syms)
filtered = dict(
{key: val for key, val in assignments.items() if key in sym_names}
)
setconfig_cmd_parts = ['"${SETCONFIG_PY}" --kconfig "${BASE_KCONFIG}"']
for key, val in filtered.items():
if isinstance(val, bool):
val = "y" if val else "n"
setconfig_cmd_parts.append(f"{key}={val}")
setconfig_cmd = " ".join(setconfig_cmd_parts)
if kconfig_env.Execute(setconfig_cmd) != 0:
error("Failed to run setconfig")
def update_env(env, base_kconfig, config_path):
"""
Update the Scons' env["CONF"] options from kconfig env
:param env: Scons env
:param base_kconfig: path to the Top-level Kconfig file
:param config_path: path to the configuration file
"""
kconfig_env = _prep_env(env, base_kconfig, config_path)
kconfig = _process_kconfig(kconfig_env, base_kconfig)
kconfig.load_config(config_path)
for sym in kconfig.unique_defined_syms:
val = sym.str_value
if sym.type == kconfiglib.BOOL:
env["CONF"][sym.name] = True if val == "y" else False
elif sym.type == kconfiglib.TRISTATE:
warning("No way to configure modules for now")
env["CONF"][sym.name] = True if val == "y" else False
elif sym.type == kconfiglib.INT:
if not val:
val = "0"
env["CONF"][sym.name] = int(val, 0)
elif sym.type == kconfiglib.HEX:
if not val:
val = "0"
env["CONF"][sym.name] = int(val, 16)
elif sym.type == kconfiglib.STRING:
env["CONF"][sym.name] = val
elif sym.type == kconfiglib.UNKNOWN:
warning(f'Config symbol "{sym.name}" has unknown type')
env["CONF"][sym.name] = val
else:
type_name = kconfiglib.TYPE_TO_STR[sym.type]
error(f"Unrecognized symbol type {type_name}")

53
src/Kconfig Normal file
View File

@@ -0,0 +1,53 @@
# Copyright 2022 Google LLC
#
# 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.
mainmenu "$(MAIN_MENU_TEXT)"
config BATCH
bool "Use batch pool for build and test"
default n
config BATCH_CMD
string "Batch pool submission command name"
default "qdo"
depends on BATCH
config M5_BUILD_CACHE
string "Cache built objects in this directory"
default ""
config USE_EFENCE
bool "Link with Electric Fence malloc debugger"
default n
rsource "base/Kconfig"
rsource "mem/ruby/Kconfig"
rsource "learning_gem5/part3/Kconfig"
rsource "proto/Kconfig"
rsource "dev/net/Kconfig"
rsource "arch/Kconfig"
rsource "cpu/Kconfig"
rsource "systemc/Kconfig"
rsource "gpu-compute/Kconfig"

View File

@@ -1,4 +1,4 @@
# Copyright 2020 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,11 +23,26 @@
# (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('*')
config TARGET_GPU_ISA
string
def add_isa_lists():
sticky_vars.AddVariables(
EnumVariable('TARGET_GPU_ISA', 'Target GPU ISA', 'gcn3',
sorted(set(main.Split('${ALL_GPU_ISAS}')))),
)
AfterSConsopts(add_isa_lists)
rsource "amdgpu/Kconfig"
config BUILD_ISA
bool "Build the arch ISA"
default n
menu "ISA"
if BUILD_ISA
rsource "arm/Kconfig"
rsource "mips/Kconfig"
rsource "power/Kconfig"
rsource "riscv/Kconfig"
rsource "sparc/Kconfig"
rsource "x86/Kconfig"
endif
endmenu

View File

@@ -56,20 +56,17 @@ Import('*')
#
#################################################################
if env['CONF']['USE_ARM_ISA']:
isa = 'arm'
elif env['CONF']['USE_MIPS_ISA']:
isa = 'mips'
elif env['CONF']['USE_POWER_ISA']:
isa = 'power'
elif env['CONF']['USE_RISCV_ISA']:
isa = 'riscv'
elif env['CONF']['USE_SPARC_ISA']:
isa = 'sparc'
elif env['CONF']['USE_X86_ISA']:
isa = 'x86'
elif env['CONF']['USE_NULL_ISA']:
isa = 'null'
if env['CONF']['BUILD_ISA']:
if (
not env['CONF']['USE_ARM_ISA'] and
not env['CONF']['USE_MIPS_ISA'] and
not env['CONF']['USE_POWER_ISA'] and
not env['CONF']['USE_RISCV_ISA'] and
not env['CONF']['USE_SPARC_ISA'] and
not env['CONF']['USE_X86_ISA']
):
error("At least one ISA need to be set")
amdgpu_isa = ['gcn3', 'vega']

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,6 +23,11 @@
# (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('*')
sticky_vars.Add(BoolVariable('USE_POWER_ISA', 'Enable POWER ISA support',
False))
if BUILD_GPU
choice "TARGET_GPU_ISA"
prompt "GPU ISA"
endchoice
endif
rsource "gcn3/Kconfig"
rsource "vega/Kconfig"

View File

@@ -0,0 +1,33 @@
# Copyright 2022 Google LLC
#
# 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.
config TARGET_GPU_ISA
default "gcn3" if GCN3_GPU_ISA
cont_choice "TARGET_GPU_ISA"
config GCN3_GPU_ISA
depends on BUILD_GPU
bool "GCN3"
endchoice

View File

@@ -0,0 +1,33 @@
# Copyright 2022 Google LLC
#
# 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.
config TARGET_GPU_ISA
default 'vega' if VEGA_GPU_ISA
cont_choice "TARGET_GPU_ISA"
config VEGA_GPU_ISA
depends on BUILD_GPU
bool "VEGA"
endchoice

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,7 @@
# (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('*')
sticky_vars.Add(BoolVariable('USE_X86_ISA', 'Enable X86 ISA support', False))
config USE_ARM_ISA
bool "ARM ISA support"
rsource "fastmodel/Kconfig"

View File

@@ -40,7 +40,7 @@
Import('*')
if env['USE_ARM_ISA']:
if env['CONF']['USE_ARM_ISA']:
env.TagImplies('arm isa', 'gem5 lib')
# The GTest function does not have a 'tags' parameter. We therefore apply this
@@ -48,7 +48,7 @@ if env['USE_ARM_ISA']:
#
# Note: This will need reconfigured for multi-isa. E.g., if this is
# incorporated: https://gem5-review.googlesource.com/c/public/gem5/+/52491
if env['USE_ARM_ISA']:
if env['CONF']['USE_ARM_ISA']:
GTest('aapcs64.test', 'aapcs64.test.cc',
'../../base/debug.cc',
'../../cpu/reg_class.cc',

View File

@@ -0,0 +1,60 @@
# Copyright 2022 Google LLC
#
# 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.
menu "Fast Model"
config USE_ARM_FASTMODEL
bool "Fast Model integration"
default n
depends on USE_ARM_ISA
depends on USE_SYSTEMC
if USE_ARM_FASTMODEL
config PVLIB_HOME
string "Fast Model portfolio directory"
default "$(PVLIB_HOME)"
config PVLIB_FLAVOR
string "What build flavor of the Fast Model pvlib to use"
default "Linux64_GCC-7.3"
config MAXCORE_HOME
string "Fast Model tools directory"
default "$(MAXCORE_HOME)"
config ARMLMD_LICENSE_FILE
string "ARM license file location"
default "$(ARMLMD_LICENSE_FILE)"
config ARMLMD_LICENSE_COUNT
int "The maximum number of ARM licenses to use concurrently"
default 1
config SIMGEN
string "simgen executable (leave unset for MAXCORE_HOME/bin/simgen"
default ""
endif
endmenu

View File

@@ -48,11 +48,7 @@ from gem5_scons import Transform, warning, error
import os.path
if env['CONF']['USE_ARM_FASTMODEL']:
if env['CONF']['USE_SYSTEMC']:
env.TagImplies('arm fastmodel', 'arm isa')
else:
warning('ARM Fast Models require systemc support')
env['CONF']['USE_ARM_FASTMODEL'] = False
env.TagImplies('arm fastmodel', 'arm isa')
systemc_home = Dir('#/src/systemc/ext/systemc_home')
@@ -302,6 +298,10 @@ for header in common_headers:
header_src = examples_common_dir.Dir('include').File(header)
Command(header_target, header_src, Copy('${TARGET}', '${SOURCE}'))
if not env['CONF']['SIMGEN']:
env['CONF']['SIMGEN'] = os.path.join(
env['CONF']['MAXCORE_HOME'], 'bin', 'simgen')
class ArmFastModelComponent(object):
def __init__(self, project_file, *extra_deps, tags=None):
if not tags:

View File

@@ -1,5 +1,4 @@
# Copyright 2019 Google, Inc.
# All rights reserved.
# Copyright 2019,2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -28,20 +27,12 @@ Import('*')
import os
default_simgen = os.path.join('${MAXCORE_HOME}', 'bin', 'simgen')
def extract_var(name):
val = os.environ.get(name, None)
if val is not None:
main['CONF'][name] = val
sticky_vars.AddVariables(
BoolVariable('USE_ARM_FASTMODEL',
'Build support for integrating ARM Fast Models', False),
('PVLIB_HOME', 'Fast Model portfolio directory',
os.environ.get('PVLIB_HOME', '')),
('PVLIB_FLAVOR', 'What build flavor of the Fast Model pvlib to use',
'Linux64_GCC-7.3'),
('MAXCORE_HOME', 'Fast Model tools directory',
os.environ.get('MAXCORE_HOME', '')),
('ARMLMD_LICENSE_FILE', 'ARM license file location',
os.environ.get('ARMLMD_LICENSE_FILE', '')),
('ARMLMD_LICENSE_COUNT',
'The maximum number of ARM licenses to use concurrently', 1),
('SIMGEN', 'simgen executable', os.environ.get('SIMGEN', default_simgen)),
)
# Make these environment variables in the host environment available when
# running kconfig tools by putting them in env['CONF'].
for var in 'PVLIB_HOME', 'MAXCORE_HOME', 'ARMLMD_LICENSE_FILE':
extract_var(var)

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,5 @@
# (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('*')
sticky_vars.Add(BoolVariable('USE_ARM_ISA', 'Enable ARM ISA support', False))
config USE_MIPS_ISA
bool "MIPS ISA support"

View File

@@ -29,7 +29,7 @@
Import('*')
if env['USE_MIPS_ISA']:
if env['CONF']['USE_MIPS_ISA']:
env.TagImplies('mips isa', 'gem5 lib')
Source('decoder.cc', tags='mips isa')

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,5 @@
# (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('*')
sticky_vars.Add(BoolVariable('USE_NULL_ISA', 'Enable NULL ISA support', False))
config USE_POWER_ISA
bool "POWER ISA support"

View File

@@ -30,7 +30,7 @@
Import('*')
if env['USE_POWER_ISA']:
if env['CONF']['USE_POWER_ISA']:
env.TagImplies('power isa', 'gem5 lib')
Source('decoder.cc', tags='power isa')

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,5 @@
# (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('*')
sticky_vars.Add(BoolVariable('USE_MIPS_ISA', 'Enable MIPS ISA support', False))
config USE_RISCV_ISA
bool "RISC-V ISA support"

View File

@@ -43,7 +43,7 @@
Import('*')
if env['USE_RISCV_ISA']:
if env['CONF']['USE_RISCV_ISA']:
env.TagImplies('riscv isa', 'gem5 lib')
Source('decoder.cc', tags='riscv isa')

View File

@@ -1,28 +0,0 @@
# Copyright 2021 Google, Inc.
#
# 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('*')
sticky_vars.Add(BoolVariable('USE_RISCV_ISA', 'Enable RISC-V ISA support',
False))

27
src/arch/sparc/Kconfig Normal file
View File

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# 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.
config USE_SPARC_ISA
bool "SPARC ISA support"

View File

@@ -28,7 +28,7 @@
Import('*')
if env['USE_SPARC_ISA']:
if env['CONF']['USE_SPARC_ISA']:
env.TagImplies('sparc isa', 'gem5 lib')
Source('asi.cc', tags='sparc isa')

View File

@@ -1,28 +0,0 @@
# Copyright 2021 Google, Inc.
#
# 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('*')
sticky_vars.Add(BoolVariable('USE_SPARC_ISA', 'Enable SPARC ISA support',
False))

27
src/arch/x86/Kconfig Normal file
View File

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# 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.
config USE_X86_ISA
bool "X86 ISA support"

View File

@@ -40,7 +40,7 @@
Import('*')
if env['USE_X86_ISA']:
if env['CONF']['USE_X86_ISA']:
env.TagImplies('x86 isa', 'gem5 lib')
Source('cpuid.cc', tags='x86 isa')

45
src/base/Kconfig Normal file
View File

@@ -0,0 +1,45 @@
# Copyright 2022 Google LLC
#
# 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.
config HAVE_FENV
def_bool $(HAVE_FENV)
config HAVE_PNG
def_bool $(HAVE_PNG)
config HAVE_VALGRIND
def_bool $(HAVE_VALGRIND)
config HAVE_DEPRECATED_NAMESPACE
def_bool $(HAVE_DEPRECATED_NAMESPACE)
config HAVE_POSIX_CLOCK
def_bool $(HAVE_POSIX_CLOCK)
config USE_POSIX_CLOCK
depends on HAVE_POSIX_CLOCK
bool "Use POSIX clocks"
rsource "stats/Kconfig"

View File

@@ -81,6 +81,3 @@ with gem5_scons.Configure(werror_env) as conf:
warning("Deprecated namespaces are not supported by this compiler.\n"
"Please make sure to check the mailing list for deprecation "
"announcements.")
sticky_vars.Add(BoolVariable('USE_POSIX_CLOCK', 'Use POSIX Clocks',
'${CONF["HAVE_POSIX_CLOCK"]}'))

27
src/base/stats/Kconfig Normal file
View File

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# 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.
config HAVE_HDF5
def_bool $(HAVE_HDF5)

29
src/cpu/Kconfig Normal file
View File

@@ -0,0 +1,29 @@
# Copyright 2023 Google LLC
#
# 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.
config HAVE_CAPSTONE
def_bool $(HAVE_CAPSTONE)
rsource "kvm/Kconfig"

33
src/cpu/kvm/Kconfig Normal file
View File

@@ -0,0 +1,33 @@
# Copyright 2022 Google LLC
#
# 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.
config KVM_ISA
string
default "$(KVM_ISA)"
config USE_KVM
depends on KVM_ISA != ""
bool "Enable hardware virtualized (KVM) CPU models"
default y

View File

@@ -61,13 +61,5 @@ with gem5_scons.Configure(main) as conf:
warning("perf_event headers lack support for the exclude_host "
"attribute. KVM instruction counts will be inaccurate.")
def create_use_kvm_var():
if main['CONF']['HAVE_KVM'] and main['CONF']['KVM_ISA']:
sticky_vars.Add(BoolVariable('USE_KVM',
'Enable hardware virtualized (KVM) CPU models', True))
else:
main['CONF']['USE_KVM'] = False
warning("Cannot enable KVM, host seems to lack KVM support")
AfterSConsopts(create_use_kvm_var)
if not main['CONF']['KVM_ISA']:
warning("Can not enable KVM, host seems to lack KVM support")

View File

@@ -40,7 +40,7 @@
Import('*')
if not env['CONF']['USE_NULL_ISA']:
if env['CONF']['BUILD_ISA']:
SimObject('BaseMinorCPU.py', sim_objects=[
'MinorOpClass', 'MinorOpClassSet', 'MinorFUTiming', 'MinorFU',
'MinorFUPool', 'BaseMinorCPU'],

View File

@@ -30,7 +30,7 @@ import sys
Import('*')
if not env['CONF']['USE_NULL_ISA']:
if env['CONF']['BUILD_ISA']:
SimObject('FUPool.py', sim_objects=['FUPool'])
SimObject('FuncUnitConfig.py', sim_objects=[])
SimObject('BaseO3CPU.py', sim_objects=['BaseO3CPU'], enums=[

View File

@@ -37,7 +37,7 @@
Import('*')
if not env['CONF']['USE_NULL_ISA']:
if env['CONF']['BUILD_ISA']:
SimObject('SimpleTrace.py', sim_objects=['SimpleTrace'])
Source('simple_trace.cc')
DebugFlag('SimpleTrace')

View File

@@ -28,7 +28,7 @@
Import('*')
if not env['CONF']['USE_NULL_ISA']:
if env['CONF']['BUILD_ISA']:
SimObject('BaseAtomicSimpleCPU.py', sim_objects=['BaseAtomicSimpleCPU'])
Source('atomic.cc')

View File

@@ -28,6 +28,6 @@
Import('*')
if not env['CONF']['USE_NULL_ISA']:
if env['CONF']['BUILD_ISA']:
SimObject('SimPoint.py', sim_objects=['SimPoint'])
Source('simpoint.cc')

View File

@@ -35,7 +35,7 @@ Import('*')
# When this dependency is removed, the ruby tester should be compiled
# independently from Ruby
#
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('RubyDirectedTester.py', sim_objects=[

View File

@@ -28,7 +28,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('GarnetSyntheticTraffic.py', sim_objects=['GarnetSyntheticTraffic'])

View File

@@ -34,7 +34,7 @@ Import('*')
if not env['CONF']['BUILD_GPU']:
Return()
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('ProtocolTester.py', sim_objects=['ProtocolTester'])

View File

@@ -35,7 +35,7 @@ Import('*')
# When this dependency is removed, the ruby tester should be compiled
# independently from Ruby
#
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('RubyTester.py', sim_objects=['RubyTester'])

27
src/dev/net/Kconfig Normal file
View File

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# 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.
config HAVE_TUNTAP
def_bool $(HAVE_TUNTAP)

28
src/gpu-compute/Kconfig Normal file
View File

@@ -0,0 +1,28 @@
# Copyright 2022 Google LLC
#
# 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.
menuconfig BUILD_GPU
bool "Build the compute-GPU model"
default n

View File

@@ -1,4 +1,4 @@
# Copyright 2020 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,7 +23,10 @@
# (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('*')
config PROTOCOL
default "MSI" if RUBY_PROTOCOL_MSI
sticky_vars.Add(BoolVariable('BUILD_GPU', 'Build the compute-GPU model',
False))
cont_choice "Ruby protocol"
config RUBY_PROTOCOL_MSI
bool "MSI"
endchoice

View File

@@ -2,8 +2,5 @@ Import('*')
# NOTE: All SLICC setup code found in src/mem/ruby/protocol/SConscript
# Register this protocol with gem5/SCons
main.Append(ALL_PROTOCOLS=['MSI'])
# Add this directory to the search path for SLICC
main.Append(PROTOCOL_DIRS=[Dir('.')])

50
src/mem/ruby/Kconfig Normal file
View File

@@ -0,0 +1,50 @@
# Copyright 2022 Google LLC
#
# 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.
menu "Ruby"
menuconfig RUBY
bool "Enable"
if RUBY
config PROTOCOL
string
config NEED_PARTIAL_FUNC_READS
bool
choice "Ruby protocol"
prompt "Ruby protocol"
endchoice
config SLICC_HTML
bool 'Create HTML files'
config NUMBER_BITS_PER_SET
int 'Max elements in set'
default 64
endif
endmenu
rsource "protocol/Kconfig"

View File

@@ -49,7 +49,7 @@ from gem5_scons import Transform
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
DebugFlag('ProtocolTrace')
@@ -112,7 +112,7 @@ MakeInclude('structures/PerfectCacheMemory.hh')
MakeInclude('structures/PersistentTable.hh')
MakeInclude('structures/RubyPrefetcher.hh')
MakeInclude('structures/TBEStorage.hh')
if env['PROTOCOL'] == 'CHI':
if env['CONF']['PROTOCOL'] == 'CHI':
MakeInclude('structures/MN_TBEStorage.hh')
MakeInclude('structures/MN_TBETable.hh')
MakeInclude('structures/TBETable.hh')

View File

@@ -25,12 +25,4 @@
Import('*')
main.SetDefault(ALL_PROTOCOLS=[], PROTOCOL_DIRS=[], SLICC_INCLUDES=[])
def add_protocols_var():
sticky_vars.Add(EnumVariable('PROTOCOL', 'Coherence protocol for Ruby',
'None', main['ALL_PROTOCOLS']))
AfterSConsopts(add_protocols_var)
sticky_vars.Add(('NUMBER_BITS_PER_SET', 'Max elements in set (default 64)',
64))
main.SetDefault(PROTOCOL_DIRS=[], SLICC_INCLUDES=[])

View File

@@ -28,7 +28,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
env.Append(CPPDEFINES={'NUMBER_BITS_PER_SET':

View File

@@ -28,7 +28,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('BasicLink.py', sim_objects=[

View File

@@ -33,7 +33,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('FaultModel.py', sim_objects=['FaultModel'])

View File

@@ -28,7 +28,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('GarnetLink.py', enums=['CDCType'], sim_objects=[

View File

@@ -40,7 +40,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('SimpleLink.py', sim_objects=['SimpleExtLink', 'SimpleIntLink'])

View File

@@ -28,7 +28,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
Source('AccessTraceForAddress.cc')

View File

@@ -0,0 +1,62 @@
# Copyright 2022 Google LLC
#
# 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.
config PROTOCOL
default "GPU_VIPER" if RUBY_PROTOCOL_GPU_VIPER
default "MOESI_AMD_Base" if RUBY_PROTOCOL_MOESI_AMD_BASE
default "MESI_Two_Level" if RUBY_PROTOCOL_MESI_TWO_LEVEL
default "MESI_Three_Level" if RUBY_PROTOCOL_MESI_THREE_LEVEL
default "MESI_Three_Level_HTM" if RUBY_PROTOCOL_MESI_THREE_LEVEL_HTM
default "MI_example" if RUBY_PROTOCOL_MI_EXAMPLE
default "MOESI_CMP_directory" if RUBY_PROTOCOL_MOESI_CMP_DIRECTORY
default "MOESI_CMP_token" if RUBY_PROTOCOL_MOESI_CMP_TOKEN
default "MOESI_hammer" if RUBY_PROTOCOL_MOESI_HAMMER
default "Garnet_standalone" if RUBY_PROTOCOL_GARNET_STANDALONE
cont_choice "Ruby protocol"
config RUBY_PROTOCOL_GPU_VIPER
bool "GPU VIPER"
depends on BUILD_GPU
config RUBY_PROTOCOL_MOESI_AMD_BASE
bool "MOESI AMD base"
config RUBY_PROTOCOL_MESI_TWO_LEVEL
bool "MESI two level"
config RUBY_PROTOCOL_MESI_THREE_LEVEL
bool "MESI three level"
config RUBY_PROTOCOL_MESI_THREE_LEVEL_HTM
bool "MESI three level HTM"
config RUBY_PROTOCOL_MI_EXAMPLE
bool "MI example"
config RUBY_PROTOCOL_MOESI_CMP_DIRECTORY
bool "MOESI CMP directory"
config RUBY_PROTOCOL_MOESI_CMP_TOKEN
bool "MOESI CMP token"
config RUBY_PROTOCOL_MOESI_HAMMER
bool "MOESI hammer"
config RUBY_PROTOCOL_GARNET_STANDALONE
bool "Garnet standalone"
endchoice
rsource "chi/Kconfig"

View File

@@ -36,7 +36,7 @@ from gem5_scons import Transform
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
output_dir = Dir('.')

View File

@@ -30,23 +30,6 @@ import os
Import('*')
main.Append(ALL_PROTOCOLS=[
'GPU_VIPER',
'MOESI_AMD_Base',
'MESI_Two_Level',
'MESI_Three_Level',
'MESI_Three_Level_HTM',
'MI_example',
'MOESI_CMP_directory',
'MOESI_CMP_token',
'MOESI_hammer',
'Garnet_standalone',
'None'
])
opt = BoolVariable('SLICC_HTML', 'Create HTML files', False)
sticky_vars.Add(opt)
main.Append(PROTOCOL_DIRS=[Dir('.')])
protocol_base = Dir('.')

View File

@@ -0,0 +1,35 @@
# Copyright 2022 Google LLC
#
# 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.
config PROTOCOL
default "CHI" if RUBY_PROTOCOL_CHI
config NEED_PARTIAL_FUNC_READS
default y if RUBY_PROTOCOL_CHI
cont_choice "Ruby protocol"
config RUBY_PROTOCOL_CHI
bool "CHI"
endchoice

View File

@@ -37,11 +37,4 @@
Import('*')
# Register this protocol with gem5/SCons
main.Append(ALL_PROTOCOLS=['CHI'])
# CHI requires Ruby's inerface to support partial functional reads
main.Append(NEED_PARTIAL_FUNC_READS=['CHI'])
main.Append(PROTOCOL_DIRS=[Dir('.')])

View File

@@ -28,7 +28,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('Controller.py', sim_objects=['RubyController'])

View File

@@ -40,7 +40,7 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
SimObject('RubyCache.py', sim_objects=['RubyCache'])
@@ -57,5 +57,5 @@ Source('TimerTable.cc')
Source('BankedArray.cc')
Source('ALUFreeListArray.cc')
Source('TBEStorage.cc')
if env['PROTOCOL'] == 'CHI':
if env['CONF']['PROTOCOL'] == 'CHI':
Source('MN_TBETable.cc')

View File

@@ -40,12 +40,12 @@
Import('*')
if env['CONF']['PROTOCOL'] == 'None':
if not env['CONF']['RUBY']:
Return()
env.Append(CPPDEFINES=['PROTOCOL_' + env['CONF']['PROTOCOL']])
if env['CONF']['PROTOCOL'] in env['NEED_PARTIAL_FUNC_READS']:
if env['CONF']['NEED_PARTIAL_FUNC_READS']:
env.Append(CPPDEFINES=['PARTIAL_FUNC_READS'])
if env['CONF']['BUILD_GPU']:

27
src/proto/Kconfig Normal file
View File

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# 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.
config HAVE_PROTOBUF
def_bool $(HAVE_PROTOBUF)

View File

@@ -42,6 +42,9 @@ def get_supported_isas() -> Set[ISA]:
"""
supported_isas = set()
if not buildEnv["BUILD_ISA"]:
return {ISA.NULL}
if "TARGET_ISA" in buildEnv.keys():
supported_isas.add(get_isa_from_str(buildEnv["TARGET_ISA"]))

32
src/systemc/Kconfig Normal file
View File

@@ -0,0 +1,32 @@
# Copyright 2022 Google LLC
#
# 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.
config HAVE_SYSTEMC
def_bool "$(HAVE_SYSTEMC)"
config USE_SYSTEMC
depends on HAVE_SYSTEMC
bool "Enable SystemC API support"
default y

View File

@@ -44,7 +44,4 @@ def use_systemc_check(env, warn=False):
main.AddMethod(use_systemc_check, 'UseSystemcCheck')
main['CONF']['USE_SYSTEMC'] = main.UseSystemcCheck()
sticky_vars.Add(BoolVariable('USE_SYSTEMC', 'Enable SystemC API support',
main.UseSystemcCheck()))
main['CONF']['HAVE_SYSTEMC'] = main.UseSystemcCheck()

View File

@@ -151,9 +151,44 @@ class SConsFixture(UniqueFixture):
if config.skip_build:
return
def _setup(self, testitem):
if config.skip_build:
return
if not self.targets:
log.test_log.error("No SCons targets specified.")
else:
log.test_log.message(
"Building the following targets. This may take a while."
)
log.test_log.message(f"{', '.join(self.targets)}")
log.test_log.message(
"You may want to use --skip-build, or use 'rerun'."
)
if self.protocol:
defconfig_command = [
"scons",
"-C",
self.directory,
"--ignore-style",
"--no-compress-debug",
"defconfig",
self.target_dir,
joinpath(self.directory, "build_opts", self.isa.upper()),
]
setconfig_command = [
"scons",
"-C",
self.directory,
"--ignore-style",
"--no-compress-debug",
"setconfig",
self.target_dir,
f"RUBY_PROTOCOL_{self.protocol.upper()}=y",
]
log_call(
log.test_log, defconfig_command, time=None, stderr=sys.stderr
)
log_call(
log.test_log, setconfig_command, time=None, stderr=sys.stderr
)
command = [
"scons",
@@ -164,26 +199,7 @@ class SConsFixture(UniqueFixture):
"--ignore-style",
"--no-compress-debug",
]
if not self.targets:
log.test_log.warn(
"No SCons targets specified, this will"
" build the default all target.\n"
"This is likely unintended, and you"
" may wish to kill testlib and reconfigure."
)
else:
log.test_log.message(
"Building the following targets. This may take a while."
)
log.test_log.message(f"{', '.join(self.targets)}")
log.test_log.message(
"You may want to use --skip-build, or use 'rerun'."
)
command.extend(self.targets)
if self.options:
command.extend(self.options)
log_call(log.test_log, command, time=None, stderr=sys.stderr)
@@ -194,6 +210,7 @@ class Gem5Fixture(SConsFixture):
target_dir += "_" + protocol
target = joinpath(target_dir, f"gem5.{variant}")
obj = super().__new__(cls, target)
obj.target_dir = target_dir
return obj
def _init(self, isa, variant, protocol=None):
@@ -203,15 +220,12 @@ class Gem5Fixture(SConsFixture):
self.path = self.target
self.directory = config.base_dir
self.options = []
if protocol:
self.options = ["--default=" + isa.upper(), "PROTOCOL=" + protocol]
self.isa = isa
self.protocol = protocol
self.set_global()
def get_get_build_info(self) -> Optional[str]:
build_target = self.target
if self.options:
build_target += " ".join(self.options)
return build_target

View File

@@ -32,7 +32,7 @@ RUN apt -y update && apt -y upgrade && \
libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
python3-dev python-is-python3 doxygen libboost-all-dev \
libhdf5-serial-dev python3-pydot libpng-dev libelf-dev pkg-config pip \
python3-venv black gcc-10 g++-10 cmake
python3-venv black gcc-10 g++-10 cmake python3-tk
RUN pip install mypy pre-commit

View File

@@ -31,6 +31,6 @@ RUN apt -y update && apt -y upgrade && \
apt -y install build-essential git m4 scons zlib1g zlib1g-dev \
libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
python3-dev doxygen libboost-all-dev libhdf5-serial-dev python3-pydot \
libpng-dev libelf-dev pkg-config pip python3-venv black cmake
libpng-dev libelf-dev pkg-config pip python3-venv black cmake python3-tk
RUN pip install mypy pre-commit

View File

@@ -36,12 +36,13 @@ present in the "build" directory.
> cd ../../..
> scons build/ARM/gem5.opt
> scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \
> scons setconfig build/ARM USE_SYSTEMC=n
> scons --with-cxx-config --without-python --without-tcmalloc \
> --duplicate-source build/ARM/libgem5_opt.so
> cd util/systemc
Note: For MAC / OSX this command should be used:
> scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \
> scons --with-cxx-config --without-python --without-tcmalloc \
> --duplicate-sources build/ARM/libgem5_opt.dylib
Set a proper LD_LIBRARY_PATH e.g. for bash:
@@ -67,7 +68,7 @@ Then run make:
Make a config file for the C++-configured gem5 using normal gem5
> ../../../build/ARM/gem5.opt ../../../configs/example/se.py -c \
> ../../../build/ARM/gem5.opt ../../../configs/deprecated/example/se.py -c \
> ../../../tests/test-progs/hello/bin/arm/linux/hello
The binary 'gem5.opt.cxx' can now be used to load in the generated config

View File

@@ -93,13 +93,14 @@ without python.
> cd ../..
> scons build/ARM/gem5.opt
> scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \
> build/ARM/libgem5_opt.so
> scons setconfig build/ARM USE_SYSTEMC=n
> scons --with-cxx-config --without-python --without-tcmalloc \
> --duplicate-sources build/ARM/libgem5_opt.so
> cd util/tlm
Note: For MAC / OSX this command should be used:
> scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 \
> build/ARM/libgem5_opt.dylib
> scons --with-cxx-config --without-python --without-tcmalloc \
> --duplicate-sources build/ARM/libgem5_opt.dylib
To build all sources of the SystemC binding and the examples simply run scons: