[Mesa-dev] [PATCH 1/3] Fix build for darwin

Emil Velikov emil.l.velikov at gmail.com
Fri May 23 06:36:48 PDT 2014


On 21/05/14 14:02, Jon TURNEY wrote:
> Fix build for darwin, when ./configured --disable-driglx-direct
> 
> - darwin ld doesn't support -Bsymbolic or --version-script, so check if ld
> supports those options before using them
There are four move cases that can use HAVE_LD_VERSION_SCRIPT. First one is
missing "\" the fix of which is floating on the ML.

src/gallium/targets/egl-static/Makefile.am
src/gallium/targets/gbm/Makefile.am
src/gallium/targets/opencl/Makefile.am
src/gallium/targets/pipe-loader/Makefile.am


> - define GLX_ALIAS_UNSUPPORTED as config/darwin used to, as aliasing of non-weak
> symbols isn't supported
> - default to -with-dri-drivers=swrast
> 
> v2:
> Use -Wl,-Bsymbolic, as before, not -Bsymbolic
> Test that ld --version-script works, rather than just looking for it in ld --help
> Don't use -Wl,--no-undefined on darwin, either
> 
> Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
> Reviewed-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
> ---
>  configure.ac                     | 46 +++++++++++++++++++++++++++++++++++++++-
>  src/egl/main/Makefile.am         |  2 +-
>  src/gallium/Automake.inc         |  8 +++++++
>  src/glx/Makefile.am              |  2 +-
>  src/mesa/drivers/dri/Makefile.am |  2 +-
>  5 files changed, 56 insertions(+), 4 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 4e4d761..bc3a654 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -316,6 +316,22 @@ if test "x$enable_debug" = xyes; then
>  fi
>  
>  dnl
> +dnl Check if linker supports -Bsymbolic
> +dnl
> +save_LDFLAGS=$LDFLAGS
> +LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
> +AC_MSG_CHECKING([if ld supports -Bsymbolic])
> +AC_LINK_IFELSE(
> +    [AC_LANG_SOURCE([int main() { return 0;}])],
> +    [AC_MSG_RESULT([yes])
> +        BSYMBOLIC="-Wl,-Bsymbolic";],
> +    [AC_MSG_RESULT([no])
> +        BSYMBOLIC="";])
> +LDFLAGS=$save_LDFLAGS
> +
> +AC_SUBST([BSYMBOLIC])
> +
> +dnl
>  dnl Check if linker supports garbage collection
>  dnl
>  save_LDFLAGS=$LDFLAGS
> @@ -336,7 +352,7 @@ dnl OpenBSD does not have DT_NEEDED entries for libc by design
>  dnl so when these flags are passed to ld via libtool the checks will fail
>  dnl
>  case "$host_os" in
> -openbsd*)
> +openbsd*|darwin*)
>      LD_NO_UNDEFINED="" ;;
>  *)
>      LD_NO_UNDEFINED="-Wl,--no-undefined" ;;
> @@ -345,6 +361,28 @@ esac
>  AC_SUBST([LD_NO_UNDEFINED])
>  
>  dnl
> +dnl Check if linker supports version scripts
> +dnl
> +AC_MSG_CHECKING([if libraries can be versioned])
We use version scripts only to limit the exported symbols. The following looks
better imho, but it's optional.

AC_MSG_CHECKING([if the linker supports version-scripts])

-Emil
> +save_LDFLAGS=$LDFLAGS
> +LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
> +cat > conftest.map <<EOF
> +VERSION_1 {
> +     global:
> +         main;
> +
> +     local:
> +         *;
> +};
> +EOF
> +AC_LINK_IFELSE(
> +    [AC_LANG_SOURCE([int main() { return 0;}])],
> +    [have_ld_version_script=yes;AC_MSG_RESULT(yes)],
> +    [have_ld_version_script=no; AC_MSG_RESULT(no)])
> +LDFLAGS=$save_LDFLAGS
> +AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
> +
> +dnl
>  dnl compatibility symlinks
>  dnl
>  case "$host_os" in
> @@ -1043,6 +1081,12 @@ if test "x$enable_dri" = xyes; then
>              with_dri_drivers="swrast"
>          fi
>          ;;
> +    darwin*)
> +        DEFINES="$DEFINES -DUSE_EXTERNAL_DXTN_LIB=1 -DGLX_ALIAS_UNSUPPORTED"
> +        if test "x$with_dri_drivers" = "xyes"; then
> +            with_dri_drivers="swrast"
> +        fi
> +        ;;
>      esac
>  
>      # default drivers
> diff --git a/src/egl/main/Makefile.am b/src/egl/main/Makefile.am
> index 23207db..38758a0 100644
> --- a/src/egl/main/Makefile.am
> +++ b/src/egl/main/Makefile.am
> @@ -75,7 +75,7 @@ libEGL_la_LIBADD = \
>  libEGL_la_LDFLAGS = \
>  	-no-undefined \
>  	-version-number 1:0 \
> -	-Wl,-Bsymbolic \
> +	$(BSYMBOLIC) \
>  	$(GC_SECTIONS) \
>  	$(LD_NO_UNDEFINED)
>  
> diff --git a/src/gallium/Automake.inc b/src/gallium/Automake.inc
> index 4519c16..70921ec 100644
> --- a/src/gallium/Automake.inc
> +++ b/src/gallium/Automake.inc
> @@ -56,7 +56,9 @@ GALLIUM_DRI_LINKER_FLAGS = \
>  	-shrext .so \
>  	-module \
>  	-avoid-version \
> +if HAVE_LD_VERSION_SCRIPT
>  	-Wl,--version-script=$(top_srcdir)/src/gallium/targets/dri.sym \
> +endif
>  	$(GC_SECTIONS)
>  
>  GALLIUM_VDPAU_LINKER_FLAGS = \
> @@ -64,7 +66,9 @@ GALLIUM_VDPAU_LINKER_FLAGS = \
>  	-module \
>  	-no-undefined \
>  	-version-number $(VDPAU_MAJOR):$(VDPAU_MINOR) \
> +if HAVE_LD_VERSION_SCRIPT
>  	-Wl,--version-script=$(top_srcdir)/src/gallium/targets/vdpau.sym \
> +endif
>  	$(GC_SECTIONS) \
>  	$(LD_NO_UNDEFINED)
>  
> @@ -73,7 +77,9 @@ GALLIUM_XVMC_LINKER_FLAGS = \
>  	-module \
>  	-no-undefined \
>  	-version-number $(XVMC_MAJOR):$(XVMC_MINOR) \
> +if HAVE_LD_VERSION_SCRIPT
>  	-Wl,--version-script=$(top_srcdir)/src/gallium/targets/xvmc.sym \
> +endif
>  	$(GC_SECTIONS) \
>  	$(LD_NO_UNDEFINED)
>  
> @@ -82,7 +88,9 @@ GALLIUM_OMX_LINKER_FLAGS = \
>  	-module \
>  	-no-undefined \
>  	-avoid-version \
> +if HAVE_LD_VERSION_SCRIPT
>  	-Wl,--version-script=$(top_srcdir)/src/gallium/targets/omx.sym \
> +endif
>  	$(GC_SECTIONS) \
>  	$(LD_NO_UNDEFINED)
>  
> diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am
> index 482d952..0cf65e5 100644
> --- a/src/glx/Makefile.am
> +++ b/src/glx/Makefile.am
> @@ -111,7 +111,7 @@ GL_LIBS = \
>  GL_LDFLAGS = \
>  	-no-undefined \
>  	-version-number 1:2 \
> -	-Wl,-Bsymbolic \
> +	$(BSYMBOLIC) \
>  	$(GC_SECTIONS) \
>  	$(LD_NO_UNDEFINED)
>  
> diff --git a/src/mesa/drivers/dri/Makefile.am b/src/mesa/drivers/dri/Makefile.am
> index e807612..70039f9 100644
> --- a/src/mesa/drivers/dri/Makefile.am
> +++ b/src/mesa/drivers/dri/Makefile.am
> @@ -52,7 +52,7 @@ nodist_EXTRA_mesa_dri_drivers_la_SOURCES = dummy.cpp
>  mesa_dri_drivers_la_SOURCES =
>  mesa_dri_drivers_la_LDFLAGS = \
>          -module -avoid-version -shared -shrext .so \
> -        -Wl,-Bsymbolic \
> +        $(BSYMBOLIC) \
>          $(GC_SECTIONS) \
>          $()
>  mesa_dri_drivers_la_LIBADD = \
> 



More information about the mesa-dev mailing list