]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
meson: Auto detect efi-ld 21727/head
authorJan Janssen <medhefgo@web.de>
Sat, 11 Dec 2021 10:29:30 +0000 (11:29 +0100)
committerJan Janssen <medhefgo@web.de>
Sat, 11 Dec 2021 10:29:30 +0000 (11:29 +0100)
meson.build
meson_options.txt
src/boot/efi/meson.build

index bc7a8f76e8d7f6c9b428cc3b2749430b381de368..4c0dd6f8c99aa7842cf0d86d48ec636cf1ad00e6 100644 (file)
@@ -3912,6 +3912,7 @@ if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_GNU_EFI') == 1
         summary({
                 'EFI machine type' :                efi_arch[0],
                 'EFI CC' :                          '@0@'.format(' '.join(efi_cc)),
+                'EFI LD' :                          efi_ld,
                 'EFI lds' :                         efi_lds,
                 'EFI crt0' :                        efi_crt0,
                 'EFI include directory' :           efi_incdir},
index 914434e37c43902990f56cf5bdbb01fc201330d6..4d406b3e5058224e72309380cd0209d6fa2339c5 100644 (file)
@@ -415,7 +415,7 @@ option('efi-cc', type : 'array',
        description : 'the compiler to use for EFI modules')
 # Note that LLD does not support PE/COFF relocations
 # https://lists.llvm.org/pipermail/llvm-dev/2021-March/149234.html
-option('efi-ld', type : 'combo', choices : ['bfd', 'gold'],
+option('efi-ld', type : 'combo', choices : ['auto', 'bfd', 'gold'],
        description : 'the linker to use for EFI modules')
 option('efi-libdir', type : 'string',
        description : 'path to the EFI lib directory')
index c095512bfb4bfc44a4e82ccb7697377b9e61cbc2..d92fe0e5ec9e17320a703ce58e779b09c4e519f9 100644 (file)
@@ -48,6 +48,15 @@ if efi_cc.length() == 0
         efi_cc = cc.cmd_array()
 endif
 
+efi_ld = get_option('efi-ld')
+if efi_ld == 'auto'
+        efi_ld = cc.get_linker_id().split('.')[1]
+        if efi_ld not in ['bfd', 'gold']
+                warning('Not using @0@ as efi-ld, falling back to bfd'.format(efi_ld))
+                efi_ld = 'bfd'
+        endif
+endif
+
 efi_libdir = ''
 foreach dir : [get_option('efi-libdir'),
                '/usr/lib/gnuefi' / efi_arch[0],
@@ -256,7 +265,7 @@ foreach arg : get_option('c_args')
 endforeach
 
 efi_ldflags = [
-        '-fuse-ld=' + get_option('efi-ld'),
+        '-fuse-ld=' + efi_ld,
         '-L', efi_libdir,
         '-nostdlib',
         '-T', efi_lds,
@@ -276,7 +285,7 @@ if efi_arch[1] in ['aarch64', 'arm', 'riscv64']
         efi_format = ['-O', 'binary']
 else
         efi_ldflags += ['-pie']
-        if get_option('efi-ld') == 'bfd'
+        if efi_ld == 'bfd'
                 efi_ldflags += '-Wl,--no-dynamic-linker'
         endif
         efi_format = ['--target=efi-app-@0@'.format(efi_arch[1])]