Skip to content

[cmake] fix wayland's accidental X11 dependency - #321

Open
Moros1138 wants to merge 1 commit into
developfrom
fix-wayland-x11-dependency
Open

Moros1138 wants to merge 1 commit into
developfrom
fix-wayland-x11-dependency

Conversation

@Moros1138

Copy link
Copy Markdown
Collaborator

While rapid testing different configurations with some CMake Presets,
I noticed something odd when I was sanity checking the output binaries.

Of note is that the current Wayland build was linking against GLX and X11.
It turns out the culprit was the following line in the cmake build system.

            target_link_libraries(${PROGRAM_NAME} PRIVATE
                wayland_protocols
                ${XKBCOMMON_LIBRARIES}
                ${WAYLAND_CLIENT_LIBRARIES}
                ${WAYLAND_EGL_LIBRARIES}
                ${WAYLAND_CURSOR_LIBRARIES}
                ${EGL_LIBRARIES}
                OpenGL::GL
                PNG::PNG
                Threads::Threads
            )

Since Cmake 3.11, OpenGL_GL_PREFERENCE defaults to GLVND, when GLVND is installed, OpenGL::GL becomes an umbrella target that links libOpenGL and libGLX. This means using OpenGL::GL in the wayland build links against libGLX despite not actually using it, AND libGLX depends on libX11.

The fix is simple, changing OpenGL::GL to OpenGL::OpenGL. I have attached proofs below.

### X11 for comparison
```bash
[jon@Jonny-PC debug-x11]$ ldd PGEApp 
        linux-vdso.so.1 (0x00007f2d431e5000)
        libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f2d42fca000)
        libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f2d42e66000)
        libXi.so.6 => /usr/lib/libXi.so.6 (0x00007f2d42e4f000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00007f2d42e17000)
        libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007f2d42de3000)
        libOpenGL.so.0 => /usr/lib/libOpenGL.so.0 (0x00007f2d42dbf000)
        libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f2d42da7000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f2d42a00000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007f2d428f8000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f2d42d71000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f2d42600000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f2d42d42000)
        libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007f2d4287f000)
        /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f2d431e7000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f2d42d3d000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f2d42d35000)

Wayland Before Fix

[jon@Jonny-PC debug-wayland]$ ldd PGEApp 
        linux-vdso.so.1 (0x00007ff84fa08000)
        libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x00007ff84f7ce000)
        libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x00007ff84f7bd000)
        libwayland-egl.so.1 => /usr/lib/libwayland-egl.so.1 (0x00007ff84f7b8000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007ff84f6b0000)
        libwayland-cursor.so.0 => /usr/lib/libwayland-cursor.so.0 (0x00007ff84f6a5000)
        libEGL.so.1 => /usr/lib/libEGL.so.1 (0x00007ff84f693000)
        libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007ff84f63e000)
>>>>>>  libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007ff84f60c000)
        libOpenGL.so.0 => /usr/lib/libOpenGL.so.0 (0x00007ff84f5e8000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00007ff84f5b0000)
        libdecor-0.so.0 => /usr/lib/libdecor-0.so.0 (0x00007ff84f5a4000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007ff84f200000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007ff84f56e000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007ff84ee00000)
        libffi.so.8 => /usr/lib/libffi.so.8 (0x00007ff84f55f000)
        /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007ff84fa0a000)
        libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007ff84f187000)
>>>>>>  libX11.so.6 => /usr/lib/libX11.so.6 (0x00007ff84ec9c000)
        libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007ff84f530000)
        libXau.so.6 => /usr/lib/libXau.so.6 (0x00007ff84f182000)
        libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007ff84f17a000)

Wayland After Fix

[jon@Jonny-PC debug-wayland]$ ldd PGEApp 
        linux-vdso.so.1 (0x00007f77bbd6e000)
        libxkbcommon.so.0 => /usr/lib/libxkbcommon.so.0 (0x00007f77bbb34000)
        libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x00007f77bbb23000)
        libwayland-egl.so.1 => /usr/lib/libwayland-egl.so.1 (0x00007f77bbb1e000)
        libm.so.6 => /usr/lib/libm.so.6 (0x00007f77bba16000)
        libwayland-cursor.so.0 => /usr/lib/libwayland-cursor.so.0 (0x00007f77bba0b000)
        libEGL.so.1 => /usr/lib/libEGL.so.1 (0x00007f77bb9f9000)
        libOpenGL.so.0 => /usr/lib/libOpenGL.so.0 (0x00007f77bb9d5000)
        libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f77bb980000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00007f77bb948000)
        libdecor-0.so.0 => /usr/lib/libdecor-0.so.0 (0x00007f77bb93e000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f77bb600000)
        libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f77bb5ca000)
        libc.so.6 => /usr/lib/libc.so.6 (0x00007f77bb200000)
        libffi.so.8 => /usr/lib/libffi.so.8 (0x00007f77bb92d000)
        /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f77bbd70000)
        libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007f77bb551000)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant