Files
ebpf-kit/Makefile
2026-04-01 18:16:49 +05:30

113 lines
3.0 KiB
Makefile
Executable File

# SPDX-License-Identifier: MIT
#
# Makefile for eBPF Port Knocking Programs
# Supports both Linux (using libbpf) and Windows eBPF (using eBPF for Windows)
#
# Detect platform
ifeq ($(OS),Windows_NT)
PLATFORM := windows
EBPF_SDK_DIR := C:/Users/vagrant/Downloads/ebpf-for-windows
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
PLATFORM := linux
EBPF_SDK_DIR := /home/tlh/VMs/ebpf-for-windows
else
$(error Unsupported platform: $(UNAME_S))
endif
endif
# Directories
SRC_DIR := .
OUT_DIR := out
INCLUDE_DIR := include
# Toolchain
CLANG := clang
# Output files
BPF_OBJ_LINUX := $(OUT_DIR)/port_knock_linux.o
BPF_OBJ_WINDOWS := $(OUT_DIR)/port_knock.o
# Compiler flags
COMMON_FLAGS := -Wall -Wextra -Wno-unused-value -O2 -g
# Linux-specific flags
LINUX_CFLAGS := -D__TARGET_ARCH_x86 -D__LINUX_BPF__ $(COMMON_FLAGS)
LINUX_INCLUDES := -I/usr/include/bpf -I/usr/include -I$(INCLUDE_DIR)
# Windows-specific flags
# Point to eBPF for Windows SDK headers
WINDOWS_CFLAGS := -D_WIN32 $(COMMON_FLAGS)
WINDOWS_INCLUDES := -I$(INCLUDE_DIR) -I$(EBPF_SDK_DIR)/include -I$(EBPF_SDK_DIR)/tests/include
.PHONY: all clean build-linux build-windows make-windows help
# Default target - show help
all: help
# Linux build
build-linux: $(BPF_OBJ_LINUX)
make-windows: $(BPF_OBJ_WINDOWS)
$(OUT_DIR):
mkdir -p $(OUT_DIR)
$(BPF_OBJ_LINUX): $(SRC_DIR)/port_knock.c $(INCLUDE_DIR)/common.h | $(OUT_DIR)
@echo "=== Building eBPF for Linux ==="
$(CLANG) $(LINUX_CFLAGS) $(LINUX_INCLUDES) \
-target bpf \
-D__BPF_TRACING__ \
-c $< -o $@
@echo "Built: $@"
@echo " Sections: $$(bpftool prog show $$@ 2>/dev/null || echo ' (use bpftool to inspect)')"
# Windows build (using eBPF for Windows)
build-windows: $(BPF_OBJ_WINDOWS)
$(BPF_OBJ_WINDOWS): $(SRC_DIR)/port_knock.c $(INCLUDE_DIR)/common.h | $(OUT_DIR)
@echo "=== Building eBPF for Windows ==="
$(CLANG) $(WINDOWS_CFLAGS) $(WINDOWS_INCLUDES) \
-target bpf \
-c $< -o $@
@echo "Built: $@"
# Verify program
verify: $(BPF_OBJ_LINUX)
@echo "=== Verifying eBPF program ==="
@bpftool prog show $(BPF_OBJ_LINUX) 2>/dev/null || echo "Use bpftool to verify"
# Show sections
show-sections: $(BPF_OBJ_LINUX)
@bpftool prog show $(BPF_OBJ_LINUX)
# Show disassembly
show-disasm: $(BPF_OBJ_LINUX)
@bpftool prog disasm $(BPF_OBJ_LINUX)
# Clean
clean:
rm -rf $(OUT_DIR)
# Help
help:
@echo "eBPF Port Knocking Program - Build System"
@echo ""
@echo "Targets:"
@echo " build-linux Build for Linux eBPF (using libbpf/aya)"
@echo " build-windows Build for Windows eBPF (using eBPF for Windows)"
@echo " verify Verify the compiled program"
@echo " show-sections Show eBPF program sections"
@echo " show-disasm Show disassembly of the program"
@echo " clean Remove build artifacts"
@echo ""
@echo "Usage:"
@echo " Linux: make build-linux"
@echo " Windows: make build-windows"
@echo ""
@echo "Prerequisites:"
@echo " Linux: clang, libbpf, bpftool"
@echo " Windows: clang, eBPF for Windows SDK (at Z:/ebpf-for-windows)"