targets/dri-nouveau: Convert to static/shared pipe-drivers
authorEmil Velikov <emil.l.velikov@gmail.com>
Mon, 16 Jun 2014 13:23:50 +0000 (14:23 +0100)
committerEmil Velikov <emil.l.velikov@gmail.com>
Wed, 2 Jul 2014 09:52:53 +0000 (10:52 +0100)
Similiar to other targets, we'd like to convert all the separate
targets into a single one, thus we'll minimize the duplication and
overall size of mesa. The conversion per API basis, with the drivers
available either statically or shared. Currently the former is the
default.

v2: Correctly append the version script to the linker flags.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
Tested-by: Rob Clark <robclark@freedesktop.org>
Tested-by: Thomas Helland <thomashelland90 at gmail.com>
Acked-by: Tom Stellard <thomas.stellard@amd.com>
configure.ac
src/gallium/Automake.inc
src/gallium/targets/Makefile.am
src/gallium/targets/dri-nouveau/Makefile.am [deleted file]
src/gallium/targets/dri-nouveau/nouveau_dri.dyn [deleted file]
src/gallium/targets/dri-nouveau/target.c [deleted file]
src/gallium/targets/dri.sym [deleted file]
src/gallium/targets/dri/Makefile.am [new file with mode: 0644]
src/gallium/targets/dri/dri.sym [new file with mode: 0644]
src/gallium/targets/dri/target.c [new file with mode: 0644]

index 0e32db0abb76796d25c71b463d6119339d6ab8b8..db8780e651a416757eefd724f7807acca2ab2a55 100644 (file)
@@ -852,6 +852,7 @@ esac
 if test "x$enable_dri" = xyes; then
     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/dri"
     GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS"
+    enable_gallium_loader=yes
 fi
 
 if test "x$enable_gallium_osmesa" = xyes; then
@@ -1973,7 +1974,7 @@ if test -n "$with_gallium_drivers"; then
             PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
             gallium_require_drm_loader
             GALLIUM_DRIVERS_DIRS="$GALLIUM_DRIVERS_DIRS nouveau"
-            gallium_check_st "nouveau/drm" "dri-nouveau" "xa/nouveau" "xvmc/nouveau" "vdpau/nouveau" "omx/nouveau"
+            gallium_check_st "nouveau/drm" "dri/nouveau" "xa/nouveau" "xvmc/nouveau" "vdpau/nouveau" "omx/nouveau"
             ;;
         xfreedreno)
             HAVE_GALLIUM_FREEDRENO=yes
@@ -2210,9 +2211,9 @@ AC_CONFIG_FILES([Makefile
                src/gallium/targets/dri-freedreno/Makefile
                src/gallium/targets/dri-i915/Makefile
                src/gallium/targets/dri-ilo/Makefile
-               src/gallium/targets/dri-nouveau/Makefile
                src/gallium/targets/dri-swrast/Makefile
                src/gallium/targets/dri-vmwgfx/Makefile
+               src/gallium/targets/dri/Makefile
                src/gallium/targets/egl-static/Makefile
                src/gallium/targets/gbm/Makefile
                src/gallium/targets/libgl-xlib/Makefile
index 4600b9c5b6b17381a49ce0991cc46aec7b93487b..e70a1363e1a049dd84b7883e4703ff3e37c0dcce 100644 (file)
@@ -61,7 +61,7 @@ GALLIUM_DRI_LINKER_FLAGS = \
 
 if HAVE_LD_VERSION_SCRIPT
 GALLIUM_DRI_LINKER_FLAGS += \
-       -Wl,--version-script=$(top_srcdir)/src/gallium/targets/dri.sym
+       -Wl,--version-script=$(top_srcdir)/src/gallium/targets/dri/dri.sym
 
 endif
 
index d86cd33af947ba698be04e8f21fc018ac70fe4d7..1a44c56ccfe73c184764b5576b139ae0082735f7 100644 (file)
 
 SUBDIRS =
 
+if HAVE_DRI2
+SUBDIRS += dri
+endif
+
 if HAVE_X11_DRIVER
 SUBDIRS += libgl-xlib
 endif
@@ -96,12 +100,6 @@ SUBDIRS += radeonsi/dri
 endif
 endif
 
-if HAVE_GALLIUM_NOUVEAU
-if HAVE_DRI2
-SUBDIRS += dri-nouveau
-endif
-endif
-
 if HAVE_GALLIUM_SOFTPIPE
 if HAVE_DRISW
 SUBDIRS += dri-swrast
diff --git a/src/gallium/targets/dri-nouveau/Makefile.am b/src/gallium/targets/dri-nouveau/Makefile.am
deleted file mode 100644 (file)
index a479040..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright © 2012 Intel Corporation
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-# DEALINGS IN THE SOFTWARE.
-
-include $(top_srcdir)/src/gallium/Automake.inc
-
-AM_CFLAGS = \
-       $(GALLIUM_DRI_CFLAGS)
-AM_CPPFLAGS = \
-       -DGALLIUM_RBUG \
-       -DGALLIUM_TRACE
-
-dridir = $(DRI_DRIVER_INSTALL_DIR)
-dri_LTLIBRARIES = nouveau_dri.la
-
-nodist_EXTRA_nouveau_dri_la_SOURCES = dummy.cpp
-nouveau_dri_la_SOURCES = target.c
-
-nouveau_dri_la_LDFLAGS = \
-       $(GALLIUM_DRI_LINKER_FLAGS) \
-       -Wl,--dynamic-list=$(srcdir)/nouveau_dri.dyn
-
-nouveau_dri_la_LIBADD = \
-       $(top_builddir)/src/mesa/drivers/dri/common/libdricommon.la \
-       $(top_builddir)/src/gallium/state_trackers/dri/drm/libdridrm.la \
-       $(top_builddir)/src/gallium/winsys/nouveau/drm/libnouveaudrm.la \
-       $(top_builddir)/src/gallium/drivers/trace/libtrace.la \
-       $(top_builddir)/src/gallium/drivers/rbug/librbug.la \
-       $(top_builddir)/src/gallium/drivers/nouveau/libnouveau.la \
-       $(GALLIUM_DRI_LIB_DEPS) \
-       $(LIBDRM_LIBS) \
-       $(NOUVEAU_LIBS)
-
-include $(top_srcdir)/install-gallium-links.mk
diff --git a/src/gallium/targets/dri-nouveau/nouveau_dri.dyn b/src/gallium/targets/dri-nouveau/nouveau_dri.dyn
deleted file mode 100644 (file)
index a10356b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-       nouveau_drm_screen_create;
-};
diff --git a/src/gallium/targets/dri-nouveau/target.c b/src/gallium/targets/dri-nouveau/target.c
deleted file mode 100644 (file)
index f0fcdd8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#include "target-helpers/inline_debug_helper.h"
-#include "state_tracker/drm_driver.h"
-#include "nouveau/drm/nouveau_drm_public.h"
-
-static struct pipe_screen *
-create_screen(int fd)
-{
-   struct pipe_screen *screen;
-
-   screen = nouveau_drm_screen_create(fd);
-   if (!screen)
-      return NULL;
-
-   screen = debug_screen_wrap(screen);
-
-   return screen;
-}
-
-static const struct drm_conf_ret share_fd_ret = {
-   .type = DRM_CONF_BOOL,
-   .val.val_int = true,
-};
-
-static const struct drm_conf_ret *drm_configuration(enum drm_conf conf)
-{
-   switch (conf) {
-   case DRM_CONF_SHARE_FD:
-      return &share_fd_ret;
-   default:
-      break;
-   }
-   return NULL;
-}
-
-DRM_DRIVER_DESCRIPTOR("nouveau", "nouveau", create_screen, drm_configuration)
diff --git a/src/gallium/targets/dri.sym b/src/gallium/targets/dri.sym
deleted file mode 100644 (file)
index c99aa09..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-       global:
-               __driDriverExtensions;
-               nouveau_drm_screen_create;
-               radeon_drm_winsys_create;
-       local:
-               *;
-};
diff --git a/src/gallium/targets/dri/Makefile.am b/src/gallium/targets/dri/Makefile.am
new file mode 100644 (file)
index 0000000..2220206
--- /dev/null
@@ -0,0 +1,103 @@
+include $(top_srcdir)/src/gallium/Automake.inc
+
+AM_CFLAGS = \
+       $(GALLIUM_TARGET_CFLAGS)
+
+AM_CPPFLAGS = \
+       -DGALLIUM_GALAHAD \
+       -DGALLIUM_NOOP \
+       -DGALLIUM_RBUG \
+       -DGALLIUM_TRACE
+
+dridir = $(DRI_DRIVER_INSTALL_DIR)
+dri_LTLIBRARIES = gallium_dri.la
+
+nodist_EXTRA_gallium_dri_la_SOURCES = dummy.cpp
+gallium_dri_la_SOURCES =
+
+gallium_dri_la_LDFLAGS = \
+       -shared \
+       -shrext .so \
+       -module \
+       -avoid-version \
+       -Wl,--dynamic-list=$(top_srcdir)/src/gallium/targets/dri-vdpau.dyn \
+       $(GC_SECTIONS)
+
+if HAVE_LD_VERSION_SCRIPT
+gallium_dri_la_LDFLAGS += \
+       -Wl,--version-script=$(top_srcdir)/src/gallium/targets/dri/dri.sym
+endif # HAVE_LD_VERSION_SCRIPT
+
+# XXX: Fold libdridrm/libdrisw as drivers become megadriver (__dri*DriverExtension) aware
+gallium_dri_la_LIBADD = \
+       $(top_builddir)/src/mesa/libmesagallium.la \
+       $(top_builddir)/src/mesa/drivers/dri/common/libdricommon.la \
+       $(top_builddir)/src/gallium/state_trackers/dri/drm/libdridrm_s.la \
+       $(top_builddir)/src/gallium/auxiliary/libgallium.la \
+       $(top_builddir)/src/gallium/drivers/galahad/libgalahad.la \
+       $(top_builddir)/src/gallium/drivers/noop/libnoop.la \
+       $(top_builddir)/src/gallium/drivers/rbug/librbug.la \
+       $(top_builddir)/src/gallium/drivers/trace/libtrace.la \
+       $(SELINUX_LIBS) \
+       $(EXPAT_LIBS) \
+       $(LIBDRM_LIBS) \
+       $(GALLIUM_COMMON_LIB_DEPS)
+
+if HAVE_GALLIUM_STATIC_TARGETS
+
+MEGADRIVERS =
+STATIC_TARGET_CPPFLAGS =
+STATIC_TARGET_LIB_DEPS = \
+       $(top_builddir)/src/loader/libloader.la
+
+if HAVE_GALLIUM_NOUVEAU
+MEGADRIVERS += nouveau
+STATIC_TARGET_CPPFLAGS += -DGALLIUM_NOUVEAU
+STATIC_TARGET_LIB_DEPS += \
+       $(top_builddir)/src/gallium/winsys/nouveau/drm/libnouveaudrm.la \
+       $(top_builddir)/src/gallium/drivers/nouveau/libnouveau.la \
+       $(NOUVEAU_LIBS)
+endif
+
+gallium_dri_la_SOURCES += target.c
+AM_CPPFLAGS += $(STATIC_TARGET_CPPFLAGS)
+gallium_dri_la_LIBADD += $(STATIC_TARGET_LIB_DEPS)
+
+else # HAVE_GALLIUM_STATIC_TARGETS
+
+gallium_dri_la_LIBADD += \
+       $(top_builddir)/src/gallium/auxiliary/pipe-loader/libpipe_loader.la \
+       $(GALLIUM_PIPE_LOADER_WINSYS_LIBS) \
+       $(GALLIUM_PIPE_LOADER_LIBS)
+
+endif # HAVE_GALLIUM_STATIC_TARGETS
+
+if HAVE_MESA_LLVM
+gallium_dri_la_LIBADD += $(LLVM_LIBS)
+gallium_dri_la_LDFLAGS += $(LLVM_LDFLAGS)
+endif
+
+if HAVE_COMPAT_SYMLINKS
+# Add a link to allow setting LIBGL_DRIVERS_PATH to /lib/gallium of the build tree.
+all-local: $(dri_LTLIBRARIES)
+       $(AM_V_GEN)link_dir=$(top_builddir)/$(LIB_DIR)/gallium;         \
+       $(MKDIR_P) $${link_dir};                                        \
+       for i in $(MEGADRIVERS); do                                     \
+               j=gallium_dri.so;                                       \
+               k=$${i}_dri.so;                                         \
+               ln -f .libs/$${j}                                       \
+                       $${link_dir}/$${k};                             \
+       done
+endif
+
+# hardlink each megadriver instance, but don't actually have
+# gallium_dri.so in the set of final installed files.
+install-data-hook:
+       $(AM_V_GEN)dest_dir=$(DESTDIR)/$(dridir);                       \
+       for i in $(MEGADRIVERS); do                                     \
+               j=gallium_dri.so;                                       \
+               k=$${i}_dri.so;                                         \
+               ln -f $${dest_dir}/$${j}                                \
+                       $${dest_dir}/$${k};                             \
+       done;                                                           \
+       $(RM) -f $$dest_dir/gallium_dri.*
diff --git a/src/gallium/targets/dri/dri.sym b/src/gallium/targets/dri/dri.sym
new file mode 100644 (file)
index 0000000..c99aa09
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       global:
+               __driDriverExtensions;
+               nouveau_drm_screen_create;
+               radeon_drm_winsys_create;
+       local:
+               *;
+};
diff --git a/src/gallium/targets/dri/target.c b/src/gallium/targets/dri/target.c
new file mode 100644 (file)
index 0000000..fde4a4a
--- /dev/null
@@ -0,0 +1 @@
+#include "target-helpers/inline_drm_helper.h"