mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-04 22:32:36 +00:00
feat: add write_stamp function and update development environment with libmpc
This commit is contained in:
4 files changed
+17
-3
No files matched your search
@@ -11,8 +11,8 @@ remote-bitbang debug acceptance flow. Docker, Nix, and manual Ubuntu installs
|
|||||||
provide Java 17 for SBT. Docker and Nix use Python 3.10 to match the
|
provide Java 17 for SBT. Docker and Nix use Python 3.10 to match the
|
||||||
hash-pinned Ubuntu 22.04 requirement sets. The environment also installs the
|
hash-pinned Ubuntu 22.04 requirement sets. The environment also installs the
|
||||||
locked Python build and quality dependencies, clang-format-14, GNU Make,
|
locked Python build and quality dependencies, clang-format-14, GNU Make,
|
||||||
C/C++ build tools, Perl for Verilator, and runtime libraries required by those
|
C/C++ build tools, Perl for Verilator, GNU MPC for the RISC-V compiler, and
|
||||||
binaries.
|
runtime libraries required by those binaries.
|
||||||
|
|
||||||
The environment intentionally does not include PDK repositories, managed RTL,
|
The environment intentionally does not include PDK repositories, managed RTL,
|
||||||
application archives, build output, or compiler caches. These inputs are
|
application archives, build output, or compiler caches. These inputs are
|
||||||
@@ -37,6 +37,8 @@ dependency lock, selected tool set, or Python requirement hashes change.
|
|||||||
Installed public tool archives are made readable and their directories
|
Installed public tool archives are made readable and their directories
|
||||||
traversable by all users. This is required when Docker builds the image as root
|
traversable by all users. This is required when Docker builds the image as root
|
||||||
and runs regressions with the caller's user ID.
|
and runs regressions with the caller's user ID.
|
||||||
|
The environment stamp and activation script are also world-readable so those
|
||||||
|
runtime users can verify and activate the root-built environment.
|
||||||
|
|
||||||
~~~sh
|
~~~sh
|
||||||
python3 scripts/development_environment.py bootstrap
|
python3 scripts/development_environment.py bootstrap
|
||||||
|
|||||||
@@ -61,6 +61,7 @@
|
|||||||
gperftools
|
gperftools
|
||||||
launcher
|
launcher
|
||||||
libunwind
|
libunwind
|
||||||
|
libmpc
|
||||||
mold
|
mold
|
||||||
ncurses5
|
ncurses5
|
||||||
numactl
|
numactl
|
||||||
|
|||||||
@@ -166,6 +166,11 @@ def write_activation(path: Path, content: str) -> None:
|
|||||||
path.chmod(0o644)
|
path.chmod(0o644)
|
||||||
|
|
||||||
|
|
||||||
|
def write_stamp(path: Path, content: dict[str, Any]) -> None:
|
||||||
|
atomic_write(path, json.dumps(content, indent=2, sort_keys=True) + "\n")
|
||||||
|
path.chmod(0o644)
|
||||||
|
|
||||||
|
|
||||||
def run(command: list[str]) -> None:
|
def run(command: list[str]) -> None:
|
||||||
print("+ " + " ".join(shlex.quote(argument) for argument in command), flush=True)
|
print("+ " + " ".join(shlex.quote(argument) for argument in command), flush=True)
|
||||||
subprocess.run(command, check=True)
|
subprocess.run(command, check=True)
|
||||||
@@ -205,7 +210,7 @@ def bootstrap(args: argparse.Namespace) -> int:
|
|||||||
for name in tools:
|
for name in tools:
|
||||||
install(name, available[name], cache, update=args.update)
|
install(name, available[name], cache, update=args.update)
|
||||||
create_virtualenv(root, cache)
|
create_virtualenv(root, cache)
|
||||||
atomic_write(cache / STAMP_NAME, json.dumps(expected_stamp, indent=2, sort_keys=True) + "\n")
|
write_stamp(cache / STAMP_NAME, expected_stamp)
|
||||||
activation = args.output.resolve() if args.output else cache / ACTIVATE_NAME
|
activation = args.output.resolve() if args.output else cache / ACTIVATE_NAME
|
||||||
write_activation(
|
write_activation(
|
||||||
activation,
|
activation,
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ from scripts.development_environment import ( # noqa: E402
|
|||||||
render_activation,
|
render_activation,
|
||||||
stamp_data,
|
stamp_data,
|
||||||
write_activation,
|
write_activation,
|
||||||
|
write_stamp,
|
||||||
)
|
)
|
||||||
from scripts.generate_mpw import render_active_manifest, validate_extension_bindings # noqa: E402
|
from scripts.generate_mpw import render_active_manifest, validate_extension_bindings # noqa: E402
|
||||||
from scripts.install_toolchain import make_tree_world_readable, safe_extract # noqa: E402
|
from scripts.install_toolchain import make_tree_world_readable, safe_extract # noqa: E402
|
||||||
@@ -1183,6 +1184,10 @@ def test_development_environment_contract_is_lock_pinned(tmp_path: Path) -> None
|
|||||||
activation_path = tmp_path / "activate.sh"
|
activation_path = tmp_path / "activate.sh"
|
||||||
write_activation(activation_path, activation)
|
write_activation(activation_path, activation)
|
||||||
assert activation_path.stat().st_mode & 0o777 == 0o644
|
assert activation_path.stat().st_mode & 0o777 == 0o644
|
||||||
|
stamp_path = tmp_path / "development-environment.json"
|
||||||
|
write_stamp(stamp_path, stamp)
|
||||||
|
assert json.loads(stamp_path.read_text(encoding="utf-8")) == stamp
|
||||||
|
assert stamp_path.stat().st_mode & 0o777 == 0o644
|
||||||
|
|
||||||
|
|
||||||
def test_container_and_nix_environment_files_use_locked_inputs() -> None:
|
def test_container_and_nix_environment_files_use_locked_inputs() -> None:
|
||||||
@@ -1198,6 +1203,7 @@ def test_container_and_nix_environment_files_use_locked_inputs() -> None:
|
|||||||
assert "scripts/development_environment.py" in flake
|
assert "scripts/development_environment.py" in flake
|
||||||
assert "buildFHSEnv" in flake
|
assert "buildFHSEnv" in flake
|
||||||
assert "jdk17_headless" in flake
|
assert "jdk17_headless" in flake
|
||||||
|
assert " libmpc\n" in flake
|
||||||
assert " perl\n" in flake
|
assert " perl\n" in flake
|
||||||
assert "python310Full" in flake
|
assert "python310Full" in flake
|
||||||
assert "python3Full" not in flake
|
assert "python3Full" not in flake
|
||||||
|
|||||||
Reference in new issue
Block a user