On Sat, 4 Nov 2023 at 02:02, Guillem Jover <[email protected]> wrote:

> Hi!
>
> On Thu, 2023-11-02 at 15:27:54 +0000, Michael Hudson-Doyle wrote:
> > On Tue, 31 Oct 2023 at 09:21, Guillem Jover wrote:
> > > This can be used among other things to set up foreign chroots, by
> > > running the host tools, so disallowing installation could be
> > > problematic. Even though I guess there could be a warning about this,
> > > or maybe it could be controlled through a force option, although both
> > > seems like they could be disruptive.
>
> > Of course in such cases dpkg knows that something funny is going on and
> > could suppress the warning itself.
>
> Right, also true.
>
> > I spent a few minutes trying to think hard about this and I honestly
> don't
> > think I can predict whether trying to prevent installation of
> incompatible
> > packages is worth it (after all one of the ways users could get into
> > trouble would be moving an installed system to a different CPU and having
> > binaries start to fail and obviously dpkg can't help there).
> >
> > One result of this thinking was: I had been thinking/assuming the issue
> of
> > which variants to consider would be apt configuration, but maybe dpkg
> > configuration would make more sense (after all, --add-architecture is a
> > parameter to dpkg). And in this case, dpkg could object when installing a
> > variant that has not been configured.
>
> Yes, the "plan" has been to add support for run-time CPU attributes,
> so that when adding a new arch, for example you can specify whether
> that arch is runnable, which could help dpkg decide whether to allow
> by default to install M-A:foreign packages.
>

Ah. Would this be a change to /var/lib/dpkg/arch or an additional file or
...?


> I guess this is similar, so such future interface should probably take
> this into account as something to support too. Will check where this
> is tracked and add a note to it.
>

Did you find this place? :)


> And of course that is fine as a guardrail, but if a user hit that out
> of running a frontend, then that would already be too late, which to
> me means that frontends need to be aware of this too (and not pass
> packages that dpkg would/could/might refuse to install), when deciding
> what to pass to dpkg.
>

Good point.


> But in any case, as you say, this currently would not be worse than
> configuring a foreign arch, installing some foreign package and trying
> to run it, but it might make it potentially more common. And as
> mentioned above the effecting layer this needs to be decided up seems
> higher anyway (even if dpkg could provide the infra for it).
>
> > > If the only change in the package filename format is in the <arch> part
> > > where we'd use a name which would otherwise be valid as an arch name
> (so,
> > > no weird symbols, or «-» separators that are not intended to split <os>
> > > and <cpu> or similar), then using a name for the variant/ISA would be
> > > fine.
>
> > Right. I think that (when possible pretending e.g. "amd64v3" is a
> distinct
> > architecture will generally make things easier. E.g. I think britney
> > wouldn't need to know about the relationship between "amd64" and
> "amd64v3".
>
> I guess that depends on whether the intention is to create a full
> optimized archive, or just a partial overlay one. In the latter case
> then it might need to know to be able to satisfy dependencies.
>

Maybe! Depends on details I think.


> > > That would be one solution yes, which could give automatic bijective
> > > mappings, although ideally with a machine-readable way to get at it,
> > > which I'm not sure we have currently.
>
> > I think "gcc -Q --help=target | grep -e '^\s*-march'" is about as machine
> > readable as it gets currently, for better or worse (mostly worse).
>
> That does not look very satisfactory, though.


Agreed!


> And llvm/clang does not support it. :/
>

Ah I did not know that.


> > > For example code in dpkg-dev
> > > already runs «$CC -dumpmachine» to infer the host architecture to use
> > > during builds.
> > >
> > > While using a triplet variation could be a way to do that, that would
> > > require such triplet support for each variant/ISA, which tends to be
> > > very painful to introduce if it's not there already, so I'd not
> > > consider this specific way a viable option.
> >
> > I admit I'm not an expert on triplet intricacies but I think a new
> triplet
> > is not appropriate here (a bit like a new Debian architecture for a
> > variant/ISA choice is not the right concept).
>
> We have i386 or arm (?) as (bad IMO) examples where the triplet can
> define the arch baseline. The problem is that this requires updating
> the GNU config.git upstream, and then getting that to trickle down into
> every package that might be using autotools and not using autoreconf
> at build time, or to even update triplet matches in configure scripts
> and similar, which might be "acceptable" for a new arch, but seems
> disproportionate for a new ISA, so yes, as mentioned I agree it's not
> viable.
>

OK. Let's stop worrying about that then :)


> > > On Thu, 2023-09-21 at 14:43:42 +1200, Michael Hudson-Doyle wrote:
> > > > * Should the ISA influence the toolchain via toolchain defaults or
> > > > dpkg-buildflags?
> > > > * How is the default ISA for a buildd chroot selected?
> > >
> > > So the clear downsides of either modifying the default toolchain or
> > > having to provide an additional one is that this seems pretty heavy
> > > weight. Also because people might want to build optimized variants
> > > locally w/o having to mess with their already existing toolchains.
> > > (I'm not sure whether something going along the lines of
> > > <https://git.hadrons.org/cgit/debian/fakecross.git> could be an
> > > option, although as mentioned above, if that would imply new triplets,
> > > then probably not.)
> > >
> > > So the easiest way might indeed be by controlling this via an envvar,
> >
> > DEB_HOST_ARCH_ISA?
>
> Yeah, that works, and follows the current DPKG_*_ARCH_ABI lead for
> example.
>
> > > which dpkg-buildpackage could also setup internally via a new option,
> > > say --arch-isa=amd64v3 or similar
>
> > --host-arch-isa would be more coherent I think.
>
> Ah absolutely! For some reason had --arch in mind as a valid option
> (I only see it now in dpkg-scanpackages :D, or maybe I was thinking
> about --host-isa :).
>
> > I guess one could add support for --target-host-arch-isa to build a
> > toolchain that defaults to a particular ISA. But well.
>
> Yes, the ISA support in dpkg should be extensive enough (so that if
> this needs to be supported in the toolchain, then it is possible).
>
> > So to summarise, here are the generic changes that I think need to be
> made
> > to src:dpkg to support variant ISAs as a thing:
> >
> >  * add get_host_arch_isa() to Dpkg::Arch
>
> Yes (perhaps as mentioned below also just get_host_isa()).
>
> >  * dpkg-gencontrol records DEB_HOST_ARCH_ISA into DEBIAN/control as
> > ArchitectureIsa
>
> Probably better Architecture-Isa, otherwise the current automatic
> case folding would make it end up as Architectureisa.
>

Heh OK.


> >  * dpkg-architecture emits DEB_HOST_ARCH_ISA and grows --host-arch-isa
> flag
>
> Also DEB_BUILD_ARCH_ISA and DEB_TARGET_ARCH_ISA, and also grows a
> --target-arch-isa (but I'm thinking whether the shorter --host-isa would
> be nicer, for example the --match-bits are not spelled --match-arch-bits,
> which would seem also a bit redundant).
>
> >  * dpkg-buildpackage passes --host-arch-isa to dpkg-architecture
>
> Yes, but only when not the baseline.
>

I think what I meant here was that if you pass one of the --*-arch-isa
flags dpkg-buildpackage, it gets passed along to dpkg-architecture (as
--host-arch etc are).

>  * dpkg-genchanges should record the ISA in the changes file somehow I
> > guess?
>
> Yes, also dpkg-genbuildinfo.


Oh yeah. Although on a quick look dpkg-genbuildinfo gets the architecture
from the filename...


> This could be done either from the
> envvars, or perhaps through the debian/files attributes support. But
> given that this is supposedly build global (I think it would be rather
> weird to end up with a .changes including say _amd64.deb and
> _amd64v3.deb file references from the same build),


Ah yes that's true.


> then probably using
> the envvar might be the better way.
>
> >  * dpkg-deb records the ISA in the file name
>
> Yes.
>
> > Have I missed anything?
>
> Nothing else comes to mind right now (except what I might have already
> added).
>

Well of course I wrote this question in before going back and adding the
stuff about having this all be driven by dpkg --add-archiitecture isa
amd64v3 or anything like that. So those changes probably need to be hashed
out too?


> > (Hmm does anything need to reject unknown values
> > found in DEB_HOST_ARCH_ISA /  --host-arch-isa? Probably...)
>
> I guess it indeed makes sense to define what ISAs are supported, and
> either error out or warn and ignore such values. So there might be a
> need to add something like a new data/isatable.
>

I notice that --add-architecture doesn't seem to do any checking.


> > Conceptually slightly separately, it might make sense to add a build
> > "feature" to Dpkg::Vendor::Debian to allow setting -march (and -mtune?)
> >
> > Then when we want to add support to an ISA, we add a little thing to
> > set_build_features (in either Vendor::Debian or Vendor::Ubuntu or
> wherever)
> > that maps get_host_arch_isa() to values for the march-influencing
> feature.
>
> Hmm, right, how to hook this. I'm not sure the current interface is good
> enough to describe this via build flags features, because such new feature
> area would expose arch-specific features. I have been thinking through
> the build flags and will try to send a proposal/RFC to revamp parts of
> it during the weekend.


Did that happen? I didn't see if if so.


> But I think the ISA stuff is better just handled
> (at leas for now) directly by injecting whatever flags when the requested
> ISA is different to the baseline.
>

Well that's easy enough too.

Cheers & thanks for the continued thoughts,
mwh

Reply via email to