Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[draft] Sketched out an explicit QEMU mode #1773

Draft
wants to merge 7 commits into
base: main
Choose a base branch
from
Draft
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 27 additions & 2 deletions cibuildwheel/linux.py
Expand Up @@ -11,7 +11,7 @@
from ._compat.typing import assert_never
from .architecture import Architecture
from .logger import log
from .oci_container import OCIContainer
from .oci_container import OCIContainer, OCIContainerEngineConfig
from .options import Options
from .typing import PathOrStr
from .util import (
Expand Down Expand Up @@ -431,11 +431,36 @@ def build(options: Options, tmp_path: Path) -> None: # noqa: ARG001

print(f"info: This container will host the build for {', '.join(ids_to_build)}...")

if "CIBW_EXPLICIT_QEMU_MODE" in options.env:
docker_platform_map = {
"x86_64": "linux/amd64",
"aarch64": "linux/arm64/v8",
}
for wheel_platform, docker_platform in docker_platform_map.items():
if build_step.platform_tag.endswith(wheel_platform):
this_build_platform = docker_platform
break
else:
msg = f"Unexpected build platform: {build_step.platform_tag}."
raise ValueError(msg)

container_engine_config = OCIContainerEngineConfig(
name=options.globals.container_engine.name,
create_args=(
*options.globals.container_engine.create_args,
"--platform",
this_build_platform,
),
disable_host_mount=options.globals.container_engine.disable_host_mount,
)
else:
container_engine_config = options.globals.container_engine

with OCIContainer(
image=build_step.container_image,
enforce_32_bit=build_step.platform_tag.endswith("i686"),
cwd=container_project_path,
engine=options.globals.container_engine,
engine=container_engine_config,
) as container:
build_in_container(
options=options,
Expand Down