meson: cleanup the native-cpu optimization build code
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Fri, 16 Nov 2018 15:49:53 +0000 (16:49 +0100)
committerSangHyeon Jade Lee <sh10233.lee@samsung.com>
Tue, 20 Nov 2018 09:53:13 +0000 (18:53 +0900)
you were not able to disable the header checks, so if the header was not
there it indicated that you could turn it of. However, the option check
was in the has_header if not outside of it. Further more, header checks
are done in the subdirectory that is done for header checks,
unneccessary cpu_**** flags are removed, global optimization options are
added to the global_arguments instead of just the package_c_args, which
leads to the fact that also all binaries etc. are build by default with
those optimization flags.

This also reduces the amount of options to a minimum of 1 option, to
just control if there should be the optimization or not.

This also changes from host_maschine to target_mschine, since we
probebly want to enable the optimization for the target maschine, not
the host.

Differential Revision: https://phab.enlightenment.org/D7296

header_checks/meson.build
meson.build
meson_options.txt
src/lib/ector/software/meson.build
src/lib/evas/meson.build
src/static_libs/draw/meson.build

index 01e557e..cb47b04 100644 (file)
@@ -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',
index ba6d84a..4b9d766 100644 (file)
@@ -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])
index 94d3007..296b3b8 100644 (file)
@@ -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'
-)
-
index b587ca9..cef9c95 100644 (file)
@@ -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
index adea8b2..f9f038d 100644 (file)
@@ -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 ]
index 54c7216..250e021 100644 (file)
@@ -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 ]