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

> 
> 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.

> -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.

>                       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.

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

Reply via email to