113 lines
3.0 KiB
Makefile
Executable File
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)"
|