gallium: Add "pipe-loader" target.

This target generates pipe driver modules intended to be consumed by
auxiliary/pipe-loader.  Most of it was taken from the "gbm" target --
the duplicated code will be replaced with references to this target in
a future commit.

Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
This commit is contained in:
Francisco Jerez 2011-11-25 14:26:00 +01:00
parent e136453062
commit 317be33d73
7 changed files with 315 additions and 0 deletions

View file

@ -0,0 +1,165 @@
# Makefile for building pipe driver shared libraries.
#
# Input variables: PIPE_INSTALL_DIR, PIPE_PREFIX (optional)
#
TOP = ../../../..
include $(TOP)/configs/current
PIPE_PREFIX ?= pipe_
PIPE_CPPFLAGS = \
-DGALLIUM_RBUG \
-DGALLIUM_TRACE \
-DGALLIUM_GALAHAD \
-I$(TOP)/include \
-I$(TOP)/src/gallium/auxiliary \
-I$(TOP)/src/gallium/drivers \
-I$(TOP)/src/gallium/include \
-I$(TOP)/src/gallium/winsys
PIPE_LIBS = \
$(TOP)/src/gallium/drivers/identity/libidentity.a \
$(TOP)/src/gallium/drivers/galahad/libgalahad.a \
$(TOP)/src/gallium/drivers/trace/libtrace.a \
$(TOP)/src/gallium/drivers/rbug/librbug.a \
$(GALLIUM_AUXILIARIES)
PIPE_SYS = $(LIBDRM_LIB) -lm -lpthread $(DLOPEN_LIBS)
PIPE_CFLAGS = $(LIBDRM_CFLAGS)
PIPE_LDFLAGS = -Wl,--no-undefined
# i915 pipe driver
i915_LIBS = \
$(TOP)/src/gallium/winsys/i915/drm/libi915drm.a \
$(TOP)/src/gallium/drivers/i915/libi915.a
i915_SYS = -ldrm_intel
# nouveau pipe driver
nouveau_LIBS = \
$(TOP)/src/gallium/winsys/nouveau/drm/libnouveaudrm.a \
$(TOP)/src/gallium/drivers/nv30/libnv30.a \
$(TOP)/src/gallium/drivers/nv50/libnv50.a \
$(TOP)/src/gallium/drivers/nvc0/libnvc0.a \
$(TOP)/src/gallium/drivers/nouveau/libnouveau.a
nouveau_SYS = -ldrm_nouveau
# r300 pipe driver
r300_LIBS = \
$(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \
$(TOP)/src/gallium/drivers/r300/libr300.a
r300_SYS += -ldrm_radeon
# r600 pipe driver
r600_LIBS = \
$(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \
$(TOP)/src/gallium/drivers/r600/libr600.a
r600_SYS += -ldrm_radeon
# vmwgfx pipe driver
vmwgfx_LIBS = \
$(TOP)/src/gallium/winsys/svga/drm/libsvgadrm.a \
$(TOP)/src/gallium/drivers/svga/libsvga.a
ifneq ($(findstring llvmpipe,$(GALLIUM_DRIVERS_DIRS)),)
swrast_LIBS = $(TOP)/src/gallium/drivers/llvmpipe/libllvmpipe.a
PIPE_CFLAGS += -DGALLIUM_LLVMPIPE
else ifneq ($(findstring softpipe,$(GALLIUM_DRIVERS_DIRS)),)
swrast_LIBS = $(TOP)/src/gallium/drivers/softpipe/libsoftpipe.a
PIPE_CFLAGS += -DGALLIUM_SOFTPIPE
endif
# LLVM
ifeq ($(MESA_LLVM),1)
PIPE_SYS += $(LLVM_LIBS)
PIPE_LDFLAGS += $(LLVM_LDFLAGS)
endif
# determine the targets/sources
_PIPE_TARGETS_CC =
_PIPE_TARGETS_CXX =
PIPE_SOURCES =
ifneq ($(findstring i915/drm,$(GALLIUM_WINSYS_DIRS)),)
_PIPE_TARGETS_CC += $(PIPE_PREFIX)i915.so
PIPE_SOURCES += pipe_i915.c
endif
ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),)
_PIPE_TARGETS_CXX += $(PIPE_PREFIX)nouveau.so
PIPE_SOURCES += pipe_nouveau.c
endif
ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),)
ifneq ($(findstring r300,$(GALLIUM_DRIVERS_DIRS)),)
_PIPE_TARGETS_CC += $(PIPE_PREFIX)r300.so
PIPE_SOURCES += pipe_r300.c
endif
endif
ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),)
ifneq ($(findstring r600,$(GALLIUM_DRIVERS_DIRS)),)
_PIPE_TARGETS_CC += $(PIPE_PREFIX)r600.so
PIPE_SOURCES += pipe_r600.c
endif
endif
ifneq ($(findstring svga/drm,$(GALLIUM_WINSYS_DIRS)),)
_PIPE_TARGETS_CC += $(PIPE_PREFIX)vmwgfx.so
PIPE_SOURCES += pipe_vmwgfx.c
endif
ifneq ($(filter llvmpipe softpipe,$(GALLIUM_DRIVERS_DIRS)),)
_PIPE_TARGETS_CC += $(PIPE_PREFIX)swrast.so
PIPE_SOURCES += pipe_swrast.c
endif
PIPE_OBJECTS := $(PIPE_SOURCES:.c=.o)
ifeq ($(MESA_LLVM),1)
PIPE_TARGETS_CXX = $(_PIPE_TARGETS_CXX) $(_PIPE_TARGETS_CC)
PIPE_TARGETS_CC =
else
PIPE_TARGETS_CXX = $(_PIPE_TARGETS_CXX)
PIPE_TARGETS_CC = $(_PIPE_TARGETS_CC)
endif
PIPE_TARGETS = $(PIPE_TARGETS_CC) $(PIPE_TARGETS_CXX)
default: depend $(PIPE_TARGETS)
.SECONDEXPANSION:
$(PIPE_TARGETS_CC): $(PIPE_PREFIX)%.so: pipe_%.o $(PIPE_LIBS) $$(%_LIBS)
$(MKLIB) -o $@ -noprefix -linker '$(CC)' \
-ldflags '-L$(TOP)/$(LIB_DIR) $(PIPE_LDFLAGS) $(LDFLAGS)' \
$(MKLIB_OPTIONS) $< \
-Wl,--start-group $(PIPE_LIBS) $($*_LIBS) -Wl,--end-group \
$(PIPE_SYS) $($*_SYS)
$(PIPE_TARGETS_CXX): $(PIPE_PREFIX)%.so: pipe_%.o $(PIPE_LIBS) $$(%_LIBS)
$(MKLIB) -o $@ -noprefix -linker '$(CXX)' \
-ldflags '-L$(TOP)/$(LIB_DIR) $(PIPE_LDFLAGS) $(LDFLAGS)' \
$(MKLIB_OPTIONS) $< \
-Wl,--start-group $(PIPE_LIBS) $($*_LIBS) -Wl,--end-group \
$(PIPE_SYS) $($*_SYS)
$(PIPE_OBJECTS): %.o: %.c
$(CC) -c -o $@ $< $(PIPE_CPPFLAGS) $(PIPE_CFLAGS) $(CFLAGS)
install: $(PIPE_TARGETS)
$(INSTALL) -d $(PIPE_INSTALL_DIR)
for tgt in $(PIPE_TARGETS); do \
$(MINSTALL) "$$tgt" $(PIPE_INSTALL_DIR); \
done
clean:
rm -f $(PIPE_TARGETS) $(PIPE_OBJECTS) depend depend.bak
depend: $(PIPE_SOURCES)
rm -f depend
touch depend
$(MKDEP) $(MKDEP_OPTIONS) $(PIPE_CPPFLAGS) $(PIPE_SOURCES) 2>/dev/null
sinclude depend

View file

@ -0,0 +1,27 @@
#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
#include "i915/drm/i915_drm_public.h"
#include "i915/i915_public.h"
static struct pipe_screen *
create_screen(int fd)
{
struct i915_winsys *iws;
struct pipe_screen *screen;
iws = i915_drm_winsys_create(fd);
if (!iws)
return NULL;
screen = i915_screen_create(iws);
if (!screen)
return NULL;
screen = debug_screen_wrap(screen);
return screen;
}
PUBLIC
DRM_DRIVER_DESCRIPTOR("i915", "i915", create_screen, NULL)

View file

@ -0,0 +1,21 @@
#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;
}
PUBLIC
DRM_DRIVER_DESCRIPTOR("nouveau", "nouveau", create_screen, NULL)

View file

@ -0,0 +1,27 @@
#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
#include "radeon/drm/radeon_drm_public.h"
#include "r300/r300_public.h"
static struct pipe_screen *
create_screen(int fd)
{
struct radeon_winsys *sws;
struct pipe_screen *screen;
sws = radeon_drm_winsys_create(fd);
if (!sws)
return NULL;
screen = r300_screen_create(sws);
if (!screen)
return NULL;
screen = debug_screen_wrap(screen);
return screen;
}
PUBLIC
DRM_DRIVER_DESCRIPTOR("r300", "radeon", create_screen, NULL)

View file

@ -0,0 +1,26 @@
#include "state_tracker/drm_driver.h"
#include "target-helpers/inline_debug_helper.h"
#include "radeon/drm/radeon_drm_public.h"
#include "r600/r600_public.h"
static struct pipe_screen *
create_screen(int fd)
{
struct radeon_winsys *rw;
struct pipe_screen *screen;
rw = radeon_drm_winsys_create(fd);
if (!rw)
return NULL;
screen = r600_screen_create(rw);
if (!screen)
return NULL;
screen = debug_screen_wrap(screen);
return screen;
}
PUBLIC
DRM_DRIVER_DESCRIPTOR("r600", "radeon", create_screen, NULL)

View file

@ -0,0 +1,22 @@
#include "target-helpers/inline_sw_helper.h"
#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
PUBLIC struct pipe_screen *
swrast_create_screen(struct sw_winsys *ws);
PUBLIC
DRM_DRIVER_DESCRIPTOR("swrast", NULL, NULL, NULL)
struct pipe_screen *
swrast_create_screen(struct sw_winsys *ws)
{
struct pipe_screen *screen;
screen = sw_screen_create(ws);
if (screen)
screen = debug_screen_wrap(screen);
return screen;
}

View file

@ -0,0 +1,27 @@
#include "target-helpers/inline_debug_helper.h"
#include "state_tracker/drm_driver.h"
#include "svga/drm/svga_drm_public.h"
#include "svga/svga_public.h"
static struct pipe_screen *
create_screen(int fd)
{
struct svga_winsys_screen *sws;
struct pipe_screen *screen;
sws = svga_drm_winsys_screen_create(fd);
if (!sws)
return NULL;
screen = svga_screen_create(sws);
if (!screen)
return NULL;
screen = debug_screen_wrap(screen);
return screen;
}
PUBLIC
DRM_DRIVER_DESCRIPTOR("vmwgfx", "vmwgfx", create_screen, NULL)