diff --git a/header_checks/meson.build b/header_checks/meson.build index 01e557e95f..cb47b040d4 100644 --- a/header_checks/meson.build +++ b/header_checks/meson.build @@ -1,3 +1,19 @@ +if get_option('native-arch-optimization') + if target_machine.cpu_family() == 'x86' or target_machine.cpu_family() == 'x86_64' + native_header = 'immintrin.h' + elif target_machine.cpu_family() == 'arm' + native_header = 'arm_neon.h' + elif target_machine.cpu_family() == 'aarch64' + native_header = 'arm_neon.h' + elif target_machine.cpu_family() == 'ppc' or target_machine.cpu_family() == 'ppc64' + native_header = 'altivec.h' + endif + + if cc.has_header(native_header) == false + error('Error, header '+native_header+' is required') + endif +endif + header_checks = [ 'alloca.h', 'asm/hwcap.h', diff --git a/meson.build b/meson.build index ba6d84a4b3..4b9d766f2f 100644 --- a/meson.build +++ b/meson.build @@ -112,73 +112,37 @@ if compiler.compiles(code, args : '-lc', name : 'environ check') == true endif ## or should this be target_machine? -cpu_mmx = false cpu_sse3 = false cpu_neon = false cpu_neon_intrinsics = false -cpu_altivec = false -evas_opt_c_args = [ ] -draw_opt_c_args = [ ] -ector_opt_c_args = [ ] -machine_c_args = [ ] -compiler = meson.get_compiler('c') +native_arch_opt_c_args = [ '-msse3' ] if host_machine.endian() == 'big' config_h.set10('WORDS_BIGENDIAN', true) endif -if host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64' - if compiler.has_header('immintrin.h') == true - if (get_option('cpu-mmx') == true) - config_h.set10('BUILD_MMX', true) - cpu_mmx = true - message('x86 build - MMX enabled') - if (get_option('cpu-sse3') == true) - config_h.set10('BUILD_SSE3', true) - evas_opt_c_args += [ '-msse3' ] - draw_opt_c_args += [ '-msse3' ] - ector_opt_c_args += [ '-msse3' ] - cpu_sse3 = true - message('x86 build - SSE3 enabled') - endif - endif - else - error('Perhaps you wish to disble MMX with -Dcpu-mmx=false') - endif -elif host_machine.cpu_family() == 'arm' - if compiler.has_header('arm_neon.h') == true - if (get_option('cpu-neon') == true) - config_h.set10('BUILD_NEON', true) - machine_c_args += ['-mfpu=neon', '-ftree-vectorize'] - cpu_neon = true - message('ARM build - NEON enabled') - endif - else - error('Perhaps you wish to disble NEON with -Dcpu-neon=false') - endif -elif host_machine.cpu_family() == 'aarch64' - if compiler.has_header('arm_neon.h') == true - if (get_option('cpu-neon') == true) - config_h.set10('BUILD_NEON', true) - config_h.set10('BUILD_NEON_INTRINSICS', true) - machine_c_args += ['-ftree-vectorize'] - cpu_neon = true - cpu_neon_intrinsics = true - message('ARM64 build - NEON + intrinsics enabled') - endif - else - error('Perhaps you wish to disble NEON with -Dcpu-neon=false') - endif -elif host_machine.cpu_family() == 'ppc' or host_machine.cpu_family() == 'ppc64' - if compiler.has_header('altivec.h') == true - if (get_option('cpu-akltivec') == true) - config_h.set10('BUILD_ALTIVEC', true) - machine_c_args += [ '-maltivec' ] - cpu_altivec = true - message('PPC/POWER build - ALTIVEC enabled') - endif - else - error('Perhaps you wish to disble NEON with -Dcpu-altivec=false') +if get_option('native-arch-optimization') + if target_machine.cpu_family() == 'x86' or target_machine.cpu_family() == 'x86_64' + config_h.set10('BUILD_MMX', true) + message('x86 build - MMX enabled') + config_h.set10('BUILD_SSE3', true) + cpu_sse3 = true + message('x86 build - SSE3 enabled') + elif target_machine.cpu_family() == 'arm' + config_h.set10('BUILD_NEON', true) + cpu_neon = true + message('ARM build - NEON enabled') + elif target_machine.cpu_family() == 'aarch64' + config_h.set10('BUILD_NEON', true) + config_h.set10('BUILD_NEON_INTRINSICS', true) + add_global_arguments('-ftree-vectorize', language: 'c') + cpu_neon = true + cpu_neon_intrinsics = true + message('ARM64 build - NEON + intrinsics enabled') + elif target_machine.cpu_family() == 'ppc' or target_machine.cpu_family() == 'ppc64' + config_h.set10('BUILD_ALTIVEC', true) + add_global_arguments('-maltivec-vectorize', language: 'c') + message('PPC/POWER build - ALTIVEC enabled') endif endif @@ -303,7 +267,6 @@ foreach package : subprojects package_c_args = [ '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"', '-DNEED_RUN_IN_TREE=1', - machine_c_args ] automatic_pkgfile = true if package[1].length() == 0 or get_option(package[1][0]) diff --git a/meson_options.txt b/meson_options.txt index 94d3007d58..296b3b88d8 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -328,27 +328,8 @@ option('mono', description: 'Flag for handling c# bindings' ) -option('cpu-mmx', +option('native-arch-optimization', type: 'boolean', value: true, - description: 'Build MMX support when building for intel' + description: 'Flag for enabling architecture native optimizations' ) - -option('cpu-sse3', - type: 'boolean', - value: true, - description: 'Build SSE3 support when building for intel' -) - -option('cpu-neon', - type: 'boolean', - value: true, - description: 'Build NEON support when building for ARM' -) - -option('cpu-altivec', - type: 'boolean', - value: true, - description: 'Build ALTIVEC support when building for PPC/POWER' -) - diff --git a/src/lib/ector/software/meson.build b/src/lib/ector/software/meson.build index b587ca9024..cef9c957c8 100644 --- a/src/lib/ector/software/meson.build +++ b/src/lib/ector/software/meson.build @@ -40,7 +40,7 @@ if cpu_sse3 == true sources: pub_eo_file_target + [ 'ector_software_gradient_sse3.c' ], dependencies: ector_pub_deps + [triangulator, freetype, draw, m] + ector_deps, include_directories: config_dir + [ include_directories('..') ], - c_args: ector_opt_c_args, + c_args: native_arch_opt_c_args, ) ector_opt_lib += [ ector_opt ] endif diff --git a/src/lib/evas/meson.build b/src/lib/evas/meson.build index adea8b2393..f9f038dc93 100644 --- a/src/lib/evas/meson.build +++ b/src/lib/evas/meson.build @@ -188,7 +188,7 @@ if cpu_sse3 == true or cpu_neon == true and cpu_neon_intrinsics == false [ include_directories('../../..') ] + evas_include_directories + [vg_common_inc_dir], - c_args: evas_opt_c_args, + c_args: native_arch_opt_c_args, dependencies: [eina, eo, ector, emile, evas_deps, m], ) evas_link += [ evas_opt ] diff --git a/src/static_libs/draw/meson.build b/src/static_libs/draw/meson.build index 54c72160d2..250e021fb7 100644 --- a/src/static_libs/draw/meson.build +++ b/src/static_libs/draw/meson.build @@ -13,7 +13,7 @@ if cpu_sse3 == true draw_opt = static_library('draw_opt', sources: [ 'draw_main_sse2.c' ], include_directories: config_dir + [include_directories(join_paths('..', '..', 'lib'))], - c_args: draw_opt_c_args, + c_args: native_arch_opt_c_args, dependencies : [eina, efl] ) draw_opt_lib += [ draw_opt ]