On Thu, Jan 21, 2021 at 04:52:43PM +0100, Thomas Monjalon wrote:
> 21/01/2021 16:02, Juraj Linkeš:
> > From: Thomas Monjalon <tho...@monjalon.net>
> > > 20/01/2021 09:41, Juraj Linkeš:
> > > > From: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>
> > > > > > 20/01/2021 02:04, Honnappa Nagarahalli:
> > > > > > > > On Tue, Jan 19, 2021 at 04:52:19PM +0100, Thomas Monjalon wrote:
> > > > > > > > > 19/01/2021 15:56, Juraj Linkeš:
> > > > > > > > > > From: Thomas Monjalon <tho...@monjalon.net>
> > > > > > > > > > > 15/01/2021 14:26, Juraj Linkeš:
> > > > > > > > > > > > --- a/meson_options.txt
> > > > > > > > > > > > +++ b/meson_options.txt
> > > > > > > > > > > > +option('arm_soc', type: 'string', value: '',
> > > > > > > > > > > > +       description: 'Specify if you want to build for a
> > > > > > > > > > > > +particular
> > > > > > > > > > > > +aarch64 Arm SoC when building on an aarch64
> > > > > > > > > > > > +machine.')
> > > > > > > > > > >
> > > > > > > > > > > Why the option is named "arm_soc" and not just "soc"?
> > > > > > > > > > > The same option could be used by other archs, isn't it?
> > > > > > > > > >
> > > > > > > > > > Agree that a more generic name would be better.
> > > > > > > > > > I'll change it to "soc" if there are no other suggestions.
> > > > > > > > >
> > > > > > > > > Another name could be "machine".
> > > > > > > > > Should it be the same mechanism as compiling for a specific
> > > > > > > > > x86 CPU from an x86 machine?
> > > > > > > > >
> > > > > > > > I'd rather not re-use the term "machine", for a new use,
> > > > > > > > better to use a new term IMHO.
> > > > > > > +1, agree. 'soc' sounds good to me.
> > > > > >
> > > > > > Another possible word is "platform", as in
> > > > > > http://doc.dpdk.org/guides/platform/index.html
> > > > > I am fine with 'platform' too.
> > > > >
> > > >
> > > > 'platform' is likely the best and actually works nicely with
> > > http://patches.dpdk.org/patch/85956/. Taken together, 'platform' could be
> > > either 'native', 'generic' or an soc, which is, I believe, exactly what 
> > > we want.
> > > 
> > > I am not sure what we want :)
> > > We need to specify the instruction set, and the specific target.
> > > We could deduce the instruction set from the target, but I think it is 
> > > good to be
> > > able to overwrite the instruction set in case there can be multiple 
> > > instruction
> > > sets for a target.
> > > 
> > 
> > I think we had this (or similar) discussion here 
> > http://patches.dpdk.org/patch/85956/. I agree with your summary.
> > 
> > > I think "native" and "generic" should be specified as instruction set, in 
> > > the
> > > existing option "machine" or renamed as "instruction_set" or "isa".
> > > 
> > 
> > Agree, but I would add that we also want "native" and "generic" as valid 
> > platforms. More below.
> > 
> > > Let's imagine the first option is "isa" and the new second option is 
> > > "platform".
> > > We can have a default "isa" per "platform".
> > > The default "platform" would have a default "isa": native or generic?
> > > 
> > 
> > In general, yes, but I let me expand the "platform" option a bit.
> > 
> > Let's dig into what "platform" means. I understand it to be a set of 
> > configuration options, e.g.:
> > platform=native: use discovered values for all configuration options (where 
> > we can do that)
> > platform=generic: use predetermined values to produce a "generic" build 
> > that would work on most machine of the corresponding type/arch
> 
> This is where I was disagreeing:
> you propose to have 2 special values of platform (native and generic),
> I propose to have only 1 default value for platform.
> 
> After more thoughts, I think it's fine.
> 
> 
> > platform=other: use predetermined values to produce a build tailored to 
> > platform "other", such as some arm soc.
> > 
> > In all these cases, leave user the option to specify supported options 
> > (i.e. user can specifying "instruction_set" and that value would be used 
> > for machine args or "max_lcores" would set max lcores).
> > 
> > The default "instruction_set" would be different per platform:
> 
> What do you think about calling this option "isa"?
> 
> > platform=native => instruction_set=native
> > platform=generic => the generic instruction_set for the architecture, as 
> > specified here: 
> > https://github.com/DPDK/dpdk/blob/main/config/meson.build#L79
> > platform=other => the instruction set of the platform
> > 
> > When "instruction_set" is set to its default value (such as auto), the 
> > per-platform instruction set would be used. If the user specifies anything 
> > else, that value would be used.
> 
> Why auto? This is what we call native.
> 

"auto" is a better term. If the platform is selected as "native" then the
default isa will be "native", while if the platform is generic, the default
isa should be something generic too. Since we unfortunately can't have one
option automatically update the value of the other, we need to use a value
of "auto" to allow platform to provide variable defaults for this, while
still allowing explicit overrides. So in this case, "auto" will imply the
isa being the same as the platform in most cases.

In terms of other possible parameters, it makes even more sense. For
example, for max lcores - as I understand it on ARM SoC's "native" is
generally meant to set the max lcores to the detected values, while on x86
we want to allow some flexibility, so that if you compile on a 4-core VM,
you can still run that binary on a 32-core machine of the same or later
micro-architecture. In this case, "auto" again is a good value implying "choose
what you think is best".

/Bruce

Reply via email to