gem5: add --gem5-build-dir for private out of tree builds

This commit is contained in:
Ciro Santilli 六四事件 法轮功
2018-10-09 19:42:32 +01:00
parent b6d00baac0
commit e8cd0caa9e
3 changed files with 21 additions and 12 deletions

View File

@ -10674,21 +10674,21 @@ 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-source` argument to point this repository to the private source code:
Next, when you want to build with the private repository, use the `--gem5-build-dir` and `--gem5-source-dir` argument to override our default gem5 source and build locations:
....
cd linux-kernel-module-cheat
./build-gem5 \
--gem5-build-id private/master \
--gem5-source "$gem5_internal" \
--gem5-build-dir "${gem5_internal}/build" \
--gem5-source-dir "$gem5_internal" \
;
./run-gem5 \
--gem5-build-id private/master \
--gem5-source "$gem5_internal" \
--gem5-build-dir "${gem5_internal}/build" \
--gem5-source-dir "$gem5_internal" \
;
....
With this setup, only the private gem5 build outputs are stored in this repository, and they are safely gitignored.
With this setup, both your private gem5 source and build are safely kept outside of this public repository.
===== gem5 debug build

View File

@ -27,7 +27,7 @@ else:
start_time = time.time()
os.makedirs(binaries_dir, exist_ok=True)
os.makedirs(disks_dir, exist_ok=True)
if args.gem5_source is None:
if args.gem5_source_dir 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')

View File

@ -134,7 +134,13 @@ given, just use the submodule source.
'''
)
parser.add_argument(
'--gem5-source',
'--gem5-build-dir',
help='''\
Use the given directory as the gem5 build directory.
'''
)
parser.add_argument(
'--gem5-source-dir',
help='''\
Use the given directory as the gem5 source tree. Ignore `--gem5-worktree`.
'''
@ -514,7 +520,10 @@ def setup(parser):
this.qemu_termout_file = os.path.join(this.qemu_run_dir, 'termout.txt')
this.qemu_rrfile = os.path.join(this.qemu_run_dir, 'rrfile')
this.gem5_out_dir = os.path.join(this.out_dir, 'gem5')
this.gem5_build_dir = os.path.join(this.gem5_out_dir, args.gem5_build_id, args.gem5_build_type)
if args.gem5_build_dir is None:
this.gem5_build_dir = os.path.join(this.gem5_out_dir, args.gem5_build_id, args.gem5_build_type)
else:
this.gem5_build_dir = args.gem5_build_dir
this.gem5_fake_iso = os.path.join(this.gem5_out_dir, 'fake.iso')
this.gem5_m5term = os.path.join(this.gem5_build_dir, 'm5term')
this.gem5_build_build_dir = os.path.join(this.gem5_build_dir, 'build')
@ -531,9 +540,9 @@ def setup(parser):
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')
this.gem5_default_src_dir = os.path.join(submodules_dir, 'gem5')
if args.gem5_source is not None:
this.gem5_src_dir = args.gem5_source
assert(os.path.exists(args.gem5_source))
if args.gem5_source_dir is not None:
this.gem5_src_dir = args.gem5_source_dir
assert(os.path.exists(args.gem5_source_dir))
else:
if args.gem5_worktree is not None:
this.gem5_src_dir = os.path.join(this.gem5_non_default_src_root_dir, args.gem5_worktree)