BastionGuard/thirdparty/bastionguard-secure-connection/daemon/meson.build
specialworld83 f0f913a209 Release 2.0
2026-07-15 10:52:22 +02:00

107 lines
3.8 KiB
Meson

nfqdep = dependency('libnetfilter_queue', required: false)
ssl = dependency('openssl', required: true) # MD5 per hash processo
jsondep = dependency('nlohmann_json', required: true)
threads = dependency('threads', required: true)
# ── libbpf (opzionale) ────────────────────────────────────────────────────────
# Se libbpf >= 0.7 è presente, compila con eBPF support.
# Se assente, EBPFMon.cpp compila in modalità stub no-op (BSC_HAS_EBPF non def).
libbpfdep = dependency('libbpf', required: false, version: '>= 0.7')
has_ebpf = libbpfdep.found()
ebpf_args = has_ebpf ? ['-DBSC_HAS_EBPF=1'] : []
if has_ebpf
message('eBPF support: ABILITATO (libbpf trovato)')
else
message('eBPF support: DISABILITATO (libbpf non trovato — installare libbpf-dev)')
endif
# ── Compilazione programma BPF kernel-side ────────────────────────────────────
# Richiede: clang, kernel headers con BTF (linux-headers-$(uname -r))
# Output: bsc_ebpf.o → installato in /usr/lib/bastionguard-sc/
if has_ebpf
clang = find_program('clang', required: false)
bpftool = find_program('bpftool', required: false)
if clang.found()
# Genera vmlinux.h dal BTF del kernel in esecuzione (richiede bpftool)
# Se bpftool non è disponibile usiamo il vmlinux.h precompilato nel sorgente.
vmlinux_h_dir = meson.current_source_dir() / 'ebpf'
if bpftool.found()
vmlinux_h = custom_target('vmlinux_h',
output : 'vmlinux.h',
command : [
'sh', '-c',
bpftool.full_path() + ' btf dump file /sys/kernel/btf/vmlinux format c > @OUTPUT@',
],
build_by_default : true,
)
vmlinux_dep = [vmlinux_h]
# Directory del build dove meson deposita vmlinux.h generato
vmlinux_inc = meson.current_build_dir()
else
# Fallback: il repo deve contenere un vmlinux.h precompilato in ebpf/
warning('bpftool non trovato — uso vmlinux.h precompilato in ebpf/')
vmlinux_h = []
vmlinux_dep = []
vmlinux_inc = vmlinux_h_dir
endif
bsc_ebpf_o = custom_target('bsc_ebpf_o',
input : 'ebpf/bsc_ebpf.c',
output : 'bsc_ebpf.o',
depends : vmlinux_dep,
command : [
clang,
'-O2',
'-target', 'bpf',
'-D__TARGET_ARCH_x86',
'-g',
'-Wno-missing-declarations', # forward decl interne di vmlinux.h
'-I' + vmlinux_inc,
'-I' + vmlinux_h_dir,
'-I/usr/include/bpf',
'-c', '@INPUT@',
'-o', '@OUTPUT@',
],
build_by_default : true,
install : true,
install_dir : get_option('prefix') / 'lib' / 'bastionguard-sc',
)
else
warning('clang non trovato — bsc_ebpf.o non compilato. '
+ 'eBPF attivo solo se bsc_ebpf.o precompilato è installato.')
endif
endif
cpp_sources = [
'src/main.cpp',
'src/model/Connection.cpp',
'src/logging/Logger.cpp',
'src/config/Config.cpp',
'src/rule/Rule.cpp',
'src/stats/Statistics.cpp',
'src/proc/ProcMon.cpp',
'src/net/SocketSnapshot.cpp',
'src/net/SockDiag.cpp',
'src/netlink/ProcEventMonitor.cpp',
'src/net/DnsResolver.cpp',
'src/netfilter/NFQueue.cpp',
'src/fw/Firewall.cpp',
'src/task/TaskRunner.cpp',
'src/ui/UIClient.cpp',
'src/ebpf/EBPFMon.cpp', # no-op stub se BSC_HAS_EBPF non definito
'src/service/DaemonService.cpp',
]
inc = include_directories('include')
executable('bsc-daemon',
cpp_sources,
include_directories : [inc, common_include_dir],
dependencies : [ssl, jsondep, threads, nfqdep, libbpfdep],
cpp_args : (nfqdep.found() ? ['-DBSC_HAS_NFQ=1'] : []) + ebpf_args,
install : true,
install_dir : get_option('sbindir'),
)