Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-137170

XCB GL integrations and EGLFS device integrations are always linked in static build

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P2: Important
    • None
    • 6.5, 6.8, 6.9, 6.10
    • Build System: CMake
    • None
    • Linux/Wayland

    Description

      Building Qt with the following Dockerfile:

      FROM rockylinux:8
      ENV LANG=C.UTF-8
      ENV PATH=/opt/rh/gcc-toolset-12/root/usr/bin:$PATH
      ENV LD_LIBRARY_PATH=/opt/rh/gcc-toolset-12/root/usr/lib64:/opt/rh/gcc-toolset-12/root/usr/lib
      ENV PKG_CONFIG_PATH=/opt/rh/gcc-toolset-12/root/usr/lib64/pkgconfig:/opt/rh/gcc-toolset-12/root/usr/lib/pkgconfig
      
      RUN dnf -y install epel-release \
      	&& dnf config-manager --set-enabled powertools \
      	&& dnf -y install cmake git ninja-build pkgconf gcc-toolset-12-binutils \
      		gcc-toolset-12-gcc-c++ fontconfig-devel freetype-devel \
      		zlib-devel libxkbcommon-devel libxkbcommon-x11-devel \
      		libX11-devel wayland-devel libxcb-devel xcb-util-wm-devel \
      		xcb-util-image-devel xcb-util-keysyms-devel xcb-util-renderutil-devel \
      		xcb-util-cursor-devel mesa-libGL-devel mesa-libEGL-devel \
      		vulkan-devel glib2-devel at-spi2-core-devel \
      		gtk3-devel openssl-devel \
      	&& dnf clean all
      
      WORKDIR /usr/src
      ENV LDFLAGS=-Wl,-as-needed
      
      RUN <<EOF
      git clone --depth=1 https://github.com/qt/qtbase.git
      cd qtbase
      cmake -GNinja -B build . \
      	-DCMAKE_BUILD_TYPE=Release \
      	-DBUILD_SHARED_LIBS=OFF \
      	-DQT_BUILD_EXAMPLES=ON \
      	-DQT_QPA_DEFAULT_PLATFORM=wayland \
      	-DFEATURE_no_prefix=ON
      cmake --build build --parallel
      EOF
      

      Results in the following libs being linked:
      readelf -d qtbase/build/examples/gui/rasterwindow/rasterwindow

      Dynamic section at offset 0xb7b988 contains 65 entries:
        Tag        Type                         Name/Value
       0x0000000000000001 (NEEDED)             Shared library: [libdrm.so.2]
       0x0000000000000001 (NEEDED)             Shared library: [libwayland-client.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libwayland-cursor.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libX11-xcb.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libGLX.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libOpenGL.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libEGL.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libpng16.so.16]
       0x0000000000000001 (NEEDED)             Shared library: [libfreetype.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [libfontconfig.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libX11.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [libdbus-1.so.3]
       0x0000000000000001 (NEEDED)             Shared library: [libxkbcommon.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libz.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libicui18n.so.60]
       0x0000000000000001 (NEEDED)             Shared library: [libicuuc.so.60]
       0x0000000000000001 (NEEDED)             Shared library: [libpcre2-16.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2]
       0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libxkbcommon-x11.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-cursor.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-icccm.so.4]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-image.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-keysyms.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-randr.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-render-util.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-shm.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-sync.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-xfixes.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-render.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-shape.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-xkb.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb-glx.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libxcb.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]
       0x000000000000001d (RUNPATH)            Library runpath: [::::::::::::::::::::::::]
       0x000000000000000c (INIT)               0x414000
       0x000000000000000d (FINI)               0xca8da4
       0x0000000000000019 (INIT_ARRAY)         0xf55c18
       0x000000000000001b (INIT_ARRAYSZ)       304 (bytes)
       0x000000000000001a (FINI_ARRAY)         0xf55d48
       0x000000000000001c (FINI_ARRAYSZ)       16 (bytes)
       0x000000006ffffef5 (GNU_HASH)           0x400340
       0x0000000000000005 (STRTAB)             0x404fe8
       0x0000000000000006 (SYMTAB)             0x400380
       0x000000000000000a (STRSZ)              16090 (bytes)
       0x000000000000000b (SYMENT)             24 (bytes)
       0x0000000000000015 (DEBUG)              0x0
       0x0000000000000003 (PLTGOT)             0xf7d000
       0x0000000000000002 (PLTRELSZ)           18720 (bytes)
       0x0000000000000014 (PLTREL)             RELA
       0x0000000000000017 (JMPREL)             0x40ef30
       0x0000000000000007 (RELA)               0x409830
       0x0000000000000008 (RELASZ)             22272 (bytes)
       0x0000000000000009 (RELAENT)            24 (bytes)
       0x000000006ffffffe (VERNEED)            0x409520
       0x000000006fffffff (VERNEEDNUM)         10
       0x000000006ffffff0 (VERSYM)             0x408ec2
       0x0000000000000000 (NULL)               0x0
      

      However, I would expect no XCB libraries being linked.

      grep --color=auto Plugin_init.cpp qtbase/build/examples/gui/rasterwindow/build.ninja reveals Qt links XCB GL integrations and EGLFS device integrations even though XCB and EGLFS platform plugins aren't linked.

      Applying such a patch:

      diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_emu/CMakeLists.txt b/src/plugins/platforms/eglfs/deviceintegration/eglfs_emu/CMakeLists.txt
      index fa744be0330..5e4790be433 100644
      --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_emu/CMakeLists.txt
      +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_emu/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QEglFSEmulatorIntegrationPlugin
           OUTPUT_NAME qeglfs-emu-integration
           PLUGIN_TYPE egldeviceintegrations
      +    DEFAULT_IF "eglfs" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qeglfsemulatorintegration.cpp qeglfsemulatorintegration.h
               qeglfsemulatorscreen.cpp qeglfsemulatorscreen.h
      diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/CMakeLists.txt b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/CMakeLists.txt
      index 3c3e5a8a6ca..76edf6b23cc 100644
      --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/CMakeLists.txt
      +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QEglFSKmsEglDeviceIntegrationPlugin
           OUTPUT_NAME qeglfs-kms-egldevice-integration
           PLUGIN_TYPE egldeviceintegrations
      +    DEFAULT_IF "eglfs" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qeglfskmsegldevice.cpp qeglfskmsegldevice.h
               qeglfskmsegldeviceintegration.cpp qeglfskmsegldeviceintegration.h
      diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/CMakeLists.txt b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/CMakeLists.txt
      index 38981f87b98..d24b5315a44 100644
      --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/CMakeLists.txt
      +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_mali/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QEglFSMaliIntegrationPlugin
           OUTPUT_NAME qeglfs-mali-integration
           PLUGIN_TYPE egldeviceintegrations
      +    DEFAULT_IF "eglfs" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qeglfsmaliintegration.cpp qeglfsmaliintegration.h
               qeglfsmalimain.cpp
      diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_openwfd/CMakeLists.txt b/src/plugins/platforms/eglfs/deviceintegration/eglfs_openwfd/CMakeLists.txt
      index 7e2362e6271..20cd9399e6e 100644
      --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_openwfd/CMakeLists.txt
      +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_openwfd/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QEglFSOpenWFDIntegrationPlugin
           OUTPUT_NAME qeglfs-openwfd-integration
           PLUGIN_TYPE egldeviceintegrations
      +    DEFAULT_IF "eglfs" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qeglfsopenwfdintegration.cpp qeglfsopenwfdintegration.h
               qeglfsopenwfdmain.cpp
      diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/CMakeLists.txt b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/CMakeLists.txt
      index 01defc92428..de87cad8356 100644
      --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/CMakeLists.txt
      +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QEglFSVivIntegrationPlugin
           OUTPUT_NAME qeglfs-viv-integration
           PLUGIN_TYPE egldeviceintegrations
      +    DEFAULT_IF "eglfs" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qeglfsvivintegration.cpp qeglfsvivintegration.h
               qeglfsvivmain.cpp
      diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/CMakeLists.txt b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/CMakeLists.txt
      index 6052e98ab84..c81d4689810 100644
      --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/CMakeLists.txt
      +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_viv_wl/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QEglFSVivWaylandIntegrationPlugin
           OUTPUT_NAME qeglfs-viv-wl-integration
           PLUGIN_TYPE egldeviceintegrations
      +    DEFAULT_IF "eglfs" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qeglfsvivwlintegration.cpp qeglfsvivwlintegration.h
               qeglfsvivwlmain.cpp
      diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/CMakeLists.txt b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/CMakeLists.txt
      index 9dde3090c86..932bf998948 100644
      --- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/CMakeLists.txt
      +++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QEglFSX11IntegrationPlugin
           OUTPUT_NAME qeglfs-x11-integration
           PLUGIN_TYPE egldeviceintegrations
      +    DEFAULT_IF "eglfs" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qeglfsx11integration.cpp qeglfsx11integration.h
               qeglfsx11main.cpp
      diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/CMakeLists.txt b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/CMakeLists.txt
      index 12938c159a9..a4a793a5d10 100644
      --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/CMakeLists.txt
      +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/CMakeLists.txt
      @@ -10,6 +10,7 @@ qt_find_package(EGL)
       qt_internal_add_plugin(QXcbEglIntegrationPlugin
           OUTPUT_NAME qxcb-egl-integration
           PLUGIN_TYPE xcbglintegrations
      +    DEFAULT_IF "xcb" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qxcbeglcontext.h
               qxcbeglintegration.cpp qxcbeglintegration.h
      diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/CMakeLists.txt b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/CMakeLists.txt
      index f9f78ad1eb2..eb170ad90e1 100644
      --- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/CMakeLists.txt
      +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/CMakeLists.txt
      @@ -8,6 +8,7 @@
       qt_internal_add_plugin(QXcbGlxIntegrationPlugin
           OUTPUT_NAME qxcb-glx-integration
           PLUGIN_TYPE xcbglintegrations
      +    DEFAULT_IF "xcb" IN_LIST QT_QPA_PLATFORMS
           SOURCES
               qglxintegration.cpp qglxintegration.h
               qxcbglxintegration.cpp qxcbglxintegration.h
      

      Results in no xcb library:

      Dynamic section at offset 0xa95ae8 contains 44 entries:
        Tag        Type                         Name/Value
       0x0000000000000001 (NEEDED)             Shared library: [libpng16.so.16]
       0x0000000000000001 (NEEDED)             Shared library: [libfreetype.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [libfontconfig.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libz.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libicui18n.so.60]
       0x0000000000000001 (NEEDED)             Shared library: [libicuuc.so.60]
       0x0000000000000001 (NEEDED)             Shared library: [libpcre2-16.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libdl.so.2]
       0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libdbus-1.so.3]
       0x0000000000000001 (NEEDED)             Shared library: [libxkbcommon.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libwayland-client.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libwayland-cursor.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
       0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
       0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
       0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]
       0x000000000000001d (RUNPATH)            Library runpath: [::::::::::::::::::::::::]
       0x000000000000000c (INIT)               0x410000
       0x000000000000000d (FINI)               0xbfb824
       0x0000000000000019 (INIT_ARRAY)         0xe74aa8
       0x000000000000001b (INIT_ARRAYSZ)       232 (bytes)
       0x000000000000001a (FINI_ARRAY)         0xe74b90
       0x000000000000001c (FINI_ARRAYSZ)       16 (bytes)
       0x000000006ffffef5 (GNU_HASH)           0x400340
       0x0000000000000005 (STRTAB)             0x403f00
       0x0000000000000006 (SYMTAB)             0x400378
       0x000000000000000a (STRSZ)              12168 (bytes)
       0x000000000000000b (SYMENT)             24 (bytes)
       0x0000000000000015 (DEBUG)              0x0
       0x0000000000000003 (PLTGOT)             0xe97000
       0x0000000000000002 (PLTRELSZ)           14424 (bytes)
       0x0000000000000014 (PLTREL)             RELA
       0x0000000000000017 (JMPREL)             0x40c118
       0x0000000000000007 (RELA)               0x407690
       0x0000000000000008 (RELASZ)             19080 (bytes)
       0x0000000000000009 (RELAENT)            24 (bytes)
       0x000000006ffffffe (VERNEED)            0x407380
       0x000000006fffffff (VERNEEDNUM)         10
       0x000000006ffffff0 (VERSYM)             0x406e88
       0x0000000000000000 (NULL)               0x0
      

      Attachments

        Issue Links

          No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

              qtbuildsystem Qt Build System Team
              ilya-fedin Ilya Fedin
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:

                Gerrit Reviews

                  There are no open Gerrit changes