You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

175 lines
4.4 KiB

# Zapret eBPF Makefile
# eBPF implementation for DPI evasion
# Compiler and tools
CC := clang
LLC := llc
OPT := opt
DIS := llvm-dis
OBJDUMP := llvm-objdump
STRIP := llvm-strip
# Directories
SRC_DIR := src
LOADER_DIR := loader
INCLUDE_DIR := include
LIBBPF_DIR := libbpf
BUILD_DIR := build
OBJ_DIR := $(BUILD_DIR)/obj
BIN_DIR := $(BUILD_DIR)/bin
# Platform detection
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
PLATFORM := linux
EBPF_SUPPORTED := yes
CFLAGS := -O2 -g -Wall -Wextra
EBPF_CFLAGS := -O2 -g -target bpf -D__TARGET_ARCH_x86_64 -D__KERNEL__ -D__ASM_SYSREG_H
INCLUDES := -I$(INCLUDE_DIR) -I$(LIBBPF_DIR)/src -I/usr/include
LDFLAGS := -L$(LIBBPF_DIR)/src -lbpf -lelf -lz
else ifeq ($(UNAME_S),Darwin)
PLATFORM := macos
EBPF_SUPPORTED := no
CFLAGS := -O2 -g -Wall -Wextra -D__APPLE__ -D__MACH__ -DMACOS_BUILD
EBPF_CFLAGS := -O2 -g -D__APPLE__ -D__MACH__ -DMACOS_BUILD
INCLUDES := -I$(INCLUDE_DIR) -I/usr/local/include
LDFLAGS := -L/usr/local/lib
else
PLATFORM := unknown
EBPF_SUPPORTED := no
CFLAGS := -O2 -g -Wall -Wextra
EBPF_CFLAGS := -O2 -g
INCLUDES := -I$(INCLUDE_DIR)
LDFLAGS :=
endif
# Legacy compatibility
LLVM_STRIP ?= $(STRIP)
CLANG ?= $(CC)
LIBBPF_OBJ = $(LIBBPF_DIR)/src/libbpf.a
BPF_CFLAGS = $(EBPF_CFLAGS)
# eBPF program sources
EBPF_SRCS = src/zapret_filter.bpf.c \
src/tls_fingerprint.bpf.c \
src/quic_filter.bpf.c \
src/packet_fragment.bpf.c \
src/sni_encrypt.bpf.c
# eBPF object files
EBPF_OBJS = $(EBPF_SRCS:.bpf.c=.bpf.o)
# User-space loader sources
LOADER_SRCS = loader/zapret_loader.c \
loader/ebpf_manager.c \
loader/performance_monitor.c
# User-space loader objects
LOADER_OBJS = $(LOADER_SRCS:.c=.o)
# Target executables
TARGETS = zapret_ebpf_loader
.PHONY: all clean install libbpf ebpf_programs user_space demo
ifeq ($(EBPF_SUPPORTED),yes)
all: libbpf $(TARGETS)
@echo "Build complete for $(PLATFORM) platform with eBPF support"
else
all: demo
@echo "Build complete for $(PLATFORM) platform (demo mode - no eBPF support)"
endif
# Build libbpf (Linux only)
ifeq ($(EBPF_SUPPORTED),yes)
libbpf: $(LIBBPF_OBJ)
$(LIBBPF_OBJ):
@if [ ! -d "$(LIBBPF_DIR)" ]; then \
echo "Cloning libbpf..."; \
git clone --depth 1 https://github.com/libbpf/libbpf.git $(LIBBPF_DIR); \
fi
$(MAKE) -C $(LIBBPF_DIR)/src
else
libbpf:
@echo "SKIP libbpf (not supported on $(PLATFORM))"
$(LIBBPF_OBJ):
@touch $@
endif
# Compile eBPF programs (Linux only)
ifeq ($(EBPF_SUPPORTED),yes)
%.bpf.o: %.bpf.c
$(CLANG) $(BPF_CFLAGS) $(INCLUDES) -c $< -o $@
$(LLVM_STRIP) -g $@
else
%.bpf.o: %.bpf.c
@echo "SKIP $@ (eBPF not supported on $(PLATFORM))"
@touch $@
endif
# Compile user-space loader
%.o: %.c
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
# Link the main loader
ifeq ($(EBPF_SUPPORTED),yes)
zapret_ebpf_loader: $(EBPF_OBJS) $(LOADER_OBJS) $(LIBBPF_OBJ)
$(CC) $(CFLAGS) $(LOADER_OBJS) $(LIBBPF_OBJ) -lelf -lz -o $@
else
zapret_ebpf_loader: $(LOADER_OBJS)
$(CC) $(CFLAGS) $(LOADER_OBJS) $(LDFLAGS) -DDEMO_MODE -o $@
endif
# Demo target for non-Linux platforms
demo: zapret_demo
zapret_demo:
@echo "CC zapret_demo (demo mode)"
@echo '#include <stdio.h>' > demo.c
@echo 'int main() { printf("Zapret demo for $(PLATFORM)\\n"); return 0; }' >> demo.c
@$(CC) $(CFLAGS) demo.c -o zapret_demo
@rm -f demo.c
install: all
cp $(TARGETS) /usr/local/bin/
cp $(EBPF_OBJS) /usr/local/share/zapret/ebpf/
clean:
rm -f $(EBPF_OBJS) $(LOADER_OBJS) $(TARGETS)
@if [ -d "$(LIBBPF_DIR)" ]; then \
$(MAKE) -C $(LIBBPF_DIR)/src clean; \
fi
distclean: clean
rm -rf $(LIBBPF_DIR)
# Development targets
format:
clang-format -i $(LOADER_SRCS) include/*.h
check:
@echo "Checking eBPF programs..."
@for prog in $(EBPF_OBJS); do \
echo "Verifying $$prog"; \
bpftool prog load $$prog /sys/fs/bpf/test_$$prog 2>/dev/null && \
bpftool prog del pinned /sys/fs/bpf/test_$$prog || true; \
done
# macOS target
mac: demo
@echo "macOS build completed (demo mode)"
# Help target
help:
@echo "Available targets:"
@echo " all - Build all eBPF programs and loader"
@echo " mac - Build for macOS (demo mode)"
@echo " libbpf - Build libbpf dependency"
@echo " install - Install binaries to system"
@echo " clean - Clean build artifacts"
@echo " distclean - Clean everything including dependencies"
@echo " format - Format source code"
@echo " check - Verify eBPF programs"
@echo " help - Show this help"