I setted up a virtual machine working on linux in order to reproduce (we only works on windows platform here). The libraries order doesn't matter, a verbose compilation shows --start-group and --end-group linker flags. It seems the def file is not well understood by the linker. I workaround like in the libgl-gdi targets.
I'll send another patch, please tell me if something is wrong. -----Message d'origine----- De : Jose Fonseca [mailto:jfons...@vmware.com] Envoyé : mercredi 22 avril 2015 14:04 À : Olivier PENA; Emil Velikov Cc : ML mesa-dev Objet : Re: [Mesa-dev] [PATCH] scons: add target gallium-osmesa Yes, it fails with Mingw (I only tried with Linux cross-compilation): $ scons platform=windows osmesa scons: Reading SConscript files ... Checking for GCC ... yes Checking for Clang ... no scons: Using build cache in /home/jfonseca/.sconscache. Checking for X11 (x11 xext xdamage xfixes glproto >= 1.4.13)... no Checking for XCB (x11-xcb xcb-glx >= 1.8.1 xcb-dri2 >= 1.8)... no Checking for XF86VIDMODE (xxf86vm)... no Checking for DRM (libdrm >= 2.4.38)... no Checking for UDEV (libudev >= 151)... no Checking for GCC ... yes Checking for Clang ... no scons: Using build cache in /home/jfonseca/.sconscache. Checking for X11 (x11 xext xdamage xfixes glproto >= 1.4.13)... yes Checking for XCB (x11-xcb xcb-glx >= 1.8.1 xcb-dri2 >= 1.8)... yes Checking for XF86VIDMODE (xxf86vm)... yes Checking for DRM (libdrm >= 2.4.38)... yes Checking for UDEV (libudev >= 151)... yes warning: LLVM disabled: not building llvmpipe scons: done reading SConscript files. scons: Building targets ... Linking build/windows-x86-debug/gallium/targets/osmesa/osmesa.dll ... Cannot export OSMesaColorClamp: symbol not defined Cannot export OSMesaCreateContext: symbol not defined Cannot export OSMesaCreateContextExt: symbol not defined Cannot export OSMesaDestroyContext: symbol not defined Cannot export OSMesaGetColorBuffer: symbol not defined Cannot export OSMesaGetCurrentContext: symbol not defined Cannot export OSMesaGetDepthBuffer: symbol not defined Cannot export OSMesaGetIntegerv: symbol not defined Cannot export OSMesaGetProcAddress: symbol not defined Cannot export OSMesaMakeCurrent: symbol not defined Cannot export OSMesaPixelStore: symbol not defined Cannot export OSMesaPostprocess: symbol not defined collect2: ld returned 1 exit status scons: *** [build/windows-x86-debug/gallium/targets/osmesa/osmesa.dll] Error 1 scons: building terminated because of errors. I suspect the order that libries is set is wrong (because GNU linker is sensitve to the order of libaries.) But I haven;t had time to figure it out. My recommendatino would be to match what src/gallium/targets/libgl-gdi/SConscript does. It's known to work. (Yes, that basically means go back on Emil's suggestion.) Jose On 22/04/15 08:39, Olivier PENA wrote: > Hi, > Something wrong with the corrected patch I sent ? > > > -----Message d'origine----- > De : mesa-dev [mailto:mesa-dev-boun...@lists.freedesktop.org] De la part de > Olivier PENA > Envoyé : vendredi 10 avril 2015 11:38 > À : Jose Fonseca; Emil Velikov; olivier.pena...@gmail.com > Cc : ML mesa-dev > Objet : Re: [Mesa-dev] [PATCH] scons: add target gallium-osmesa > > Hi, > I treated your requests and I'm going to send another patch. > Thanks > > -----Message d'origine----- > De : mesa-dev [mailto:mesa-dev-boun...@lists.freedesktop.org] De la part de > Jose Fonseca > Envoyé : mercredi 8 avril 2015 21:55 > À : Emil Velikov; olivier.pena...@gmail.com > Cc : ML mesa-dev > Objet : Re: [Mesa-dev] [PATCH] scons: add target gallium-osmesa > > Besides the issue Emil mentioned, one minor request: lets call the > target just "osmesa". As we don't plan to have any other "osmesa" target. > > Jose > > On 08/04/15 18:18, Emil Velikov wrote: >> Hi Olivier >> >> Thanks for the patch ! >> >> Adding Jose to the Cc list as I believe he'll have some input on the topic. >> >> On 3 April 2015 at 15:06, <olivier.pena...@gmail.com> wrote: >>> From: Olivier Pena <op...@isagri.fr> >>> >>> --- >>> src/gallium/SConscript | 5 ++++ >>> src/gallium/state_trackers/osmesa/SConscript | 25 +++++++++++++++++ >>> src/gallium/state_trackers/osmesa/osmesa.def | 16 +++++++++++ >>> src/gallium/targets/osmesa/SConscript | 41 >>> ++++++++++++++++++++++++++++ >>> 4 files changed, 87 insertions(+) >>> create mode 100644 src/gallium/state_trackers/osmesa/SConscript >>> create mode 100644 src/gallium/state_trackers/osmesa/osmesa.def >>> create mode 100644 src/gallium/targets/osmesa/SConscript >>> >> Can you add the three new files into the EXTRA_DIST variable in the >> relevant Makefile.am ? This way one we can build scons gallium-osmesa >> from a release tarball :-) >> >>> diff --git a/src/gallium/SConscript b/src/gallium/SConscript >>> index 680ad92..eeb1c78 100644 >>> --- a/src/gallium/SConscript >>> +++ b/src/gallium/SConscript >>> @@ -60,6 +60,11 @@ SConscript([ >>> ]) >>> >>> if not env['embedded']: >>> + SConscript([ >>> + 'state_trackers/osmesa/SConscript', >>> + 'targets/osmesa/SConscript', >>> + ]) >>> + >>> if env['x11']: >>> SConscript([ >>> 'state_trackers/glx/xlib/SConscript', >>> diff --git a/src/gallium/state_trackers/osmesa/SConscript >>> b/src/gallium/state_trackers/osmesa/SConscript >>> new file mode 100644 >>> index 0000000..fa7c968 >>> --- /dev/null >>> +++ b/src/gallium/state_trackers/osmesa/SConscript >>> @@ -0,0 +1,25 @@ >>> +import os >>> + >>> +Import('*') >>> + >>> +env = env.Clone() >>> + >>> +env.Append(CPPPATH = [ >>> + '#src/mapi', >>> + '#src/mesa', >>> + '.', >>> +]) >>> + >>> +env.AppendUnique(CPPDEFINES = [ >>> + 'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa headers >>> + 'WIN32_LEAN_AND_MEAN', # >>> https://urldefense.proofpoint.com/v2/url?u=http-3A__msdn2.microsoft.com_en-2Dus_library_6dwk3a1z.aspx&d=AwIBaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=V7sOetAjivzNtMiJzzOh63AXslqGWPwHWPoxHrHKbGs&s=2ddtnvnyotNzbqM7WTXS_y4myuI1d-lxwzZA9RPX34o&e= >>> +]) >>> +if not env['gles']: >>> + # prevent _glapi_* from being declared __declspec(dllimport) >>> + env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS']) >>> + >> Shouldn't these be used when building for windows only ? >> >>> +st_osmesa = env.ConvenienceLibrary( >>> + target ='st_osmesa', >>> + source = env.ParseSourceList('Makefile.sources', 'C_SOURCES'), >>> +) >>> +Export('st_osmesa') >>> diff --git a/src/gallium/state_trackers/osmesa/osmesa.def >>> b/src/gallium/state_trackers/osmesa/osmesa.def >>> new file mode 100644 >>> index 0000000..e2a31ab >>> --- /dev/null >>> +++ b/src/gallium/state_trackers/osmesa/osmesa.def >> Can we move this file next to it's only user - i.e. into targets/osmesa/ ? >> >>> @@ -0,0 +1,16 @@ >>> +;DESCRIPTION 'Mesa OSMesa lib for Win32' >>> +VERSION 4.1 >>> + >>> +EXPORTS >>> + OSMesaCreateContext >>> + OSMesaCreateContextExt >>> + OSMesaDestroyContext >>> + OSMesaMakeCurrent >>> + OSMesaGetCurrentContext >>> + OSMesaPixelStore >>> + OSMesaGetIntegerv >>> + OSMesaGetDepthBuffer >>> + OSMesaGetColorBuffer >>> + OSMesaGetProcAddress >>> + OSMesaColorClamp >>> + OSMesaPostprocess >>> diff --git a/src/gallium/targets/osmesa/SConscript >>> b/src/gallium/targets/osmesa/SConscript >>> new file mode 100644 >>> index 0000000..2c936cf >>> --- /dev/null >>> +++ b/src/gallium/targets/osmesa/SConscript >>> @@ -0,0 +1,41 @@ >>> +Import('*') >>> + >>> +env = env.Clone() >>> + >>> +env.Prepend(CPPPATH = [ >>> + '#src/mapi', >>> + '#src/mesa', >>> + #Dir('../../../mapi'), # src/mapi build path for python-generated GL >>> API files/headers >>> +]) >>> + >>> +sources = [ >>> + 'target.c', >>> +] >>> +sources += ['#src/gallium/state_trackers/osmesa/osmesa.def'] >>> + >> Afaict this should be included only if the target is Windows. >> >>> +drivers = [] >>> + >>> +if env['llvm']: >>> + env.Append(CPPDEFINES = 'GALLIUM_LLVMPIPE') >>> + env.Append(CPPDEFINES = 'GALLIUM_TRACE') >>> + drivers += [llvmpipe] >>> +else: >>> + env.Append(CPPDEFINES = 'GALLIUM_SOFTPIPE') >>> + env.Append(CPPDEFINES = 'GALLIUM_TRACE') >>> + drivers += [softpipe] >>> + >> One should include softpipe unconditionally as we can switch between >> llvmpipe and softpipe at runtime. >> >>> +if env['platform'] == 'windows': >>> + env.AppendUnique(CPPDEFINES = [ >>> + 'BUILD_GL32', # declare gl* as __declspec(dllexport) in Mesa >>> headers >>> + ]) >>> + if not env['gles']: >>> + # prevent _glapi_* from being declared __declspec(dllimport) >>> + env.Append(CPPDEFINES = ['_GLAPI_NO_EXPORTS']) >>> + >> Don't think you need this if block. >> >>> +gallium_osmesa = env.SharedLibrary( >>> + target ='osmesa', >>> + source = sources, >>> + LIBS = drivers + st_osmesa + ws_null + glapi + mesa + gallium + >>> trace + glsl + mesautil + env['LIBS'], >> How about we move this before the SharedLibrary construct and use >> env.Prepend(LIBS =... like other places in mesa ? >> >> Thanks >> Emil >> > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=5Y-aMKVsXCayE-0DQOWPSGU-NPtdHqLZKkNHMqnmxh4&s=5VSTdm8czj25KeHEattxdj120ccXHEbjG--pGLJqe-o&e= > > > Click > https://urldefense.proofpoint.com/v2/url?u=https-3A__www.mailcontrol.com_sr_MZbqvYs5QwJvpeaetUwhCQ-3D-3D&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=5Y-aMKVsXCayE-0DQOWPSGU-NPtdHqLZKkNHMqnmxh4&s=KQkxCODmrEYate7MRQxvzxSkdBvaaUNq7CubILxFNhA&e= > to report this email as spam. > > >>>>> -------------------------------------------------------------<<<< > Ce message a été traité contre les virus par quatre outils différents > (Kaspersky, McAfee, Symantec et ThreatSeeker). > This message has been scanned for viruses (by Kaspersky, McAfee, Symantec and > ThreatSeeker). >>>>> -------------------------------------------------------------<<<< > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.freedesktop.org_mailman_listinfo_mesa-2Ddev&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=zfmBZnnVGHeYde45pMKNnVyzeaZbdIqVLprmZCM2zzE&m=5Y-aMKVsXCayE-0DQOWPSGU-NPtdHqLZKkNHMqnmxh4&s=5VSTdm8czj25KeHEattxdj120ccXHEbjG--pGLJqe-o&e= > Click https://www.mailcontrol.com/sr/MZbqvYs5QwJvpeaetUwhCQ== to report this email as spam. >>>>-------------------------------------------------------------<<<< Ce message a été traité contre les virus par quatre outils différents (Kaspersky, McAfee, Symantec et ThreatSeeker). This message has been scanned for viruses (by Kaspersky, McAfee, Symantec and ThreatSeeker). >>>>-------------------------------------------------------------<<<< _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev