From: Jeremie Courreges-Anglas Subject: Re: devel/x86_64-elf To: Klemens Nanni Cc: ports@openbsd.org Date: Sun, 25 Jan 2026 17:05:01 +0100 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