targets/dri-nouveau: Convert to static/shared pipe-drivers

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>
This commit is contained in:
Emil Velikov 2014-06-16 14:23:50 +01:00
parent 9a7fd2954f
commit 6eabddd531
9 changed files with 112 additions and 100 deletions

View 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

View 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

View File

@ -22,6 +22,10 @@
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

View File

@ -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

View File

@ -1,3 +0,0 @@
{
nouveau_drm_screen_create;
};

View File

@ -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)

View File

@ -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.*

View File

@ -0,0 +1 @@
#include "target-helpers/inline_drm_helper.h"