Thread (33 messages) 33 messages, 5 authors, 2021-07-09

Re: [dpdk-dev] [RFC PATCH v2] build: add platform meson option

From: David Christensen <hidden>
Date: 2021-01-05 22:17:54

quoted
The current meson option 'machine' should only specify the ISA, which is not
sufficient for Arm, where setting ISA implies other setting as well.
Add a new meson option, 'platform', which differentiates the type of the build
(native/generic) and sets machine accordingly, unless the user chooses to
override it.
The 'machine' option also doesn't describe very well what it sets, so introduce a
new option 'cpu_instruction_set', but keep 'machine' for backward
compatibility.
These two new variables, taken together, achieve what 'machine' was setting
per architecture - setting the ISA in x86 build and setting native/default 'build
type' in aarch64 build - is now properly being set for all architectures in a
uniform manner.

Signed-off-by: Juraj Linkeš <redacted>
---
  config/arm/meson.build        |  4 +--
  config/meson.build            | 47 +++++++++++++++++++++++++----------
  devtools/test-meson-builds.sh |  9 ++++---
  meson_options.txt             |  8 ++++--
  4 files changed, 47 insertions(+), 21 deletions(-)
diff --git a/config/arm/meson.build b/config/arm/meson.build index
42b4e43c7..6b09a74a7 100644
--- a/config/arm/meson.build
+++ b/config/arm/meson.build
@@ -3,10 +3,10 @@
  # Copyright(c) 2017 Cavium, Inc

  # for checking defines we need to use the correct compiler flags -march_opt = '-
march=@0@'.format(machine)
+march_opt = '-march=@0@'.format(cpu_instruction_set)

  arm_force_native_march = false
-arm_force_default_march = (machine == 'default')
+arm_force_default_march = (platform == 'generic')

  flags_common_default = [
  	# Accelarate rte_memcpy. Be sure to run unit test
(memcpy_perf_autotest) diff --git a/config/meson.build b/config/meson.build
index a3154e29c..647116513 100644
--- a/config/meson.build
+++ b/config/meson.build
@@ -63,42 +63,63 @@ if not is_windows
  			pmd_subdir_opt)
  endif

-# set the machine type and cflags for it
+platform = get_option('platform')
+
+# set the cpu_instruction_set type and cflags for it
  if meson.is_cross_build()
-	machine = host_machine.cpu()
+	cpu_instruction_set = host_machine.cpu()
  else
-	machine = get_option('machine')
+	cpu_instruction_set = get_option('cpu_instruction_set')
+	if get_option('machine') != 'auto'
+		warning('The "machine" option is deprecated. ' +
+		        'Please use "cpu_instruction_set" instead.')
+		if cpu_instruction_set != 'auto'
+			error('Setting both "machine" and ' +
+			      '"cpu_instruction_set" is unsupported.')
+		endif
+		cpu_instruction_set = get_option('machine')
+	endif
+endif
+
+if platform == 'native'
+	if cpu_instruction_set == 'auto'
+		cpu_instruction_set = 'native'
+	endif
+elif platform == 'generic'
+	if cpu_instruction_set == 'auto'
+		cpu_instruction_set = 'default'
+	endif
  endif

-# machine type 'default' is special, it defaults to the per arch agreed common
+if cpu_instruction_set == 'default'
+# cpu_instruction_set type 'default' is special, it defaults to the per
+arch agreed common
  # minimal baseline needed for DPDK.
  # That might not be the most optimized, but the most portable version while  #
still being able to support the CPU features required for DPDK.
  # This can be bumped up by the DPDK project, but it can never be an  # invariant
like 'native'
-if machine == 'default'
  	if host_machine.cpu_family().startswith('x86')
  		# matches the old pre-meson build systems default
-		machine = 'corei7'
+		cpu_instruction_set = 'corei7'
  	elif host_machine.cpu_family().startswith('arm')
-		machine = 'armv7-a'
+		cpu_instruction_set = 'armv7-a'
  	elif host_machine.cpu_family().startswith('aarch')
  		# arm64 manages defaults in config/arm/meson.build
-		machine = 'default'
+		cpu_instruction_set = 'default'
  	elif host_machine.cpu_family().startswith('ppc')
-		machine = 'power8'
+		cpu_instruction_set = 'power8'
  	endif
  endif
This change forces the build on a P9 system to use the P8 instruction 
set.  Prior to this change the "native" machine type was used which 
resulted in P9 instructions when built on a P9 system.  How do I force 
the build to use the power9 instruction set in this case?

Dave
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help