diff --git a/meson.build b/meson.build index 6e3728c286b..40db638ceba 100644 --- a/meson.build +++ b/meson.build @@ -1966,6 +1966,118 @@ pymod = import('python') python = pymod.find_installation('python3', required : true, modules : ['jinja2']) python_39 = python.language_version().version_compare('>=3.9') +############################################################ + +if conf.get('BPF_FRAMEWORK') == 1 + 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 ____. + # 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@' + ] +endif + ##################################################################### efi_arch = { diff --git a/src/core/bpf/meson.build b/src/core/bpf/meson.build deleted file mode 100644 index ea9539bc476..00000000000 --- a/src/core/bpf/meson.build +++ /dev/null @@ -1,113 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later - -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 ____. -# 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@' -] diff --git a/src/core/meson.build b/src/core/meson.build index af3eaa52d2b..1a1b8b310d6 100644 --- a/src/core/meson.build +++ b/src/core/meson.build @@ -74,18 +74,15 @@ if conf.get('BPF_FRAMEWORK') == 1 ) endif -subdir('bpf') - subdir('bpf/socket_bind') -if conf.get('BPF_FRAMEWORK') == 1 - libcore_sources += [socket_bind_skel_h] - subdir('bpf/restrict_fs') - libcore_sources += [restrict_fs_skel_h] -endif - +subdir('bpf/restrict_fs') subdir('bpf/restrict_ifaces') + if conf.get('BPF_FRAMEWORK') == 1 - libcore_sources += [restrict_ifaces_skel_h] + libcore_sources += [ + socket_bind_skel_h, + restrict_fs_skel_h, + restrict_ifaces_skel_h] endif load_fragment_gperf_gperf = custom_target(