[libcamera-ci,RFC,v1] Add clang builds with libstdc++
diff mbox series

Message ID 20260216142843.482262-1-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • [libcamera-ci,RFC,v1] Add clang builds with libstdc++
Related show

Commit Message

Barnabás Pőcze Feb. 16, 2026, 2:28 p.m. UTC
Currently clang is only used to test libc++ builds. This, however, prevents
the build testing of e.g. qcam since the packaged qt libraries use libstdc++,
so it needs to be disabled when using libc++.

So duplicate every current clang job for libstdc++ testing.

Link: https://gitlab.freedesktop.org/camera/libcamera/-/issues/315
Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
Maybe it's not worth duplicating each clang job, but adding at least one
(clang, libstdc++) build is probably worth it.
---
 .gitlab-ci/meson/libstdc++.native |  3 +++
 gitlab-ci.yml                     | 36 ++++++++++++++-----------------
 2 files changed, 19 insertions(+), 20 deletions(-)
 create mode 100644 .gitlab-ci/meson/libstdc++.native

--
2.53.0

Comments

Kieran Bingham Feb. 23, 2026, 9:30 a.m. UTC | #1
Quoting Barnabás Pőcze (2026-02-16 14:28:43)
> Currently clang is only used to test libc++ builds. This, however, prevents
> the build testing of e.g. qcam since the packaged qt libraries use libstdc++,
> so it needs to be disabled when using libc++.
> 
> So duplicate every current clang job for libstdc++ testing.
> 
> Link: https://gitlab.freedesktop.org/camera/libcamera/-/issues/315
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
> Maybe it's not worth duplicating each clang job, but adding at least one
> (clang, libstdc++) build is probably worth it.

I believe the freedesktop infrastructure have told us that the most
'expensive' part of CI is setting up the runner for the jobs, and we
have quite a few per run already.


Is it easy/possible for us to combine these additional builds into a
single job somehow?

I think the actual compilation test is 'cheap' once the runner has been
set up, so it might be helpful for us to look at how to combine more
tests, then it would be easy to also test many combinations of clang?

--
Kieran

> ---
>  .gitlab-ci/meson/libstdc++.native |  3 +++
>  gitlab-ci.yml                     | 36 ++++++++++++++-----------------
>  2 files changed, 19 insertions(+), 20 deletions(-)
>  create mode 100644 .gitlab-ci/meson/libstdc++.native
> 
> diff --git a/.gitlab-ci/meson/libstdc++.native b/.gitlab-ci/meson/libstdc++.native
> new file mode 100644
> index 0000000..3116043
> --- /dev/null
> +++ b/.gitlab-ci/meson/libstdc++.native
> @@ -0,0 +1,3 @@
> +[built-in options]
> +cpp_args = ['-stdlib=libstdc++']
> +cpp_link_args = ['-stdlib=libstdc++']
> diff --git a/gitlab-ci.yml b/gitlab-ci.yml
> index 6256335..e51266c 100644
> --- a/gitlab-ci.yml
> +++ b/gitlab-ci.yml
> @@ -29,7 +29,12 @@ variables:
>    # clang fails to link with ASan if --no-undefined is enabled.
>    MESON_CLANG_OPTIONS: >-
>      -D b_lundef=false
> +  MESON_CLANG_LIBCPP_OPTIONS: >-
> +    ${MESON_CLANG_OPTIONS}
>      --native-file $CI_PROJECT_DIR/.gitlab-ci/meson/libc++.native
> +  MESON_CLANG_LIBSTDCPP_OPTIONS: >-
> +    ${MESON_CLANG_OPTIONS}
> +    --native-file $CI_PROJECT_DIR/.gitlab-ci/meson/libstdc++.native
>    PACKAGES: >-
>      ca-certificates
>      git
> @@ -194,21 +199,14 @@ build-full:debian:12:
>            ${MESON_ALL_OPTIONS}
>            -D b_sanitize=none
>        - ARCH: amd64
> -        BUILD_TYPE: debug
> -        CC: clang
> -        CXX: clang++
> -        MESON_OPTIONS: >-
> -          ${MESON_ALL_OPTIONS}
> -          ${MESON_CLANG_OPTIONS}
> -          -D qcam=disabled
> -      - ARCH: amd64
> -        BUILD_TYPE: release
> +        BUILD_TYPE:
> +          - debug
> +          - release
>          CC: clang
>          CXX: clang++
> -        MESON_OPTIONS: >-
> -          ${MESON_ALL_OPTIONS}
> -          ${MESON_CLANG_OPTIONS}
> -          -D qcam=disabled
> +        MESON_OPTIONS:
> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBCPP_OPTIONS} -D qcam=disabled
> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBSTDCPP_OPTIONS}
> 
>  build-full:debian:12:as-subproject:
>    extends:
> @@ -256,13 +254,11 @@ build-full:debian:13:
>        - ARCH: amd64
>          CC: clang
>          CXX: clang++
> -        MESON_OPTIONS: >-
> -          ${MESON_ALL_OPTIONS}
> -          ${MESON_CLANG_OPTIONS}
> -          -D qcam=disabled
> -          -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
> +        MESON_OPTIONS:
> +          # `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
> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBCPP_OPTIONS} -D qcam=disabled -D cpp_debugstl=false
> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBSTDCPP_OPTIONS}
>        - ARCH: armhf
>        - ARCH: arm64
> 
> --
> 2.53.0
Barnabás Pőcze Feb. 23, 2026, 9:41 a.m. UTC | #2
2026. 02. 23. 10:30 keltezéssel, Kieran Bingham írta:
> Quoting Barnabás Pőcze (2026-02-16 14:28:43)
>> Currently clang is only used to test libc++ builds. This, however, prevents
>> the build testing of e.g. qcam since the packaged qt libraries use libstdc++,
>> so it needs to be disabled when using libc++.
>>
>> So duplicate every current clang job for libstdc++ testing.
>>
>> Link: https://gitlab.freedesktop.org/camera/libcamera/-/issues/315
>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
>> ---
>> Maybe it's not worth duplicating each clang job, but adding at least one
>> (clang, libstdc++) build is probably worth it.
> 
> I believe the freedesktop infrastructure have told us that the most
> 'expensive' part of CI is setting up the runner for the jobs, and we
> have quite a few per run already.
> 

It would be nice to put a concrete number on it then, because otherwise
any kind of planning is impossible.


> 
> Is it easy/possible for us to combine these additional builds into a
> single job somehow?
> 
> I think the actual compilation test is 'cheap' once the runner has been
> set up, so it might be helpful for us to look at how to combine more
> tests, then it would be easy to also test many combinations of clang?

I believe even all jobs could be combined into a single one if so desired, but
in my view merging like that definitely goes against the gitlab workflow
(wrt. variables, matrices, artifacts, etc).


> 
> --
> Kieran
> 
>> ---
>>   .gitlab-ci/meson/libstdc++.native |  3 +++
>>   gitlab-ci.yml                     | 36 ++++++++++++++-----------------
>>   2 files changed, 19 insertions(+), 20 deletions(-)
>>   create mode 100644 .gitlab-ci/meson/libstdc++.native
>>
>> diff --git a/.gitlab-ci/meson/libstdc++.native b/.gitlab-ci/meson/libstdc++.native
>> new file mode 100644
>> index 0000000..3116043
>> --- /dev/null
>> +++ b/.gitlab-ci/meson/libstdc++.native
>> @@ -0,0 +1,3 @@
>> +[built-in options]
>> +cpp_args = ['-stdlib=libstdc++']
>> +cpp_link_args = ['-stdlib=libstdc++']
>> diff --git a/gitlab-ci.yml b/gitlab-ci.yml
>> index 6256335..e51266c 100644
>> --- a/gitlab-ci.yml
>> +++ b/gitlab-ci.yml
>> @@ -29,7 +29,12 @@ variables:
>>     # clang fails to link with ASan if --no-undefined is enabled.
>>     MESON_CLANG_OPTIONS: >-
>>       -D b_lundef=false
>> +  MESON_CLANG_LIBCPP_OPTIONS: >-
>> +    ${MESON_CLANG_OPTIONS}
>>       --native-file $CI_PROJECT_DIR/.gitlab-ci/meson/libc++.native
>> +  MESON_CLANG_LIBSTDCPP_OPTIONS: >-
>> +    ${MESON_CLANG_OPTIONS}
>> +    --native-file $CI_PROJECT_DIR/.gitlab-ci/meson/libstdc++.native
>>     PACKAGES: >-
>>       ca-certificates
>>       git
>> @@ -194,21 +199,14 @@ build-full:debian:12:
>>             ${MESON_ALL_OPTIONS}
>>             -D b_sanitize=none
>>         - ARCH: amd64
>> -        BUILD_TYPE: debug
>> -        CC: clang
>> -        CXX: clang++
>> -        MESON_OPTIONS: >-
>> -          ${MESON_ALL_OPTIONS}
>> -          ${MESON_CLANG_OPTIONS}
>> -          -D qcam=disabled
>> -      - ARCH: amd64
>> -        BUILD_TYPE: release
>> +        BUILD_TYPE:
>> +          - debug
>> +          - release
>>           CC: clang
>>           CXX: clang++
>> -        MESON_OPTIONS: >-
>> -          ${MESON_ALL_OPTIONS}
>> -          ${MESON_CLANG_OPTIONS}
>> -          -D qcam=disabled
>> +        MESON_OPTIONS:
>> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBCPP_OPTIONS} -D qcam=disabled
>> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBSTDCPP_OPTIONS}
>>
>>   build-full:debian:12:as-subproject:
>>     extends:
>> @@ -256,13 +254,11 @@ build-full:debian:13:
>>         - ARCH: amd64
>>           CC: clang
>>           CXX: clang++
>> -        MESON_OPTIONS: >-
>> -          ${MESON_ALL_OPTIONS}
>> -          ${MESON_CLANG_OPTIONS}
>> -          -D qcam=disabled
>> -          -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
>> +        MESON_OPTIONS:
>> +          # `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
>> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBCPP_OPTIONS} -D qcam=disabled -D cpp_debugstl=false
>> +          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBSTDCPP_OPTIONS}
>>         - ARCH: armhf
>>         - ARCH: arm64
>>
>> --
>> 2.53.0

Patch
diff mbox series

diff --git a/.gitlab-ci/meson/libstdc++.native b/.gitlab-ci/meson/libstdc++.native
new file mode 100644
index 0000000..3116043
--- /dev/null
+++ b/.gitlab-ci/meson/libstdc++.native
@@ -0,0 +1,3 @@ 
+[built-in options]
+cpp_args = ['-stdlib=libstdc++']
+cpp_link_args = ['-stdlib=libstdc++']
diff --git a/gitlab-ci.yml b/gitlab-ci.yml
index 6256335..e51266c 100644
--- a/gitlab-ci.yml
+++ b/gitlab-ci.yml
@@ -29,7 +29,12 @@  variables:
   # clang fails to link with ASan if --no-undefined is enabled.
   MESON_CLANG_OPTIONS: >-
     -D b_lundef=false
+  MESON_CLANG_LIBCPP_OPTIONS: >-
+    ${MESON_CLANG_OPTIONS}
     --native-file $CI_PROJECT_DIR/.gitlab-ci/meson/libc++.native
+  MESON_CLANG_LIBSTDCPP_OPTIONS: >-
+    ${MESON_CLANG_OPTIONS}
+    --native-file $CI_PROJECT_DIR/.gitlab-ci/meson/libstdc++.native
   PACKAGES: >-
     ca-certificates
     git
@@ -194,21 +199,14 @@  build-full:debian:12:
           ${MESON_ALL_OPTIONS}
           -D b_sanitize=none
       - ARCH: amd64
-        BUILD_TYPE: debug
-        CC: clang
-        CXX: clang++
-        MESON_OPTIONS: >-
-          ${MESON_ALL_OPTIONS}
-          ${MESON_CLANG_OPTIONS}
-          -D qcam=disabled
-      - ARCH: amd64
-        BUILD_TYPE: release
+        BUILD_TYPE:
+          - debug
+          - release
         CC: clang
         CXX: clang++
-        MESON_OPTIONS: >-
-          ${MESON_ALL_OPTIONS}
-          ${MESON_CLANG_OPTIONS}
-          -D qcam=disabled
+        MESON_OPTIONS:
+          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBCPP_OPTIONS} -D qcam=disabled
+          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBSTDCPP_OPTIONS}

 build-full:debian:12:as-subproject:
   extends:
@@ -256,13 +254,11 @@  build-full:debian:13:
       - ARCH: amd64
         CC: clang
         CXX: clang++
-        MESON_OPTIONS: >-
-          ${MESON_ALL_OPTIONS}
-          ${MESON_CLANG_OPTIONS}
-          -D qcam=disabled
-          -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
+        MESON_OPTIONS:
+          # `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
+          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBCPP_OPTIONS} -D qcam=disabled -D cpp_debugstl=false
+          - ${MESON_ALL_OPTIONS} ${MESON_CLANG_LIBSTDCPP_OPTIONS}
       - ARCH: armhf
       - ARCH: arm64