mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-26 19:51:35 +01:00
gem5: replace --gem5-src with --gem5-worktree-path
This commit is contained in:
14
README.adoc
14
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.
|
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
|
git clone https://my.private.repo.com/my-fork/gem5.git gem5-internal
|
||||||
gem5_internal="$(pwd)/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
|
cd linux-kernel-module-cheat
|
||||||
./build-gem5 \
|
./build-gem5 \
|
||||||
--gem5-build-id private/master \
|
--gem5-build-id private/master \
|
||||||
--gem5-src "$gem5_internal" \
|
--gem5-worktree-path "$gem5_internal" \
|
||||||
--gem5-worktree private/master \
|
|
||||||
;
|
;
|
||||||
./run-gem5
|
./run-gem5
|
||||||
--gem5-build-id private/master \
|
--gem5-build-id private/master \
|
||||||
--gem5-src "$gem5_internal" \
|
--gem5-worktree-path "$gem5_internal" \
|
||||||
--gem5-worktree private/master \
|
|
||||||
;
|
;
|
||||||
....
|
....
|
||||||
|
|
||||||
`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.
|
With this setup, only the private gem5 build outputs are stored in this repository, and they are safely gitignored.
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
===== gem5 debug build
|
===== gem5 debug build
|
||||||
|
|
||||||
|
|||||||
21
build-gem5
21
build-gem5
@@ -27,16 +27,17 @@ else:
|
|||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
os.makedirs(binaries_dir, exist_ok=True)
|
os.makedirs(binaries_dir, exist_ok=True)
|
||||||
os.makedirs(disks_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 args.gem5_src is None:
|
||||||
if common.gem5_src_dir == common.gem5_default_src_dir:
|
if not os.path.exists(os.path.join(common.gem5_src_dir, '.git')):
|
||||||
raise Exception('gem5 submodule not checked out')
|
if common.gem5_src_dir == common.gem5_default_src_dir:
|
||||||
assert common.run_cmd([
|
raise Exception('gem5 submodule not checked out')
|
||||||
'git',
|
assert common.run_cmd([
|
||||||
'-C', common.gem5_default_src_dir,
|
'git',
|
||||||
'worktree', 'add',
|
'-C', common.gem5_default_src_dir,
|
||||||
'-b', os.path.join('wt', args.gem5_build_id),
|
'worktree', 'add',
|
||||||
common.gem5_src_dir
|
'-b', os.path.join('wt', args.gem5_build_id),
|
||||||
]) == 0
|
common.gem5_src_dir
|
||||||
|
]) == 0
|
||||||
if args.arch == 'x86_64':
|
if args.arch == 'x86_64':
|
||||||
dummy_img_path = os.path.join(disks_dir, 'linux-bigswap2.img')
|
dummy_img_path = os.path.join(disks_dir, 'linux-bigswap2.img')
|
||||||
with open(dummy_img_path, 'wb') as dummy_img_file:
|
with open(dummy_img_path, 'wb') as dummy_img_file:
|
||||||
|
|||||||
25
common.py
25
common.py
@@ -125,16 +125,18 @@ See the documentation for other values known to work.
|
|||||||
'-M', '--gem5-build-id', default=default_build_id,
|
'-M', '--gem5-build-id', default=default_build_id,
|
||||||
help='gem5 build ID. Allows you to keep multiple separate gem5 builds. Default: %(default)s'
|
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(
|
parser.add_argument(
|
||||||
'-N', '--gem5-worktree',
|
'-N', '--gem5-worktree',
|
||||||
help='''\
|
help='''\
|
||||||
gem5 git worktree to use for build and Python scripts at runtime. Automatically
|
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
|
create a new git worktree with the given id if one does not exist. If not
|
||||||
given, just use the submodule source.
|
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(
|
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_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_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.crosstool_ng_download_dir = os.path.join(this.crosstool_ng_out_dir, 'download')
|
||||||
if (args.gem5_src):
|
this.gem5_default_src_dir = os.path.join(submodules_dir, 'gem5')
|
||||||
this.gem5_default_src_dir = args.gem5_src
|
if args.gem5_src is not None:
|
||||||
|
this.gem5_src_dir = args.gem5_src
|
||||||
|
assert(os.path.exists(args.gem5_src))
|
||||||
else:
|
else:
|
||||||
this.gem5_default_src_dir = os.path.join(submodules_dir, 'gem5')
|
if args.gem5_worktree is not None:
|
||||||
if args.gem5_worktree is not None:
|
this.gem5_src_dir = os.path.join(this.gem5_non_default_src_root_dir, args.gem5_worktree)
|
||||||
this.gem5_src_dir = os.path.join(this.gem5_non_default_src_root_dir, args.gem5_worktree)
|
else:
|
||||||
else:
|
this.gem5_src_dir = this.gem5_default_src_dir
|
||||||
this.gem5_src_dir = this.gem5_default_src_dir
|
|
||||||
if args.gem5:
|
if args.gem5:
|
||||||
this.executable = this.gem5_executable
|
this.executable = this.gem5_executable
|
||||||
this.run_dir = this.gem5_run_dir
|
this.run_dir = this.gem5_run_dir
|
||||||
|
|||||||
Reference in New Issue
Block a user