tests: Adding --bin-path option to select tests bin directory
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Thu, 16 Jan 2020 10:39:46 +0000 (10:39 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Tue, 21 Jan 2020 09:13:07 +0000 (09:13 +0000)
So far lots of tests will download binaries inside the gem5 directory.
The path is also specific to the test being run.
This doesn't play well with an environment where gem5 is cloned from
scratch for every build, or if several gem5 are cloned in a single
machine.
Binaries will be automatically downloaded every time this happens.

This patch is adding a --bin-path option, so that it's possible to
setup a fixed directory with all pre-downloaded binaries.
By default it is set to None to preserve original behaviour.

Change-Id: I42fb25e3ce0a495c73672b15a097b1bd2607795c
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Ciro Santilli <ciro.santilli@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24525
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
ext/testlib/config.py
tests/gem5/cpu_tests/test.py
tests/gem5/fs/linux/arm/test.py
tests/gem5/hello_se/test_hello_se.py
tests/gem5/m5_util/test_exit.py

index 5e28cd0fd01e62ca433c420f0749246636659f27..513463fd863cf712a8af85bacdcfc77cd2398469 100644 (file)
@@ -1,3 +1,15 @@
+# Copyright (c) 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) 2017 Mark D. Hill and David A. Wood
 # All rights reserved.
 #
@@ -521,6 +533,13 @@ def define_common_args(config):
             action='store',
             help='The path to store results in.'
         ),
+        Argument(
+            '--bin-path',
+            action='store',
+            default=None,
+            help='Path where binaries are stored (downloaded if not present)'
+        ),
+
     ]
 
     # NOTE: There is a limitation which arises due to this format. If you have
@@ -576,6 +595,7 @@ class RunParser(ArgParser):
         common_args.directory.add_to(parser)
         common_args.build_dir.add_to(parser)
         common_args.base_dir.add_to(parser)
+        common_args.bin_path.add_to(parser)
         common_args.threads.add_to(parser)
         common_args.test_threads.add_to(parser)
         common_args.isa.add_to(parser)
@@ -629,6 +649,7 @@ class ListParser(ArgParser):
         ).add_to(parser)
 
         common_args.directory.add_to(parser)
+        common_args.bin_path.add_to(parser)
         common_args.isa.add_to(parser)
         common_args.variant.add_to(parser)
         common_args.length.add_to(parser)
@@ -648,6 +669,7 @@ class RerunParser(ArgParser):
         common_args.directory.add_to(parser)
         common_args.build_dir.add_to(parser)
         common_args.base_dir.add_to(parser)
+        common_args.bin_path.add_to(parser)
         common_args.threads.add_to(parser)
         common_args.test_threads.add_to(parser)
         common_args.isa.add_to(parser)
index 1a61a73316310d0a40c51344265f78c7a6df02cc..073bcc4103e2749d4fd84096f7fba8b67bb85a72 100644 (file)
@@ -1,3 +1,15 @@
+# Copyright (c) 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) 2018 The Regents of the University of California
 # All Rights Reserved.
 #
@@ -41,8 +53,11 @@ valid_isas = {
     'riscv': ('AtomicSimpleCPU', 'TimingSimpleCPU', 'MinorCPU', 'DerivO3CPU'),
 }
 
+if config.bin_path:
+    base_path = config.bin_path
+else:
+    base_path = joinpath(absdirpath(__file__), 'benchmarks', 'bin')
 
-base_path = joinpath(absdirpath(__file__), 'benchmarks', 'bin')
 base_url = 'http://dist.gem5.org/dist/current/gem5/cpu_tests/benchmarks/bin/'
 for isa in valid_isas:
     path = joinpath(base_path, isa)
index fd1e05e053c4d8a684d89406518c2a1f3ec6a029..d9d380e686ba667d5ba56ffd48363b44259440a1 100644 (file)
@@ -85,7 +85,8 @@ arm_fs_long_tests = [
 
 tarball = 'aarch-system-201901106.tar.bz2'
 url = "http://dist.gem5.org/dist/current/arm/" + tarball
-path = os.path.dirname(os.path.abspath(__file__))
+filepath = os.path.dirname(os.path.abspath(__file__))
+path = config.bin_path if config.bin_path else filepath
 arm_fs_binaries = DownloadedArchive(url, path, tarball)
 
 for name in arm_fs_quick_tests:
@@ -96,7 +97,7 @@ for name in arm_fs_quick_tests:
     gem5_verify_config(
         name=name,
         verifiers=(), # Add basic stat verifiers
-        config=joinpath(path, 'run.py'),
+        config=joinpath(filepath, 'run.py'),
         config_args=args,
         valid_isas=(constants.arm_tag,),
         length=constants.quick_tag,
@@ -111,7 +112,7 @@ for name in arm_fs_long_tests:
     gem5_verify_config(
         name=name,
         verifiers=(), # TODO: Add basic stat verifiers
-        config=joinpath(path, 'run.py'),
+        config=joinpath(filepath, 'run.py'),
         config_args=args,
         valid_isas=(constants.arm_tag,),
         length=constants.long_tag,
index 3ebf40cce0cbbe397e6e42071f1a2513ecf1dc12..74d7fb1a6bb362c32557303d9f86ffa8877774d3 100644 (file)
@@ -1,3 +1,15 @@
+# Copyright (c) 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) 2017 Mark D. Hill and David A. Wood
 # All rights reserved.
 #
@@ -40,13 +52,18 @@ test_progs = {
     'sparc': ('hello',)
 }
 
+if config.bin_path:
+    base_path = config.bin_path
+else:
+    base_path = joinpath(absdirpath(__file__), '..', 'test-progs', 'hello',
+        'bin')
+
 urlbase = 'http://dist.gem5.org/dist/current/test-progs/hello/bin/'
 for isa in test_progs:
     for binary in test_progs[isa]:
         import os
         url = urlbase + isa + '/linux/' + binary
-        path = joinpath(absdirpath(__file__), '..', 'test-progs', 'hello',
-                        'bin', isa, 'linux')
+        path = joinpath(base_path, isa, 'linux')
         hello_program = DownloadedProgram(url, path, binary)
 
         ref_path = joinpath(getcwd(), 'ref')
index 22680740b71d8f2f47ea232d48e4706f549bf661..e67e37428b3c1cdbb5afbc7ae78c4eebd45bcdcf 100644 (file)
@@ -1,3 +1,15 @@
+# Copyright (c) 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) 2017 Mark D. Hill and David A. Wood
 # All rights reserved.
 #
@@ -37,8 +49,11 @@ m5_exit_regex = re.compile(
 r'Exiting @ tick \d* because m5_exit instruction encountered'
 )
 
-path = joinpath(absdirpath(__file__), '..',
-                'test-progs', 'hello', 'bin', 'x86', 'linux')
+if config.bin_path:
+    path = config.bin_path
+else:
+    path = joinpath(absdirpath(__file__), '..',
+                    'test-progs', 'hello', 'bin', 'x86', 'linux')
 filename = 'm5_exit'
 url = 'http://dist.gem5.org/dist/current/test-progs/' +
       'm5-exit/bin/x86/linux/m5_exit'