From ca55bc2d61ab19698210fc8a5cc34f65d5397525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciro=20Santilli=20=E5=85=AD=E5=9B=9B=E4=BA=8B=E4=BB=B6=20?= =?UTF-8?q?=E6=B3=95=E8=BD=AE=E5=8A=9F?= Date: Fri, 28 Sep 2018 00:00:00 +0000 Subject: [PATCH] gem5: replace --gem5-src with --gem5-worktree-path --- README.adoc | 14 +++++--------- build-gem5 | 21 +++++++++++---------- common.py | 25 ++++++++++++++----------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/README.adoc b/README.adoc index ddeea77..5c12780 100644 --- a/README.adoc +++ b/README.adoc @@ -10667,32 +10667,28 @@ Even removing remotes is not safe enough, since `git submodule update` and other Instead, we provide the following safer process. -First do a separate private clone of you private repository: +First do a separate private clone of you private repository outside of this repository: .... git clone https://my.private.repo.com/my-fork/gem5.git gem5-internal gem5_internal="$(pwd)/gem5-internal" .... -Next, when you want to build with this repository, use the `--gem5-src` argument to point this repository to the private source code: +Next, when you want to build with this repository, use the `--gem5-worktree-path` argument to point this repository to the private source code: .... cd linux-kernel-module-cheat ./build-gem5 \ --gem5-build-id private/master \ - --gem5-src "$gem5_internal" \ - --gem5-worktree private/master \ + --gem5-worktree-path "$gem5_internal" \ ; ./run-gem5 --gem5-build-id private/master \ - --gem5-src "$gem5_internal" \ - --gem5-worktree private/master \ + --gem5-worktree-path "$gem5_internal" \ ; .... -`private` is not mandatory, but it is a sane default that will remind you at all times that you are dealing with private code instead of public. - -This setup only creates gitignored worktrees of the private repository inside this repository, which is pretty safe, while still allowing fully use our infrastructure as usual. +With this setup, only the private gem5 build outputs are stored in this repository, and they are safely gitignored. ===== gem5 debug build diff --git a/build-gem5 b/build-gem5 index a55feca..d947ae3 100755 --- a/build-gem5 +++ b/build-gem5 @@ -27,16 +27,17 @@ else: start_time = time.time() os.makedirs(binaries_dir, exist_ok=True) os.makedirs(disks_dir, exist_ok=True) - if not os.path.exists(os.path.join(common.gem5_src_dir, '.git')): - if common.gem5_src_dir == common.gem5_default_src_dir: - raise Exception('gem5 submodule not checked out') - assert common.run_cmd([ - 'git', - '-C', common.gem5_default_src_dir, - 'worktree', 'add', - '-b', os.path.join('wt', args.gem5_build_id), - common.gem5_src_dir - ]) == 0 + if args.gem5_src is None: + if not os.path.exists(os.path.join(common.gem5_src_dir, '.git')): + if common.gem5_src_dir == common.gem5_default_src_dir: + raise Exception('gem5 submodule not checked out') + assert common.run_cmd([ + 'git', + '-C', common.gem5_default_src_dir, + 'worktree', 'add', + '-b', os.path.join('wt', args.gem5_build_id), + common.gem5_src_dir + ]) == 0 if args.arch == 'x86_64': dummy_img_path = os.path.join(disks_dir, 'linux-bigswap2.img') with open(dummy_img_path, 'wb') as dummy_img_file: diff --git a/common.py b/common.py index 7765a04..9ed6576 100644 --- a/common.py +++ b/common.py @@ -125,16 +125,18 @@ See the documentation for other values known to work. '-M', '--gem5-build-id', default=default_build_id, help='gem5 build ID. Allows you to keep multiple separate gem5 builds. Default: %(default)s' ) - parser.add_argument( - '--gem5-src', - help='If given, use the gem5 directory exactly as submodules/gem5 is would normally used.' - ) parser.add_argument( '-N', '--gem5-worktree', help='''\ gem5 git worktree to use for build and Python scripts at runtime. Automatically create a new git worktree with the given id if one does not exist. If not given, just use the submodule source. +''' + ) + parser.add_argument( + '--gem5-src', + help='''\ +Use the given directory as the gem5 source tree. Ignore `--gem5-worktree`. ''' ) parser.add_argument( @@ -528,14 +530,15 @@ def setup(parser): this.crosstool_ng_executable = os.path.join(this.crosstool_ng_util_dir, 'ct-ng') this.crosstool_ng_build_dir = os.path.join(this.crosstool_ng_buildid_dir, 'build') this.crosstool_ng_download_dir = os.path.join(this.crosstool_ng_out_dir, 'download') - if (args.gem5_src): - this.gem5_default_src_dir = args.gem5_src + this.gem5_default_src_dir = os.path.join(submodules_dir, 'gem5') + if args.gem5_src is not None: + this.gem5_src_dir = args.gem5_src + assert(os.path.exists(args.gem5_src)) else: - this.gem5_default_src_dir = os.path.join(submodules_dir, 'gem5') - if args.gem5_worktree is not None: - this.gem5_src_dir = os.path.join(this.gem5_non_default_src_root_dir, args.gem5_worktree) - else: - this.gem5_src_dir = this.gem5_default_src_dir + if args.gem5_worktree is not None: + this.gem5_src_dir = os.path.join(this.gem5_non_default_src_root_dir, args.gem5_worktree) + else: + this.gem5_src_dir = this.gem5_default_src_dir if args.gem5: this.executable = this.gem5_executable this.run_dir = this.gem5_run_dir