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: packages:
- bash - bash
- bc - bc
- bindgen
- bison - bison
- bsdextrautils - bsdextrautils
- bzip2 - bzip2

View File

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

View File

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

View File

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

View File

@ -137,6 +137,14 @@ fedora_rustup_nightly_extras = [
'RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli\n', '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): def cross_build(prefix, targets):
conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix) conf = "ENV QEMU_CONFIGURE_OPTS --cross-prefix=%s\n" % (prefix)
targets = "ENV DEF_TARGET_LIST %s\n" % (targets) targets = "ENV DEF_TARGET_LIST %s\n" % (targets)
@ -157,7 +165,8 @@ try:
trailer="".join(debian12_extras)) trailer="".join(debian12_extras))
generate_dockerfile("fedora", "fedora-40") generate_dockerfile("fedora", "fedora-40")
generate_dockerfile("opensuse-leap", "opensuse-leap-15") 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 # Non-fatal Rust-enabled build