# 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)"