Gabe Black has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/56589 )
Change subject: scons: Put internal build files in a .gem5 directory.
......................................................................
scons: Put internal build files in a .gem5 directory.
This keeps them organized, and also creates an anchor for the build
directory other than a directory named "build".
Change-Id: I3ed2f569e9fcd62eb4eca1c4556b45cd0c3552d4
---
M SConstruct
M site_scons/gem5_scons/configure.py
2 files changed, 63 insertions(+), 29 deletions(-)
diff --git a/SConstruct b/SConstruct
index 6cdffe5..bca9140 100755
--- a/SConstruct
+++ b/SConstruct
@@ -80,7 +80,7 @@
import os
import sys
-from os import mkdir, environ
+from os import mkdir, remove, environ
from os.path import abspath, dirname, expanduser
from os.path import isdir, isfile
from os.path import join, split
@@ -237,8 +237,12 @@
if not isdir(build_root):
mkdir(build_root)
main['BUILDROOT'] = build_root
+dot_gem5 = os.path.join(build_root, '.gem5')
+main['DOTGEM5'] = dot_gem5
+if not isdir(dot_gem5):
+ mkdir(dot_gem5)
-main.SConsignFile(os.path.join(build_root, "sconsign"))
+main.SConsignFile(os.path.join(dot_gem5, 'sconsign'))
########################################################################
@@ -248,9 +252,11 @@
#
########################################################################
-global_vars_file = os.path.join(build_root, 'variables.global')
+dot_gem5_global_vars = os.path.join(dot_gem5, 'variables.global')
+build_root_global_vars = os.path.join(build_root, 'variables.global')
+global_vars_files = [dot_gem5_global_vars, build_root_global_vars]
-global_vars = Variables(global_vars_file, args=ARGUMENTS)
+global_vars = Variables(global_vars_files, args=ARGUMENTS)
global_vars.AddVariables(
('CCFLAGS_EXTRA', 'Extra C and C++ compiler flags', ''),
@@ -273,8 +279,13 @@
{help}
'''.format(help=global_vars.GenerateHelpText(main)), append=True)
-# Save sticky variable settings back to current variables file
-global_vars.Save(global_vars_file, main)
+# If the old vars file exists, delete it to avoid confusion/stale values.
+if isfile(build_root_global_vars):
+ warning(f'Deleting old global variables
file "{build_root_global_vars}"')
+ remove(build_root_global_vars)
+
+# Save sticky variable settings back to the .gem5 global variables file.
+global_vars.Save(dot_gem5_global_vars, main)
########################################################################
@@ -679,24 +690,29 @@
# Set env variables according to the build directory config.
sticky_vars.files = []
# Variables for $BUILD_ROOT/$VARIANT_DIR are stored in
- # $BUILD_ROOT/variables/$VARIANT_DIR so you can nuke
- # $BUILD_ROOT/$VARIANT_DIR without losing your variables settings.
- current_vars_file = os.path.join(build_root, 'variables', variant_dir)
- if isfile(current_vars_file):
- sticky_vars.files.append(current_vars_file)
+ # $BUILD_ROOT/.gem5/variables/$VARIANT_DIR so you can nuke
+ # $BUILD_ROOT/$VARIANT_DIR without losing your variables settings
+
+ dot_gem5_variables_dir = os.path.join(dot_gem5, 'variables')
+ # Make sure the directory is there so we can create the file later.
+ if not isdir(dot_gem5_variables_dir):
+ mkdir(dot_gem5_variables_dir)
+
+ dot_gem5_vars = os.path.join(dot_gem5_variables_dir, variant_dir)
+ build_root_vars = os.path.join(build_root, 'variables', variant_dir)
+ current_vars_files = [dot_gem5_vars, build_root_vars]
+ existing_vars_files = list(filter(isfile, current_vars_files))
+ if existing_vars_files:
+ sticky_vars.files.extend(existing_vars_files)
if not GetOption('silent'):
- print("Using saved variables file %s" % current_vars_file)
+ print('Using saved variables file(s) %s' %
+ ', '.join(existing_vars_files))
elif variant_dir in ext_build_dirs:
# Things in ext are built without a variant directory.
continue
else:
# Variant specific variables file doesn't exist.
- # Make sure the directory is there so we can create the file later.
- opt_dir = dirname(current_vars_file)
- if not isdir(opt_dir):
- mkdir(opt_dir)
-
# Get default build variables from source tree. Variables are
# normally determined by name of $VARIANT_DIR, but can be
# overridden by '--default=' arg on command line.
@@ -704,20 +720,22 @@
opts_dir = Dir('#build_opts').abspath
if default:
default_vars_files = [
- os.path.join(build_root, 'variables', default),
+ dot_gem5_vars,
+ build_root_vars,
os.path.join(opts_dir, default)
]
else:
default_vars_files = [os.path.join(opts_dir, variant_dir)]
- existing_files = list(filter(isfile, default_vars_files))
- if existing_files:
- default_vars_file = existing_files[0]
+ existing_default_files = list(filter(isfile, default_vars_files))
+ if existing_default_files:
+ default_vars_file = existing_default_files[0]
sticky_vars.files.append(default_vars_file)
- print("Variables file %s not found,\n using defaults in %s"
- % (current_vars_file, default_vars_file))
+ print("Variables file(s) %s not found,\n using defaults
in %s" %
+ (' or '.join(current_vars_files), default_vars_file))
else:
- error("Cannot find variables file %s or default file(s) %s"
- % (current_vars_file, ' or '.join(default_vars_files)))
+ error("Cannot find variables file(s) %s or default
file(s) %s" %
+ (' or '.join(current_vars_file),
+ ' or '.join(default_vars_files)))
Exit(1)
# Apply current variable settings to env
@@ -736,8 +754,12 @@
if env['KVM_ISA'] != env['TARGET_ISA']:
env['USE_KVM'] = False
- # Save sticky variable settings back to current variables file
- sticky_vars.Save(current_vars_file, env)
+ # If the old vars file exists, delete it to avoid confusion/stale
values.
+ if isfile(build_root_vars):
+ warning(f'Deleting old variant variables file "{build_root_vars}"')
+ remove(build_root_vars)
+ # Save sticky variable settings back to the .gem5 variant variables
file.
+ sticky_vars.Save(dot_gem5_vars, env)
env.Append(CCFLAGS='$CCFLAGS_EXTRA')
env.Append(LINKFLAGS='$LINKFLAGS_EXTRA')
diff --git a/site_scons/gem5_scons/configure.py
b/site_scons/gem5_scons/configure.py
index 24a4a3d..fdcea37 100644
--- a/site_scons/gem5_scons/configure.py
+++ b/site_scons/gem5_scons/configure.py
@@ -144,9 +144,9 @@
@contextlib.contextmanager
def Configure(env, *args, **kwargs):
kwargs.setdefault('conf_dir',
- os.path.join(env['BUILDROOT'], '.scons_config'))
+ os.path.join(env['DOTGEM5'], '.scons_config'))
kwargs.setdefault('log_file',
- os.path.join(env['BUILDROOT'], 'scons_config.log'))
+ os.path.join(env['DOTGEM5'], 'scons_config.log'))
kwargs.setdefault('custom_tests', {})
kwargs['custom_tests'].update({
'CheckCxxFlag' : CheckCxxFlag,
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/56589
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I3ed2f569e9fcd62eb4eca1c4556b45cd0c3552d4
Gerrit-Change-Number: 56589
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s