dockerfiles: install bindgen from cargo on Ubuntu 22.04

Because Ubuntu 22.04 has a very old version of bindgen, that
does not have the important option --allowlist-file, it will
not be able to use --enable-rust out of the box.  Instead,
install the latest version of bindgen-cli via "cargo install"
in the container, following QEMU's own documentation.

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2024-10-18 18:01:22 +02:00
parent 5b1b5a8ae4
commit 951f71ad67
5 changed files with 19 additions and 4 deletions

View File

@ -7,7 +7,6 @@
packages:
- bash
- bc
- bindgen
- bison
- bsdextrautils
- bzip2

View File

@ -7,7 +7,6 @@
packages:
- bash
- bc
- bindgen
- bison
- bsdextrautils
- bzip2

View File

@ -13,7 +13,6 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
eatmydata apt-get install --no-install-recommends -y \
bash \
bc \
bindgen \
bison \
bsdextrautils \
bzip2 \
@ -150,6 +149,11 @@ ENV LANG "en_US.UTF-8"
ENV MAKE "/usr/bin/make"
ENV NINJA "/usr/bin/ninja"
ENV PYTHON "/usr/bin/python3"
ENV CARGO_HOME=/usr/local/cargo
ENV PATH=$CARGO_HOME/bin:$PATH
RUN DEBIAN_FRONTEND=noninteractive eatmydata \
apt install -y --no-install-recommends cargo
RUN cargo install bindgen-cli
# As a final step configure the user (if env is defined)
ARG USER
ARG UID

View File

@ -1,4 +1,8 @@
mappings:
# Too old on Ubuntu 22.04; we install it from cargo instead
bindgen:
Ubuntu2204:
flake8:
OpenSUSELeap15:

View File

@ -137,6 +137,14 @@ fedora_rustup_nightly_extras = [
'RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli\n',
]
ubuntu2204_bindgen_extras = [
"ENV CARGO_HOME=/usr/local/cargo\n",
'ENV PATH=$CARGO_HOME/bin:$PATH\n',
"RUN DEBIAN_FRONTEND=noninteractive eatmydata \\\n",
" apt install -y --no-install-recommends cargo\n",
'RUN cargo install bindgen-cli\n',
]
def cross_build(prefix, targets):
conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix)
targets = "ENV DEF_TARGET_LIST %s\n" % (targets)
@ -157,7 +165,8 @@ try:
trailer="".join(debian12_extras))
generate_dockerfile("fedora", "fedora-40")
generate_dockerfile("opensuse-leap", "opensuse-leap-15")
generate_dockerfile("ubuntu2204", "ubuntu-2204")
generate_dockerfile("ubuntu2204", "ubuntu-2204",
trailer="".join(ubuntu2204_bindgen_extras))
#
# Non-fatal Rust-enabled build