summaryrefslogtreecommitdiffstats
path: root/src/ci/docker
diff options
context:
space:
mode:
Diffstat (limited to 'src/ci/docker')
-rw-r--r--src/ci/docker/README.md2
-rw-r--r--src/ci/docker/host-x86_64/arm-android/Dockerfile2
-rw-r--r--src/ci/docker/host-x86_64/dist-android/Dockerfile2
-rwxr-xr-xsrc/ci/docker/host-x86_64/dist-various-1/install-x86_64-redox.sh2
-rwxr-xr-xsrc/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh2
-rw-r--r--src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile2
-rw-r--r--src/ci/docker/host-x86_64/mingw-check/Dockerfile3
-rw-r--r--src/ci/docker/host-x86_64/test-various/uefi_qemu_test/Cargo.toml1
-rwxr-xr-x[-rw-r--r--]src/ci/docker/host-x86_64/test-various/uefi_qemu_test/run.py0
-rw-r--r--src/ci/docker/host-x86_64/x86_64-gnu-llvm-14-stage1/Dockerfile54
-rw-r--r--src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/Dockerfile20
-rwxr-xr-xsrc/ci/docker/host-x86_64/x86_64-gnu-llvm-14/script.sh34
-rw-r--r--src/ci/docker/host-x86_64/x86_64-gnu-llvm-15/Dockerfile2
-rw-r--r--src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version2
-rwxr-xr-xsrc/ci/docker/run.sh4
-rwxr-xr-xsrc/ci/docker/scripts/android-sdk-manager.py17
-rw-r--r--src/ci/docker/scripts/crosstool-ng-git.sh2
-rwxr-xr-xsrc/ci/docker/scripts/fuchsia-test-runner.py254
18 files changed, 161 insertions, 244 deletions
diff --git a/src/ci/docker/README.md b/src/ci/docker/README.md
index e799d7c96..852f2e209 100644
--- a/src/ci/docker/README.md
+++ b/src/ci/docker/README.md
@@ -270,7 +270,7 @@ For targets: `loongarch64-unknown-linux-gnu`
- Operating System > Linux kernel version = 5.19.16
- Binary utilities > Version of binutils = 2.40
- C-library > glibc version = 2.36
-- C compiler > gcc version = 12.2.0
+- C compiler > gcc version = 13.1.0
- C compiler > C++ = ENABLE -- to cross compile LLVM
### `mips-linux-gnu.defconfig`
diff --git a/src/ci/docker/host-x86_64/arm-android/Dockerfile b/src/ci/docker/host-x86_64/arm-android/Dockerfile
index b6b4fdc67..db11700af 100644
--- a/src/ci/docker/host-x86_64/arm-android/Dockerfile
+++ b/src/ci/docker/host-x86_64/arm-android/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:22.10
+FROM ubuntu:23.04
ARG DEBIAN_FRONTEND=noninteractive
COPY scripts/android-base-apt-get.sh /scripts/
diff --git a/src/ci/docker/host-x86_64/dist-android/Dockerfile b/src/ci/docker/host-x86_64/dist-android/Dockerfile
index 9c6f64889..b09b6edb0 100644
--- a/src/ci/docker/host-x86_64/dist-android/Dockerfile
+++ b/src/ci/docker/host-x86_64/dist-android/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:22.10
+FROM ubuntu:23.04
COPY scripts/android-base-apt-get.sh /scripts/
RUN sh /scripts/android-base-apt-get.sh
diff --git a/src/ci/docker/host-x86_64/dist-various-1/install-x86_64-redox.sh b/src/ci/docker/host-x86_64/dist-various-1/install-x86_64-redox.sh
index dad979223..f86402b01 100755
--- a/src/ci/docker/host-x86_64/dist-various-1/install-x86_64-redox.sh
+++ b/src/ci/docker/host-x86_64/dist-various-1/install-x86_64-redox.sh
@@ -2,5 +2,5 @@
set -ex
-curl https://static.redox-os.org/toolchain/x86_64-unknown-redox/relibc-install.tar.gz | \
+curl https://ci-mirrors.rust-lang.org/rustc/2022-11-27-relibc-install.tar.gz | \
tar --extract --gzip --directory /usr/local
diff --git a/src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh b/src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
index 5fbce36c3..b867db6a1 100755
--- a/src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
+++ b/src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
@@ -10,7 +10,7 @@ bin="$PWD/clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04/bin"
git clone https://github.com/WebAssembly/wasi-libc
cd wasi-libc
-git reset --hard 4362b1885fd369e042a7c0ecd8df3b6cd47fb4e8
+git reset --hard 7018e24d8fe248596819d2e884761676f3542a04
make -j$(nproc) \
CC="$bin/clang" \
NM="$bin/llvm-nm" \
diff --git a/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile b/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
index 04fdb15f5..c2fd2e3a9 100644
--- a/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
+++ b/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile
@@ -55,7 +55,7 @@ RUN ./build-clang.sh
ENV CC=clang CXX=clang++
# rustc-perf version from 2023-03-15
-ENV PERF_COMMIT 9dfaa35193154b690922347ee1141a06ec87a199
+ENV PERF_COMMIT 8b2ac3042e1ff2c0074455a0a3618adef97156b1
RUN curl -LS -o perf.zip https://github.com/rust-lang/rustc-perf/archive/$PERF_COMMIT.zip && \
unzip perf.zip && \
mv rustc-perf-$PERF_COMMIT rustc-perf && \
diff --git a/src/ci/docker/host-x86_64/mingw-check/Dockerfile b/src/ci/docker/host-x86_64/mingw-check/Dockerfile
index 515890aef..85a9a5d33 100644
--- a/src/ci/docker/host-x86_64/mingw-check/Dockerfile
+++ b/src/ci/docker/host-x86_64/mingw-check/Dockerfile
@@ -45,6 +45,9 @@ ENV SCRIPT python3 ../x.py --stage 2 test src/tools/expand-yaml-anchors && \
python3 ../x.py test --stage 0 src/tools/compiletest && \
python3 ../x.py test --stage 0 core alloc std test proc_macro && \
# Build both public and internal documentation.
+ RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 0 library && \
+ mkdir -p /checkout/obj/staging/doc && \
+ cp -r build/x86_64-unknown-linux-gnu/doc /checkout/obj/staging && \
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 0 compiler && \
RUSTDOCFLAGS=\"--document-private-items --document-hidden-items\" python3 ../x.py doc --stage 0 library/test && \
/scripts/validate-toolstate.sh && \
diff --git a/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/Cargo.toml b/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/Cargo.toml
index fa8e5b3d0..2d17cf7d4 100644
--- a/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/Cargo.toml
+++ b/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/Cargo.toml
@@ -4,6 +4,7 @@ version = "0.0.0"
edition = "2021"
[workspace]
+resolver = "1"
[dependencies]
r-efi = "4.1.0"
diff --git a/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/run.py b/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/run.py
index ffae7b0d4..ffae7b0d4 100644..100755
--- a/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/run.py
+++ b/src/ci/docker/host-x86_64/test-various/uefi_qemu_test/run.py
diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14-stage1/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14-stage1/Dockerfile
deleted file mode 100644
index d45ef0a7d..000000000
--- a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14-stage1/Dockerfile
+++ /dev/null
@@ -1,54 +0,0 @@
-FROM ubuntu:22.04
-
-ARG DEBIAN_FRONTEND=noninteractive
-RUN apt-get update && apt-get install -y --no-install-recommends \
- g++ \
- gcc-multilib \
- make \
- ninja-build \
- file \
- curl \
- ca-certificates \
- python3 \
- git \
- cmake \
- sudo \
- gdb \
- llvm-14-tools \
- llvm-14-dev \
- libedit-dev \
- libssl-dev \
- pkg-config \
- zlib1g-dev \
- xz-utils \
- nodejs \
- mingw-w64 \
- && rm -rf /var/lib/apt/lists/*
-
-COPY scripts/sccache.sh /scripts/
-RUN sh /scripts/sccache.sh
-
-# We are disabling CI LLVM since this builder is intentionally using a host
-# LLVM, rather than the typical src/llvm-project LLVM.
-ENV NO_DOWNLOAD_CI_LLVM 1
-
-# This is not the latest LLVM version, so some components required by tests may
-# be missing.
-ENV IS_NOT_LATEST_LLVM 1
-
-# Using llvm-link-shared due to libffi issues -- see #34486
-ENV RUST_CONFIGURE_ARGS \
- --build=x86_64-unknown-linux-gnu \
- --llvm-root=/usr/lib/llvm-14 \
- --enable-llvm-link-shared \
- --set rust.thin-lto-import-instr-limit=10
-
-ENV SCRIPT ../x.py --stage 1 test --exclude src/tools/tidy && \
- # Run the `mir-opt` tests again but this time for a 32-bit target.
- # This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
- # both 32-bit and 64-bit outputs updated by the PR author, before
- # the PR is approved and tested for merging.
- # It will also detect tests lacking `// EMIT_MIR_FOR_EACH_BIT_WIDTH`,
- # despite having different output on 32-bit vs 64-bit targets.
- ../x.py --stage 1 test tests/mir-opt \
- --host='' --target=i686-unknown-linux-gnu
diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/Dockerfile
index 1f28b9397..93d18bcf1 100644
--- a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/Dockerfile
+++ b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/Dockerfile
@@ -49,20 +49,6 @@ ENV RUST_CONFIGURE_ARGS \
--enable-llvm-link-shared \
--set rust.thin-lto-import-instr-limit=10
-# NOTE: intentionally uses all of `x.py`, `x`, and `x.ps1` to make sure they all work on Linux.
-ENV SCRIPT ../x.py --stage 2 test --exclude src/tools/tidy && \
- # Run the `mir-opt` tests again but this time for a 32-bit target.
- # This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
- # both 32-bit and 64-bit outputs updated by the PR author, before
- # the PR is approved and tested for merging.
- # It will also detect tests lacking `// EMIT_MIR_FOR_EACH_BIT_WIDTH`,
- # despite having different output on 32-bit vs 64-bit targets.
- ../x --stage 2 test tests/mir-opt \
- --host='' --target=i686-unknown-linux-gnu && \
- # Run the UI test suite again, but in `--pass=check` mode
- #
- # This is intended to make sure that both `--pass=check` continues to
- # work.
- #
- ../x.ps1 --stage 2 test tests/ui --pass=check \
- --host='' --target=i686-unknown-linux-gnu
+COPY host-x86_64/x86_64-gnu-llvm-14/script.sh /tmp/
+
+ENV SCRIPT /tmp/script.sh
diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/script.sh b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/script.sh
new file mode 100755
index 000000000..0120fd982
--- /dev/null
+++ b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-14/script.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+set -ex
+
+# Only run the stage 1 tests on merges, not on PR CI jobs.
+if [[ -z "${PR_CI_JOB}" ]]; then
+../x.py --stage 1 test --exclude src/tools/tidy && \
+ # Run the `mir-opt` tests again but this time for a 32-bit target.
+ # This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
+ # both 32-bit and 64-bit outputs updated by the PR author, before
+ # the PR is approved and tested for merging.
+ # It will also detect tests lacking `// EMIT_MIR_FOR_EACH_BIT_WIDTH`,
+ # despite having different output on 32-bit vs 64-bit targets.
+ ../x.py --stage 1 test tests/mir-opt \
+ --host='' --target=i686-unknown-linux-gnu
+fi
+
+# NOTE: intentionally uses all of `x.py`, `x`, and `x.ps1` to make sure they all work on Linux.
+../x.py --stage 2 test --exclude src/tools/tidy && \
+ # Run the `mir-opt` tests again but this time for a 32-bit target.
+ # This enforces that tests using `// EMIT_MIR_FOR_EACH_BIT_WIDTH` have
+ # both 32-bit and 64-bit outputs updated by the PR author, before
+ # the PR is approved and tested for merging.
+ # It will also detect tests lacking `// EMIT_MIR_FOR_EACH_BIT_WIDTH`,
+ # despite having different output on 32-bit vs 64-bit targets.
+ ../x --stage 2 test tests/mir-opt \
+ --host='' --target=i686-unknown-linux-gnu && \
+ # Run the UI test suite again, but in `--pass=check` mode
+ #
+ # This is intended to make sure that both `--pass=check` continues to
+ # work.
+ #
+ ../x.ps1 --stage 2 test tests/ui --pass=check \
+ --host='' --target=i686-unknown-linux-gnu
diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-15/Dockerfile b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-15/Dockerfile
index 960683b92..06a8f7eeb 100644
--- a/src/ci/docker/host-x86_64/x86_64-gnu-llvm-15/Dockerfile
+++ b/src/ci/docker/host-x86_64/x86_64-gnu-llvm-15/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:22.10
+FROM ubuntu:23.04
ARG DEBIAN_FRONTEND=noninteractive
diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version b/src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version
index 806935b82..b31629ad6 100644
--- a/src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version
+++ b/src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version
@@ -1 +1 @@
-0.16.4 \ No newline at end of file
+0.16.8 \ No newline at end of file
diff --git a/src/ci/docker/run.sh b/src/ci/docker/run.sh
index 8bea8cd4c..4b218d577 100755
--- a/src/ci/docker/run.sh
+++ b/src/ci/docker/run.sh
@@ -254,8 +254,6 @@ docker \
--env DEPLOY \
--env DEPLOY_ALT \
--env CI \
- --env TF_BUILD \
- --env BUILD_SOURCEBRANCHNAME \
--env GITHUB_ACTIONS \
--env GITHUB_REF \
--env TOOLSTATE_REPO_ACCESS_TOKEN \
@@ -264,6 +262,8 @@ docker \
--env RUST_CI_OVERRIDE_RELEASE_CHANNEL \
--env CI_JOB_NAME="${CI_JOB_NAME-$IMAGE}" \
--env BASE_COMMIT="$BASE_COMMIT" \
+ --env DIST_TRY_BUILD \
+ --env PR_CI_JOB \
--init \
--rm \
rust-ci \
diff --git a/src/ci/docker/scripts/android-sdk-manager.py b/src/ci/docker/scripts/android-sdk-manager.py
index c9e2961f6..66cba5842 100755
--- a/src/ci/docker/scripts/android-sdk-manager.py
+++ b/src/ci/docker/scripts/android-sdk-manager.py
@@ -2,6 +2,14 @@
# Simpler reimplementation of Android's sdkmanager
# Extra features of this implementation are pinning and mirroring
+import argparse
+import hashlib
+import os
+import subprocess
+import tempfile
+import urllib.request
+import xml.etree.ElementTree as ET
+
# These URLs are the Google repositories containing the list of available
# packages and their versions. The list has been generated by listing the URLs
# fetched while executing `tools/bin/sdkmanager --list`
@@ -27,15 +35,6 @@ MIRROR_BUCKET = "rust-lang-ci-mirrors"
MIRROR_BUCKET_REGION = "us-west-1"
MIRROR_BASE_DIR = "rustc/android/"
-import argparse
-import hashlib
-import os
-import subprocess
-import sys
-import tempfile
-import urllib.request
-import xml.etree.ElementTree as ET
-
class Package:
def __init__(self, path, url, sha1, deps=None):
if deps is None:
diff --git a/src/ci/docker/scripts/crosstool-ng-git.sh b/src/ci/docker/scripts/crosstool-ng-git.sh
index 449cc476f..b8d399153 100644
--- a/src/ci/docker/scripts/crosstool-ng-git.sh
+++ b/src/ci/docker/scripts/crosstool-ng-git.sh
@@ -2,7 +2,7 @@
set -ex
URL=https://github.com/crosstool-ng/crosstool-ng
-REV=943364711a650d9b9e84c1b42c91cc0265b6ab5c
+REV=227d99d7f3115f3a078595a580d2b307dcd23e93
mkdir crosstool-ng
cd crosstool-ng
diff --git a/src/ci/docker/scripts/fuchsia-test-runner.py b/src/ci/docker/scripts/fuchsia-test-runner.py
index ecef56f56..af01f9ccb 100755
--- a/src/ci/docker/scripts/fuchsia-test-runner.py
+++ b/src/ci/docker/scripts/fuchsia-test-runner.py
@@ -25,13 +25,9 @@ from typing import ClassVar, List, Optional
@dataclass
class TestEnvironment:
- rust_dir: str
+ rust_build_dir: str
sdk_dir: str
target: str
- package_server_pid: Optional[int] = None
- emu_addr: Optional[str] = None
- libstd_name: Optional[str] = None
- libtest_name: Optional[str] = None
verbose: bool = False
@staticmethod
@@ -57,7 +53,7 @@ class TestEnvironment:
@classmethod
def from_args(cls, args):
return cls(
- os.path.abspath(args.rust),
+ os.path.abspath(args.rust_build),
os.path.abspath(args.sdk),
args.target,
verbose=args.verbose,
@@ -68,13 +64,9 @@ class TestEnvironment:
with open(cls.env_file_path(), encoding="utf-8") as f:
test_env = json.loads(f.read())
return cls(
- test_env["rust_dir"],
+ test_env["rust_build_dir"],
test_env["sdk_dir"],
test_env["target"],
- libstd_name=test_env["libstd_name"],
- libtest_name=test_env["libtest_name"],
- emu_addr=test_env["emu_addr"],
- package_server_pid=test_env["package_server_pid"],
verbose=test_env["verbose"],
)
@@ -82,18 +74,6 @@ class TestEnvironment:
with open(self.env_file_path(), "w", encoding="utf-8") as f:
f.write(json.dumps(self.__dict__))
- def ssh_dir(self):
- return os.path.join(self.tmp_dir(), "ssh")
-
- def ssh_keyfile_path(self):
- return os.path.join(self.ssh_dir(), "fuchsia_ed25519")
-
- def ssh_authfile_path(self):
- return os.path.join(self.ssh_dir(), "fuchsia_authorized_keys")
-
- def vdl_output_path(self):
- return os.path.join(self.tmp_dir(), "vdl_output")
-
def package_server_log_path(self):
return os.path.join(self.tmp_dir(), "package_server_log")
@@ -113,7 +93,9 @@ class TestEnvironment:
def libs_dir(self):
return os.path.join(
- self.rust_dir,
+ self.rust_build_dir,
+ "host",
+ "stage2",
"lib",
)
@@ -171,7 +153,6 @@ class TestEnvironment:
def home_dir(self):
return os.path.join(self.tmp_dir(), "user-home")
-
def start_ffx_isolation(self):
# Most of this is translated directly from ffx's isolate library
os.mkdir(self.ffx_isolate_dir())
@@ -213,21 +194,19 @@ class TestEnvironment:
# Set configs
configs = {
"log.enabled": "true",
- "ssh.pub": self.ssh_authfile_path(),
- "ssh.priv": self.ssh_keyfile_path(),
"test.is_isolated": "true",
"test.experimental_structured_output": "true",
}
for key, value in configs.items():
subprocess.check_call(
[
- self.tool_path("ffx"),
+ ffx_path,
"config",
"set",
key,
value,
],
- env=self.ffx_cmd_env(),
+ env=ffx_env,
stdout=self.subprocess_output(),
stderr=self.subprocess_output(),
)
@@ -249,6 +228,7 @@ class TestEnvironment:
self.tool_path("ffx"),
"daemon",
"stop",
+ "-w",
],
env=self.ffx_cmd_env(),
stdout=self.subprocess_output(),
@@ -276,87 +256,62 @@ class TestEnvironment:
elif len(os.listdir(self.tmp_dir())) != 0:
raise Exception(f"Temp directory is not clean (in {self.tmp_dir()})")
- os.mkdir(self.ssh_dir())
os.mkdir(self.output_dir())
- # Find libstd and libtest
- libstd_paths = glob.glob(os.path.join(self.rustlibs_dir(), "libstd-*.so"))
- libtest_paths = glob.glob(os.path.join(self.rustlibs_dir(), "libtest-*.so"))
-
- if not libstd_paths:
- raise Exception(f"Failed to locate libstd (in {self.rustlibs_dir()})")
-
- if not libtest_paths:
- raise Exception(f"Failed to locate libtest (in {self.rustlibs_dir()})")
+ ffx_path = self.tool_path("ffx")
+ ffx_env = self.ffx_cmd_env()
- self.libstd_name = os.path.basename(libstd_paths[0])
- self.libtest_name = os.path.basename(libtest_paths[0])
+ # Start ffx isolation
+ self.log_info("Starting ffx isolation...")
+ self.start_ffx_isolation()
- # Generate SSH keys for the emulator to use
- self.log_info("Generating SSH keys...")
+ # Stop any running emulators (there shouldn't be any)
subprocess.check_call(
[
- "ssh-keygen",
- "-N",
- "",
- "-t",
- "ed25519",
- "-f",
- self.ssh_keyfile_path(),
- "-C",
- "Generated by fuchsia-test-runner.py",
+ ffx_path,
+ "emu",
+ "stop",
+ "--all",
],
+ env=ffx_env,
stdout=self.subprocess_output(),
stderr=self.subprocess_output(),
)
- authfile_contents = subprocess.check_output(
+
+ # Start emulator
+ self.log_info("Starting emulator...")
+ product_bundle = "terminal.qemu-" + self.triple_to_arch(self.target)
+ subprocess.check_call(
[
- "ssh-keygen",
- "-y",
- "-f",
- self.ssh_keyfile_path(),
+ ffx_path,
+ "product-bundle",
+ "get",
+ product_bundle,
],
+ env=ffx_env,
+ stdout=self.subprocess_output(),
stderr=self.subprocess_output(),
)
- with open(self.ssh_authfile_path(), "wb") as authfile:
- authfile.write(authfile_contents)
-
- # Start ffx isolation
- self.log_info("Starting ffx isolation...")
- self.start_ffx_isolation()
-
- # Start emulator (this will generate the vdl output)
- self.log_info("Starting emulator...")
+ # FIXME: condition --accel hyper on target arch matching host arch
subprocess.check_call(
[
- self.tool_path("fvdl"),
- "--sdk",
+ ffx_path,
+ "emu",
"start",
- "--tuntap",
+ product_bundle,
"--headless",
- "--nointeractive",
- "--ssh",
- self.ssh_dir(),
- "--vdl-output",
- self.vdl_output_path(),
- "--emulator-log",
+ "--log",
self.emulator_log_path(),
- "--image-name",
- "qemu-" + self.triple_to_arch(self.target),
+ "--net",
+ "tap",
+ "--accel",
+ "hyper",
],
+ env=ffx_env,
stdout=self.subprocess_output(),
stderr=self.subprocess_output(),
)
- # Parse vdl output for relevant information
- with open(self.vdl_output_path(), encoding="utf-8") as f:
- vdl_content = f.read()
- matches = re.search(
- r'network_address:\s+"\[([0-9a-f]{1,4}:(:[0-9a-f]{1,4}){4}%qemu)\]"',
- vdl_content,
- )
- self.emu_addr = matches.group(1)
-
# Create new package repo
self.log_info("Creating package repo...")
subprocess.check_call(
@@ -370,61 +325,46 @@ class TestEnvironment:
stderr=self.subprocess_output(),
)
- # Start package server
- self.log_info("Starting package server...")
- with open(
- self.package_server_log_path(), "w", encoding="utf-8"
- ) as package_server_log:
- # We want this to be a long-running process that persists after the script finishes
- # pylint: disable=consider-using-with
- self.package_server_pid = subprocess.Popen(
- [
- self.tool_path("pm"),
- "serve",
- "-vt",
- "-repo",
- self.repo_dir(),
- "-l",
- ":8084",
- ],
- stdout=package_server_log,
- stderr=package_server_log,
- ).pid
-
- # Register package server with emulator
- self.log_info("Registering package server...")
- ssh_client = subprocess.check_output(
+ # Add repo
+ subprocess.check_call(
[
- "ssh",
- "-i",
- self.ssh_keyfile_path(),
- "-o",
- "StrictHostKeyChecking=accept-new",
- self.emu_addr,
- "-f",
- "echo $SSH_CLIENT",
+ ffx_path,
+ "repository",
+ "add-from-pm",
+ self.repo_dir(),
+ "--repository",
+ self.TEST_REPO_NAME,
],
- text=True,
+ env=ffx_env,
+ stdout=self.subprocess_output(),
+ stderr=self.subprocess_output(),
)
- repo_addr = ssh_client.split()[0].replace("%", "%25")
- repo_url = f"http://[{repo_addr}]:8084/config.json"
+
+ # Start repository server
+ subprocess.check_call(
+ [ffx_path, "repository", "server", "start", "--address", "[::]:0"],
+ env=ffx_env,
+ stdout=self.subprocess_output(),
+ stderr=self.subprocess_output(),
+ )
+
+ # Register with newly-started emulator
subprocess.check_call(
[
- "ssh",
- "-i",
- self.ssh_keyfile_path(),
- "-o",
- "StrictHostKeyChecking=accept-new",
- self.emu_addr,
- "-f",
- f"pkgctl repo add url -f 1 -n {self.TEST_REPO_NAME} {repo_url}",
+ ffx_path,
+ "target",
+ "repository",
+ "register",
+ "--repository",
+ self.TEST_REPO_NAME,
],
+ env=ffx_env,
stdout=self.subprocess_output(),
stderr=self.subprocess_output(),
)
# Create lockfiles
- open(self.pm_lockfile_path(), 'a').close()
+ open(self.pm_lockfile_path(), "a").close()
# Write to file
self.write_to_file()
@@ -458,6 +398,7 @@ class TestEnvironment:
],
use: [
{{ storage: "data", path: "/data" }},
+ {{ storage: "tmp", path: "/tmp" }},
{{ protocol: [ "fuchsia.process.Launcher" ] }},
{{ protocol: [ "fuchsia.posix.socket.Provider" ] }}
],
@@ -471,8 +412,8 @@ class TestEnvironment:
meta/package={package_dir}/meta/package
meta/{package_name}.cm={package_dir}/meta/{package_name}.cm
bin/{exe_name}={bin_path}
- lib/{libstd_name}={rust_dir}/lib/rustlib/{rustlib_dir}/lib/{libstd_name}
- lib/{libtest_name}={rust_dir}/lib/rustlib/{rustlib_dir}/lib/{libtest_name}
+ lib/{libstd_name}={libstd_path}
+ lib/{libtest_name}={libtest_path}
lib/ld.so.1={sdk_dir}/arch/{target_arch}/sysroot/dist/lib/ld.so.1
lib/libfdio.so={sdk_dir}/arch/{target_arch}/dist/libfdio.so
"""
@@ -502,6 +443,16 @@ class TestEnvironment:
bin_path = os.path.abspath(args.bin_path)
+ # Find libstd and libtest
+ libstd_paths = glob.glob(os.path.join(self.rustlibs_dir(), "libstd-*.so"))
+ libtest_paths = glob.glob(os.path.join(self.rustlibs_dir(), "libtest-*.so"))
+
+ if not libstd_paths:
+ raise Exception(f"Failed to locate libstd (in {self.rustlibs_dir()})")
+
+ if not libtest_paths:
+ raise Exception(f"Failed to locate libtest (in {self.rustlibs_dir()})")
+
# Build a unique, deterministic name for the test using the name of the
# binary and the last 6 hex digits of the hash of the full path
def path_checksum(path):
@@ -568,8 +519,11 @@ class TestEnvironment:
env_vars += f'\n "{var_name}={var_value}",'
# Default to no backtrace for test suite
- if os.getenv("RUST_BACKTRACE") == None:
- env_vars += f'\n "RUST_BACKTRACE=0",'
+ if os.getenv("RUST_BACKTRACE") is None:
+ env_vars += '\n "RUST_BACKTRACE=0",'
+
+ # Use /tmp as the test temporary directory
+ env_vars += f'\n "RUST_TEST_TMPDIR=/tmp",'
cml.write(
self.CML_TEMPLATE.format(env_vars=env_vars, exe_name=exe_name)
@@ -601,11 +555,12 @@ class TestEnvironment:
exe_name=exe_name,
package_dir=package_dir,
package_name=package_name,
- rust_dir=self.rust_dir,
- rustlib_dir=self.target,
+ target=self.target,
sdk_dir=self.sdk_dir,
- libstd_name=self.libstd_name,
- libtest_name=self.libtest_name,
+ libstd_name=os.path.basename(libstd_paths[0]),
+ libtest_name=os.path.basename(libtest_paths[0]),
+ libstd_path=libstd_paths[0],
+ libtest_path=libtest_paths[0],
target_arch=self.triple_to_arch(self.target),
)
)
@@ -642,7 +597,7 @@ class TestEnvironment:
log("Publishing package to repo...")
# Publish package to repo
- with open(self.pm_lockfile_path(), 'w') as pm_lockfile:
+ with open(self.pm_lockfile_path(), "w") as pm_lockfile:
fcntl.lockf(pm_lockfile.fileno(), fcntl.LOCK_EX)
subprocess.check_call(
[
@@ -776,20 +731,15 @@ class TestEnvironment:
else:
self.log_debug("No ffx daemon log found")
- # Stop package server
- self.log_info("Stopping package server...")
- os.kill(self.package_server_pid, signal.SIGTERM)
-
# Shut down the emulator
self.log_info("Stopping emulator...")
subprocess.check_call(
[
- self.tool_path("fvdl"),
- "--sdk",
- "kill",
- "--launched-proto",
- self.vdl_output_path(),
+ self.tool_path("ffx"),
+ "emu",
+ "stop",
],
+ env=self.ffx_cmd_env(),
stdout=self.subprocess_output(),
stderr=self.subprocess_output(),
)
@@ -966,8 +916,8 @@ def main():
"start", help="initializes the testing environment"
)
start_parser.add_argument(
- "--rust",
- help="the directory of the installed Rust compiler for Fuchsia",
+ "--rust-build",
+ help="the current compiler build directory (`$RUST_SRC/build` by default)",
required=True,
)
start_parser.add_argument(
@@ -1045,9 +995,7 @@ def main():
)
debug_parser.set_defaults(func=debug)
- syslog_parser = subparsers.add_parser(
- "syslog", help="prints the device syslog"
- )
+ syslog_parser = subparsers.add_parser("syslog", help="prints the device syslog")
syslog_parser.set_defaults(func=syslog)
args = parser.parse_args()