Use shared_library() instead of shared_module() when building the dummy
libraries. This causes Meson to add --no-undefined to the linker instead of
--allow-shlib-undefined.
This matches configure.ac and also allows Meson to configure on ARMv7.
Otherwise it would fail with
ERROR: Problem encountered: No matching ASM file for armv7_tsd
Theres a couple of things that this meson build system does differently
than autotools. It doesn't use a config.h file, it just puts #defines on
the command line with -D. It also does all of the code generation in the
generated folder, simply because it's simpler to do that.
On my 2 core / 4 thread KBL system:
autotools (no ccache):
sh -c "./autogen.sh&& ./configure && make -j6 check" 44.74s user 6.70s system 145% cpu 35.269 total
autotools (warm ccache):
sh -c "./autogen.sh&& ./configure && make -j6 check" 32.86s user 4.22s system 129% cpu 28.580 total
meson (no ccache):
sh -c "meson build; ninja -C build test" 23.48s user 3.71s system 236% cpu 11.487 total
meson (warm ccache)
sh -c "meson build; ninja -C build test" 16.06s user 2.31s system 210% cpu 8.727 total
autotools force includes this with `-include config.h`, so it's
unnecessary to make compilation work. Meson doesn't generate a config.h
so this will break meson compilation.
Add a '-l' flag to testgldispatch, which tells it to test a generated stub
at the very end of the dispatch table.
On PPC, looking up a function past index 4096 requires more than just a simple
register+immediate load, so this makes sure that it's correct.
Add a '-l' flag to testgldispatch, which tells it to test a generated stub
at the very end of the dispatch table.
On PPC, looking up a function past index 4096 requires more than just a simple
register+immediate load, so this makes sure that it's correct.
These use the symbol-check.py script from mesa, and should help to
ensure that glvnd doesn't start exposing/hiding new symbols. It's also
useful to double check that meson and autotools are doing the same
thing.
Many project in the freedesktop graphics space use editorconfig files as
a way to standardize style in an editor agnostic way. This one
configures all of the files current in libglvnd (I looked at the .c and
.h files and they seem to all use 4 spaces for indent). Because it
seemed everything used 4 spaces I just set that to the default and
overrode as necessary.
Fix a bug in gen_egl_dispatch.py which caused libEGL.so to export two extension
functions, eglCreatePlatformWindowSurfaceEXT and
eglCreatePlatformPixmapSurfaceEXT.
Fixes https://gitlab.freedesktop.org/glvnd/libglvnd/issues/196
Change the configure script to define the EGL_NO_X11 macro unconditionally, so
that the EGL headers don't try to include the Xlib headers.
Regardless of whether --disable-x11 is used, libglvnd doesn't need X11-specific
typedefs for EGLNativeDisplayType et. al.
Removed the rest of the assembly code generation from libGLdispatch. Since we
don't need to generate dispatch stubs at runtime for extension functions
anymore, the code generation is now only used to restore the dispatch stubs
after a vendor library patches them.
Now, instead of reconstructing each dispatch stub, libGLdispatch will just
allocate a copy of all of the entrypoints before patching them, and then it
uses memcpy to restore them.
Fixed some missing static libraries for the EGL dummy vendor library.
Added Xlib to the GLX dummy library.
Added the --no-undefined flag for both of the dummy vendor libraries.
Rewrote the generated dispatch stubs for GLX so that they're all defined at
compile time, instead of generating them at runtime.
Insted of patching the address of the vendor-provided functions into the
assembly stubs, it will now keep a separate array of function pointers. The
assembly stubs will look up the approprite entry in that array and jump to it.
As a result, the assembly code is entirely static, so we don't need to deal
with generating or modifying executable code at runtime.
Move the function entry_get_patch_addresses into entry_common.c for all
architectures.
Now that it takes an index instead of a pointer, ther's no longer a difference
between ARMv7 and everything else.