On Thu, Jan 7, 2010 at 4:30 PM, Sedat Dilek <sedat.di...@googlemail.com> wrote:
> Yeah, I had a deeper look into the build-log:
>
> /bin/bash ../../bin/mklib -o glapi -static main/dispatch.o
> glapi/glapi.o glapi/glapi_getproc.o glapi/glthread.o x86/glapi_x86.o
> mklib: Making Linux static library:  libglapi.a
> ar: creating libglapi.a
> mklib: Making Linux static library:  libmesa.a
> ar: creating libmesa.a
> mklib: Making Linux static library:  libmesagallium.a
> ar: creating libmesagallium.a
> ar: sl_pp_context.o: No such file or directory
> ranlib: 'libmesagallium.a': No such file
>
> NOTE: ar: sl_pp_context.o: No such file or directory
>
> $ grep sl_pp_context.o -r mesa/ | egrep 'libmesa|libglsl'
> Binary file mesa/src/glsl/pp/libglslpp.a matches
> Binary file mesa/src/mesa/libmesa.a matches
> Binary file mesa/src/mesa/libmesagallium.a matches
>
> Seems to me something wrong with GLSL_LIBS.

OK, now I think I know what's going on. mklib will extract all the
object files from dependent .a archives. libmesa.a and
libmesagallium.a will both extract sl_pp_context.o to the current
directory, repack them into their own archives, and then delete the
extracted objects. Since libmesa.a and libmesagallium.a are building
in parallel, there is a race where they're both extracting then
deleting the objects. Something like this:

libmesa.a: extract objects
libmesagallium.a: extract same objects
libmesa.a: insert objects
libmesa.a: remove objects
libmesagallium.a: insert now removed objects

The failure is on the last step because libmesa.a has just removed
sl_pp_context.o. Here's the hacky fix (you'll have to edit manually
since gmail will break formatting):

diff --git a/src/mesa/Makefile b/src/mesa/Makefile
index f845d93..4425000 100644
--- a/src/mesa/Makefile
+++ b/src/mesa/Makefile
@@ -33,7 +33,7 @@ libmesa.a: $(MESA_OBJECTS) $(GLSL_LIBS)
        @ $(MKLIB) -o mesa -static $(MESA_OBJECTS) $(GLSL_LIBS)

 # Make archive of subset of core mesa object files for gallium
-libmesagallium.a: $(MESA_GALLIUM_OBJECTS) $(GLSL_LIBS)
+libmesagallium.a: $(MESA_GALLIUM_OBJECTS) $(GLSL_LIBS) libmesa.a
        @ $(MKLIB) -o mesagallium -static $(MESA_GALLIUM_OBJECTS) $(GLSL_LIBS)

 # Make archive of gl* API dispatcher functions only

The more correct fix is to have mklib extract in a temporary
directory. Something like this totally untested attached patch.

--
Dan

Attachment: mklib-smarter-extract.patch
Description: Binary data

------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
Mesa3d-dev mailing list
Mesa3d-dev@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to