On Sun, Jan 25, 2026 at 12:11:12PM +0000, Klemens Nanni wrote:
> 25.01.2026 11:50, Jeremie Courreges-Anglas пишет:
> > 
> > Here's a new port to get a modern GNU toolchain for x86_64.  It
> > successfully compiles a lightly tweaked openbsd-wip/net/ipxe and a
> > revived sysutils/memtest86+.  The port is based off
> > devel/arm-none-eabi, with all the cruft removed.  Someone could add an
> > i386 FLAVOR it they care.  I used the same gcc and binutils version as
> > arm-none-eabi for no other reason than mere laziness.
> > 
> > The idea is that a dedicated GNU toolchain specialized for standalone
> > code should be more robust in the long run than fixing build/runtime
> > errors in niche software every time we update clang, lld, ports-gcc,
> > etc.  That would be ipxe and sysutils/firmware/vmm.
> > 
> > Tarball attached.  Thoughts?  ok?
> 
> Awesome, much appreciated!
> 
> OK kn

Cool,

> > 
> > kn, fwiw below is the diff I used to build openbsd-wip/net/ipxe.
> 
> Feel free to commit this, too, with or without below nits...
> 
> > I haven't sorted out everything in sysutils/vmm yet.
> > 
> > diff --git net/ipxe/Makefile net/ipxe/Makefile
> > index bbd5e51f8..c34a13448 100644
> > --- net/ipxe/Makefile
> > +++ net/ipxe/Makefile
> > @@ -50,16 +50,10 @@ FLAVOR ?=               # native build
> >  .if empty(FLAVOR)
> >  # FWIW, on amd64 'make IPXE_ARCH=i386' also built at one point.
> >  IPXE_ARCH =                ${MACHINE_ARCH:amd64=x86_64}
> > -COMPILER =         ports-gcc
> > -COMPILER_LANGS =   c
> > -# XXX WIP ld.bfd with elf-{arm64,i386,x86_64} target support added to 
> > binutils
> > -BUILD_DEPENDS =    devel/binutils>=2.45.1p4 \
> > -                   devel/gas
> > -CROSS =                    g
> > -MAKE_FLAGS =               CC=${CC} \
> > +BUILD_DEPENDS =    devel/x86_64-elf/gcc
> > +CROSS =                    x86_64-none-elf-
> > +MAKE_FLAGS =               \
> >                     SPG_TEST=false
> 
> No need for line break.

Yeah I tried to make the diff really minimal...

> > -USE_LLD =          No
> > -MAKE_FLAGS +=              LD=${LD}
> >  .else
> >  IPXE_ARCH =                ${FLAVOR:aarch64=arm64:arm=arm32}
> >  BUILD_DEPENDS =    devel/arm-none-eabi/binutils,${FLAVOR} \
> 
> You could also drop binutils here, gcc run-depends on it.
> Or add binutils in the amd64 case, just make them match.
> 
> > @@ -93,6 +87,7 @@ USE_GMAKE =               Yes
> >  MAKE_FLAGS +=              CROSS=${CROSS} \
> >                     HOST_CC=${CC} \
> >                     HOST_CFLAGS=${HOST_CFLAGS:Q} \
> > +                   SPG_TEST=false \
> 
> non-amd64 do not need this.

... but I forgot to drop that extra line.

> >                     V=1 \
> >                     VERSION=${VERSION:Q}
> >  
> > @@ -105,7 +100,8 @@ BUILD_DEPENDS +=        archivers/xz \
> >                     sysutils/mtools \
> >                     sysutils/truncate
> >  # lzma.h
> > -HOST_CFLAGS +=             -I/usr/local/include
> > +HOST_CFLAGS +=             -I${LOCALBASE}/include \
> > +                   -L${LOCALBASE}/lib
> 
> Is this needed or just for consistency?
> amd64 and aarch64 build find without -L.

It is needed.  ports-gcc automatically adds /usr/local/lib to the
linker path because of libatomic and maybe others.  But that's not the
case for this cross-compiling gcc.

> >  
> >  # util/genfsimg relies on mktemp(1).
> >  MAKE_ENV =         TMPDIR=${WRKDIR}
> > 
> 

-- 
jca

Reply via email to