PRIMUS_UPLOAD ?= 0
PRIMUS_SLEEP ?= 90
PRIMUS_DISPLAY ?= :8
-PRIMUS_LOAD_GLOBAL ?= libglapi.so.0
PRIMUS_libGLa ?= /usr/$$LIB/nvidia/libGL.so.1
PRIMUS_libGLd ?= /usr/$$LIB/libGL.so.1
CXXFLAGS += -DPRIMUS_UPLOAD='"$(PRIMUS_UPLOAD)"'
CXXFLAGS += -DPRIMUS_SLEEP='"$(PRIMUS_SLEEP)"'
CXXFLAGS += -DPRIMUS_DISPLAY='"$(PRIMUS_DISPLAY)"'
-CXXFLAGS += -DPRIMUS_LOAD_GLOBAL='"$(PRIMUS_LOAD_GLOBAL)"'
CXXFLAGS += -DPRIMUS_libGLa='"$(PRIMUS_libGLa)"'
CXXFLAGS += -DPRIMUS_libGLd='"$(PRIMUS_libGLd)"'
$(LIBDIR)/libGL.so.1: libglfork.cpp
mkdir -p $(LIBDIR)
- $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fvisibility=hidden -fPIC -shared -Wl,-Bsymbolic -o $@ $< $(LDFLAGS) -lX11 -lpthread -lrt
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -fvisibility=hidden -fPIC -shared -Wl,-Bsymbolic -o $@ $< $(LDFLAGS) -lX11 -lpthread -lrt -Wl,--no-as-needed /usr/lib/$(DEB_HOST_MULTIARCH)/libglapi.so.0
// The "displaying" X display. The same as the application is using, but
// primus opens its own connection.
Display *ddpy;
- // An artifact: primus needs to make symbols from libglapi.so globally
- // visible before loading Mesa
- const void *needed_global;
CapturedFns afns;
CapturedFns dfns;
// FIXME: there are race conditions in accesses to these
autosleep(atoi(getconf(PRIMUS_SLEEP))),
adpy(XOpenDisplay(adpy_str)),
ddpy(XOpenDisplay(NULL)),
- needed_global(dlopen(getconf(PRIMUS_LOAD_GLOBAL), RTLD_LAZY | RTLD_GLOBAL)),
afns(libgla_str),
dfns(getconf(PRIMUS_libGLd))
{
die_if(!adpy, "failed to open secondary X display\n");
die_if(!ddpy, "failed to open main X display\n");
- die_if(!needed_global, "failed to load PRIMUS_LOAD_GLOBAL\n");
}
} primus;
# in default search paths. Add its path manually after the primus library
# PRIMUS_libGL=${PRIMUS_libGL}:/usr/lib/nvidia-current:/usr/lib32/nvidia-current
-# Mesa drivers need a few symbols to be visible
-# export PRIMUS_LOAD_GLOBAL=${PRIMUS_LOAD_GLOBAL:-'libglapi.so.0'}
-
# Need functions from primus libGL to take precedence
export LD_LIBRARY_PATH=${PRIMUS_libGL}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}