From 41cd8836d785c79381764e7de59319f87959a5cf Mon Sep 17 00:00:00 2001 From: Alistair Francis 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 --- meson.build | 94 ++++++++++++++++++++++++++++++----------------- meson_options.txt | 6 +++ 2 files changed, 67 insertions(+), 33 deletions(-) diff --git a/meson.build b/meson.build index 62864c6..b53be8d 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') @@ -1093,41 +1094,68 @@ dep_ws2_32 = cc.find_library('ws2_32', required : with_platform_windows) # 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 700c34c..62e8472 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -241,6 +241,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',