| From 1b1cb6e5ea25eaa98573328b9565728a08245997 Mon Sep 17 00:00:00 2001 |
| From: Alistair Francis <alistair@alistair23.me> |
| Date: Thu, 14 Nov 2019 09:06:02 -0800 |
| Subject: [PATCH] Revert "mesa: Enable asm unconditionally, now that |
| gen_matypes is gone." |
| |
| This reverts commit 20294dceebc23236e33b22578245f7e6f41b6997. |
| |
| Upstream-Status: Inappropriate [configuration] |
| Signed-off-by: Alistair Francis <alistair@alistair23.me> |
| |
| --- |
| meson.build | 94 ++++++++++++++++++++++++++++++----------------- |
| meson_options.txt | 6 +++ |
| 2 files changed, 67 insertions(+), 33 deletions(-) |
| |
| diff --git a/meson.build b/meson.build |
| index 512eec6..a2bcc3a 100644 |
| --- a/meson.build |
| +++ b/meson.build |
| @@ -49,6 +49,7 @@ with_vulkan_icd_dir = get_option('vulkan-icd-dir') |
| with_tests = get_option('build-tests') |
| with_valgrind = get_option('valgrind') |
| with_libunwind = get_option('libunwind') |
| +with_asm = get_option('asm') |
| with_glx_read_only_text = get_option('glx-read-only-text') |
| with_glx_direct = get_option('glx-direct') |
| with_osmesa = get_option('osmesa') |
| @@ -985,41 +986,68 @@ endif |
| |
| # TODO: shared/static? Is this even worth doing? |
| |
| +# When cross compiling we generally need to turn off the use of assembly, |
| +# because mesa's assembly relies on building an executable for the host system, |
| +# and running it to get information about struct sizes. There is at least one |
| +# case of cross compiling where we can use asm, and that's x86_64 -> x86 when |
| +# host OS == build OS, since in that case the build machine can run the host's |
| +# binaries. |
| +if with_asm and meson.is_cross_build() |
| + if build_machine.system() != host_machine.system() |
| + # TODO: It may be possible to do this with an exe_wrapper (like wine). |
| + message('Cross compiling from one OS to another, disabling assembly.') |
| + with_asm = false |
| + elif not (build_machine.cpu_family().startswith('x86') and host_machine.cpu_family() == 'x86') |
| + # FIXME: Gentoo always sets -m32 for x86_64 -> x86 builds, resulting in an |
| + # x86 -> x86 cross compile. We use startswith rather than == to handle this |
| + # case. |
| + # TODO: There may be other cases where the 64 bit version of the |
| + # architecture can run 32 bit binaries (aarch64 and armv7 for example) |
| + message(''' |
| + Cross compiling to different architectures, and the host cannot run |
| + the build machine's binaries. Disabling assembly. |
| + ''') |
| + with_asm = false |
| + endif |
| +endif |
| + |
| with_asm_arch = '' |
| -if host_machine.cpu_family() == 'x86' |
| - if system_has_kms_drm or host_machine.system() == 'gnu' |
| - with_asm_arch = 'x86' |
| - pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM', |
| - '-DUSE_SSE_ASM'] |
| - |
| - if with_glx_read_only_text |
| - pre_args += ['-DGLX_X86_READONLY_TEXT'] |
| +if with_asm |
| + if host_machine.cpu_family() == 'x86' |
| + if system_has_kms_drm or host_machine.system() == 'gnu' |
| + with_asm_arch = 'x86' |
| + pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM', |
| + '-DUSE_SSE_ASM'] |
| + |
| + if with_glx_read_only_text |
| + pre_args += ['-DGLX_X86_READONLY_TEXT'] |
| + endif |
| + endif |
| + elif host_machine.cpu_family() == 'x86_64' |
| + if system_has_kms_drm |
| + with_asm_arch = 'x86_64' |
| + pre_args += ['-DUSE_X86_64_ASM'] |
| + endif |
| + elif host_machine.cpu_family() == 'arm' |
| + if system_has_kms_drm |
| + with_asm_arch = 'arm' |
| + pre_args += ['-DUSE_ARM_ASM'] |
| + endif |
| + elif host_machine.cpu_family() == 'aarch64' |
| + if system_has_kms_drm |
| + with_asm_arch = 'aarch64' |
| + pre_args += ['-DUSE_AARCH64_ASM'] |
| + endif |
| + elif host_machine.cpu_family() == 'sparc64' |
| + if system_has_kms_drm |
| + with_asm_arch = 'sparc' |
| + pre_args += ['-DUSE_SPARC_ASM'] |
| + endif |
| + elif host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little' |
| + if system_has_kms_drm |
| + with_asm_arch = 'ppc64le' |
| + pre_args += ['-DUSE_PPC64LE_ASM'] |
| endif |
| - endif |
| -elif host_machine.cpu_family() == 'x86_64' |
| - if system_has_kms_drm |
| - with_asm_arch = 'x86_64' |
| - pre_args += ['-DUSE_X86_64_ASM'] |
| - endif |
| -elif host_machine.cpu_family() == 'arm' |
| - if system_has_kms_drm |
| - with_asm_arch = 'arm' |
| - pre_args += ['-DUSE_ARM_ASM'] |
| - endif |
| -elif host_machine.cpu_family() == 'aarch64' |
| - if system_has_kms_drm |
| - with_asm_arch = 'aarch64' |
| - pre_args += ['-DUSE_AARCH64_ASM'] |
| - endif |
| -elif host_machine.cpu_family() == 'sparc64' |
| - if system_has_kms_drm |
| - with_asm_arch = 'sparc' |
| - pre_args += ['-DUSE_SPARC_ASM'] |
| - endif |
| -elif host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little' |
| - if system_has_kms_drm |
| - with_asm_arch = 'ppc64le' |
| - pre_args += ['-DUSE_PPC64LE_ASM'] |
| endif |
| endif |
| |
| diff --git a/meson_options.txt b/meson_options.txt |
| index a8abd04..0f4bd80 100644 |
| --- a/meson_options.txt |
| +++ b/meson_options.txt |
| @@ -233,6 +233,12 @@ option( |
| value : false, |
| description : 'Enable GLVND support.' |
| ) |
| +option( |
| + 'asm', |
| + type : 'boolean', |
| + value : true, |
| + description : 'Build assembly code if possible' |
| +) |
| option( |
| 'glx-read-only-text', |
| type : 'boolean', |