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:
27
.github/workflows/daily-tests.yaml
vendored
27
.github/workflows/daily-tests.yaml
vendored
@@ -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
|
||||
|
||||
53
SConsopts
53
SConsopts
@@ -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),
|
||||
)
|
||||
360
SConstruct
360
SConstruct
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
USE_ARM_ISA = True
|
||||
PROTOCOL = 'CHI'
|
||||
BUILD_ISA=y
|
||||
USE_ARM_ISA=y
|
||||
RUBY=y
|
||||
RUBY_PROTOCOL_CHI=y
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
USE_NULL_ISA = True
|
||||
PROTOCOL = 'Garnet_standalone'
|
||||
RUBY=y
|
||||
RUBY_PROTOCOL_GARNET_STANDALONE=y
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
USE_NULL_ISA = True
|
||||
PROTOCOL='MI_example'
|
||||
RUBY=y
|
||||
RUBY_PROTOCOL_MI_EXAMPLE=y
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
USE_NULL_ISA = True
|
||||
PROTOCOL = 'MESI_Two_Level'
|
||||
RUBY=y
|
||||
RUBY_PROTOCOL_MESI_TWO_LEVEL=y
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
USE_NULL_ISA = True
|
||||
PROTOCOL='MOESI_CMP_directory'
|
||||
RUBY=y
|
||||
RUBY_PROTOCOL_MOESI_CMP_DIRECTORY=y
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
USE_NULL_ISA = True
|
||||
PROTOCOL='MOESI_CMP_token'
|
||||
RUBY=y
|
||||
RUBY_PROTOCOL_MOESI_CMP_TOKEN=y
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
USE_NULL_ISA = True
|
||||
PROTOCOL='MOESI_hammer'
|
||||
RUBY=y
|
||||
RUBY_PROTOCOL_MOESI_HAMMER=y
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
55
build_tools/kconfig_base.py
Executable 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)
|
||||
@@ -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.
|
||||
|
||||
228
site_scons/gem5_scons/kconfig.py
Normal file
228
site_scons/gem5_scons/kconfig.py
Normal 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
53
src/Kconfig
Normal 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"
|
||||
@@ -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
|
||||
@@ -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']
|
||||
|
||||
|
||||
@@ -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"
|
||||
33
src/arch/amdgpu/gcn3/Kconfig
Normal file
33
src/arch/amdgpu/gcn3/Kconfig
Normal 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
|
||||
33
src/arch/amdgpu/vega/Kconfig
Normal file
33
src/arch/amdgpu/vega/Kconfig
Normal 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
|
||||
@@ -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"
|
||||
@@ -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',
|
||||
|
||||
60
src/arch/arm/fastmodel/Kconfig
Normal file
60
src/arch/arm/fastmodel/Kconfig
Normal 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
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
@@ -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')
|
||||
|
||||
@@ -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"
|
||||
@@ -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')
|
||||
|
||||
@@ -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"
|
||||
@@ -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')
|
||||
|
||||
@@ -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
27
src/arch/sparc/Kconfig
Normal 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"
|
||||
@@ -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')
|
||||
|
||||
@@ -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
27
src/arch/x86/Kconfig
Normal 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"
|
||||
@@ -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
45
src/base/Kconfig
Normal 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"
|
||||
@@ -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
27
src/base/stats/Kconfig
Normal 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
29
src/cpu/Kconfig
Normal 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
33
src/cpu/kvm/Kconfig
Normal 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
|
||||
@@ -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")
|
||||
|
||||
@@ -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'],
|
||||
|
||||
@@ -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=[
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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=[
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
SimObject('GarnetSyntheticTraffic.py', sim_objects=['GarnetSyntheticTraffic'])
|
||||
|
||||
@@ -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'])
|
||||
|
||||
@@ -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
27
src/dev/net/Kconfig
Normal 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
28
src/gpu-compute/Kconfig
Normal 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
|
||||
@@ -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
|
||||
@@ -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
50
src/mem/ruby/Kconfig
Normal 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"
|
||||
@@ -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')
|
||||
|
||||
@@ -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=[])
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
env.Append(CPPDEFINES={'NUMBER_BITS_PER_SET':
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
SimObject('BasicLink.py', sim_objects=[
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
SimObject('FaultModel.py', sim_objects=['FaultModel'])
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
SimObject('GarnetLink.py', enums=['CDCType'], sim_objects=[
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
SimObject('SimpleLink.py', sim_objects=['SimpleExtLink', 'SimpleIntLink'])
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
Source('AccessTraceForAddress.cc')
|
||||
|
||||
62
src/mem/ruby/protocol/Kconfig
Normal file
62
src/mem/ruby/protocol/Kconfig
Normal 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"
|
||||
@@ -36,7 +36,7 @@ from gem5_scons import Transform
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
output_dir = Dir('.')
|
||||
|
||||
@@ -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('.')
|
||||
|
||||
35
src/mem/ruby/protocol/chi/Kconfig
Normal file
35
src/mem/ruby/protocol/chi/Kconfig
Normal 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
|
||||
@@ -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('.')])
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
Import('*')
|
||||
|
||||
if env['CONF']['PROTOCOL'] == 'None':
|
||||
if not env['CONF']['RUBY']:
|
||||
Return()
|
||||
|
||||
SimObject('Controller.py', sim_objects=['RubyController'])
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
27
src/proto/Kconfig
Normal 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)
|
||||
@@ -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
32
src/systemc/Kconfig
Normal 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
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user