On 2018/09/10 17:20, Christian Weisgerber wrote:
> We have two ports (net/utox, www/mozplugger) that do something like this
> 
>   ld -r -b binary -o foo.o foo.blob
> 
> to create an object file with a .data section from a binary blob.
> This works fine with ld.bfd, but ld.lld
> 
>   ld: error: target emulation unknown: -m or at least one .o file required
> 
> requires an additional -m<emulation> argument.  The value for this
> is arch-specific in an unpredictable way.  I had to dig it out of
> the lld source.
> 
> We need a mapping from arch to emulation.  Do we want to abstract
> this into arch-defines.mk, or do we just add it to the two affected
> ports?
> 
> For arch-defines.mk, we could use something like the diff below:
> 
> Index: arch-defines.mk
> ===================================================================
> RCS file: /cvs/ports/infrastructure/mk/arch-defines.mk,v
> retrieving revision 1.52
> diff -u -p -r1.52 arch-defines.mk
> --- arch-defines.mk   8 Aug 2018 09:19:40 -0000       1.52
> +++ arch-defines.mk   10 Sep 2018 14:49:35 -0000
> @@ -31,6 +31,13 @@ RUST_ARCHS = amd64 i386 aarch64
>  CLANG_ARCHS = aarch64 amd64 arm i386
>  # arches using LLVM's linker (ld.lld); others use binutils' ld.bfd
>  LLD_ARCHS = aarch64 arm
> +# see llvm/tools/lld/ELF/Driver.cpp
> +LLD_EMUL =
> +.for A E in aarch64 aarch64elf  arm armelf  amd64 elf_amd64  i386 elf_i386
> +.  if ${MACHINE_ARCH} == $A
> +LLD_EMUL = $E
> +.  endif
> +.endfor
>  
>  # arches where ports devel/llvm builds - populates llvm ONLY_FOR_ARCHS
>  # as well as available for PROPERTIES checks.

arch-defines seems the right place - it might be helpful to add the
"-m" in ${LLD_EMUL} so that it can be used directly in command lines,
rather than have consumers check whether it's non-empty and add "-m"
themselves?

Reply via email to