shared-glapi: Convert to automake

This fixes a build problem where EGL links to libgbm.la, which encodes
a relative path to it's libglapi.so dependency.  The relative path
breaks when the linker tries to resolve it from src/egl/main instead
of src/gbm.  Typically we silently fall back to the system
libglapi.so, which is wrong and breaks when there isn't one.

Morale of the story: don't mix mklib and libtool.
This commit is contained in:
Kristian Høgsberg 2012-03-16 12:55:40 -04:00
parent 91ddfa72b4
commit ca760181b4
11 changed files with 61 additions and 100 deletions

View file

@ -702,6 +702,7 @@ if test "x$enable_shared_glapi" = xyes; then
# libGL will use libglapi for function lookups (IN_DRI_DRIVER means to use
# the remap table)
DEFINES="$DEFINES -DIN_DRI_DRIVER"
SRC_DIRS="$SRC_DIRS mapi/shared-glapi"
fi
AC_SUBST([SHARED_GLAPI])
AM_CONDITIONAL(HAVE_SHARED_GLAPI, test $SHARED_GLAPI = 1)
@ -1985,6 +1986,7 @@ AC_CONFIG_FILES([configs/autoconf
src/egl/wayland/wayland-egl/wayland-egl.pc
src/egl/wayland/wayland-drm/Makefile
src/glx/Makefile
src/mapi/shared-glapi/Makefile
src/mesa/drivers/dri/dri.pc
src/mesa/drivers/dri/Makefile
src/mesa/drivers/dri/common/Makefile

View file

@ -93,7 +93,6 @@ endif
if HAVE_EGL_PLATFORM_DRM
AM_CFLAGS += -DHAVE_DRM_PLATFORM
libEGL_la_LIBADD += ../../gbm/libgbm.la
libEGL_la_LIBADD += ../../gbm/libgbm.la
endif
if HAVE_EGL_PLATFORM_FBDEV

View file

@ -31,8 +31,8 @@ libgbm_dri_la_CFLAGS = \
-DDEFAULT_DRIVER_DIR='"$(DRI_DRIVER_SEARCH_DIR)"' \
$(LIBDRM_CFLAGS)
libgbm_la_LDFLAGS += -L$(top_builddir)/$(LIB_DIR)
libgbm_la_LIBADD += libgbm_dri.la -lglapi
libgbm_la_LIBADD += \
libgbm_dri.la $(top_builddir)/src/mapi/shared-glapi/libglapi.la
endif
all-local: libgbm.la

View file

@ -21,7 +21,7 @@
if HAVE_SHARED_GLAPI
SHARED_GLAPI_CFLAGS = -DGLX_SHARED_GLAPI
SHARED_GLAPI_LIBS = -L$(top_builddir)/$(LIB_DIR) -lglapi
SHARED_GLAPI_LIBS = $(top_builddir)/src/mapi/shared-glapi/libglapi.la
endif
GLAPI_LIB = ../mapi/glapi/libglapi.a

View file

@ -25,7 +25,7 @@
LOCAL_PATH := $(call my-dir)
# get MAPI_GLAPI_SOURCES
# get MAPI_GLAPI_FILES
include $(LOCAL_PATH)/mapi/sources.mak
mapi_abi_headers :=
@ -38,7 +38,7 @@ include $(CLEAR_VARS)
abi_header := shared-glapi/glapi_mapi_tmp.h
LOCAL_SRC_FILES := $(addprefix mapi/, $(MAPI_GLAPI_SOURCES))
LOCAL_SRC_FILES := $(MAPI_GLAPI_FILES)
LOCAL_CFLAGS := \
-DMAPI_MODE_GLAPI \

View file

@ -41,8 +41,8 @@ esapi_CPPFLAGS := \
-DMAPI_ABI_HEADER=\"$(ESAPI)/glapi_mapi_tmp.h\"
include $(MAPI)/sources.mak
esapi_SOURCES := $(addprefix $(MAPI)/, $(MAPI_BRIDGE_SOURCES))
esapi_OBJECTS := $(MAPI_BRIDGE_SOURCES:.c=.o)
esapi_SOURCES := $(MAPI_BRIDGE_FILES)
esapi_OBJECTS := $(notdir $(MAPI_BRIDGE_FILES:.c=.o))
esapi_CPPFLAGS += -DMAPI_MODE_BRIDGE
esapi_LIB_DEPS := -L$(TOP)/$(LIB_DIR) -l$(GLAPI_LIB) $(esapi_LIB_DEPS)

View file

@ -19,18 +19,18 @@ ifeq ($(SHARED_GLAPI),1)
glapi_CPPFLAGS += \
-DMAPI_MODE_BRIDGE \
-DMAPI_ABI_HEADER=\"glapi/glapi_mapi_tmp.h\"
glapi_SOURCES := $(addprefix $(MAPI)/, $(MAPI_BRIDGE_SOURCES))
glapi_SOURCES := $(MAPI_BRIDGE_FILES)
glapi_GLAPI_OBJECTS :=
glapi_ASM_OBJECTS :=
glapi_MAPI_OBJECTS := $(MAPI_BRIDGE_SOURCES:.c=.o)
glapi_MAPI_OBJECTS := $(notdir $(MAPI_BRIDGE_FILES:.c=.o))
else
glapi_CPPFLAGS += -DMAPI_MODE_UTIL
glapi_SOURCES := $(GLAPI_SOURCES) $(addprefix $(MAPI)/, $(MAPI_UTIL_SOURCES))
glapi_SOURCES := $(GLAPI_SOURCES) $(MAPI_UTIL_FILES)
glapi_GLAPI_OBJECTS := $(GLAPI_SOURCES:.c=.o)
glapi_ASM_OBJECTS := $(GLAPI_ASM_SOURCES:.S=.o)
glapi_MAPI_OBJECTS := $(MAPI_UTIL_SOURCES:.c=.o)
glapi_MAPI_OBJECTS := $(notdir $(MAPI_UTIL_FILES:.c=.o))
endif # SHARED_GLAPI
glapi_OBJECTS := \

View file

@ -3,34 +3,34 @@
# mapi may be used in several ways
#
# - In default mode, mapi implements the interface defined by mapi.h. To use
# this mode, compile MAPI_SOURCES.
# this mode, compile MAPI_FILES.
#
# - In util mode, mapi provides utility functions for use with glapi. To use
# this mode, compile MAPI_UTIL_SOURCES with MAPI_MODE_UTIL defined.
# this mode, compile MAPI_UTIL_FILES with MAPI_MODE_UTIL defined.
#
# - In glapi mode, mapi implements the interface defined by glapi.h. To use
# this mode, compile MAPI_GLAPI_SOURCES with MAPI_MODE_GLAPI defined.
# this mode, compile MAPI_GLAPI_FILES with MAPI_MODE_GLAPI defined.
#
# - In bridge mode, mapi provides entry points calling into glapi. To use
# this mode, compile MAPI_BRIDGE_SOURCES with MAPI_MODE_BRIDGE defined.
# this mode, compile MAPI_BRIDGE_FILES with MAPI_MODE_BRIDGE defined.
MAPI_UTIL_SOURCES = \
u_current.c \
u_execmem.c
MAPI_UTIL_FILES = \
$(TOP)/src/mapi/mapi/u_current.c \
$(TOP)/src/mapi/mapi/u_execmem.c
MAPI_SOURCES = \
entry.c \
mapi.c \
stub.c \
table.c \
$(MAPI_UTIL_SOURCES)
MAPI_FILES = \
$(TOP)/src/mapi/mapi/entry.c \
$(TOP)/src/mapi/mapi/mapi.c \
$(TOP)/src/mapi/mapi/stub.c \
$(TOP)/src/mapi/mapi/table.c \
$(MAPI_UTIL_FILES)
MAPI_GLAPI_SOURCES = \
entry.c \
mapi_glapi.c \
stub.c \
table.c \
$(MAPI_UTIL_SOURCES)
MAPI_GLAPI_FILES = \
$(TOP)/src/mapi/mapi/entry.c \
$(TOP)/src/mapi/mapi/mapi_glapi.c \
$(TOP)/src/mapi/mapi/stub.c \
$(TOP)/src/mapi/mapi/table.c \
$(MAPI_UTIL_FILES)
MAPI_BRIDGE_SOURCES = \
entry.c
MAPI_BRIDGE_FILES = \
$(TOP)/src/mapi/mapi/entry.c

View file

@ -1,65 +0,0 @@
# src/mapi/shared-glapi/Makefile
#
# Used by OpenGL ES or when --enable-shared-glapi is specified
#
TOP := ../../..
include $(TOP)/configs/current
GLAPI := $(TOP)/src/mapi/glapi
MAPI := $(TOP)/src/mapi/mapi
glapi_CPPFLAGS := \
-I$(TOP)/include \
-I$(TOP)/src/mapi \
-DMAPI_MODE_GLAPI \
-DMAPI_ABI_HEADER=\"shared-glapi/glapi_mapi_tmp.h\"
include $(MAPI)/sources.mak
glapi_SOURCES := $(addprefix $(MAPI)/, $(MAPI_GLAPI_SOURCES))
glapi_OBJECTS := $(MAPI_GLAPI_SOURCES:.c=.o)
.PHONY: default
default: depend $(TOP)/$(LIB_DIR)/$(GLAPI_LIB_NAME)
$(TOP)/$(LIB_DIR)/$(GLAPI_LIB_NAME): $(glapi_OBJECTS)
$(MKLIB) -o $(GLAPI_LIB) -linker '$(CC)' -ldflags '$(LDFLAGS)' \
-major 0 -minor 0 -patch 0 \
-id $(INSTALL_LIB_DIR)/lib$(GLAPI_LIB).0.dylib \
$(MKLIB_OPTIONS) -install $(TOP)/$(LIB_DIR) \
$(glapi_OBJECTS) $(GLAPI_LIB_DEPS)
$(glapi_OBJECTS): %.o: $(MAPI)/%.c
$(CC) -c $(glapi_CPPFLAGS) $(CFLAGS) $< -o $@
$(glapi_SOURCES): glapi_mapi_tmp.h
include $(GLAPI)/gen/glapi_gen.mk
glapi_mapi_tmp.h: $(GLAPI)/gen/gl_and_es_API.xml $(glapi_gen_mapi_deps)
$(call glapi_gen_mapi,$<,shared-glapi)
.PHONY: clean
clean:
-rm -f $(TOP)/$(LIB_DIR)/$(GLAPI_LIB_NAME)
-rm -f $(glapi_OBJECTS)
-rm -f depend depend.bak
-rm -f glapi_mapi_tmp.h
install:
$(INSTALL) -d $(DESTDIR)$(INSTALL_LIB_DIR)
$(MINSTALL) $(TOP)/$(LIB_DIR)/$(GLAPI_LIB_GLOB) \
$(DESTDIR)$(INSTALL_LIB_DIR)
# workaround a bug in makedepend
makedepend_CPPFLAGS := \
$(filter-out -DMAPI_ABI_HEADER=%, $(glapi_CPPFLAGS))
$(glapi_OBJECTS): glapi_mapi_tmp.h
depend: $(glapi_SOURCES)
@echo "running $(MKDEP)"
@touch depend
@$(MKDEP) $(MKDEP_OPTIONS) -f- $(DEFINES) $(makedepend_CPPFLAGS) \
$(glapi_SOURCES) 2>/dev/null | sed -e 's,^$(MAPI)/,,' \
> depend
-include depend

View file

@ -0,0 +1,25 @@
# Used by OpenGL ES or when --enable-shared-glapi is specified
TOP = $(top_srcdir)
GLAPI = $(top_srcdir)/src/mapi/glapi
include $(top_srcdir)/src/mapi/mapi/sources.mak
lib_LTLIBRARIES = libglapi.la
libglapi_la_SOURCES = $(MAPI_GLAPI_FILES)
include $(GLAPI)/gen/glapi_gen.mk
glapi_mapi_tmp.h : $(GLAPI)/gen/gl_and_es_API.xml $(glapi_gen_mapi_deps)
$(call glapi_gen_mapi,$<,shared-glapi)
BUILT_SOURCES = glapi_mapi_tmp.h
AM_CPPFLAGS = \
$(DEFINES) \
-I$(top_srcdir)/include \
-I$(top_srcdir)/src/mapi \
-DMAPI_MODE_GLAPI \
-DMAPI_ABI_HEADER=\"shared-glapi/glapi_mapi_tmp.h\"
all-local: libglapi.la
$(MKDIR_P) $(top_builddir)/$(LIB_DIR)
ln -f .libs/libglapi.so.0.0.0 $(top_builddir)/$(LIB_DIR)/libglapi.so

View file

@ -10,8 +10,8 @@ VG_LIB_PATCH = 0
MAPI := $(TOP)/src/mapi/mapi
include $(MAPI)/sources.mak
VGAPI_SOURCES := $(addprefix $(MAPI)/, $(MAPI_SOURCES))
VGAPI_OBJECTS := $(MAPI_SOURCES:.c=.o)
VGAPI_SOURCES := $(MAPI_FILES)
VGAPI_OBJECTS := $(notdir $(MAPI_FILES:.c=.o))
VGAPI_CPPFLAGS := -DMAPI_ABI_HEADER=\"vgapi/vgapi_tmp.h\"