On Sat, Mar 17, 2012 at 11:36 PM, Matt Turner <matts...@gmail.com> wrote: > On Fri, Mar 16, 2012 at 4:29 PM, Kristian Høgsberg <k...@bitplanet.net> wrote: >> 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 break when there isn't one. >> >> Morale of the story: don't mix mklib and libtool. >> --- >> configure.ac | 2 + >> src/egl/main/Makefile.am | 1 - >> src/gbm/Makefile.am | 4 +- >> src/glx/Makefile.am | 2 +- >> src/mapi/Android.mk | 4 +- >> src/mapi/es1api/Makefile | 4 +- >> src/mapi/glapi/Makefile | 8 ++-- >> src/mapi/mapi/sources.mak | 42 ++++++++++++------------ >> src/mapi/shared-glapi/Makefile | 65 >> ------------------------------------- >> src/mapi/shared-glapi/Makefile.am | 23 +++++++++++++ >> src/mapi/vgapi/Makefile | 4 +- >> 11 files changed, 59 insertions(+), 100 deletions(-) >> delete mode 100644 src/mapi/shared-glapi/Makefile >> create mode 100644 src/mapi/shared-glapi/Makefile.am >> >> diff --git a/configure.ac b/configure.ac >> index c0d81c9..519662b 100644 >> --- a/configure.ac >> +++ b/configure.ac >> @@ -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 >> diff --git a/src/egl/main/Makefile.am b/src/egl/main/Makefile.am >> index a8072c1..9c3935b 100644 >> --- a/src/egl/main/Makefile.am >> +++ b/src/egl/main/Makefile.am >> @@ -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 >> diff --git a/src/gbm/Makefile.am b/src/gbm/Makefile.am >> index 1dbc9d1..dede5bc 100644 >> --- a/src/gbm/Makefile.am >> +++ b/src/gbm/Makefile.am >> @@ -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 >> diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am >> index 79dc405..a11bd3f 100644 >> --- a/src/glx/Makefile.am >> +++ b/src/glx/Makefile.am >> @@ -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 >> diff --git a/src/mapi/Android.mk b/src/mapi/Android.mk >> index fe9e40e..b75361f 100644 >> --- a/src/mapi/Android.mk >> +++ b/src/mapi/Android.mk >> @@ -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 \ >> diff --git a/src/mapi/es1api/Makefile b/src/mapi/es1api/Makefile >> index 0a0449b..2545dd0 100644 >> --- a/src/mapi/es1api/Makefile >> +++ b/src/mapi/es1api/Makefile >> @@ -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 := $(esapi_SOURCES:.c=.o) >> esapi_CPPFLAGS += -DMAPI_MODE_BRIDGE >> >> esapi_LIB_DEPS := -L$(TOP)/$(LIB_DIR) -l$(GLAPI_LIB) $(esapi_LIB_DEPS) >> diff --git a/src/mapi/glapi/Makefile b/src/mapi/glapi/Makefile >> index bb4ed65..bca2432 100644 >> --- a/src/mapi/glapi/Makefile >> +++ b/src/mapi/glapi/Makefile >> @@ -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 := $(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 := $(MAPI_UTIL_FILES:.c=.o) >> endif # SHARED_GLAPI >> >> glapi_OBJECTS := \ >> diff --git a/src/mapi/mapi/sources.mak b/src/mapi/mapi/sources.mak >> index 2814186..35ea3cd 100644 >> --- a/src/mapi/mapi/sources.mak >> +++ b/src/mapi/mapi/sources.mak >> @@ -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 >> diff --git a/src/mapi/shared-glapi/Makefile b/src/mapi/shared-glapi/Makefile >> deleted file mode 100644 >> index 3de864d..0000000 >> --- a/src/mapi/shared-glapi/Makefile >> +++ /dev/null >> @@ -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 >> diff --git a/src/mapi/shared-glapi/Makefile.am >> b/src/mapi/shared-glapi/Makefile.am >> new file mode 100644 >> index 0000000..d24a57e >> --- /dev/null >> +++ b/src/mapi/shared-glapi/Makefile.am >> @@ -0,0 +1,23 @@ >> +# Used by OpenGL ES or when --enable-shared-glapi is specified >> + >> +TOP := ../../.. >> +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) >> + >> +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 >> diff --git a/src/mapi/vgapi/Makefile b/src/mapi/vgapi/Makefile >> index 68cf26e..550b68c 100644 >> --- a/src/mapi/vgapi/Makefile >> +++ b/src/mapi/vgapi/Makefile >> @@ -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 := $(VGAPI_SOURCES:.c=.o) >> >> VGAPI_CPPFLAGS := -DMAPI_ABI_HEADER=\"vgapi/vgapi_tmp.h\" >> >> -- >> 1.7.9.1 > > Fails for me with > > gmake[2]: Entering directory > `/home/mattst88/projects/mesa/src/mapi/shared-glapi' > CC entry.lo > In file included from ../../../src/mapi/mapi/entry.c:69:0: > ../../../src/mapi/mapi/mapi_tmp.h:48:25: fatal error: > shared-glapi/glapi_mapi_tmp.h: No such file or directory > compilation terminated. > gmake[2]: *** [entry.lo] Error 1 > > Looks like it's not generating glapi_mapi_tmp.h.
I don't see that here, I can remove glapi_mapi_tmp.h and make will rebuild it with the python script. A full autogen should generate the new dep rules (though ./config.status depfiles may be enough). I did find another problem with the patch, which is that we used to put the mapi .o files in the mapi/shared-glapi (as well as {es1,es2,vg,gl}api), but since I moved the prefix into the file list, the .o files end up in src/mapi/mapi. That results in some build breakage depending on which order you build or rebuild things in. It's easy enough to fix, we can just use $(notdir ...) to strip out the dir part of the path. I'll push the updated patch, if the dep problem persists, let me know. Kristian _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev