Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 29 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ on:

env:
CARGO_TERM_COLOR: always
PUBLIC_SIMICS_PKGS_URL_WINDOWS: "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/ead79ef5-28b5-48c7-8d1f-3cde7760798f/simics-6-packages-2024-05-win64.ispm"
# NOTE: We use the old ISPM because there is something wrong with 1.8.3 with unattended installation
# PUBLIC_SIMICS_ISPM_URL_WINDOWS: "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/881ee76a-c24d-41c0-af13-5d89b2a857ff/intel-simics-package-manager-1.7.5-win64.exe"
PUBLIC_SIMICS_ISPM_URL_WINDOWS: "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/ead79ef5-28b5-48c7-8d1f-3cde7760798f/intel-simics-package-manager-1.8.3-win64.exe"
Expand Down Expand Up @@ -389,9 +388,18 @@ jobs:
path: tests/rsrc/x86-user

build_and_test:
name: Build and Test (Linux)
name: Build and Test (Linux, Simics ${{ matrix.simics_version }})
container: fedora:38
runs-on: ubuntu-latest
strategy:
matrix:
include:
- simics_version: "6"
package_version: "6.0.185"
pkgs_url: "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/ead79ef5-28b5-48c7-8d1f-3cde7760798f/simics-6-packages-2024-05-linux64.ispm"
- simics_version: "7"
package_version: "7.70.0"
pkgs_url: "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/b9edaa91-4c18-4758-b8e2-b6e709270a4c/simics-7-packages-2025-51-linux64.ispm"
needs:
- build_test_artifacts_riscv_64
- build_test_artifacts_x86_64_breakpoint_uefi_edk2
Expand Down Expand Up @@ -466,7 +474,7 @@ jobs:
git-lfs glibc-devel glibc-devel.i686 glibc-static \
glibc-static.i686 gtk3 jq lld lld-devel lld-libs llvm llvm-libs \
llvm-static make mesa-libgbm mtools ninja-build openssl \
openssl-devel openssl-libs python3 python3-pip yamllint
openssl-devel openssl-libs python3 python3-pip which yamllint
dnf clean all
rm -rf /var/cache/dnf

Expand Down Expand Up @@ -534,7 +542,7 @@ jobs:
uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
with:
path: ~/simics
key: simics-linux-${{ env.PUBLIC_SIMICS_PACKAGE_VERSION_1000 }}-${{ env.PUBLIC_SIMICS_ISPM_VERSION }}
key: simics-linux-${{ matrix.package_version }}-${{ env.PUBLIC_SIMICS_ISPM_VERSION }}

- name: Install SIMICS (External)
if: ${{ steps.cache-simics-packages.outputs.cache-hit != 'true' }}
Expand All @@ -543,7 +551,7 @@ jobs:
curl -L -o "${HOME}/simics/ispm.tar.gz" \
"${{ env.PUBLIC_SIMICS_ISPM_URL }}" && \
curl -L -o "${HOME}/simics/simics.ispm" \
"${{ env.PUBLIC_SIMICS_PKGS_URL }}" && \
"${{ matrix.pkgs_url }}" && \
tar -C "${HOME}/simics/ispm" --strip-components=1 \
-xvf "${HOME}/simics/ispm.tar.gz"
rm -f "${HOME}/simics/ispm.tar.gz"
Expand Down Expand Up @@ -583,7 +591,7 @@ jobs:
- name: Upload Clippy Check Results
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: clippy-json
name: clippy-json-simics${{ matrix.simics_version }}
path: |
clippy.json
clippy-full.json
Expand All @@ -603,8 +611,17 @@ jobs:
cargo doc --workspace --no-deps

build_windows:
name: Build and Test (Windows)
name: Build and Test (Windows, Simics ${{ matrix.simics_version }})
runs-on: windows-2022
strategy:
matrix:
include:
- simics_version: "6"
package_version: "6.0.185"
pkgs_url: "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/ead79ef5-28b5-48c7-8d1f-3cde7760798f/simics-6-packages-2024-05-win64.ispm"
- simics_version: "7"
package_version: "7.70.0"
pkgs_url: "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/b9edaa91-4c18-4758-b8e2-b6e709270a4c/simics-7-packages-2025-51-win64.ispm"
steps:
- name: Harden Runner
uses: step-security/harden-runner@e3f713f2d8f53843e71c69a996d56f51aa9adfb9 # v2.14.1
Expand Down Expand Up @@ -652,7 +669,7 @@ jobs:
path: |
C:\ISPM\
C:\SIMICS\
key: simics-windows-${{ env.PUBLIC_SIMICS_PACKAGE_VERSION_1000 }}-${{ env.PUBLIC_SIMICS_ISPM_VERSION }}
key: simics-windows-${{ matrix.package_version }}-${{ env.PUBLIC_SIMICS_ISPM_VERSION }}

# ispm-installer.exe is a NSIS installer for the elctron build. We want the
# default options, so we pass /S to install silently and /D to change directory.
Expand All @@ -676,10 +693,10 @@ jobs:
if: ${{ steps.cache-simics-packages-windows.outputs.cache-hit != 'true' }}
run: |
$ProgressPreference = 'SilentlyContinue'
echo "Downloading Simics 6 Packages"
Invoke-WebRequest -URI ${{ env.PUBLIC_SIMICS_PKGS_URL_WINDOWS }} -OutFile C:\simics-6-packages.ispm
echo "Downloading Simics ${{ matrix.simics_version }} Packages"
Invoke-WebRequest -URI ${{ matrix.pkgs_url }} -OutFile C:\simics-${{ matrix.simics_version }}-packages.ispm
echo "Installing ISPM packages"
ispm.exe packages --install-bundle C:\simics-6-packages.ispm --non-interactive --trust-insecure-packages
ispm.exe packages --install-bundle C:\simics-${{ matrix.simics_version }}-packages.ispm --non-interactive --trust-insecure-packages
echo "Installed ISPM packages"

- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand All @@ -696,7 +713,7 @@ jobs:
- name: Upload Distribution Package
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: simics-pkg-31337-win64
name: simics-pkg-31337-win64-simics${{ matrix.simics_version }}
path: target/release/simics-pkg-31337-*-win64.ispm

build_dist:
Expand Down
10 changes: 5 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ yaxpeax-riscv = { git = "https://github.com/DrChat/yaxpeax-riscv", version = "0.
"serde",
], rev = "5973ff8" }
crc32fast = "1.4.2"
simics = "0.2.3"
simics = "0.2.5"
indoc = "2.0.5"
serde = { version = "1.0.210", features = ["derive"] }
serde_json = "1.0.128"
Expand Down Expand Up @@ -105,16 +105,16 @@ thiserror = "1.0.63"
lcov2 = "0.1.0"

[dev-dependencies]
simics-test = "0.2.3"
simics-test = "0.2.5"
anyhow = "1.0.86"
command-ext = "0.1.2"
indoc = "2.0.5"
ispm-wrapper = "0.2.3"
ispm-wrapper = "0.2.5"
versions = { version = "6.2.0", features = ["serde"] }

[build-dependencies]
simics = "0.2.3"
simics-build-utils = "0.2.3"
simics = "0.2.5"
simics-build-utils = "0.2.5"


[profile.release]
Expand Down
3 changes: 1 addition & 2 deletions tests/rsrc/riscv-64/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ COPY tsffs.h /test/usr/tsffs.h
RUN make BR2_EXTERNAL=/test/test-kernel-modules/ simics_simple_riscv_defconfig && \
make && \
echo "Compressing images" && \
tar -C output/images -czvf images.tar.gz Image fw_jump.elf rootfs.ext2 && \
tar -C output/images -czvf images.tar.gz Image fw_dynamic.elf fw_jump.elf rootfs.ext2 && \
echo "Copying images" && \
cp images.tar.gz /test/ && \
echo "Building test" && \
Expand All @@ -53,4 +53,3 @@ RUN make BR2_EXTERNAL=/test/test-kernel-modules/ simics_simple_riscv_defconfig &
echo "Copying test mod" && \
cp /buildroot/output/build/test-mod*/test-mod.ko /test/usr/test-mod.ko && \
echo "Copied all build artifacts"

4 changes: 4 additions & 0 deletions tests/x86_64_edk2_magic_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_edk2_magic_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
4 changes: 4 additions & 0 deletions tests/x86_64_edk2_timeout_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_edk2_timeout_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
4 changes: 4 additions & 0 deletions tests/x86_64_magic_apitest_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_magic_apitest_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
4 changes: 4 additions & 0 deletions tests/x86_64_magic_crash_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_magic_crash_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
4 changes: 4 additions & 0 deletions tests/x86_64_magic_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_magic_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
4 changes: 4 additions & 0 deletions tests/x86_64_magic_reporting_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_magic_reporting_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
4 changes: 4 additions & 0 deletions tests/x86_64_magic_speedtest_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_magic_speedtest_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
4 changes: 4 additions & 0 deletions tests/x86_64_magic_speedtest_tokenize_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ fn test_x86_64_magic_speedtest_tokenize_latest() -> Result<()> {
.package_number(1000)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(1030)
.version("latest")
.build(),
ProjectPackage::builder()
.package_number(2096)
.version("latest")
Expand Down
31 changes: 30 additions & 1 deletion tests/x86_userspace_magic_latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,42 @@

use anyhow::Result;
use indoc::indoc;
use ispm_wrapper::data::ProjectPackage;
use ispm_wrapper::{
data::ProjectPackage,
ispm::{self, GlobalOptions},
};
use simics_test::TestEnvSpec;
use std::path::PathBuf;
use versions::Versioning;

fn has_installed_simics7_base() -> Result<bool> {
let packages = ispm::packages::list(&GlobalOptions::default())?;
let latest_base = packages
.installed_packages
.unwrap_or_default()
.into_iter()
.filter(|p| p.package_number == 1000)
.max_by(|a, b| {
Versioning::new(&a.version)
.unwrap_or_default()
.cmp(&Versioning::new(&b.version).unwrap_or_default())
});

Ok(latest_base
.and_then(|p| p.version.split('.').next()?.parse::<u32>().ok())
.is_some_and(|major| major == 7))
}

#[test]
#[cfg_attr(miri, ignore)]
fn test_x86_userspace_latest() -> Result<()> {
if has_installed_simics7_base()? {
println!(
"Skipping test_x86_userspace_latest: qsp-x86/clear-linux is not available for Simics 7."
);
return Ok(());
}

let output = TestEnvSpec::builder()
.name("test_x86_userspace_latest")
.package_crates([PathBuf::from(env!("CARGO_MANIFEST_DIR"))])
Expand Down
Loading