scons: Use Kconfig to configure gem5.

These are not yet consumed by anything, but convert all the settings
from SCons variables to Kconfig variables.

If you have existing SConsopts files which need to be converted, you
should take a look at KCONFIG.md to learn about how kconfig is used in
gem5. You should decide if any variables need to be available to C++ or
kconfig itself, and whether those are options which should be detected
automatically, or should be up to the user. Options which should be
measured automatically should still be in SConsopts files, while user
facing options should be added to new or existing Kconfig files.

Generally, make sure you're storing c++/kconfig visible options in
env['CONF'][...]. Also remove references to sticky_vars since persistent
options should now be handled with kconfig, and export_vars since
everything in env['CONF'] is now exported automatically.

Switch SCons/gem5 to use Kconfig for configuration, except EXTRAS which
is still a sticky SCons variable. This is necessary because EXTRAS also
controls what config options exist. If it came from Kconfig itself, then
there would be a circular dependency. This dependency could
theoretically be handled by reparsing the Kconfig when EXTRAS
directories were added or removed, but that would be complicated, and
isn't supported by kconfiglib. It wouldn't be worth the significant
effort it would take to add it, just to use Kconfig more purely.

Change-Id: I29ab1940b2d7b0e6635a490452d05befe5b4a2c9
This commit is contained in:
Gabe Black
2022-02-16 04:54:22 -08:00
committed by Roger Chang
parent 5f73a9bbf0
commit db3a6e8e84
80 changed files with 925 additions and 370 deletions

View File

@@ -1,53 +0,0 @@
# Copyright (c) 2013, 2015-2020 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
# not be construed as granting a license to any other intellectual
# property including but not limited to intellectual property relating
# to a hardware implementation of the functionality of the software
# licensed hereunder. You may use the software subject to the license
# terms below provided that you ensure that this notice is replicated
# unmodified and in its entirety in all distributions of the software,
# modified or unmodified, in source code or in binary form.
#
# Copyright (c) 2011 Advanced Micro Devices, Inc.
# Copyright (c) 2009 The Hewlett-Packard Development Company
# Copyright (c) 2004-2005 The Regents of The University of Michigan
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import os
import os.path
from gem5_scons import warning
Import('*')
sticky_vars.AddVariables(
('BATCH', 'Use batch pool for build and tests', False),
('BATCH_CMD', 'Batch pool submission command name', 'qdo'),
('M5_BUILD_CACHE', 'Cache built objects in this directory', False),
('USE_EFENCE', 'Link with Electric Fence malloc debugger', False),
)

View File

@@ -77,6 +77,7 @@
# Global Python imports
import atexit
import itertools
import os
import sys
@@ -115,8 +116,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 +161,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
@@ -215,13 +215,6 @@ 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")
# 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
@@ -381,6 +374,10 @@ for variant_path in variant_paths:
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
@@ -662,59 +659,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.
@@ -725,6 +676,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'] = {}
@@ -752,24 +714,15 @@ 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)
# 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)
Help('''
Build variables for {dir}:
{help}
'''.format(dir=variant_dir, help=sticky_vars.GenerateHelpText(env)),
append=True)
# If the old vars file exists, delete it to avoid confusion/stale values.
if isfile(build_root_vars):
warning(f'Deleting old variant variables file "{build_root_vars}"')
remove(build_root_vars)
# Save sticky variables back to the gem5.build variant variables file.
sticky_vars.Save(gem5_build_vars, env)
# Pull all the sticky variables into the CONF dict.
env['CONF'].update({key: env[key] for key in sticky_vars.keys()})
kconfig.update_env(env, kconfig_file.abspath, config_file.abspath)
# Do this after we save setting back, or else we'll tack on an
# extra 'qdo' every time we run scons.

View File

@@ -1,7 +1,8 @@
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
USE_ARM_ISA=y
USE_MIPS_ISA=y
USE_POWER_ISA=y
USE_RISCV_ISA=y
USE_SPARC_ISA=y
USE_X86_ISA=y

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,3 +1,4 @@
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
USE_X86_ISA=y

View File

@@ -1,3 +1,4 @@
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
USE_X86_ISA=y

View File

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

View File

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

View File

@@ -0,0 +1,116 @@
# 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
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
ext = env.Dir("#ext")
kconfiglib_dir = ext.Dir("Kconfiglib")
defconfig_py = kconfiglib_dir.File("defconfig.py")
menuconfig_py = kconfiglib_dir.File("menuconfig.py")
kconfig_env["DEFCONFIG_PY"] = defconfig_py
kconfig_env["MENUCONFIG_PY"] = menuconfig_py
kconfig_env["BASE_KCONFIG"] = base_kconfig
return kconfig_env
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 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)
saved_env = os.environ
os.environ.update(
{key: str(val) for key, val in kconfig_env["ENV"].items()}
)
kconfig = kconfiglib.Kconfig(filename=base_kconfig)
os.environ = saved_env
kconfig.load_config(config_path)
for sym in kconfig.unique_defined_syms:
val = sym.str_value
if sym.type == kconfiglib.BOOL:
env["CONF"][sym.name] = True if val == "y" else False
elif sym.type == kconfiglib.TRISTATE:
warning("No way to configure modules for now")
env["CONF"][sym.name] = True if val == "y" else False
elif sym.type == kconfiglib.INT:
if not val:
val = "0"
env["CONF"][sym.name] = int(val, 0)
elif sym.type == kconfiglib.HEX:
if not val:
val = "0"
env["CONF"][sym.name] = int(val, 16)
elif sym.type == kconfiglib.STRING:
env["CONF"][sym.name] = val
elif sym.type == kconfiglib.UNKNOWN:
warning(f'Config symbol "{sym.name}" has unknown type')
env["CONF"][sym.name] = val
else:
type_name = kconfiglib.TYPE_TO_STR[sym.type]
error(f"Unrecognized symbol type {type_name}")

53
src/Kconfig Normal file
View File

@@ -0,0 +1,53 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mainmenu "$(MAIN_MENU_TEXT)"
config BATCH
bool "Use batch pool for build and test"
default n
config BATCH_CMD
string "Batch pool submission command name"
default "qdo"
depends on BATCH
config M5_BUILD_CACHE
string "Cache built objects in this directory"
default ""
config USE_EFENCE
bool "Link with Electric Fence malloc debugger"
default n
rsource "base/Kconfig"
rsource "mem/ruby/Kconfig"
rsource "learning_gem5/part3/Kconfig"
rsource "proto/Kconfig"
rsource "dev/net/Kconfig"
rsource "arch/Kconfig"
rsource "cpu/kvm/Kconfig"
rsource "systemc/Kconfig"
rsource "gpu-compute/Kconfig"

37
src/arch/Kconfig Normal file
View File

@@ -0,0 +1,37 @@
# 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
string
rsource "amdgpu/Kconfig"
rsource "arm/Kconfig"
rsource "mips/Kconfig"
rsource "null/Kconfig"
rsource "power/Kconfig"
rsource "riscv/Kconfig"
rsource "sparc/Kconfig"
rsource "x86/Kconfig"

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,6 +23,11 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
sticky_vars.Add(BoolVariable('USE_POWER_ISA', 'Enable POWER ISA support',
False))
if BUILD_GPU
choice "TARGET_GPU_ISA"
prompt "GPU ISA"
endchoice
endif
rsource "gcn3/Kconfig"
rsource "vega/Kconfig"

View File

@@ -0,0 +1,33 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config TARGET_GPU_ISA
default "gcn3" if GCN3_GPU_ISA
cont_choice "TARGET_GPU_ISA"
config GCN3_GPU_ISA
depends on BUILD_GPU
bool "GCN3"
endchoice

View File

@@ -0,0 +1,33 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config TARGET_GPU_ISA
default 'vega' if VEGA_GPU_ISA
cont_choice "TARGET_GPU_ISA"
config VEGA_GPU_ISA
depends on BUILD_GPU
bool "VEGA"
endchoice

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
sticky_vars.Add(BoolVariable('USE_X86_ISA', 'Enable X86 ISA support', False))
config USE_ARM_ISA
bool "ARM ISA support"
rsource "fastmodel/Kconfig"

View File

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

View File

@@ -0,0 +1,60 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
menu "Fast Model"
config USE_ARM_FASTMODEL
bool "Fast Model integration"
default n
depends on USE_ARM_ISA
depends on USE_SYSTEMC
if USE_ARM_FASTMODEL
config PVLIB_HOME
string "Fast Model portfolio directory"
default "$(PVLIB_HOME)"
config PVLIB_FLAVOR
string "What build flavor of the Fast Model pvlib to use"
default "Linux64_GCC-7.3"
config MAXCORE_HOME
string "Fast Model tools directory"
default "$(MAXCORE_HOME)"
config ARMLMD_LICENSE_FILE
string "ARM license file location"
default "$(ARMLMD_LICENSE_FILE)"
config ARMLMD_LICENSE_COUNT
int "The maximum number of ARM licenses to use concurrently"
default 1
config SIMGEN
string "simgen executable (leave unset for MAXCORE_HOME/bin/simgen"
default ""
endif
endmenu

View File

@@ -302,6 +302,10 @@ for header in common_headers:
header_src = examples_common_dir.Dir('include').File(header)
Command(header_target, header_src, Copy('${TARGET}', '${SOURCE}'))
if not env['CONF']['SIMGEN']:
env['CONF']['SIMGEN'] = os.path.join(
env['CONF']['MAXCORE_HOME'], 'bin', 'simgen')
class ArmFastModelComponent(object):
def __init__(self, project_file, *extra_deps, tags=None):
if not tags:

View File

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

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,5 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
sticky_vars.Add(BoolVariable('USE_ARM_ISA', 'Enable ARM ISA support', False))
config USE_MIPS_ISA
bool "MIPS ISA support"

View File

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

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,5 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
sticky_vars.Add(BoolVariable('USE_NULL_ISA', 'Enable NULL ISA support', False))
config USE_NULL_ISA
bool "Null ISA support"

View File

@@ -1,4 +1,4 @@
# Copyright 2021 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,5 +23,5 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
sticky_vars.Add(BoolVariable('USE_MIPS_ISA', 'Enable MIPS ISA support', False))
config USE_POWER_ISA
bool "POWER ISA support"

View File

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

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

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config USE_RISCV_ISA
bool "RISC-V ISA support"

View File

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

View File

@@ -1,28 +0,0 @@
# Copyright 2021 Google, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
sticky_vars.Add(BoolVariable('USE_RISCV_ISA', 'Enable RISC-V ISA support',
False))

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

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config USE_SPARC_ISA
bool "SPARC ISA support"

View File

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

View File

@@ -1,28 +0,0 @@
# Copyright 2021 Google, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
sticky_vars.Add(BoolVariable('USE_SPARC_ISA', 'Enable SPARC ISA support',
False))

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

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config USE_X86_ISA
bool "X86 ISA support"

View File

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

View File

@@ -1,4 +1,4 @@
# Copyright 2020 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,11 +23,23 @@
# (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 HAVE_FENV
def_bool $(HAVE_FENV)
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)
config HAVE_PNG
def_bool $(HAVE_PNG)
config HAVE_VALGRIND
def_bool $(HAVE_VALGRIND)
config HAVE_DEPRECATED_NAMESPACE
def_bool $(HAVE_DEPRECATED_NAMESPACE)
config HAVE_POSIX_CLOCK
def_bool $(HAVE_POSIX_CLOCK)
config USE_POSIX_CLOCK
depends on HAVE_POSIX_CLOCK
bool "Use POSIX clocks"
rsource "stats/Kconfig"

View File

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

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

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config HAVE_HDF5
def_bool $(HAVE_HDF5)

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

@@ -0,0 +1,34 @@
# 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 if KVM_ISA != ""
default n

View File

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

View File

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

View File

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

View File

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

View File

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

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

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config HAVE_TUNTAP
def_bool $(HAVE_TUNTAP)

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

@@ -0,0 +1,28 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
menuconfig BUILD_GPU
bool "Build the compute-GPU model"
default n

View File

@@ -1,4 +1,4 @@
# Copyright 2020 Google, Inc.
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
@@ -23,7 +23,10 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Import('*')
config PROTOCOL
default "MSI" if RUBY_PROTOCOL_MSI
sticky_vars.Add(BoolVariable('BUILD_GPU', 'Build the compute-GPU model',
False))
cont_choice "Ruby protocol"
config RUBY_PROTOCOL_MSI
bool "MSI"
endchoice

View File

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

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

@@ -0,0 +1,50 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
menu "Ruby"
menuconfig RUBY
bool "Enable"
if RUBY
config PROTOCOL
string
config NEED_PARTIAL_FUNC_READS
bool
choice "Ruby protocol"
prompt "Ruby protocol"
endchoice
config SLICC_HTML
bool 'Create HTML files'
config NUMBER_BITS_PER_SET
int 'Max elements in set'
default 64
endif
endmenu
rsource "protocol/Kconfig"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,62 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config PROTOCOL
default "GPU_VIPER" if RUBY_PROTOCOL_GPU_VIPER
default "MOESI_AMD_Base" if RUBY_PROTOCOL_MOESI_AMD_BASE
default "MESI_Two_Level" if RUBY_PROTOCOL_MESI_TWO_LEVEL
default "MESI_Three_Level" if RUBY_PROTOCOL_MESI_THREE_LEVEL
default "MESI_Three_Level_HTM" if RUBY_PROTOCOL_MESI_THREE_LEVEL_HTM
default "MI_example" if RUBY_PROTOCOL_MI_EXAMPLE
default "MOESI_CMP_directory" if RUBY_PROTOCOL_MOESI_CMP_DIRECTORY
default "MOESI_CMP_token" if RUBY_PROTOCOL_MOESI_CMP_TOKEN
default "MOESI_hammer" if RUBY_PROTOCOL_MOESI_HAMMER
default "Garnet_standalone" if RUBY_PROTOCOL_GARNET_STANDALONE
cont_choice "Ruby protocol"
config RUBY_PROTOCOL_GPU_VIPER
bool "GPU VIPER"
depends on BUILD_GPU
config RUBY_PROTOCOL_MOESI_AMD_BASE
bool "MOESI AMD base"
config RUBY_PROTOCOL_MESI_TWO_LEVEL
bool "MESI two level"
config RUBY_PROTOCOL_MESI_THREE_LEVEL
bool "MESI three level"
config RUBY_PROTOCOL_MESI_THREE_LEVEL_HTM
bool "MESI three level HTM"
config RUBY_PROTOCOL_MI_EXAMPLE
bool "MI example"
config RUBY_PROTOCOL_MOESI_CMP_DIRECTORY
bool "MOESI CMP directory"
config RUBY_PROTOCOL_MOESI_CMP_TOKEN
bool "MOESI CMP token"
config RUBY_PROTOCOL_MOESI_HAMMER
bool "MOESI hammer"
config RUBY_PROTOCOL_GARNET_STANDALONE
bool "Garnet standalone"
endchoice
rsource "chi/Kconfig"

View File

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

View File

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

View File

@@ -0,0 +1,35 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config PROTOCOL
default "CHI" if RUBY_PROTOCOL_CHI
config NEED_PARTIAL_FUNC_READS
default y if RUBY_PROTOCOL_CHI
cont_choice "Ruby protocol"
config RUBY_PROTOCOL_CHI
bool "CHI"
endchoice

View File

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

View File

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

View File

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

View File

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

27
src/proto/Kconfig Normal file
View File

@@ -0,0 +1,27 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config HAVE_PROTOBUF
def_bool $(HAVE_PROTOBUF)

28
src/systemc/Kconfig Normal file
View File

@@ -0,0 +1,28 @@
# Copyright 2022 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met: redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer;
# redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution;
# neither the name of the copyright holders nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config USE_SYSTEMC
bool "Enable SystemC API support"
default $(USE_SYSTEMC)

View File

@@ -45,6 +45,3 @@ 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()))