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

Reply via email to