Bladeren bron

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>
Paolo Bonzini 10 maanden geleden
bovenliggende
commit
951f71ad67

+ 0 - 1
scripts/ci/setup/ubuntu/ubuntu-2204-aarch64.yaml

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

+ 0 - 1
scripts/ci/setup/ubuntu/ubuntu-2204-s390x.yaml

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

+ 5 - 1
tests/docker/dockerfiles/ubuntu2204.docker

@@ -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

+ 4 - 0
tests/lcitool/mappings.yml

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

+ 10 - 1
tests/lcitool/refresh

@@ -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