[Mesa-dev] [PATCH] scons: add target gallium-osmesa

Olivier PENA OPena at isagri.fr
Wed Apr 22 08:36:15 PDT 2015


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:jfonseca at 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-bounces at lists.freedesktop.org] De la part de Olivier PENA
> Envoyé : vendredi 10 avril 2015 11:38
> À : Jose Fonseca; Emil Velikov; olivier.pena.80 at 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-bounces at lists.freedesktop.org] De la part de Jose Fonseca
> Envoyé : mercredi 8 avril 2015 21:55
> À : Emil Velikov; olivier.pena.80 at 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.80 at gmail.com> wrote:
>>> From: Olivier Pena <opena at 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 at 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 at 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).
>>>>-------------------------------------------------------------<<<<


More information about the mesa-dev mailing list