diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2022-01-03 18:38:23 +0100 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2022-01-04 00:18:47 +0000 |
commit | e897b07f97cf25e092a4cc8e1144e06564b45d53 (patch) | |
tree | 82ecfe1aabe5d81e519ae93b1f4f02ca9e4aa106 | |
parent | c9b1efdf146bef4e1aace1f3ff9076583e8fa709 (diff) | |
download | systemd-e897b07f97cf25e092a4cc8e1144e06564b45d53.tar.gz |
meson: generate better arch defines for clang bpf compilation
The code assume that meson's cpu_family can be mapped directly to
'-D__<cpu_family>__'. This works in a surprising number of cases, but not for a
few architectures. PPC uses "powerpc", and RISC-V omits the trailing underscores.
ARM and RISC-V require a second define too.
Fixes #21900.
(I don't think this matters too much: we need *something* so that gnu/stubs.h
can be successfully included. But we don't actually call syscalls or depend too
much on the host environment, so things should be fine as long as we don't get
a compilation error.)
-rw-r--r-- | src/core/bpf/meson.build | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/core/bpf/meson.build b/src/core/bpf/meson.build index cd0cd3230b..c2465a845f 100644 --- a/src/core/bpf/meson.build +++ b/src/core/bpf/meson.build @@ -13,7 +13,25 @@ clang_flags = [ '-c', ] -clang_arch_flag = '-D__@0@__'.format(host_machine.cpu_family()) +# Generate defines that are appropriate to tell the compiler what architecture +# we're compiling for. By default we just map meson's cpu_family to __<cpu_family>__. +# This dictionary contains the exceptions where this doesn't work. +# +# C.f. https://mesonbuild.com/Reference-tables.html#cpu-families +# and src/basic/missing_syscall_def.h. +cpu_arch_defines = { + 'ppc' : ['-D__powerpc__'], + 'ppc64' : ['-D__powerpc64__', '-D_CALL_ELF=2'], + 'riscv32' : ['-D__riscv', '-D__riscv_xlen=32'], + 'riscv64' : ['-D__riscv', '-D__riscv_xlen=64'], + 'x86' : ['-D__i386__'], + + # For arm, assume hardware fp is available. + 'arm' : ['-D__arm__', '-D__ARM_PCS_VFP'], +} + +clang_arch_flags = cpu_arch_defines.get(host_machine.cpu_family(), + ['-D__@0@__'.format(host_machine.cpu_family())]) if meson.version().version_compare('>= 0.58') libbpf_include_dir = libbpf.get_variable('includedir') @@ -24,7 +42,7 @@ endif bpf_o_unstripped_cmd = [ clang, clang_flags, - clang_arch_flag, + clang_arch_flags, '-I.' ] |