]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
meson: define gnu_efi_arch for the arch efi name, fix ldsdir detection
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 20 Apr 2017 02:57:52 +0000 (22:57 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 24 Apr 2017 23:24:36 +0000 (19:24 -0400)
This fixes ldsdir detection under Debian.

v2:
- define gnu_efi_arch for the arch efi include directory name

  In the autotools naming convention, efi_arch and this directory always had
  the same name. But meson.cpu_family() uses a slightly different convention,
  so those two don't always match.

meson.build
src/boot/efi/meson.build

index df08545159e11674c3b4173d835632e881c5f766..97fff496e1527893febf34726d309a1e279a0f1f 100644 (file)
@@ -977,16 +977,21 @@ tests = []
 if get_option('efi')
         efi_arch = host_machine.cpu_family()
 
-        if efi_arch == 'ia32'
+        if efi_arch == 'x86'
                 EFI_MACHINE_TYPE_NAME = 'ia32'
+                gnu_efi_arch = 'ia32'
         elif efi_arch == 'x86_64'
                 EFI_MACHINE_TYPE_NAME = 'x64'
+                gnu_efi_arch = 'x86_64'
         elif efi_arch == 'arm'
                 EFI_MACHINE_TYPE_NAME = 'arm'
+                gnu_efi_arch = 'arm'
         elif efi_arch == 'aarch64'
                 EFI_MACHINE_TYPE_NAME = 'aa64'
+                gnu_efi_arch = 'aarch64'
         else
                 EFI_MACHINE_TYPE_NAME = ''
+                gnu_efi_arch = ''
         endif
 
         conf.set('ENABLE_EFI', 1)
index bdf54654de719425be701e9b78a286448226851a..6c5c856d8cdd3e9e6ac31d72756a429cfdb25bfe 100644 (file)
@@ -33,8 +33,8 @@ if conf.get('ENABLE_EFI', 0) == 1 and get_option('gnu-efi') != 'false'
         efi_ld = get_option('efi-ld')
 
         efi_incdir = get_option('efi-includedir')
-        efibind_h = '@0@/@1@/efibind.h'.format(efi_incdir, efi_arch)
-        have_header = cc.has_header(efibind_h)
+        have_header = (gnu_efi_arch != '' and
+                       cc.has_header('@0@/@1@/efibind.h'.format(efi_incdir, gnu_efi_arch)))
 
         if have_header and EFI_MACHINE_TYPE_NAME == ''
                 error('gnu-efi is available, but EFI_MACHINE_TYPE_NAME is unknown')
@@ -70,8 +70,17 @@ if have_gnu_efi
         objcopy = find_program('objcopy')
 
         efi_ldsdir = get_option('efi-ldsdir')
+        arch_lds = 'elf_@0@_efi.lds'.format(gnu_efi_arch)
         if efi_ldsdir == ''
                 efi_ldsdir = join_paths(efi_libdir, 'gnuefi')
+                cmd = run_command('test', '-f', join_paths(efi_ldsdir, arch_lds))
+                if cmd.returncode() != 0
+                        efi_ldsdir = efi_libdir
+                        cmd = run_command('test', '-f', join_paths(efi_ldsdir, arch_lds))
+                        if cmd.returncode() != 0
+                               error('Cannot find @0@'.format(arch_lds))
+                        endif
+                endif
         endif
 
         message('efi-libdir: "@0@"'.format(efi_libdir))
@@ -91,7 +100,7 @@ if have_gnu_efi
                         '-Wsign-compare',
                         '-Wno-missing-field-initializers',
                         '-isystem', efi_incdir,
-                        '-isystem', join_paths(efi_incdir, efi_arch),
+                        '-isystem', join_paths(efi_incdir, gnu_efi_arch),
                         '-include', efi_config_h]
         if efi_arch == 'x86_64'
                 compile_args += ['-mno-red-zone',
@@ -105,20 +114,20 @@ if have_gnu_efi
         endif
 
         efi_ldflags = ['-T',
-                       '@0@/elf_@1@_efi.lds'.format(efi_ldsdir, efi_arch),
+                       join_paths(efi_ldsdir, arch_lds),
                        '-shared',
                        '-Bsymbolic',
                        '-nostdlib',
                        '-znocombreloc',
                        '-L', efi_libdir,
-                       '@0@/crt0-efi-@1@.o'.format(efi_ldsdir, efi_arch)]
+                       join_paths(efi_ldsdir, 'crt0-efi-@0@.o'.format(gnu_efi_arch))]
         if efi_arch == 'aarch64' or efi_arch == 'arm'
                 # Aarch64 and ARM32 don't have an EFI capable objcopy. Use 'binary'
                 # instead, and add required symbols manually.
                 efi_ldflags += ['--defsym=EFI_SUBSYSTEM=0xa']
                 efi_format = ['-O', 'binary']
         else
-                efi_format = ['--target=efi-app-@0@'.format(efi_arch)]
+                efi_format = ['--target=efi-app-@0@'.format(gnu_efi_arch)]
         endif
 
         systemd_boot_objects = []