| Message ID | 20260122170256.4048314-1-barnabas.pocze@ideasonboard.com |
|---|---|
| State | Superseded |
| Headers | show |
| Series |
|
| Related | show |
Hi Barnabás, Thank you for the patch. I would have split this in two, one patch for kvm and one for cross-compilation. No need to split now, just keep it in mind for the next time. On Thu, Jan 22, 2026 at 06:02:56PM +0100, Barnabás Pőcze wrote: > Debian 13 is the current stable edition, and virtme-ng 1.18 no longer > compiles on debian 12 due to rustc version incompatibilities. So move > the kvm tests (and kernel compilation), as well as cross compilation > tests to debian 13. > > Also update virtme-ng to the latest version (1.40), and remove the > exit code workaround since the exit code is now propagated to the > host[0]. Nice. > Furthermore, the addition is `--overlay-rwdir` is necessary > otherwise virtme-ng refuses to start: > > error: cannot initialize <path> inside the guest (path must be defined inside a valid overlay) > > And moreover, since virtme-ng now creates an overlay for /tmp by > default[1], and some tests require a /tmp with `O_TMPFILE` support, > /tmp needs to be mounted as tmpfs before running the tests. Should we replace O_TMPFILE usage in tests with memfd_create() ? > > Unfortunately, there is a debian peculiarity that has to be worked > around. In contrast to debian 12, the `libclang-rt-dev` package does > not exist for armhf. So its versioned variant needs to be used. > > [0]: https://github.com/arighi/virtme-ng/pull/61 > [1]: https://github.com/arighi/virtme-ng/pull/114 > > Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > --- > .gitlab-ci/setup-container.sh | 12 ++++++------ > .gitlab-ci/test-lc-compliance.sh | 5 ++--- > .gitlab-ci/test-libcamera-qemu.sh | 10 +++++++--- > gitlab-ci.yml | 22 +++++++++++----------- > 4 files changed, 26 insertions(+), 23 deletions(-) > > diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh > index 2ba94bb..3506271 100755 > --- a/.gitlab-ci/setup-container.sh > +++ b/.gitlab-ci/setup-container.sh > @@ -132,9 +132,6 @@ case $FDO_DISTRIBUTION_VERSION in > PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) > # For the Android camera HAL and the virtual pipeline handler. > PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) > - # For cam and lc-compliance > - # libevent-dev cannot be used here, see build-libcamera-common.sh > - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7 libevent-pthreads-2.1-7 ) > ;; > 'trixie') > # gcc 13 to expand compilation testing coverage. > @@ -142,15 +139,18 @@ case $FDO_DISTRIBUTION_VERSION in > # Sphinx theme for the documentation. > PKGS_LIBCAMERA_RUNTIME+=( python3-sphinx-book-theme ) > # libclang-rt-dev for the clang ASan runtime. > - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) > + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-19-dev ) > # For the Android camera HAL and the virtual pipeline handler. > PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) > + # For lc-compliance in the `test-lc-compliance:virtual` job > + # libevent-dev cannot be used here, see build-libcamera-common.sh > + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7t64 libevent-pthreads-2.1-7t64 ) > ;; > esac > > -# We use Debian bookworm containers to produce ARM binaries and run unit tests > +# We use Debian 13 (trixie) containers to produce ARM binaries and run unit tests > # with virtme, and other Debian versions for compilation-testing on amd64 only. > -if [[ $FDO_DISTRIBUTION_VERSION == 'bookworm' ]] ; then > +if [[ $FDO_DISTRIBUTION_VERSION == 'trixie' ]] ; then > archs+=( arm64 armhf ) > components['kernel']=1 > components['virtme']=1 > diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh > index 6208723..d4ae838 100755 > --- a/.gitlab-ci/test-lc-compliance.sh > +++ b/.gitlab-ci/test-lc-compliance.sh > @@ -14,6 +14,7 @@ libcamera_compliance() { > --verbose \ > --skip-modules \ > --force-9p \ > + --overlay-rwdir "$PWD" \ > --rwdir "$PWD/build" \ > --run /opt/linux/bzImage \ > --exec " \ > @@ -25,12 +26,10 @@ libcamera_compliance() { > UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \ > GTEST_OUTPUT=xml:./build/lc-compliance-report.xml \ > lc-compliance -c Virtual0; \ > - echo \\\$? > ./build/.test-status; \ > " > > - local status=$(cat build/.test-status) > + local status=$? > echo "Test result exit state: $status" > - rm build/.test-status > > if [[ $status != 0 ]] ; then > exit $status > diff --git a/.gitlab-ci/test-libcamera-qemu.sh b/.gitlab-ci/test-libcamera-qemu.sh > index f9de5ab..8a588a5 100755 > --- a/.gitlab-ci/test-libcamera-qemu.sh > +++ b/.gitlab-ci/test-libcamera-qemu.sh > @@ -24,13 +24,17 @@ libcamera_unit_test() { > echo "Running libcamera tests in a qemu VM" > > virtme-ng --verbose --skip-modules --force-9p \ > + --overlay-rwdir "$PWD" \ > --rwdir "$PWD/build" \ > --run /opt/linux/bzImage \ > - --exec "meson test -C build --no-rebuild --print-errorlogs; echo \\\$? > build/.test-status" > + --exec " \ > + set -ex; > + mount -t tmpfs tmpfs /tmp/; > + meson test -C build --no-rebuild --print-errorlogs; \ You're using \ on some lines only, let's use it everywhere. > + " > > - local status=$(cat build/.test-status) > + local status=$? > echo "Test result exit state: $status" > - rm build/.test-status > > if [[ $status != 0 ]] ; then > exit $status > diff --git a/gitlab-ci.yml b/gitlab-ci.yml > index b1d5f0e..50fc6c6 100644 > --- a/gitlab-ci.yml > +++ b/gitlab-ci.yml > @@ -34,7 +34,7 @@ variables: > ca-certificates > git > VIRTME_GIT_URL: 'https://github.com/arighi/virtme-ng.git' > - VIRTME_GIT_REF: 'v1.18' > + VIRTME_GIT_REF: 'v1.40' > > # Jobs that test individual commits need more history to find the common > # ancestor of the branch being tested and the default branch. Fetch up to 100 > @@ -65,12 +65,12 @@ include: > .libcamera-ci.debian:12: > variables: > FDO_DISTRIBUTION_VERSION: 'bookworm' > - FDO_DISTRIBUTION_TAG: '2025-11-02.0' > + FDO_DISTRIBUTION_TAG: '2026-01-22.0' > > .libcamera-ci.debian:13: > variables: > FDO_DISTRIBUTION_VERSION: 'trixie' > - FDO_DISTRIBUTION_TAG: '2025-11-02.0' > + FDO_DISTRIBUTION_TAG: '2026-01-22.0' > > .container-debian: > extends: > @@ -208,8 +208,6 @@ build-full:debian:12: > ${MESON_ALL_OPTIONS} > ${MESON_CLANG_OPTIONS} > -D qcam=disabled > - - ARCH: armhf > - - ARCH: arm64 > > build-full:debian:13: > extends: > @@ -241,6 +239,8 @@ build-full:debian:13: > -D cpp_debugstl=false > # `cpp_debugstl=false` needed approximately between meson 1.4.0 and 1.9.3 > # with clang 18 or later due to https://github.com/mesonbuild/meson/issues/13812 > + - ARCH: armhf > + - ARCH: arm64 > > # Build each commit in the branch individually to detect compilation breakages. > build-history: > @@ -267,11 +267,11 @@ build-history: > build-package:debug: > extends: > - .fdo.distribution-image@debian > - - .libcamera-ci.debian:12 > + - .libcamera-ci.debian:13 > - .libcamera-ci.scripts > stage: build > needs: > - - job: container-debian:12 > + - job: container-debian:13 > artifacts: false > script: > - $CI_PROJECT_DIR/.gitlab-ci/build-libcamera.sh > @@ -366,11 +366,11 @@ merge-check: > test-unit: > extends: > - .fdo.distribution-image@debian > - - .libcamera-ci.debian:12 > + - .libcamera-ci.debian:13 > - .libcamera-ci.scripts > stage: test > needs: > - - job: container-debian:12 > + - job: container-debian:13 > artifacts: false > tags: > - kvm > @@ -404,7 +404,7 @@ test-unit: > test-lc-compliance:virtual: > extends: > - .fdo.distribution-image@debian > - - .libcamera-ci.debian:12 > + - .libcamera-ci.debian:13 > - .libcamera-ci.scripts > stage: test > needs: > @@ -412,7 +412,7 @@ test-lc-compliance:virtual: > parallel: > matrix: > - ARCH: amd64 > - - job: container-debian:12 > + - job: container-debian:13 > artifacts: false > tags: > - kvm
2026. 01. 22. 18:52 keltezéssel, Laurent Pinchart írta: > Hi Barnabás, > > Thank you for the patch. > > I would have split this in two, one patch for kvm and one for > cross-compilation. No need to split now, just keep it in mind for the > next time. > I was considering that, but the `build-package:debug` job both does cross compilation and produces artifacts for kvm jobs. So I didn't see a simple and easy way to avoid migrating the two at the same time. > On Thu, Jan 22, 2026 at 06:02:56PM +0100, Barnabás Pőcze wrote: >> Debian 13 is the current stable edition, and virtme-ng 1.18 no longer >> compiles on debian 12 due to rustc version incompatibilities. So move >> the kvm tests (and kernel compilation), as well as cross compilation >> tests to debian 13. >> >> Also update virtme-ng to the latest version (1.40), and remove the >> exit code workaround since the exit code is now propagated to the >> host[0]. > > Nice. > >> Furthermore, the addition is `--overlay-rwdir` is necessary >> otherwise virtme-ng refuses to start: >> >> error: cannot initialize <path> inside the guest (path must be defined inside a valid overlay) >> >> And moreover, since virtme-ng now creates an overlay for /tmp by >> default[1], and some tests require a /tmp with `O_TMPFILE` support, >> /tmp needs to be mounted as tmpfs before running the tests. > > Should we replace O_TMPFILE usage in tests with memfd_create() ? I also did consider that and I believe it would be better, but inside libcamera that is not directly used but via `libcamera::MemFd`. So I presume there are some targets that don't have the `memfd_create()` wrapper function? And I didn't really want to duplicate anything or change where tests can be run. I suppose we could also entertain the possibility of using pipes, but I haven't tested that either. > >> >> Unfortunately, there is a debian peculiarity that has to be worked >> around. In contrast to debian 12, the `libclang-rt-dev` package does >> not exist for armhf. So its versioned variant needs to be used. >> >> [0]: https://github.com/arighi/virtme-ng/pull/61 >> [1]: https://github.com/arighi/virtme-ng/pull/114 >> >> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> >> --- >> .gitlab-ci/setup-container.sh | 12 ++++++------ >> .gitlab-ci/test-lc-compliance.sh | 5 ++--- >> .gitlab-ci/test-libcamera-qemu.sh | 10 +++++++--- >> gitlab-ci.yml | 22 +++++++++++----------- >> 4 files changed, 26 insertions(+), 23 deletions(-) >> >> diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh >> index 2ba94bb..3506271 100755 >> --- a/.gitlab-ci/setup-container.sh >> +++ b/.gitlab-ci/setup-container.sh >> @@ -132,9 +132,6 @@ case $FDO_DISTRIBUTION_VERSION in >> PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) >> # For the Android camera HAL and the virtual pipeline handler. >> PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) >> - # For cam and lc-compliance >> - # libevent-dev cannot be used here, see build-libcamera-common.sh >> - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7 libevent-pthreads-2.1-7 ) >> ;; >> 'trixie') >> # gcc 13 to expand compilation testing coverage. >> @@ -142,15 +139,18 @@ case $FDO_DISTRIBUTION_VERSION in >> # Sphinx theme for the documentation. >> PKGS_LIBCAMERA_RUNTIME+=( python3-sphinx-book-theme ) >> # libclang-rt-dev for the clang ASan runtime. >> - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) >> + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-19-dev ) >> # For the Android camera HAL and the virtual pipeline handler. >> PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) >> + # For lc-compliance in the `test-lc-compliance:virtual` job >> + # libevent-dev cannot be used here, see build-libcamera-common.sh >> + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7t64 libevent-pthreads-2.1-7t64 ) >> ;; >> esac >> >> -# We use Debian bookworm containers to produce ARM binaries and run unit tests >> +# We use Debian 13 (trixie) containers to produce ARM binaries and run unit tests >> # with virtme, and other Debian versions for compilation-testing on amd64 only. >> -if [[ $FDO_DISTRIBUTION_VERSION == 'bookworm' ]] ; then >> +if [[ $FDO_DISTRIBUTION_VERSION == 'trixie' ]] ; then >> archs+=( arm64 armhf ) >> components['kernel']=1 >> components['virtme']=1 >> diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh >> index 6208723..d4ae838 100755 >> --- a/.gitlab-ci/test-lc-compliance.sh >> +++ b/.gitlab-ci/test-lc-compliance.sh >> @@ -14,6 +14,7 @@ libcamera_compliance() { >> --verbose \ >> --skip-modules \ >> --force-9p \ >> + --overlay-rwdir "$PWD" \ >> --rwdir "$PWD/build" \ >> --run /opt/linux/bzImage \ >> --exec " \ >> @@ -25,12 +26,10 @@ libcamera_compliance() { >> UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \ >> GTEST_OUTPUT=xml:./build/lc-compliance-report.xml \ >> lc-compliance -c Virtual0; \ >> - echo \\\$? > ./build/.test-status; \ >> " >> >> - local status=$(cat build/.test-status) >> + local status=$? >> echo "Test result exit state: $status" >> - rm build/.test-status >> >> if [[ $status != 0 ]] ; then >> exit $status >> diff --git a/.gitlab-ci/test-libcamera-qemu.sh b/.gitlab-ci/test-libcamera-qemu.sh >> index f9de5ab..8a588a5 100755 >> --- a/.gitlab-ci/test-libcamera-qemu.sh >> +++ b/.gitlab-ci/test-libcamera-qemu.sh >> @@ -24,13 +24,17 @@ libcamera_unit_test() { >> echo "Running libcamera tests in a qemu VM" >> >> virtme-ng --verbose --skip-modules --force-9p \ >> + --overlay-rwdir "$PWD" \ >> --rwdir "$PWD/build" \ >> --run /opt/linux/bzImage \ >> - --exec "meson test -C build --no-rebuild --print-errorlogs; echo \\\$? > build/.test-status" >> + --exec " \ >> + set -ex; >> + mount -t tmpfs tmpfs /tmp/; >> + meson test -C build --no-rebuild --print-errorlogs; \ > > You're using \ on some lines only, let's use it everywhere. > I didn't even realize it could work without the `\`. >> + " >> >> - local status=$(cat build/.test-status) >> + local status=$? >> echo "Test result exit state: $status" >> - rm build/.test-status >> >> if [[ $status != 0 ]] ; then >> exit $status >> diff --git a/gitlab-ci.yml b/gitlab-ci.yml >> index b1d5f0e..50fc6c6 100644 >> --- a/gitlab-ci.yml >> +++ b/gitlab-ci.yml >> @@ -34,7 +34,7 @@ variables: >> ca-certificates >> git >> VIRTME_GIT_URL: 'https://github.com/arighi/virtme-ng.git' >> - VIRTME_GIT_REF: 'v1.18' >> + VIRTME_GIT_REF: 'v1.40' >> >> # Jobs that test individual commits need more history to find the common >> # ancestor of the branch being tested and the default branch. Fetch up to 100 >> @@ -65,12 +65,12 @@ include: >> .libcamera-ci.debian:12: >> variables: >> FDO_DISTRIBUTION_VERSION: 'bookworm' >> - FDO_DISTRIBUTION_TAG: '2025-11-02.0' >> + FDO_DISTRIBUTION_TAG: '2026-01-22.0' >> >> .libcamera-ci.debian:13: >> variables: >> FDO_DISTRIBUTION_VERSION: 'trixie' >> - FDO_DISTRIBUTION_TAG: '2025-11-02.0' >> + FDO_DISTRIBUTION_TAG: '2026-01-22.0' >> >> .container-debian: >> extends: >> @@ -208,8 +208,6 @@ build-full:debian:12: >> ${MESON_ALL_OPTIONS} >> ${MESON_CLANG_OPTIONS} >> -D qcam=disabled >> - - ARCH: armhf >> - - ARCH: arm64 >> >> build-full:debian:13: >> extends: >> @@ -241,6 +239,8 @@ build-full:debian:13: >> -D cpp_debugstl=false >> # `cpp_debugstl=false` needed approximately between meson 1.4.0 and 1.9.3 >> # with clang 18 or later due to https://github.com/mesonbuild/meson/issues/13812 >> + - ARCH: armhf >> + - ARCH: arm64 >> >> # Build each commit in the branch individually to detect compilation breakages. >> build-history: >> @@ -267,11 +267,11 @@ build-history: >> build-package:debug: >> extends: >> - .fdo.distribution-image@debian >> - - .libcamera-ci.debian:12 >> + - .libcamera-ci.debian:13 >> - .libcamera-ci.scripts >> stage: build >> needs: >> - - job: container-debian:12 >> + - job: container-debian:13 >> artifacts: false >> script: >> - $CI_PROJECT_DIR/.gitlab-ci/build-libcamera.sh >> @@ -366,11 +366,11 @@ merge-check: >> test-unit: >> extends: >> - .fdo.distribution-image@debian >> - - .libcamera-ci.debian:12 >> + - .libcamera-ci.debian:13 >> - .libcamera-ci.scripts >> stage: test >> needs: >> - - job: container-debian:12 >> + - job: container-debian:13 >> artifacts: false >> tags: >> - kvm >> @@ -404,7 +404,7 @@ test-unit: >> test-lc-compliance:virtual: >> extends: >> - .fdo.distribution-image@debian >> - - .libcamera-ci.debian:12 >> + - .libcamera-ci.debian:13 >> - .libcamera-ci.scripts >> stage: test >> needs: >> @@ -412,7 +412,7 @@ test-lc-compliance:virtual: >> parallel: >> matrix: >> - ARCH: amd64 >> - - job: container-debian:12 >> + - job: container-debian:13 >> artifacts: false >> tags: >> - kvm >
On Fri, Jan 23, 2026 at 09:45:50AM +0100, Barnabás Pőcze wrote: > 2026. 01. 22. 18:52 keltezéssel, Laurent Pinchart írta: > > Hi Barnabás, > > > > Thank you for the patch. > > > > I would have split this in two, one patch for kvm and one for > > cross-compilation. No need to split now, just keep it in mind for the > > next time. > > I was considering that, but the `build-package:debug` job both does > cross compilation and produces artifacts for kvm jobs. So I didn't > see a simple and easy way to avoid migrating the two at the same time. > > > On Thu, Jan 22, 2026 at 06:02:56PM +0100, Barnabás Pőcze wrote: > >> Debian 13 is the current stable edition, and virtme-ng 1.18 no longer > >> compiles on debian 12 due to rustc version incompatibilities. So move > >> the kvm tests (and kernel compilation), as well as cross compilation > >> tests to debian 13. > >> > >> Also update virtme-ng to the latest version (1.40), and remove the > >> exit code workaround since the exit code is now propagated to the > >> host[0]. > > > > Nice. > > > >> Furthermore, the addition is `--overlay-rwdir` is necessary > >> otherwise virtme-ng refuses to start: > >> > >> error: cannot initialize <path> inside the guest (path must be defined inside a valid overlay) > >> > >> And moreover, since virtme-ng now creates an overlay for /tmp by > >> default[1], and some tests require a /tmp with `O_TMPFILE` support, > >> /tmp needs to be mounted as tmpfs before running the tests. > > > > Should we replace O_TMPFILE usage in tests with memfd_create() ? > > I also did consider that and I believe it would be better, but inside > libcamera that is not directly used but via `libcamera::MemFd`. So I > presume there are some targets that don't have the `memfd_create()` > wrapper function? And I didn't really want to duplicate anything or > change where tests can be run. I suppose we could also entertain > the possibility of using pipes, but I haven't tested that either. As far as I know, the memfd API is available on all platforms we support, but the syscall may not be wrapped by all C libraries. For tests we could create a TemporaryFile class in libtest to handle this. > >> Unfortunately, there is a debian peculiarity that has to be worked > >> around. In contrast to debian 12, the `libclang-rt-dev` package does > >> not exist for armhf. So its versioned variant needs to be used. > >> > >> [0]: https://github.com/arighi/virtme-ng/pull/61 > >> [1]: https://github.com/arighi/virtme-ng/pull/114 > >> > >> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> > >> --- > >> .gitlab-ci/setup-container.sh | 12 ++++++------ > >> .gitlab-ci/test-lc-compliance.sh | 5 ++--- > >> .gitlab-ci/test-libcamera-qemu.sh | 10 +++++++--- > >> gitlab-ci.yml | 22 +++++++++++----------- > >> 4 files changed, 26 insertions(+), 23 deletions(-) > >> > >> diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh > >> index 2ba94bb..3506271 100755 > >> --- a/.gitlab-ci/setup-container.sh > >> +++ b/.gitlab-ci/setup-container.sh > >> @@ -132,9 +132,6 @@ case $FDO_DISTRIBUTION_VERSION in > >> PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) > >> # For the Android camera HAL and the virtual pipeline handler. > >> PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) > >> - # For cam and lc-compliance > >> - # libevent-dev cannot be used here, see build-libcamera-common.sh > >> - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7 libevent-pthreads-2.1-7 ) > >> ;; > >> 'trixie') > >> # gcc 13 to expand compilation testing coverage. > >> @@ -142,15 +139,18 @@ case $FDO_DISTRIBUTION_VERSION in > >> # Sphinx theme for the documentation. > >> PKGS_LIBCAMERA_RUNTIME+=( python3-sphinx-book-theme ) > >> # libclang-rt-dev for the clang ASan runtime. > >> - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) > >> + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-19-dev ) > >> # For the Android camera HAL and the virtual pipeline handler. > >> PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) > >> + # For lc-compliance in the `test-lc-compliance:virtual` job > >> + # libevent-dev cannot be used here, see build-libcamera-common.sh > >> + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7t64 libevent-pthreads-2.1-7t64 ) > >> ;; > >> esac > >> > >> -# We use Debian bookworm containers to produce ARM binaries and run unit tests > >> +# We use Debian 13 (trixie) containers to produce ARM binaries and run unit tests > >> # with virtme, and other Debian versions for compilation-testing on amd64 only. > >> -if [[ $FDO_DISTRIBUTION_VERSION == 'bookworm' ]] ; then > >> +if [[ $FDO_DISTRIBUTION_VERSION == 'trixie' ]] ; then > >> archs+=( arm64 armhf ) > >> components['kernel']=1 > >> components['virtme']=1 > >> diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh > >> index 6208723..d4ae838 100755 > >> --- a/.gitlab-ci/test-lc-compliance.sh > >> +++ b/.gitlab-ci/test-lc-compliance.sh > >> @@ -14,6 +14,7 @@ libcamera_compliance() { > >> --verbose \ > >> --skip-modules \ > >> --force-9p \ > >> + --overlay-rwdir "$PWD" \ > >> --rwdir "$PWD/build" \ > >> --run /opt/linux/bzImage \ > >> --exec " \ > >> @@ -25,12 +26,10 @@ libcamera_compliance() { > >> UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \ > >> GTEST_OUTPUT=xml:./build/lc-compliance-report.xml \ > >> lc-compliance -c Virtual0; \ > >> - echo \\\$? > ./build/.test-status; \ > >> " > >> > >> - local status=$(cat build/.test-status) > >> + local status=$? > >> echo "Test result exit state: $status" > >> - rm build/.test-status > >> > >> if [[ $status != 0 ]] ; then > >> exit $status > >> diff --git a/.gitlab-ci/test-libcamera-qemu.sh b/.gitlab-ci/test-libcamera-qemu.sh > >> index f9de5ab..8a588a5 100755 > >> --- a/.gitlab-ci/test-libcamera-qemu.sh > >> +++ b/.gitlab-ci/test-libcamera-qemu.sh > >> @@ -24,13 +24,17 @@ libcamera_unit_test() { > >> echo "Running libcamera tests in a qemu VM" > >> > >> virtme-ng --verbose --skip-modules --force-9p \ > >> + --overlay-rwdir "$PWD" \ > >> --rwdir "$PWD/build" \ > >> --run /opt/linux/bzImage \ > >> - --exec "meson test -C build --no-rebuild --print-errorlogs; echo \\\$? > build/.test-status" > >> + --exec " \ > >> + set -ex; > >> + mount -t tmpfs tmpfs /tmp/; > >> + meson test -C build --no-rebuild --print-errorlogs; \ > > > > You're using \ on some lines only, let's use it everywhere. > > I didn't even realize it could work without the `\`. They're not needed within quoted strings (although that may be specific to the shell). > >> + " > >> > >> - local status=$(cat build/.test-status) > >> + local status=$? > >> echo "Test result exit state: $status" > >> - rm build/.test-status > >> > >> if [[ $status != 0 ]] ; then > >> exit $status > >> diff --git a/gitlab-ci.yml b/gitlab-ci.yml > >> index b1d5f0e..50fc6c6 100644 > >> --- a/gitlab-ci.yml > >> +++ b/gitlab-ci.yml > >> @@ -34,7 +34,7 @@ variables: > >> ca-certificates > >> git > >> VIRTME_GIT_URL: 'https://github.com/arighi/virtme-ng.git' > >> - VIRTME_GIT_REF: 'v1.18' > >> + VIRTME_GIT_REF: 'v1.40' > >> > >> # Jobs that test individual commits need more history to find the common > >> # ancestor of the branch being tested and the default branch. Fetch up to 100 > >> @@ -65,12 +65,12 @@ include: > >> .libcamera-ci.debian:12: > >> variables: > >> FDO_DISTRIBUTION_VERSION: 'bookworm' > >> - FDO_DISTRIBUTION_TAG: '2025-11-02.0' > >> + FDO_DISTRIBUTION_TAG: '2026-01-22.0' > >> > >> .libcamera-ci.debian:13: > >> variables: > >> FDO_DISTRIBUTION_VERSION: 'trixie' > >> - FDO_DISTRIBUTION_TAG: '2025-11-02.0' > >> + FDO_DISTRIBUTION_TAG: '2026-01-22.0' > >> > >> .container-debian: > >> extends: > >> @@ -208,8 +208,6 @@ build-full:debian:12: > >> ${MESON_ALL_OPTIONS} > >> ${MESON_CLANG_OPTIONS} > >> -D qcam=disabled > >> - - ARCH: armhf > >> - - ARCH: arm64 > >> > >> build-full:debian:13: > >> extends: > >> @@ -241,6 +239,8 @@ build-full:debian:13: > >> -D cpp_debugstl=false > >> # `cpp_debugstl=false` needed approximately between meson 1.4.0 and 1.9.3 > >> # with clang 18 or later due to https://github.com/mesonbuild/meson/issues/13812 > >> + - ARCH: armhf > >> + - ARCH: arm64 > >> > >> # Build each commit in the branch individually to detect compilation breakages. > >> build-history: > >> @@ -267,11 +267,11 @@ build-history: > >> build-package:debug: > >> extends: > >> - .fdo.distribution-image@debian > >> - - .libcamera-ci.debian:12 > >> + - .libcamera-ci.debian:13 > >> - .libcamera-ci.scripts > >> stage: build > >> needs: > >> - - job: container-debian:12 > >> + - job: container-debian:13 > >> artifacts: false > >> script: > >> - $CI_PROJECT_DIR/.gitlab-ci/build-libcamera.sh > >> @@ -366,11 +366,11 @@ merge-check: > >> test-unit: > >> extends: > >> - .fdo.distribution-image@debian > >> - - .libcamera-ci.debian:12 > >> + - .libcamera-ci.debian:13 > >> - .libcamera-ci.scripts > >> stage: test > >> needs: > >> - - job: container-debian:12 > >> + - job: container-debian:13 > >> artifacts: false > >> tags: > >> - kvm > >> @@ -404,7 +404,7 @@ test-unit: > >> test-lc-compliance:virtual: > >> extends: > >> - .fdo.distribution-image@debian > >> - - .libcamera-ci.debian:12 > >> + - .libcamera-ci.debian:13 > >> - .libcamera-ci.scripts > >> stage: test > >> needs: > >> @@ -412,7 +412,7 @@ test-lc-compliance:virtual: > >> parallel: > >> matrix: > >> - ARCH: amd64 > >> - - job: container-debian:12 > >> + - job: container-debian:13 > >> artifacts: false > >> tags: > >> - kvm
diff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh index 2ba94bb..3506271 100755 --- a/.gitlab-ci/setup-container.sh +++ b/.gitlab-ci/setup-container.sh @@ -132,9 +132,6 @@ case $FDO_DISTRIBUTION_VERSION in PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) # For the Android camera HAL and the virtual pipeline handler. PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) - # For cam and lc-compliance - # libevent-dev cannot be used here, see build-libcamera-common.sh - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7 libevent-pthreads-2.1-7 ) ;; 'trixie') # gcc 13 to expand compilation testing coverage. @@ -142,15 +139,18 @@ case $FDO_DISTRIBUTION_VERSION in # Sphinx theme for the documentation. PKGS_LIBCAMERA_RUNTIME+=( python3-sphinx-book-theme ) # libclang-rt-dev for the clang ASan runtime. - PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-dev ) + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-19-dev ) # For the Android camera HAL and the virtual pipeline handler. PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libyuv-dev ) + # For lc-compliance in the `test-lc-compliance:virtual` job + # libevent-dev cannot be used here, see build-libcamera-common.sh + PKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libevent-2.1-7t64 libevent-pthreads-2.1-7t64 ) ;; esac -# We use Debian bookworm containers to produce ARM binaries and run unit tests +# We use Debian 13 (trixie) containers to produce ARM binaries and run unit tests # with virtme, and other Debian versions for compilation-testing on amd64 only. -if [[ $FDO_DISTRIBUTION_VERSION == 'bookworm' ]] ; then +if [[ $FDO_DISTRIBUTION_VERSION == 'trixie' ]] ; then archs+=( arm64 armhf ) components['kernel']=1 components['virtme']=1 diff --git a/.gitlab-ci/test-lc-compliance.sh b/.gitlab-ci/test-lc-compliance.sh index 6208723..d4ae838 100755 --- a/.gitlab-ci/test-lc-compliance.sh +++ b/.gitlab-ci/test-lc-compliance.sh @@ -14,6 +14,7 @@ libcamera_compliance() { --verbose \ --skip-modules \ --force-9p \ + --overlay-rwdir "$PWD" \ --rwdir "$PWD/build" \ --run /opt/linux/bzImage \ --exec " \ @@ -25,12 +26,10 @@ libcamera_compliance() { UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 \ GTEST_OUTPUT=xml:./build/lc-compliance-report.xml \ lc-compliance -c Virtual0; \ - echo \\\$? > ./build/.test-status; \ " - local status=$(cat build/.test-status) + local status=$? echo "Test result exit state: $status" - rm build/.test-status if [[ $status != 0 ]] ; then exit $status diff --git a/.gitlab-ci/test-libcamera-qemu.sh b/.gitlab-ci/test-libcamera-qemu.sh index f9de5ab..8a588a5 100755 --- a/.gitlab-ci/test-libcamera-qemu.sh +++ b/.gitlab-ci/test-libcamera-qemu.sh @@ -24,13 +24,17 @@ libcamera_unit_test() { echo "Running libcamera tests in a qemu VM" virtme-ng --verbose --skip-modules --force-9p \ + --overlay-rwdir "$PWD" \ --rwdir "$PWD/build" \ --run /opt/linux/bzImage \ - --exec "meson test -C build --no-rebuild --print-errorlogs; echo \\\$? > build/.test-status" + --exec " \ + set -ex; + mount -t tmpfs tmpfs /tmp/; + meson test -C build --no-rebuild --print-errorlogs; \ + " - local status=$(cat build/.test-status) + local status=$? echo "Test result exit state: $status" - rm build/.test-status if [[ $status != 0 ]] ; then exit $status diff --git a/gitlab-ci.yml b/gitlab-ci.yml index b1d5f0e..50fc6c6 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -34,7 +34,7 @@ variables: ca-certificates git VIRTME_GIT_URL: 'https://github.com/arighi/virtme-ng.git' - VIRTME_GIT_REF: 'v1.18' + VIRTME_GIT_REF: 'v1.40' # Jobs that test individual commits need more history to find the common # ancestor of the branch being tested and the default branch. Fetch up to 100 @@ -65,12 +65,12 @@ include: .libcamera-ci.debian:12: variables: FDO_DISTRIBUTION_VERSION: 'bookworm' - FDO_DISTRIBUTION_TAG: '2025-11-02.0' + FDO_DISTRIBUTION_TAG: '2026-01-22.0' .libcamera-ci.debian:13: variables: FDO_DISTRIBUTION_VERSION: 'trixie' - FDO_DISTRIBUTION_TAG: '2025-11-02.0' + FDO_DISTRIBUTION_TAG: '2026-01-22.0' .container-debian: extends: @@ -208,8 +208,6 @@ build-full:debian:12: ${MESON_ALL_OPTIONS} ${MESON_CLANG_OPTIONS} -D qcam=disabled - - ARCH: armhf - - ARCH: arm64 build-full:debian:13: extends: @@ -241,6 +239,8 @@ build-full:debian:13: -D cpp_debugstl=false # `cpp_debugstl=false` needed approximately between meson 1.4.0 and 1.9.3 # with clang 18 or later due to https://github.com/mesonbuild/meson/issues/13812 + - ARCH: armhf + - ARCH: arm64 # Build each commit in the branch individually to detect compilation breakages. build-history: @@ -267,11 +267,11 @@ build-history: build-package:debug: extends: - .fdo.distribution-image@debian - - .libcamera-ci.debian:12 + - .libcamera-ci.debian:13 - .libcamera-ci.scripts stage: build needs: - - job: container-debian:12 + - job: container-debian:13 artifacts: false script: - $CI_PROJECT_DIR/.gitlab-ci/build-libcamera.sh @@ -366,11 +366,11 @@ merge-check: test-unit: extends: - .fdo.distribution-image@debian - - .libcamera-ci.debian:12 + - .libcamera-ci.debian:13 - .libcamera-ci.scripts stage: test needs: - - job: container-debian:12 + - job: container-debian:13 artifacts: false tags: - kvm @@ -404,7 +404,7 @@ test-unit: test-lc-compliance:virtual: extends: - .fdo.distribution-image@debian - - .libcamera-ci.debian:12 + - .libcamera-ci.debian:13 - .libcamera-ci.scripts stage: test needs: @@ -412,7 +412,7 @@ test-lc-compliance:virtual: parallel: matrix: - ARCH: amd64 - - job: container-debian:12 + - job: container-debian:13 artifacts: false tags: - kvm
Debian 13 is the current stable edition, and virtme-ng 1.18 no longer compiles on debian 12 due to rustc version incompatibilities. So move the kvm tests (and kernel compilation), as well as cross compilation tests to debian 13. Also update virtme-ng to the latest version (1.40), and remove the exit code workaround since the exit code is now propagated to the host[0]. Furthermore, the addition is `--overlay-rwdir` is necessary otherwise virtme-ng refuses to start: error: cannot initialize <path> inside the guest (path must be defined inside a valid overlay) And moreover, since virtme-ng now creates an overlay for /tmp by default[1], and some tests require a /tmp with `O_TMPFILE` support, /tmp needs to be mounted as tmpfs before running the tests. Unfortunately, there is a debian peculiarity that has to be worked around. In contrast to debian 12, the `libclang-rt-dev` package does not exist for armhf. So its versioned variant needs to be used. [0]: https://github.com/arighi/virtme-ng/pull/61 [1]: https://github.com/arighi/virtme-ng/pull/114 Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com> --- .gitlab-ci/setup-container.sh | 12 ++++++------ .gitlab-ci/test-lc-compliance.sh | 5 ++--- .gitlab-ci/test-libcamera-qemu.sh | 10 +++++++--- gitlab-ci.yml | 22 +++++++++++----------- 4 files changed, 26 insertions(+), 23 deletions(-) -- 2.52.0