mesonbuild / meson

The Meson Build System
http://mesonbuild.com
Apache License 2.0
5.49k stars 1.59k forks source link

cross compiler needs_exe_wrapper is ignored #5818

Open facorreia opened 5 years ago

facorreia commented 5 years ago

I am using meson version 0.51.1 trying to cross-compiling glib version 2.61.2 in a linux Ubuntu 16.04.4 LTS environment to a linux arm x86_64 but it fail with the error message bellow:

meson.build:1:0: ERROR: Could not invoke sanity test executable: [Errno 8] Exec format error.

it should not to run the sanity executable because needs_exe_wrapper is true in cross config file post bellow for your reference:

My cross_file.txt #################################################### [binaries] c = 'linux-gnueabi-gcc' cpp = 'linux-gnueabi-g++' ar = 'linux-gnueabi-ar' nm = 'linux-gnueabi-nm' ld = 'linux-gnueabi-ld' strip = 'linux-gnueabi-strip'

[host_machine] system = 'linux' cpu_family = 'x86_64' cpu = 'x86_64' endian = 'little'

[properties] sizeof_int = 4 sizeof_wchar_t = 4 sizeof_void* = 4

alignment_char = 1 alignment_void* = 4 alignment_double = 4

has_function_printf = true

needs_exe_wrapper = true

c_args = ['-Dlibmount=false','-Dselinux=false'] c_link_args = []

jpakkane commented 5 years ago

Your host machine is incorrect. It specifies an x86_64 machine when it should define an ARM machine. In Meson "host machine" is the machine the output will run on. The machine you are using for compilation is the "build machine".

facorreia commented 5 years ago

ok, you are right. I changed the host_machine properties as you recommended as you can see below. However, It is still failing. I have a question too. Should "needs_exe_wrapper" properties set to true to force meson to not exec test executable? if yes, the value of host_machine properties should not matter, right?

[host_machine] system = 'linux' cpu_family = 'arm' cpu = 'arm32' endian = 'little'

InuSasha commented 5 years ago

we hit this issue, too.

affected version: 0.51.1 & 0.51.2 on Ubuntu 16.04

[binaries]
c = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/bin/armv7ve-libreelec-linux-gnueabi-gcc'
cpp = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/bin/armv7ve-libreelec-linux-gnueabi-g++'
ar = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/bin/armv7ve-libreelec-linux-gnueabi-ar'
strip = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/bin/armv7ve-libreelec-linux-gnueabi-strip'
pkgconfig = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/bin/pkg-config'
llvm-config = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/armv7ve-libreelec-linux-gnueabi/sysroot/usr/bin/llvm-config-host'
libgcrypt-config = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/armv7ve-libreelec-linux-gnueabi/sysroot/usr/bin/libgcrypt-config'

[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'armv7ve'
endian = 'little'

[properties]
root = '/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-RPi2.arm-9.80-devel/toolchain/armv7ve-libreelec-linux-gnueabi/sysroot/usr'
needs_exe_wrapper = true
c_args = ['-march=armv7ve', '-mtune=cortex-a7', '-mabi=aapcs-linux', '-Wno-psabi', '-Wa,-mno-warn-deprecated', '-mfloat-abi=hard', '-mfpu=neon-vfpv4', '-fomit-frame-pointer', '-Wall', '-pipe', '-O2']
c_link_args = ['-march=armv7ve', '-mtune=cortex-a7', '-Wl,--as-needed', '-fuse-ld=gold']
cpp_args = ['-march=armv7ve', '-mtune=cortex-a7', '-mabi=aapcs-linux', '-Wno-psabi', '-Wa,-mno-warn-deprecated', '-mfloat-abi=hard', '-mfpu=neon-vfpv4', '-fomit-frame-pointer', '-Wall', '-pipe', '-O2']
cpp_link_args = ['-march=armv7ve', '-mtune=cortex-a7', '-Wl,--as-needed', '-fuse-ld=gold']

have_c99_vsnprintf=false
have_c99_snprintf=false
growing_stack=false
va_val_copy=false

results in an exception:

Traceback (most recent call last):
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/mesonmain.py", line 127, in run
    return options.run_func(options)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/msetup.py", line 241, in run
    app.generate()
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/msetup.py", line 159, in generate
    self._generate(env)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/msetup.py", line 188, in _generate
    intr.run()
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreter.py", line 3924, in run
    super().run()
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 412, in run
    self.evaluate_codeblock(self.ast, start=1)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 436, in evaluate_codeblock
    raise e
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 430, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 451, in evaluate_statement
    return self.evaluate_if(cur)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 519, in evaluate_if
    self.evaluate_codeblock(node.elseblock)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 436, in evaluate_codeblock
    raise e
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 430, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 451, in evaluate_statement
    return self.evaluate_if(cur)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 516, in evaluate_if
    self.evaluate_codeblock(i.block)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 436, in evaluate_codeblock
    raise e
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 430, in evaluate_codeblock
    self.evaluate_statement(cur)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 443, in evaluate_statement
    return self.assignment(cur)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 1053, in assignment
    value = self.evaluate_statement(node.value)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 445, in evaluate_statement
    return self.method_call(cur)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 815, in method_call
    return obj.method_call(method_name, args, kwargs)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 325, in method_call
    return method(args, kwargs)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreterbase.py", line 174, in wrapped
    return f(*wrapped_args, **wrapped_kwargs)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/interpreter.py", line 1110, in run_method
    dependencies=deps)
  File "/home/inu/LibreELEC/mesonbuild2/build.LibreELEC-Generic.x86_64-9.80-devel/toolchain/lib/python3.7/site-packages/meson-0.51.2-py3.7.egg/mesonbuild/compilers/clike.py", line 451, in run
    raise mesonlib.CrossNoRunException('Can not run test applications in this cross environment.')
AttributeError: module 'mesonbuild.mesonlib' has no attribute 'CrossNoRunException'
asagot commented 5 years ago

Any updates? I am hitting this as well. Is there a working version?