[Mesa-dev] [PATCH] shared-glapi: Convert to automake

Kristian Høgsberg krh at bitplanet.net
Mon Mar 19 08:12:05 PDT 2012


On Sat, Mar 17, 2012 at 11:36 PM, Matt Turner <mattst88 at gmail.com> wrote:
> On Fri, Mar 16, 2012 at 4:29 PM, Kristian Høgsberg <krh at 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


More information about the mesa-dev mailing list