From 4918c981e9a5929b2d13d88909dae044c8f4b1f0 Mon Sep 17 00:00:00 2001 From: Jordan Bonser Date: Tue, 31 Dec 2024 15:33:35 +0000 Subject: [PATCH] feat: adds exec/target qemu toolchain configs optimising qemu for matching architectures by making use of the accelerators available. --- labgrid/config/toolchain/macro.bzl | 8 +++-- .../config/qemu/amd64/{ => amd64}/BUILD.bazel | 3 ++ .../config/qemu/amd64/amd64/config.yaml | 28 ++++++++++++++++ .../config/qemu/{ => amd64}/arm64/BUILD.bazel | 3 ++ .../config/qemu/{ => amd64}/arm64/config.yaml | 0 .../config/qemu/arm64/amd64/BUILD.bazel | 31 +++++++++++++++++ .../config/qemu/{ => arm64}/amd64/config.yaml | 0 .../config/qemu/arm64/arm64/BUILD.bazel | 33 +++++++++++++++++++ .../config/qemu/arm64/arm64/config.yaml | 31 +++++++++++++++++ 9 files changed, 134 insertions(+), 3 deletions(-) rename labgrid/toolchain/config/qemu/amd64/{ => amd64}/BUILD.bazel (90%) create mode 100644 labgrid/toolchain/config/qemu/amd64/amd64/config.yaml rename labgrid/toolchain/config/qemu/{ => amd64}/arm64/BUILD.bazel (91%) rename labgrid/toolchain/config/qemu/{ => amd64}/arm64/config.yaml (100%) create mode 100644 labgrid/toolchain/config/qemu/arm64/amd64/BUILD.bazel rename labgrid/toolchain/config/qemu/{ => arm64}/amd64/config.yaml (100%) create mode 100644 labgrid/toolchain/config/qemu/arm64/arm64/BUILD.bazel create mode 100644 labgrid/toolchain/config/qemu/arm64/arm64/config.yaml diff --git a/labgrid/config/toolchain/macro.bzl b/labgrid/config/toolchain/macro.bzl index 6797546c..b8a308ef 100644 --- a/labgrid/config/toolchain/macro.bzl +++ b/labgrid/config/toolchain/macro.bzl @@ -2,7 +2,7 @@ load("@rules_labgrid//labgrid/config:defs.bzl", "labgrid_config") visibility("//...") -def labgrid_config_toolchain(*, name, src, target_compatible_with, state = "@rules_labgrid//labgrid/state", managers = [], deps = [], env = {}, data = [], tools = [], toolchains = []): +def labgrid_config_toolchain(*, name, src, target_compatible_with, exec_compatible_with = [], state = "@rules_labgrid//labgrid/state", managers = [], deps = [], env = {}, data = [], tools = [], toolchains = []): src = native.package_relative_label(src) labgrid_config( name = "{}-config".format(name), @@ -18,11 +18,13 @@ def labgrid_config_toolchain(*, name, src, target_compatible_with, state = "@rul managers = [native.package_relative_label(m) for m in managers], ) - constraints = [native.package_relative_label(c) for c in target_compatible_with] + target_constraints = [native.package_relative_label(c) for c in target_compatible_with] + exec_constraints = [native.package_relative_label(c) for c in exec_compatible_with] native.toolchain( name = "{}-config-toolchain".format(name), - target_compatible_with = constraints, + target_compatible_with = target_constraints, + exec_compatible_with = exec_constraints, toolchain = "{}-config".format(name), toolchain_type = "@rules_labgrid//labgrid/toolchain/config:type", ) diff --git a/labgrid/toolchain/config/qemu/amd64/BUILD.bazel b/labgrid/toolchain/config/qemu/amd64/amd64/BUILD.bazel similarity index 90% rename from labgrid/toolchain/config/qemu/amd64/BUILD.bazel rename to labgrid/toolchain/config/qemu/amd64/amd64/BUILD.bazel index 31ad6cd4..54af97da 100644 --- a/labgrid/toolchain/config/qemu/amd64/BUILD.bazel +++ b/labgrid/toolchain/config/qemu/amd64/amd64/BUILD.bazel @@ -14,6 +14,9 @@ labgrid_config_toolchain( "LG_OPENSSH_SSH": "$(location @openssh//:ssh)", "LG_OPENSSH_SCP": "$(location @openssh//:scp)", }, + exec_compatible_with = [ + "@toolchain_utils//toolchain/constraint/cpu:amd64", + ], target_compatible_with = [ "//labgrid/constraint/device:qemu", "@toolchain_utils//toolchain/constraint/os:linux", diff --git a/labgrid/toolchain/config/qemu/amd64/amd64/config.yaml b/labgrid/toolchain/config/qemu/amd64/amd64/config.yaml new file mode 100644 index 00000000..d79eb3a7 --- /dev/null +++ b/labgrid/toolchain/config/qemu/amd64/amd64/config.yaml @@ -0,0 +1,28 @@ +targets: + main: + resources: + NetworkService: + address: "localhost" + username: "labgrid-user" + password: "labgrid" + drivers: + QEMUDriver: + qemu_bin: "qemu" + machine: "pc" + cpu: "max" + memory: "2G" + nic: "user,model=e1000" + extra_args: !template "-accel kvm -accel xen -accel tcg -snapshot -drive file=$LG_QEMU_QCOW2_IMAGE,format=qcow2 -cdrom $LG_QEMU_VIRT_IMAGE" + ShellDriver: + prompt: " login: " + login_prompt: " login: " + username: "labgrid-user" + login_timeout: 600 + SSHDriver: {} + QEMUStrategy: {} +tools: + qemu: !template "$LG_QEMU_SYSTEM_BIN" + ssh: !template "$LG_OPENSSH_SSH" + scp: !template "$LG_OPENSSH_SCP" +imports: + - bazel.labgrid.strategy diff --git a/labgrid/toolchain/config/qemu/arm64/BUILD.bazel b/labgrid/toolchain/config/qemu/amd64/arm64/BUILD.bazel similarity index 91% rename from labgrid/toolchain/config/qemu/arm64/BUILD.bazel rename to labgrid/toolchain/config/qemu/amd64/arm64/BUILD.bazel index 82f25d64..a92d3299 100644 --- a/labgrid/toolchain/config/qemu/arm64/BUILD.bazel +++ b/labgrid/toolchain/config/qemu/amd64/arm64/BUILD.bazel @@ -16,6 +16,9 @@ labgrid_config_toolchain( "LG_OPENSSH_SSH": "$(location @openssh//:ssh)", "LG_OPENSSH_SCP": "$(location @openssh//:scp)", }, + exec_compatible_with = [ + "@toolchain_utils//toolchain/constraint/cpu:amd64", + ], target_compatible_with = [ "//labgrid/constraint/device:qemu", "@toolchain_utils//toolchain/constraint/os:linux", diff --git a/labgrid/toolchain/config/qemu/arm64/config.yaml b/labgrid/toolchain/config/qemu/amd64/arm64/config.yaml similarity index 100% rename from labgrid/toolchain/config/qemu/arm64/config.yaml rename to labgrid/toolchain/config/qemu/amd64/arm64/config.yaml diff --git a/labgrid/toolchain/config/qemu/arm64/amd64/BUILD.bazel b/labgrid/toolchain/config/qemu/arm64/amd64/BUILD.bazel new file mode 100644 index 00000000..d039db9c --- /dev/null +++ b/labgrid/toolchain/config/qemu/arm64/amd64/BUILD.bazel @@ -0,0 +1,31 @@ +load("//labgrid/config/toolchain:defs.bzl", "labgrid_config_toolchain") + +labgrid_config_toolchain( + name = "amd64", + src = "config.yaml", + data = [ + "//qemu/debian/image", + "//qemu/seed/image", + ], + env = { + "LG_QEMU_SYSTEM_BIN": "$(QEMU_SYSTEM)", + "LG_QEMU_QCOW2_IMAGE": "$(location //qemu/debian/image)", + "LG_QEMU_VIRT_IMAGE": "$(location //qemu/seed/image)", + "LG_OPENSSH_SSH": "$(location @openssh//:ssh)", + "LG_OPENSSH_SCP": "$(location @openssh//:scp)", + }, + exec_compatible_with = [ + "@toolchain_utils//toolchain/constraint/cpu:arm64", + ], + target_compatible_with = [ + "//labgrid/constraint/device:qemu", + "@toolchain_utils//toolchain/constraint/os:linux", + "@toolchain_utils//toolchain/constraint/cpu:amd64", + ], + toolchains = ["//labgrid/toolchain/qemu-system:resolved"], + tools = [ + "@openssh//:scp", + "@openssh//:ssh", + ], + deps = ["//bazel/labgrid/strategy"], +) diff --git a/labgrid/toolchain/config/qemu/amd64/config.yaml b/labgrid/toolchain/config/qemu/arm64/amd64/config.yaml similarity index 100% rename from labgrid/toolchain/config/qemu/amd64/config.yaml rename to labgrid/toolchain/config/qemu/arm64/amd64/config.yaml diff --git a/labgrid/toolchain/config/qemu/arm64/arm64/BUILD.bazel b/labgrid/toolchain/config/qemu/arm64/arm64/BUILD.bazel new file mode 100644 index 00000000..66737fa2 --- /dev/null +++ b/labgrid/toolchain/config/qemu/arm64/arm64/BUILD.bazel @@ -0,0 +1,33 @@ +load("//labgrid/config/toolchain:defs.bzl", "labgrid_config_toolchain") + +labgrid_config_toolchain( + name = "arm64", + src = "config.yaml", + data = [ + "//qemu/debian/image", + "//qemu/efi", + "//qemu/seed/image", + ], + env = { + "LG_QEMU_SYSTEM_BIN": "$(QEMU_SYSTEM)", + "LG_QEMU_QCOW2_IMAGE": "$(location //qemu/debian/image)", + "LG_QEMU_VIRT_IMAGE": "$(location //qemu/seed/image)", + "LG_QEMU_EFI": "$(location //qemu/efi)", + "LG_OPENSSH_SSH": "$(location @openssh//:ssh)", + "LG_OPENSSH_SCP": "$(location @openssh//:scp)", + }, + exec_compatible_with = [ + "@toolchain_utils//toolchain/constraint/cpu:arm64", + ], + target_compatible_with = [ + "//labgrid/constraint/device:qemu", + "@toolchain_utils//toolchain/constraint/os:linux", + "@toolchain_utils//toolchain/constraint/cpu:arm64", + ], + toolchains = ["//labgrid/toolchain/qemu-system:resolved"], + tools = [ + "@openssh//:scp", + "@openssh//:ssh", + ], + deps = ["//bazel/labgrid/strategy"], +) diff --git a/labgrid/toolchain/config/qemu/arm64/arm64/config.yaml b/labgrid/toolchain/config/qemu/arm64/arm64/config.yaml new file mode 100644 index 00000000..ebcc016c --- /dev/null +++ b/labgrid/toolchain/config/qemu/arm64/arm64/config.yaml @@ -0,0 +1,31 @@ +targets: + main: + resources: + NetworkService: + address: "localhost" + username: "labgrid-user" + password: "labgrid" + drivers: + QEMUDriver: + qemu_bin: "qemu" + machine: "virt" + cpu: "max" + memory: "2G" + bios: "efi" + nic: "user,model=virtio-net-pci" + extra_args: !template "-accel kvm -accel hvf -accel tcg -snapshot -smp 4 -drive file=$LG_QEMU_QCOW2_IMAGE,format=qcow2 -cdrom $LG_QEMU_VIRT_IMAGE" + ShellDriver: + prompt: " login: " + login_prompt: " login: " + username: "labgrid-user" + login_timeout: 600 + SSHDriver: {} + QEMUStrategy: {} +tools: + qemu: !template "$LG_QEMU_SYSTEM_BIN" + ssh: !template "$LG_OPENSSH_SSH" + scp: !template "$LG_OPENSSH_SCP" +images: + efi: !template "$LG_QEMU_EFI" +imports: + - bazel.labgrid.strategy -- GitLab