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