Initial commit
This commit is contained in:
112
Makefile
Executable file
112
Makefile
Executable file
@ -0,0 +1,112 @@
|
||||
# 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)"
|
||||
Reference in New Issue
Block a user