meson: define gnu_efi_arch for the arch efi name, fix ldsdir detection
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.
This commit is contained in:
parent
4984c8be73
commit
6800fe7f06
|
@ -977,16 +977,21 @@ tests = []
|
||||||
if get_option('efi')
|
if get_option('efi')
|
||||||
efi_arch = host_machine.cpu_family()
|
efi_arch = host_machine.cpu_family()
|
||||||
|
|
||||||
if efi_arch == 'ia32'
|
if efi_arch == 'x86'
|
||||||
EFI_MACHINE_TYPE_NAME = 'ia32'
|
EFI_MACHINE_TYPE_NAME = 'ia32'
|
||||||
|
gnu_efi_arch = 'ia32'
|
||||||
elif efi_arch == 'x86_64'
|
elif efi_arch == 'x86_64'
|
||||||
EFI_MACHINE_TYPE_NAME = 'x64'
|
EFI_MACHINE_TYPE_NAME = 'x64'
|
||||||
|
gnu_efi_arch = 'x86_64'
|
||||||
elif efi_arch == 'arm'
|
elif efi_arch == 'arm'
|
||||||
EFI_MACHINE_TYPE_NAME = 'arm'
|
EFI_MACHINE_TYPE_NAME = 'arm'
|
||||||
|
gnu_efi_arch = 'arm'
|
||||||
elif efi_arch == 'aarch64'
|
elif efi_arch == 'aarch64'
|
||||||
EFI_MACHINE_TYPE_NAME = 'aa64'
|
EFI_MACHINE_TYPE_NAME = 'aa64'
|
||||||
|
gnu_efi_arch = 'aarch64'
|
||||||
else
|
else
|
||||||
EFI_MACHINE_TYPE_NAME = ''
|
EFI_MACHINE_TYPE_NAME = ''
|
||||||
|
gnu_efi_arch = ''
|
||||||
endif
|
endif
|
||||||
|
|
||||||
conf.set('ENABLE_EFI', 1)
|
conf.set('ENABLE_EFI', 1)
|
||||||
|
|
|
@ -33,8 +33,8 @@ if conf.get('ENABLE_EFI', 0) == 1 and get_option('gnu-efi') != 'false'
|
||||||
efi_ld = get_option('efi-ld')
|
efi_ld = get_option('efi-ld')
|
||||||
|
|
||||||
efi_incdir = get_option('efi-includedir')
|
efi_incdir = get_option('efi-includedir')
|
||||||
efibind_h = '@0@/@1@/efibind.h'.format(efi_incdir, efi_arch)
|
have_header = (gnu_efi_arch != '' and
|
||||||
have_header = cc.has_header(efibind_h)
|
cc.has_header('@0@/@1@/efibind.h'.format(efi_incdir, gnu_efi_arch)))
|
||||||
|
|
||||||
if have_header and EFI_MACHINE_TYPE_NAME == ''
|
if have_header and EFI_MACHINE_TYPE_NAME == ''
|
||||||
error('gnu-efi is available, but EFI_MACHINE_TYPE_NAME is unknown')
|
error('gnu-efi is available, but EFI_MACHINE_TYPE_NAME is unknown')
|
||||||
|
@ -70,8 +70,17 @@ if have_gnu_efi
|
||||||
objcopy = find_program('objcopy')
|
objcopy = find_program('objcopy')
|
||||||
|
|
||||||
efi_ldsdir = get_option('efi-ldsdir')
|
efi_ldsdir = get_option('efi-ldsdir')
|
||||||
|
arch_lds = 'elf_@0@_efi.lds'.format(gnu_efi_arch)
|
||||||
if efi_ldsdir == ''
|
if efi_ldsdir == ''
|
||||||
efi_ldsdir = join_paths(efi_libdir, 'gnuefi')
|
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
|
endif
|
||||||
|
|
||||||
message('efi-libdir: "@0@"'.format(efi_libdir))
|
message('efi-libdir: "@0@"'.format(efi_libdir))
|
||||||
|
@ -91,7 +100,7 @@ if have_gnu_efi
|
||||||
'-Wsign-compare',
|
'-Wsign-compare',
|
||||||
'-Wno-missing-field-initializers',
|
'-Wno-missing-field-initializers',
|
||||||
'-isystem', efi_incdir,
|
'-isystem', efi_incdir,
|
||||||
'-isystem', join_paths(efi_incdir, efi_arch),
|
'-isystem', join_paths(efi_incdir, gnu_efi_arch),
|
||||||
'-include', efi_config_h]
|
'-include', efi_config_h]
|
||||||
if efi_arch == 'x86_64'
|
if efi_arch == 'x86_64'
|
||||||
compile_args += ['-mno-red-zone',
|
compile_args += ['-mno-red-zone',
|
||||||
|
@ -105,20 +114,20 @@ if have_gnu_efi
|
||||||
endif
|
endif
|
||||||
|
|
||||||
efi_ldflags = ['-T',
|
efi_ldflags = ['-T',
|
||||||
'@0@/elf_@1@_efi.lds'.format(efi_ldsdir, efi_arch),
|
join_paths(efi_ldsdir, arch_lds),
|
||||||
'-shared',
|
'-shared',
|
||||||
'-Bsymbolic',
|
'-Bsymbolic',
|
||||||
'-nostdlib',
|
'-nostdlib',
|
||||||
'-znocombreloc',
|
'-znocombreloc',
|
||||||
'-L', efi_libdir,
|
'-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'
|
if efi_arch == 'aarch64' or efi_arch == 'arm'
|
||||||
# Aarch64 and ARM32 don't have an EFI capable objcopy. Use 'binary'
|
# Aarch64 and ARM32 don't have an EFI capable objcopy. Use 'binary'
|
||||||
# instead, and add required symbols manually.
|
# instead, and add required symbols manually.
|
||||||
efi_ldflags += ['--defsym=EFI_SUBSYSTEM=0xa']
|
efi_ldflags += ['--defsym=EFI_SUBSYSTEM=0xa']
|
||||||
efi_format = ['-O', 'binary']
|
efi_format = ['-O', 'binary']
|
||||||
else
|
else
|
||||||
efi_format = ['--target=efi-app-@0@'.format(efi_arch)]
|
efi_format = ['--target=efi-app-@0@'.format(gnu_efi_arch)]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
systemd_boot_objects = []
|
systemd_boot_objects = []
|
||||||
|
|
Loading…
Reference in a new issue