On Mon, 2024-05-06 at 11:38:30 +0100, Slurm users wrote:
Hello,
I instructed port to use binutils from ports (version 2.40 native) instead of base:
`/usr/local/bin/ld: unrecognised emulation mode: elf_aarch64`
/usr/local/bin/ld -V |grep aarch64 aarch64cloudabi aarch64cloudabib aarch64elf aarch64elf32 aarch64elf32b aarch64elfb aarch64fbsd aarch64fbsdb aarch64haiku aarch64linux aarch64linux32 aarch64linux32b aarch64linuxb aarch64pe
Any clues about "elf_aarch64" and "aarch64elf" mismatch?
This looks (I admit, I haven't UTSL) like the emulation mode is constructed from an "elf_" prefix and the architecture nickname - this works for "x86_64" and "i386" since the "ld" for the Intel/AMD architectures indeed provides the emulations "elf_x86_64" and "elf_i386" while for 64-bit ARM "elf" is used as a suffix. So this is mainly an ld inconsistency, I'm afraid (which might be fixed by adding alias names - but the hopes are pretty low).
Non-emulated builds shouldn't be affected by the issue you found, right? (There is Slurm built for ARM64 Debian. Maybe they have patched the source?)
Two ways to get this fixed I can imagine: (a) find the place where the emulation mode name is combined, and teach that of possible exceptions to the implemented rule (there may be more than just ARM - what about RISC-V, PPC64*, ...?) (b) interrupt the build in a reasonable place, find all occurreences of the wrong emulation string, and replace it with its existing counterpart
There should be no doubt which one I'd prefer - I'll go and read TS ;)
Cheers, Steffen