[PATCH vkd3d 1/7] build: Use linker version scripts to control visibility.
Józef Kucia
joseph.kucia at gmail.com
Mon Jan 15 06:49:01 CST 2018
From: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
This should help us to not leak libvkd3d-shader symbols from libvkd3d
in the next commit.
ld-version-script.m4 is imported from gnulib. It's used in a lot of
projects.
---
Makefile.am | 9 +++++++
configure.ac | 2 ++
libs/vkd3d-shader/vkd3d_shader.map | 14 +++++++++++
libs/vkd3d-utils/vkd3d_utils.map | 13 +++++++++++
libs/vkd3d/vkd3d.map | 18 ++++++++++++++
m4/ld-version-script.m4 | 48 ++++++++++++++++++++++++++++++++++++++
6 files changed, 104 insertions(+)
create mode 100644 libs/vkd3d-shader/vkd3d_shader.map
create mode 100644 libs/vkd3d-utils/vkd3d_utils.map
create mode 100644 libs/vkd3d/vkd3d.map
create mode 100644 m4/ld-version-script.m4
diff --git a/Makefile.am b/Makefile.am
index 2876f6486df4..190a7ac8d134 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -68,6 +68,9 @@ libvkd3d_shader_la_SOURCES = \
libs/vkd3d-shader/vkd3d_shader_main.c \
libs/vkd3d-shader/vkd3d_shader_private.h
libvkd3d_shader_la_LIBADD = libvkd3d-common.la @SPIRV_TOOLS_LIBS@
+if HAVE_LD_VERSION_SCRIPT
+libvkd3d_shader_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libs/vkd3d-shader/vkd3d_shader.map
+endif
libvkd3d_la_SOURCES = \
include/d3d12.idl \
@@ -85,11 +88,17 @@ libvkd3d_la_SOURCES = \
libs/vkd3d/vkd3d_private.h \
libs/vkd3d/vulkan_procs.h
libvkd3d_la_LIBADD = libvkd3d-common.la libvkd3d-shader.la @PTHREAD_LIBS@ @VULKAN_LIBS@
+if HAVE_LD_VERSION_SCRIPT
+libvkd3d_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libs/vkd3d/vkd3d.map
+endif
libvkd3d_utils_la_SOURCES = \
libs/vkd3d-utils/vkd3d_utils_main.c \
libs/vkd3d-utils/vkd3d_utils_private.h
libvkd3d_utils_la_LIBADD = libvkd3d-common.la libvkd3d.la
+if HAVE_LD_VERSION_SCRIPT
+libvkd3d_utils_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libs/vkd3d-utils/vkd3d_utils.map
+endif
EXTRA_DIST = LICENSE
diff --git a/configure.ac b/configure.ac
index 5614f791fe64..b886058fef51 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,6 +30,8 @@ AM_SILENT_RULES([yes])
LT_PREREQ([2.4.2])
LT_INIT
+gl_LD_VERSION_SCRIPT
+
dnl Check compiler specific flags
AC_SUBST([VKD3D_CFLAGS])
AS_IF([test "x${GCC}" = "xyes"],
diff --git a/libs/vkd3d-shader/vkd3d_shader.map b/libs/vkd3d-shader/vkd3d_shader.map
new file mode 100644
index 000000000000..31ee4a90c970
--- /dev/null
+++ b/libs/vkd3d-shader/vkd3d_shader.map
@@ -0,0 +1,14 @@
+{
+global:
+ vkd3d_shader_compile_dxbc;
+ vkd3d_shader_find_signature_element;
+ vkd3d_shader_free_root_signature;
+ vkd3d_shader_free_shader_code;
+ vkd3d_shader_free_shader_signature;
+ vkd3d_shader_parse_input_signature;
+ vkd3d_shader_parse_root_signature;
+ vkd3d_shader_scan_dxbc;
+ vkd3d_shader_serialize_root_signature;
+
+local: *;
+};
diff --git a/libs/vkd3d-utils/vkd3d_utils.map b/libs/vkd3d-utils/vkd3d_utils.map
new file mode 100644
index 000000000000..42df666bd6a7
--- /dev/null
+++ b/libs/vkd3d-utils/vkd3d_utils.map
@@ -0,0 +1,13 @@
+{
+global:
+ D3D12CreateDevice;
+ D3D12CreateRootSignatureDeserializer;
+ D3D12GetDebugInterface;
+ D3D12SerializeRootSignature;
+ vkd3d_create_event;
+ vkd3d_destroy_event;
+ vkd3d_signal_event;
+ vkd3d_wait_event;
+
+local: *;
+};
diff --git a/libs/vkd3d/vkd3d.map b/libs/vkd3d/vkd3d.map
new file mode 100644
index 000000000000..db638f6dd35c
--- /dev/null
+++ b/libs/vkd3d/vkd3d.map
@@ -0,0 +1,18 @@
+{
+global:
+ vkd3d_create_device;
+ vkd3d_create_image_resource;
+ vkd3d_create_instance;
+ vkd3d_create_root_signature_deserializer;
+ vkd3d_get_vk_device;
+ vkd3d_get_vk_format;
+ vkd3d_get_vk_instance;
+ vkd3d_get_vk_physical_device;
+ vkd3d_get_vk_queue;
+ vkd3d_get_vk_queue_family_index;
+ vkd3d_instance_decref;
+ vkd3d_instance_incref;
+ vkd3d_serialize_root_signature;
+
+local: *;
+};
diff --git a/m4/ld-version-script.m4 b/m4/ld-version-script.m4
new file mode 100644
index 000000000000..4364f9f7a81e
--- /dev/null
+++ b/m4/ld-version-script.m4
@@ -0,0 +1,48 @@
+# ld-version-script.m4 serial 4
+dnl Copyright (C) 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# FIXME: The test below returns a false positive for mingw
+# cross-compiles, 'local:' statements does not reduce number of
+# exported symbols in a DLL. Use --disable-ld-version-script to work
+# around the problem.
+
+# gl_LD_VERSION_SCRIPT
+# --------------------
+# Check if LD supports linker scripts, and define automake conditional
+# HAVE_LD_VERSION_SCRIPT if so.
+AC_DEFUN([gl_LD_VERSION_SCRIPT],
+[
+ AC_ARG_ENABLE([ld-version-script],
+ [AS_HELP_STRING([--enable-ld-version-script],
+ [enable linker version script (default is enabled when possible)])],
+ [have_ld_version_script=$enableval],
+ [AC_CACHE_CHECK([if LD -Wl,--version-script works],
+ [gl_cv_sys_ld_version_script],
+ [gl_cv_sys_ld_version_script=no
+ save_LDFLAGS=$LDFLAGS
+ LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+ echo foo >conftest.map
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [],
+ [cat > conftest.map <<EOF
+VERS_1 {
+ global: sym;
+};
+
+VERS_2 {
+ global: sym;
+} VERS_1;
+EOF
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+ [gl_cv_sys_ld_version_script=yes])])
+ rm -f conftest.map
+ LDFLAGS=$save_LDFLAGS])
+ have_ld_version_script=$gl_cv_sys_ld_version_script])
+ AM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT],
+ [test "$have_ld_version_script" = yes])
+])
--
2.13.6
More information about the wine-devel
mailing list