summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <mail@marcel-hollerbach.de>2018-11-16 16:49:53 +0100
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2018-11-16 17:29:05 +0100
commit46422187d81145f87b5f2ec023aaea4554999f74 (patch)
tree628de080ef4173d3d2c616663d734091bef53230
parentae543adbd1cddfc6fbadb564c3be46c71beb6e5f (diff)
meson: cleanup the native-cpu optimization build code
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
-rw-r--r--header_checks/meson.build16
-rw-r--r--meson.build83
-rw-r--r--meson_options.txt23
-rw-r--r--src/lib/ector/software/meson.build2
-rw-r--r--src/lib/evas/meson.build2
-rw-r--r--src/static_libs/draw/meson.build2
6 files changed, 44 insertions, 84 deletions
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 @@
1if get_option('native-arch-optimization')
2 if target_machine.cpu_family() == 'x86' or target_machine.cpu_family() == 'x86_64'
3 native_header = 'immintrin.h'
4 elif target_machine.cpu_family() == 'arm'
5 native_header = 'arm_neon.h'
6 elif target_machine.cpu_family() == 'aarch64'
7 native_header = 'arm_neon.h'
8 elif target_machine.cpu_family() == 'ppc' or target_machine.cpu_family() == 'ppc64'
9 native_header = 'altivec.h'
10 endif
11
12 if cc.has_header(native_header) == false
13 error('Error, header '+native_header+' is required')
14 endif
15endif
16
1header_checks = [ 17header_checks = [
2 'alloca.h', 18 'alloca.h',
3 'asm/hwcap.h', 19 '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
112endif 112endif
113 113
114## or should this be target_machine? 114## or should this be target_machine?
115cpu_mmx = false
116cpu_sse3 = false 115cpu_sse3 = false
117cpu_neon = false 116cpu_neon = false
118cpu_neon_intrinsics = false 117cpu_neon_intrinsics = false
119cpu_altivec = false 118native_arch_opt_c_args = [ '-msse3' ]
120evas_opt_c_args = [ ]
121draw_opt_c_args = [ ]
122ector_opt_c_args = [ ]
123machine_c_args = [ ]
124compiler = meson.get_compiler('c')
125 119
126if host_machine.endian() == 'big' 120if host_machine.endian() == 'big'
127 config_h.set10('WORDS_BIGENDIAN', true) 121 config_h.set10('WORDS_BIGENDIAN', true)
128endif 122endif
129 123
130if host_machine.cpu_family() == 'x86' or host_machine.cpu_family() == 'x86_64' 124if get_option('native-arch-optimization')
131 if compiler.has_header('immintrin.h') == true 125 if target_machine.cpu_family() == 'x86' or target_machine.cpu_family() == 'x86_64'
132 if (get_option('cpu-mmx') == true) 126 config_h.set10('BUILD_MMX', true)
133 config_h.set10('BUILD_MMX', true) 127 message('x86 build - MMX enabled')
134 cpu_mmx = true 128 config_h.set10('BUILD_SSE3', true)
135 message('x86 build - MMX enabled') 129 cpu_sse3 = true
136 if (get_option('cpu-sse3') == true) 130 message('x86 build - SSE3 enabled')
137 config_h.set10('BUILD_SSE3', true) 131 elif target_machine.cpu_family() == 'arm'
138 evas_opt_c_args += [ '-msse3' ] 132 config_h.set10('BUILD_NEON', true)
139 draw_opt_c_args += [ '-msse3' ] 133 cpu_neon = true
140 ector_opt_c_args += [ '-msse3' ] 134 message('ARM build - NEON enabled')
141 cpu_sse3 = true 135 elif target_machine.cpu_family() == 'aarch64'
142 message('x86 build - SSE3 enabled') 136 config_h.set10('BUILD_NEON', true)
143 endif 137 config_h.set10('BUILD_NEON_INTRINSICS', true)
144 endif 138 add_global_arguments('-ftree-vectorize', language: 'c')
145 else 139 cpu_neon = true
146 error('Perhaps you wish to disble MMX with -Dcpu-mmx=false') 140 cpu_neon_intrinsics = true
147 endif 141 message('ARM64 build - NEON + intrinsics enabled')
148elif host_machine.cpu_family() == 'arm' 142 elif target_machine.cpu_family() == 'ppc' or target_machine.cpu_family() == 'ppc64'
149 if compiler.has_header('arm_neon.h') == true 143 config_h.set10('BUILD_ALTIVEC', true)
150 if (get_option('cpu-neon') == true) 144 add_global_arguments('-maltivec-vectorize', language: 'c')
151 config_h.set10('BUILD_NEON', true) 145 message('PPC/POWER build - ALTIVEC enabled')
152 machine_c_args += ['-mfpu=neon', '-ftree-vectorize']
153 cpu_neon = true
154 message('ARM build - NEON enabled')
155 endif
156 else
157 error('Perhaps you wish to disble NEON with -Dcpu-neon=false')
158 endif
159elif host_machine.cpu_family() == 'aarch64'
160 if compiler.has_header('arm_neon.h') == true
161 if (get_option('cpu-neon') == true)
162 config_h.set10('BUILD_NEON', true)
163 config_h.set10('BUILD_NEON_INTRINSICS', true)
164 machine_c_args += ['-ftree-vectorize']
165 cpu_neon = true
166 cpu_neon_intrinsics = true
167 message('ARM64 build - NEON + intrinsics enabled')
168 endif
169 else
170 error('Perhaps you wish to disble NEON with -Dcpu-neon=false')
171 endif
172elif host_machine.cpu_family() == 'ppc' or host_machine.cpu_family() == 'ppc64'
173 if compiler.has_header('altivec.h') == true
174 if (get_option('cpu-akltivec') == true)
175 config_h.set10('BUILD_ALTIVEC', true)
176 machine_c_args += [ '-maltivec' ]
177 cpu_altivec = true
178 message('PPC/POWER build - ALTIVEC enabled')
179 endif
180 else
181 error('Perhaps you wish to disble NEON with -Dcpu-altivec=false')
182 endif 146 endif
183endif 147endif
184 148
@@ -303,7 +267,6 @@ foreach package : subprojects
303 package_c_args = [ 267 package_c_args = [
304 '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"', 268 '-DPACKAGE_DATA_DIR="'+ join_paths(dir_data, package_name)+'"',
305 '-DNEED_RUN_IN_TREE=1', 269 '-DNEED_RUN_IN_TREE=1',
306 machine_c_args
307 ] 270 ]
308 automatic_pkgfile = true 271 automatic_pkgfile = true
309 if package[1].length() == 0 or get_option(package[1][0]) 272 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',
328 description: 'Flag for handling c# bindings' 328 description: 'Flag for handling c# bindings'
329) 329)
330 330
331option('cpu-mmx', 331option('native-arch-optimization',
332 type: 'boolean', 332 type: 'boolean',
333 value: true, 333 value: true,
334 description: 'Build MMX support when building for intel' 334 description: 'Flag for enabling architecture native optimizations'
335) 335)
336
337option('cpu-sse3',
338 type: 'boolean',
339 value: true,
340 description: 'Build SSE3 support when building for intel'
341)
342
343option('cpu-neon',
344 type: 'boolean',
345 value: true,
346 description: 'Build NEON support when building for ARM'
347)
348
349option('cpu-altivec',
350 type: 'boolean',
351 value: true,
352 description: 'Build ALTIVEC support when building for PPC/POWER'
353)
354
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
40 sources: pub_eo_file_target + [ 'ector_software_gradient_sse3.c' ], 40 sources: pub_eo_file_target + [ 'ector_software_gradient_sse3.c' ],
41 dependencies: ector_pub_deps + [triangulator, freetype, draw, m] + ector_deps, 41 dependencies: ector_pub_deps + [triangulator, freetype, draw, m] + ector_deps,
42 include_directories: config_dir + [ include_directories('..') ], 42 include_directories: config_dir + [ include_directories('..') ],
43 c_args: ector_opt_c_args, 43 c_args: native_arch_opt_c_args,
44 ) 44 )
45 ector_opt_lib += [ ector_opt ] 45 ector_opt_lib += [ ector_opt ]
46endif 46endif
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
188 [ include_directories('../../..') ] + 188 [ include_directories('../../..') ] +
189 evas_include_directories + 189 evas_include_directories +
190 [vg_common_inc_dir], 190 [vg_common_inc_dir],
191 c_args: evas_opt_c_args, 191 c_args: native_arch_opt_c_args,
192 dependencies: [eina, eo, ector, emile, evas_deps, m], 192 dependencies: [eina, eo, ector, emile, evas_deps, m],
193 ) 193 )
194 evas_link += [ evas_opt ] 194 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
13 draw_opt = static_library('draw_opt', 13 draw_opt = static_library('draw_opt',
14 sources: [ 'draw_main_sse2.c' ], 14 sources: [ 'draw_main_sse2.c' ],
15 include_directories: config_dir + [include_directories(join_paths('..', '..', 'lib'))], 15 include_directories: config_dir + [include_directories(join_paths('..', '..', 'lib'))],
16 c_args: draw_opt_c_args, 16 c_args: native_arch_opt_c_args,
17 dependencies : [eina, efl] 17 dependencies : [eina, efl]
18 ) 18 )
19 draw_opt_lib += [ draw_opt ] 19 draw_opt_lib += [ draw_opt ]