Build pipe drivers here instead of using those built by the
soon-to-be-removed targets/egl.
[with an update by Benjamin Franzke to use --{start|end}-group]
tags/mesa-7.11-rc1
| @@ -24,9 +24,133 @@ GBM_LIBS = $(LIBUDEV_LIBS) $(LIBDRM_LIB) \ | |||
| GBM_CFLAGS = \ | |||
| -D_EGL_GALLIUM_DRIVER_SEARCH_DIR=\"$(EGL_DRIVER_INSTALL_DIR)\" \ | |||
| -DGBM_BACKEND_SEARCH_DIR=\"$(GBM_BACKEND_INSTALL_DIR)\" \ | |||
| -DPIPE_PREFIX=\"$(PIPE_PREFIX)\" \ | |||
| $(LIBUDEV_CFLAGS) \ | |||
| $(LIBDRM_CFLAGS) | |||
| pipe_INCLUDES = \ | |||
| -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 = $(LIBDRM_LIB) \ | |||
| $(TOP)/src/gallium/drivers/identity/libidentity.a \ | |||
| $(TOP)/src/gallium/drivers/trace/libtrace.a \ | |||
| $(TOP)/src/gallium/drivers/rbug/librbug.a \ | |||
| $(GALLIUM_AUXILIARIES) | |||
| pipe_CLFLAGS = $(LIBDRM_CFLAGS) | |||
| pipe_LDFLAGS = -Wl,--no-undefined | |||
| # i915 pipe driver | |||
| i915_LIBS = -ldrm_intel \ | |||
| $(TOP)/src/gallium/winsys/i915/drm/libi915drm.a \ | |||
| $(TOP)/src/gallium/drivers/i915/libi915.a | |||
| # i965 pipe driver | |||
| i965_LIBS = -ldrm_intel \ | |||
| $(TOP)/src/gallium/winsys/i965/drm/libi965drm.a \ | |||
| $(TOP)/src/gallium/drivers/i965/libi965.a \ | |||
| $(TOP)/src/gallium/winsys/sw/wrapper/libwsw.a | |||
| # nouveau pipe driver | |||
| nouveau_LIBS = -ldrm_nouveau \ | |||
| $(TOP)/src/gallium/winsys/nouveau/drm/libnouveaudrm.a \ | |||
| $(TOP)/src/gallium/drivers/nvfx/libnvfx.a \ | |||
| $(TOP)/src/gallium/drivers/nv50/libnv50.a \ | |||
| $(TOP)/src/gallium/drivers/nvc0/libnvc0.a \ | |||
| $(TOP)/src/gallium/drivers/nouveau/libnouveau.a | |||
| # r300 pipe driver | |||
| r300_LIBS = -ldrm \ | |||
| $(TOP)/src/gallium/winsys/radeon/drm/libradeonwinsys.a \ | |||
| $(TOP)/src/gallium/drivers/r300/libr300.a | |||
| # r600 pipe driver | |||
| r600_LIBS = -ldrm -ldrm_radeon \ | |||
| $(TOP)/src/gallium/winsys/r600/drm/libr600winsys.a \ | |||
| $(TOP)/src/gallium/drivers/r600/libr600.a | |||
| # vmwgfx pipe driver | |||
| vmwgfx_LIBS = \ | |||
| $(TOP)/src/gallium/winsys/svga/drm/libsvgadrm.a \ | |||
| $(TOP)/src/gallium/drivers/svga/libsvga.a | |||
| # LLVM | |||
| ifeq ($(MESA_LLVM),1) | |||
| pipe_LIBS += $(LLVM_LIBS) | |||
| pipe_LDFLAGS += $(LLVM_LDFLAGS) | |||
| endif | |||
| # determine the targets/sources | |||
| pipe_TARGETS = | |||
| pipe_SOURCES = | |||
| ifneq ($(findstring i915/drm,$(GALLIUM_WINSYS_DIRS)),) | |||
| pipe_TARGETS += $(PIPE_PREFIX)i915.so | |||
| pipe_SOURCES += pipe_i915.c | |||
| endif | |||
| ifneq ($(findstring i965/drm,$(GALLIUM_WINSYS_DIRS)),) | |||
| pipe_TARGETS += $(PIPE_PREFIX)i965.so | |||
| pipe_SOURCES += pipe_i965.c | |||
| endif | |||
| ifneq ($(findstring nouveau/drm,$(GALLIUM_WINSYS_DIRS)),) | |||
| pipe_TARGETS += $(PIPE_PREFIX)nouveau.so | |||
| pipe_SOURCES += pipe_nouveau.c | |||
| endif | |||
| ifneq ($(findstring radeon/drm,$(GALLIUM_WINSYS_DIRS)),) | |||
| pipe_TARGETS += $(PIPE_PREFIX)r300.so | |||
| pipe_SOURCES += pipe_r300.c | |||
| endif | |||
| ifneq ($(findstring r600/drm,$(GALLIUM_WINSYS_DIRS)),) | |||
| pipe_TARGETS += $(PIPE_PREFIX)r600.so | |||
| pipe_SOURCES += pipe_r600.c | |||
| endif | |||
| ifneq ($(findstring svga/drm,$(GALLIUM_WINSYS_DIRS)),) | |||
| pipe_TARGETS += $(PIPE_PREFIX)vmwgfx.so | |||
| pipe_SOURCES += pipe_vmwgfx.c | |||
| endif | |||
| pipe_OBJECTS = $(pipe_SOURCES:.c=.o) | |||
| GBM_EXTRA_TARGETS = $(addprefix $(TOP)/$(LIB_DIR)/gbm/, $(pipe_TARGETS)) | |||
| GBM_EXTRA_INSTALL = install-pipes | |||
| GBM_EXTRA_CLEAN = clean-pipes | |||
| GBM_EXTRA_SOURCES = $(pipe_SOURCES) | |||
| include $(TOP)/src/gbm/backends/Makefile.template | |||
| $(GBM_EXTRA_TARGETS): $(TOP)/$(LIB_DIR)/gbm/%: % | |||
| @$(INSTALL) -d $(dir $@) | |||
| $(INSTALL) $< $(dir $@) | |||
| $(pipe_TARGETS): $(PIPE_PREFIX)%.so: pipe_%.o | |||
| $(MKLIB) -o $@ -noprefix -linker '$(CC)' \ | |||
| -ldflags '-L$(TOP)/$(LIB_DIR) $(pipe_LDFLAGS) $(LDFLAGS)' \ | |||
| $(MKLIB_OPTIONS) $< \ | |||
| -Wl,--start-group $($*_LIBS) $(pipe_LIBS) -Wl,--end-group | |||
| $(pipe_OBJECTS): %.o: %.c | |||
| $(CC) -c -o $@ $< $(pipe_INCLUDES) $(pipe_CFLAGS) $(CFLAGS) | |||
| install-pipes: $(GBM_EXTRA_TARGETS) | |||
| $(INSTALL) -d $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR) | |||
| for tgt in $(GBM_EXTRA_TARGETS); do \ | |||
| $(MINSTALL) "$$tgt" $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR); \ | |||
| done | |||
| clean-pipes: | |||
| rm -f $(pipe_TARGETS) | |||
| rm -f $(pipe_OBJECTS) | |||
| @@ -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) | |||
| @@ -0,0 +1,30 @@ | |||
| #include "target-helpers/inline_debug_helper.h" | |||
| #include "target-helpers/inline_wrapper_sw_helper.h" | |||
| #include "state_tracker/drm_driver.h" | |||
| #include "i965/drm/i965_drm_public.h" | |||
| #include "i965/brw_public.h" | |||
| static struct pipe_screen * | |||
| create_screen(int fd) | |||
| { | |||
| struct brw_winsys_screen *bws; | |||
| struct pipe_screen *screen; | |||
| bws = i965_drm_winsys_screen_create(fd); | |||
| if (!bws) | |||
| return NULL; | |||
| screen = brw_screen_create(bws); | |||
| if (!screen) | |||
| return NULL; | |||
| screen = sw_screen_wrap(screen); | |||
| screen = debug_screen_wrap(screen); | |||
| return screen; | |||
| } | |||
| PUBLIC | |||
| DRM_DRIVER_DESCRIPTOR("i965", "i965", create_screen) | |||
| @@ -107,11 +107,11 @@ find_pipe_module(struct pipe_module *pmod, const char *name) | |||
| search_paths = NULL; | |||
| if (geteuid() == getuid()) { | |||
| /* don't allow setuid apps to use EGL_DRIVERS_PATH */ | |||
| search_paths = getenv("EGL_DRIVERS_PATH"); | |||
| /* don't allow setuid apps to use GBM_BACKENDS_PATH */ | |||
| search_paths = getenv("GBM_BACKENDS_PATH"); | |||
| } | |||
| if (search_paths == NULL) | |||
| search_paths = _EGL_GALLIUM_DRIVER_SEARCH_DIR; | |||
| search_paths = GBM_BACKEND_SEARCH_DIR; | |||
| end = search_paths + strlen(search_paths); | |||
| for (p = search_paths; p < end && pmod->lib == NULL; p = next + 1) { | |||
| @@ -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) | |||
| @@ -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) | |||
| @@ -0,0 +1,27 @@ | |||
| #include "state_tracker/drm_driver.h" | |||
| #include "target-helpers/inline_debug_helper.h" | |||
| #include "r600/drm/r600_drm_public.h" | |||
| #include "r600/r600_public.h" | |||
| static struct pipe_screen * | |||
| create_screen(int fd) | |||
| { | |||
| struct radeon *rw; | |||
| struct pipe_screen *screen; | |||
| rw = r600_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) | |||
| @@ -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) | |||
| 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; | |||
| } | |||
| @@ -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) | |||
| @@ -24,7 +24,7 @@ GBM_TARGET = $(GBM_BACKEND_PATH) | |||
| GBM_INSTALL = install-so | |||
| endif | |||
| default: depend $(GBM_TARGET) | |||
| default: depend $(GBM_TARGET) $(GBM_EXTRA_TARGETS) | |||
| $(GBM_BACKEND_PATH): $(GBM_BACKEND).so | |||
| @$(INSTALL) -d $(TOP)/$(LIB_DIR)/gbm | |||
| @@ -46,20 +46,20 @@ install-so: $(GBM_BACKEND_PATH) | |||
| $(INSTALL) -d $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR) | |||
| $(MINSTALL) $(GBM_BACKEND_PATH) $(DESTDIR)$(GBM_BACKEND_INSTALL_DIR) | |||
| install: $(GBM_INSTALL) | |||
| install: $(GBM_INSTALL) $(GBM_EXTRA_INSTALL) | |||
| clean: | |||
| clean: $(GBM_EXTRA_CLEAN) | |||
| rm -f $(GBM_BACKEND).so | |||
| rm -f lib$(GBM_BACKEND).a | |||
| rm -f $(GBM_OBJECTS) | |||
| rm -f depend depend.bak | |||
| depend: $(GBM_SOURCES) | |||
| depend: $(GBM_SOURCES) $(GBM_EXTRA_SOURCES) | |||
| @ echo "running $(MKDEP)" | |||
| @ rm -f depend | |||
| @ touch depend | |||
| $(MKDEP) $(MKDEP_OPTIONS) $(GBM_INCLUDES) $(GBM_SOURCES) \ | |||
| >/dev/null 2>/dev/null | |||
| $(GBM_EXTRA_SOURCES) >/dev/null 2>/dev/null | |||
| sinclude depend | |||
| # DO NOT DELETE | |||