Skip to content

Makefile

# QR-NSP Volcanic Edition — Build System
# Module 1: XDP QUIC Interceptor
# Module 2: ML-KEM-1024 + X25519 Hybrid KEM
#
# Prerequisites:
#   apt install clang llvm libbpf-dev linux-headers-$(uname -r) libelf-dev zlib1g-dev
#   (Kernel 5.8+ for BPF_MAP_TYPE_RINGBUF)

CC       = gcc
CLANG    = clang
LLC      = llc

# Flags
CFLAGS   = -O2 -Wall -Wextra -march=native -I include
LDFLAGS_DAEMON = -lbpf -lelf -lz

# BPF compilation flags
BPF_CFLAGS = -O2 -target bpf -D__TARGET_ARCH_x86 \
             -I include \
             -I /usr/include/$(shell uname -m)-linux-gnu \
             -Wno-compare-distinct-pointer-types

# Output
BUILD_DIR = build
XDP_OBJ   = $(BUILD_DIR)/qrnsp_xdp.o
DAEMON    = $(BUILD_DIR)/qrnsp-daemon
TEST_CRYPTO = $(BUILD_DIR)/test_crypto

# ── Crypto sources ──
CRYPTO_SRCS = src/crypto/ntt.c src/crypto/poly.c src/crypto/symmetric.c \
              src/crypto/kem.c src/crypto/hybrid_kem.c
AEAD_SRCS   = src/aead/aes256gcm.c
STEGO_SRCS  = src/stego/inject.c
JITTER_SRCS = src/jitter/jitter.c
DENIABLE_SRCS = src/deniable/deniable.c
FALLBACK_SRCS = src/fallback/fallback.c
MORPH_SRCS    = src/morph/morph.c
ORCH_SRCS     = src/orchestrator/orchestrator.c

ALL_SRCS = $(CRYPTO_SRCS) $(AEAD_SRCS) $(STEGO_SRCS) $(JITTER_SRCS) \
           $(DENIABLE_SRCS) $(FALLBACK_SRCS) $(MORPH_SRCS) $(ORCH_SRCS)

.PHONY: all clean xdp daemon crypto stego jitter deniable pipeline test help

all: $(BUILD_DIR) xdp daemon crypto stego jitter deniable pipeline

$(BUILD_DIR):
    mkdir -p $(BUILD_DIR)

# ── XDP BPF object ──
xdp: $(BUILD_DIR) $(XDP_OBJ)

$(XDP_OBJ): src/xdp/qrnsp_xdp.c include/qrnsp.h
    $(CLANG) $(BPF_CFLAGS) -c $< -o $@
    @echo "  [BPF] $@"

# ── Userspace daemon ──
daemon: $(BUILD_DIR) $(DAEMON)

$(DAEMON): src/daemon/daemon.c include/qrnsp.h
    $(CC) $(CFLAGS) $< -o $@ $(LDFLAGS_DAEMON)
    @echo "  [CC]  $@"

# ── Crypto test ──
crypto: $(BUILD_DIR) $(TEST_CRYPTO)

$(TEST_CRYPTO): tests/test_crypto.c $(CRYPTO_SRCS) include/mlkem_params.h include/qrnsp_crypto.h
    $(CC) $(CFLAGS) tests/test_crypto.c $(CRYPTO_SRCS) -o $@
    @echo "  [CC]  $@"

# ── Stego pipeline test ──
stego: $(BUILD_DIR) $(BUILD_DIR)/test_stego

$(BUILD_DIR)/test_stego: tests/test_stego.c $(CRYPTO_SRCS) $(AEAD_SRCS) $(STEGO_SRCS) \
                         include/qrnsp_stego.h include/qrnsp_aead.h
    $(CC) $(CFLAGS) tests/test_stego.c $(CRYPTO_SRCS) $(AEAD_SRCS) $(STEGO_SRCS) -o $@
    @echo "  [CC]  $@"

# ── Run tests ──
test: crypto stego jitter deniable pipeline
    ./$(TEST_CRYPTO)
    ./$(BUILD_DIR)/test_stego
    ./$(BUILD_DIR)/test_jitter
    ./$(BUILD_DIR)/test_deniable
    ./$(BUILD_DIR)/test_pipeline

test-stego: stego
    ./$(BUILD_DIR)/test_stego

test-jitter: jitter
    ./$(BUILD_DIR)/test_jitter

test-deniable: deniable
    ./$(BUILD_DIR)/test_deniable

test-pipeline: pipeline
    ./$(BUILD_DIR)/test_pipeline

# ── Jitter channel test ──
jitter: $(BUILD_DIR) $(BUILD_DIR)/test_jitter

$(BUILD_DIR)/test_jitter: tests/test_jitter.c $(JITTER_SRCS) src/crypto/symmetric.c \
                          include/qrnsp_jitter.h
    $(CC) $(CFLAGS) tests/test_jitter.c $(JITTER_SRCS) src/crypto/symmetric.c -o $@ -lm
    @echo "  [CC]  $@"

# ── Deniable encryption test ──
deniable: $(BUILD_DIR) $(BUILD_DIR)/test_deniable

$(BUILD_DIR)/test_deniable: tests/test_deniable.c $(DENIABLE_SRCS) $(AEAD_SRCS) \
                            src/crypto/symmetric.c include/qrnsp_deniable.h
    $(CC) $(CFLAGS) tests/test_deniable.c $(DENIABLE_SRCS) $(AEAD_SRCS) src/crypto/symmetric.c -o $@
    @echo "  [CC]  $@"

# ── Full pipeline test (Modules 6-8) ──
pipeline: $(BUILD_DIR) $(BUILD_DIR)/test_pipeline

$(BUILD_DIR)/test_pipeline: tests/test_pipeline.c $(ALL_SRCS)
    $(CC) $(CFLAGS) tests/test_pipeline.c $(ALL_SRCS) -o $@ -lm
    @echo "  [CC]  $@"

# ── Clean ──
clean:
    rm -rf $(BUILD_DIR)

# ── Help ──
help:
    @echo "QR-NSP Build Targets:"
    @echo "  make all            Build everything"
    @echo "  make xdp            Build XDP BPF object"
    @echo "  make daemon         Build userspace daemon"
    @echo "  make crypto         Build ML-KEM + X25519 test"
    @echo "  make stego          Build PADDING injection test"
    @echo "  make jitter         Build timing channel test"
    @echo "  make deniable       Build deniable encryption test"
    @echo "  make pipeline       Build full pipeline test (M6-8)"
    @echo "  make test           Run ALL tests"
    @echo "  make clean          Remove build artifacts"