[Mesa-dev] [PATCH 1/2 v2] build libgallium shared by default.

Maarten Lankhorst maarten.lankhorst at canonical.com
Tue Mar 19 07:49:26 PDT 2013


Op 19-03-13 12:37, Andreas Boll schreef:
> 2013/3/19 Maarten Lankhorst <maarten.lankhorst at canonical.com>:
>> Op 18-03-13 16:28, Andreas Boll schreef:
>>> 2013/3/18 Maarten Lankhorst <maarten.lankhorst at canonical.com>:
>>>> This is one of the 2 patches used in ubuntu for decreasing size of mesa build.
>>>>
>>>> The other one is more hacky, and links libmesagallium into libgallium,
>>>> and then links libgallium against libdricore too for minimal duplication.
>>>>
>>>> This might mess up with static llvm, iirc static llvm is built wrong and
>>>> linking libgallium against it will cause it to export all llvm symbols too.
>>>> I believe that this is a bug in llvm though, not in mesa. The static libraries
>>>> should not export all llvm symbols.
>>>>
>>>> I should probably change the default to not building shared gallium for the
>>>> same reason. :-)
>>>>
>>>> Meant mostly for discussion purposes, although if there is no objection I'll
>>>> change the default to disabling shared gallium, and just let every distro enable
>>>> shared llvm and libgallium for themselves.
>>>>
>>>>> 8---
>>>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>
>>>>
>>>> --- a/configure.ac
>>>> +++ b/configure.ac
>>>> @@ -733,6 +733,19 @@
>>>>  fi
>>>>  AM_CONDITIONAL(HAVE_SHARED_GLAPI, test "x$enable_shared_glapi" = xyes)
>>>>
>>>> +AC_ARG_ENABLE([shared-gallium],
>>>> +    [AS_HELP_STRING([--enable-shared-gallium],
>>>> +        [Enable shared gallium core @<:@default=yes@:>@])],
>>>> +    [enable_shared_gallium="$enableval"],
>>>> +    [enable_shared_gallium=yes])
>>>> +
>>> The following code could be simplified...
>>>
>>>> +SHARED_GALLIUM="0"
>>>> +if test "x$enable_shared_gallium" = xyes; then
>>>> +    SHARED_GALLIUM="1"
>>>> +fi
>>>> +AC_SUBST([SHARED_GALLIUM])
>>>> +AM_CONDITIONAL(HAVE_SHARED_GALLIUM, test $SHARED_GALLIUM = 1)
>>>> +
>>> ... to:
>>>
>>> AM_CONDITIONAL(HAVE_SHARED_GALLIUM, test "x$enable_shared_gallium" = xyes)
>>>
>> Woops you're right, this was a leftover from when the patch was a lot more invasive,
>> and had to touch configs/autoconf.in too.
>> The AM_CONDITIONAL was added later during the transition to 9.0 :-)
>>
>> Any thoughts on making shared gallium default or not? I'm thinking not because
>> of the llvm symbol bug I mentioned above, unless we change the default
>> of llvm shared libs to enabled too.
>>
>> ~Maarten
> I think you should disable it by default since I want to cherry-pick
> this patch to mesa 9.1.
> We could always enable it by default later.
> Additionally you should check if someone wants to build
> enabled-shared-gallium with static llvm.
> Then configure should print an error like this "Please use shared-llvm
> if you want to enable shared-gallium,
> since the combination static-llvm and shared-gallium is not supported"
>
> Andreas.

How does this look?

Not tested with all insane but possible build combinations of shared/static,
if it was up to me those different forms wouldn't mix at all, and either everything
would be built statically, or nothing would be..

I would gladly remove enable_shared_gallium, and let it depend on whether
with_llvm_shared_libs was selected or not.

>8-----
Signed-off-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>

diff --git a/configure.ac b/configure.ac
index 4b5b045..e605281 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1591,9 +1591,19 @@ AC_ARG_WITH([llvm-shared-libs],
         [link with LLVM shared libraries @<:@default=disabled@:>@])],
     [],
     [with_llvm_shared_libs=no])
-AS_IF([test x$enable_opencl = xyes],
+AS_IF([test x$enable_opencl = xyes -a x$with_llvm_shared_libs != xyes],
     [
-        AC_MSG_WARN([OpenCL required, forcing LLVM shared libraries])
+        AC_MSG_WARN([OpenCL requested, forcing LLVM shared libraries])
+        with_llvm_shared_libs=yes
+    ])
+AC_ARG_ENABLE([shared-gallium],
+    [AS_HELP_STRING([--enable-shared-gallium],
+        [Enable shared gallium core @<:@default=no@:>@])],
+    [enable_shared_gallium="$enableval"],
+    [enable_shared_gallium=no])
+AS_IF([test x$enable_shared_gallium = xyes -a x$with_llvm_shared_libs != xyes],
+    [
+        AC_MSG_WARN([Shared libgallium requested, forcing LLVM shared libraries])
         with_llvm_shared_libs=yes
     ])
 
@@ -1928,6 +1938,7 @@ AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes)
 AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes)
 AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes)
 AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes)
+AM_CONDITIONAL(HAVE_SHARED_GALLIUM, test "x$enable_shared_gallium" = xyes)
 
 if test "x$enable_gallium_loader" = xyes; then
     GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/null"
@@ -2263,6 +2274,7 @@ echo ""
 echo "        Shared libs:     $enable_shared"
 echo "        Static libs:     $enable_static"
 echo "        Shared-glapi:    $enable_shared_glapi"
+echo "        Shared gallium:  $enable_shared_gallium"
 
 dnl Compiler options
 # cleanup the CFLAGS/CXXFLAGS/DEFINES vars
diff --git a/src/gallium/auxiliary/Makefile.am b/src/gallium/auxiliary/Makefile.am
index f14279b..a4090d3 100644
--- a/src/gallium/auxiliary/Makefile.am
+++ b/src/gallium/auxiliary/Makefile.am
@@ -3,14 +3,24 @@ AUTOMAKE_OPTIONS = subdir-objects
 include Makefile.sources
 include $(top_srcdir)/src/gallium/Automake.inc
 
-noinst_LTLIBRARIES = libgallium.la
-
 AM_CFLAGS = \
 	-I$(top_srcdir)/src/gallium/auxiliary/util \
-	$(GALLIUM_CFLAGS) \
-	$(VISIBILITY_CFLAGS)
+	$(GALLIUM_CFLAGS)
+
+AM_CXXFLAGS =
+
+if HAVE_SHARED_GALLIUM
+lib_LTLIBRARIES = libgallium.la
 
-AM_CXXFLAGS = $(VISIBILITY_CXXFLAGS)
+if HAVE_MESA_LLVM
+libgallium_la_LIBADD = $(LLVM_LIBS)
+endif
+
+else
+noinst_LTLIBRARIES = libgallium.la
+AM_CFLAGS += $(VISIBILITY_CFLAGS)
+AM_CXXFLAGS += $(VISIBILITY_CXXFLAGS)
+endif
 
 libgallium_la_SOURCES = \
 	$(C_SOURCES) \



More information about the mesa-dev mailing list