On 2022/11/20 05:45, Brian Callahan wrote:
> Hi ports --
> 
> Here is the update to DMD hinted at in my previous email updating LDC.
> Changelog is here: https://github.com/dlang/dmd/compare/v2.100.1...v2.101.0
> 
> There were some big changes to the build system, hence some unavoidable
> churn in this update.
> 
> Tests from other D users appreciated.
> 
> OK?

Not a D user, but regenerating the bootstraps are useful.
I'd like to suggest a general tweak to the approach we use for
bootstraps though.

>  post-extract:
..
> -     chmod 644 ${WRKDIR}/dmd-bootstrap/openbsd/bin64/lib*.so* # XXX
> -     cp /usr/lib/libc.so.96.* ${WRKDIR}/dmd-bootstrap/openbsd/bin64/ # XXX

We might as well keep replacing the libs with copies from /usr/lib.
I don't see a downside and there are upsides because it will be
more resilient where a library has been changed in bsae due to new
requirements from the kernel.

I think it would make sense to replace all the libraries rather than
just libc. libpthread is certainly one which sometimes needs changes
like this.

For example for dmd, something like this:

        cd ${WRKDIR}/dmd-bootstrap/bin64 && \
            for i in lib*.so*; do \
                chmod 644 $$i; \
                cp /usr/lib/$${i%.so.*}.so.* .; \
        done

If a library major is bumped in base then the new file for that
library won't be picked up by ld.so anyway, so the library bundled
in the bootstrap file will continue to be used. That may or may
not work depending on the nature of changes but nothing new there,
this copying doesn't change that.

Obviously this doesn't just apply to dmd - it probably makes sense
to do the same for all ports using bootstraps. These are the
ones I know about:

devel/jdk/1.8
devel/jdk/11
devel/jdk/17
lang/dmd
lang/fpc
lang/gcc/11
lang/gcc/8
lang/ghc
lang/go
lang/ldc
lang/pypy
lang/rust

Obviously with the recent change we only had problems with a subset
of these ports; not all changes affect all ports/bootstraps.

If we agree on the direction then I can prepare diffs for these other
ports.

There was an alternative suggestion to rebuild all of the bootstraps
regularly even if they don't need it but this is simply not feasible.

Rebuilding these files, uploading them somewhere for distribution,
and updating the ports to use them can't be fully automated; for
some of them it's "just work" but for others it's a huge pain. These
ports involve 8 architectures; build times vary but several of these
ports take 1-2h on a fast amd64 and some up to 30 hours on slower
machines, but will also involve building a set of dependencies in
some cases (armv7 for example could easily take a week to do this).

Reply via email to