| # SPDX-License-Identifier: LGPL-2.1+ |
| |
| if conf.get('BPF_FRAMEWORK') != 1 |
| subdir_done() |
| endif |
| |
| bpf_clang_flags = [ |
| '-std=gnu11', |
| '-Wno-compare-distinct-pointer-types', |
| '-fno-stack-protector', |
| '-O2', |
| '-target', |
| 'bpf', |
| '-g', |
| '-c', |
| ] |
| |
| bpf_gcc_flags = [ |
| '-std=gnu11', |
| '-fno-stack-protector', |
| '-O2', |
| '-mkernel=5.2', |
| '-mcpu=v3', |
| '-mco-re', |
| '-gbtf', |
| '-c', |
| ] |
| |
| # 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'], |
| } |
| |
| bpf_arch_flags = cpu_arch_defines.get(host_machine.cpu_family(), |
| ['-D__@0@__'.format(host_machine.cpu_family())]) |
| if bpf_compiler == 'gcc' |
| bpf_arch_flags += ['-m' + host_machine.endian() + '-endian'] |
| endif |
| |
| libbpf_include_dir = libbpf.get_variable(pkgconfig : 'includedir') |
| |
| bpf_o_unstripped_cmd = [] |
| if bpf_compiler == 'clang' |
| bpf_o_unstripped_cmd += [ |
| clang, |
| bpf_clang_flags, |
| bpf_arch_flags, |
| ] |
| elif bpf_compiler == 'gcc' |
| bpf_o_unstripped_cmd += [ |
| bpf_gcc, |
| bpf_gcc_flags, |
| bpf_arch_flags, |
| ] |
| endif |
| |
| bpf_o_unstripped_cmd += ['-I.'] |
| |
| if not meson.is_cross_build() and bpf_compiler == 'clang' |
| target_triplet_cmd = run_command('gcc', '-dumpmachine', check: false) |
| if target_triplet_cmd.returncode() == 0 |
| target_triplet = target_triplet_cmd.stdout().strip() |
| bpf_o_unstripped_cmd += [ |
| '-isystem', |
| '/usr/include/@0@'.format(target_triplet) |
| ] |
| endif |
| endif |
| |
| bpf_o_unstripped_cmd += [ |
| '-idirafter', |
| libbpf_include_dir, |
| '@INPUT@', |
| '-o', |
| '@OUTPUT@' |
| ] |
| |
| if bpftool_strip |
| bpf_o_cmd = [ |
| bpftool, |
| 'gen', |
| 'object', |
| '@OUTPUT@', |
| '@INPUT@' |
| ] |
| elif bpf_compiler == 'clang' |
| bpf_o_cmd = [ |
| llvm_strip, |
| '-g', |
| '@INPUT@', |
| '-o', |
| '@OUTPUT@' |
| ] |
| endif |
| |
| skel_h_cmd = [ |
| bpftool, |
| 'gen', |
| 'skeleton', |
| '@INPUT@' |
| ] |