[Mesa-dev] [PATCH 2/4] meson: disable x86 asm in fewer cases.

Eric Engestrom eric.engestrom at imgtec.com
Fri Nov 17 16:30:12 UTC 2017


On Thursday, 2017-11-16 14:16:38 -0800, Dylan Baker wrote:
> Quoting Eric Engestrom (2017-11-16 03:46:04)
> > On Wednesday, 2017-11-15 17:11:00 -0800, Dylan Baker wrote:
> > > This patch allows building asm for x86 on x86_64 platforms, when the
> > > operating system is the same. Previously cross compile always turned off
> > > assembly. This allows using a cross file to cross compile x86 binaries
> > > on x86_64 with asm.
> > > 
> > > This could probably be relaxed further thanks to meson's "exe_wrapper",
> > > which is way to specify an emulator or compatibility layer (wine) that
> > > can run the foreign binaries on the build system. Since the meson build
> > > at this point only supports building on Linux I can't test this and I
> > > don't want to write/enable code that cannot even be build tested.
> > > 
> > > Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
> > > ---
> > >  meson.build | 17 ++++++++++-------
> > >  1 file changed, 10 insertions(+), 7 deletions(-)
> > > 
> > > diff --git a/meson.build b/meson.build
> > > index 0d201c711a0..261c4753427 100644
> > > --- a/meson.build
> > > +++ b/meson.build
> > > @@ -554,13 +554,16 @@ endif
> > >  
> > >  # TODO: texture-float (gallium/mesa only)
> > >  
> > > -# TODO: cross-compiling. I don't think this is relavent to meson
> > > -
> > > -# FIXME: enable asm when cross compiler
> > > -# This is doable (autotools does it), but it's not of immediate concern
> > > -if meson.is_cross_build() and host_machine.cpu_family().startswith('x86')
> > > -  message('Cross compiling, disabling x86/x86_64 asm')
> > > -  with_asm = false
> > > +# Building x86 assembly code requires running x86 binaries. It is possible for
> > > +# x86_64 OSes to run x86 binaries, so don't disable asm in those cases
> > > +# TODO: it should be possible to use an exe_wrapper to run the binary durring
> > 
> > "during"
> > 
> > > +# the build. 
> > > +if meson.is_cross_build() 
> > > +  if (not (build_machine.cpu_family() == 'x86_64' and host_machine.cpu_family() == 'x86')
> > > +      and build_machine.system() == host_machine.system())
> > > +    message('Cross compiling to x86 from non-x86, disabling asm')
> > > +    with_asm = false
> > > +  endif
> > 
> > This looks off to me.
> > Shouldn't the `and build_os==host_os` be `or not build_os==host_os`?
> > 
> > In other words, if cross-building on the same os from 64bit to 32bit,
> > allow asm, and otherwise disable it?
> > 
> > If so, you could factor the `not` out, and it would be:
> >   if not (build_os==host_os and build==64bit and host==32bit)
> >     with_asm = false
> 
> This is covering for a very specific case. As part of the x86 and x64 asm
> process we build an executable matypes, which needs to be of the target
> architecture, because it detects how big certain structs are, and returns those
> values.
> 
> So this can be built only in 1 cross compiling case, x64 building x86 (since x64
> can run x86 binaries), and only if the OSes are the same (unless we had
> exe_wrapper, but I haven't gotten there yet).
> 
> However, I think you're right that the not should apply to both conditions, or
> the second hsould be build != host. Does that seem correct?

Yup :)


More information about the mesa-dev mailing list