File size: 3,697 Bytes
6afa130
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Makefile for Sovereign Stack Machine FORGE Phase 2
# Build: libsov_forge.a + tests
# Phase 1, Step 3: Sanitizer Testing with ASan/UBSan + libFuzzer

CC := gcc
CFLAGS := -std=c99 -Wall -Wextra -O2 -I.
LDFLAGS := -lm

# Sanitizer flags (Phase 1, Step 3)
SANITIZE_CFLAGS = -fsanitize=address -fsanitize=undefined -fno-sanitize-recover=all -g
SANITIZE_LDFLAGS = -fsanitize=address -fsanitize=undefined

# Source files
VERIFIER_SRCS := src/verifier/sov_verifier.c
CERT_SRCS := src/certificate/sov_cert.c
OBL_SRCS := src/obligations/sov_obligations.c
TYPE_SRCS := src/typecheck/sov_types.c

LIBRARY_SRCS := $(VERIFIER_SRCS) $(CERT_SRCS) $(OBL_SRCS) $(TYPE_SRCS)
LIBRARY_OBJS := $(LIBRARY_SRCS:.c=.o)

TEST_SRCS := tests/conformance/test_verifier.c
TEST_OBJS := $(TEST_SRCS:.c=.o)
TEST_BINS := $(TEST_SRCS:.c=)

CONFORMANCE_TESTS := tests/conformance/test_verifier.c tests/conformance/test_negative_cases.c
ADVERSARIAL_TESTS := tests/adversarial/adversarial_tests.c
NEGATIVE_TESTS := tests/conformance/test_negative_cases.c
TYPECHECK_TESTS := tests/typecheck/test_infer.c

# Targets
all: libsov_forge.a test_verifier test_infer

libsov_forge.a: $(LIBRARY_OBJS)
	ar rcs libsov_forge.a $(LIBRARY_OBJS)
	@echo "Built libsov_forge.a"

test_verifier: tests/conformance/test_verifier.o src/verifier/sov_verifier.o
	$(CC) $(CFLAGS) -o tests/conformance/test_verifier tests/conformance/test_verifier.o src/verifier/sov_verifier.o $(LDFLAGS)
	@echo "Built test_verifier"

test_infer: tests/typecheck/test_infer.o src/typecheck/sov_types.o src/obligations/sov_obligations.o
	$(CC) $(CFLAGS) -o tests/typecheck/test_infer tests/typecheck/test_infer.o src/typecheck/sov_types.o src/obligations/sov_obligations.o $(LDFLAGS)
	@echo "Built test_infer"

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

run-tests: test_verifier test_infer
	@echo "=== Running Verification Tests ==="
	./tests/conformance/test_verifier
	@echo ""
	@echo "=== Running Type Inference Tests ==="
	./tests/typecheck/test_infer

test-typecheck: test_infer
	@echo "=== Running Type Inference Tests (Phase 2) ==="
	./tests/typecheck/test_infer

# Sanitizer Testing Targets (Phase 1, Step 3)
# ============================================

# Build and run all tests with ASan + UBSan instrumentation
test-asan: build/sov_verifier_asan
	@echo "=== Running ASAN/UBSan Tests ==="
	build/sov_verifier_asan
	@echo "=== ALL TESTS PASSED WITH ASAN ==="

build/sov_verifier_asan: $(CONFORMANCE_TESTS) src/verifier/sov_verifier.c
	@mkdir -p build
	$(CC) $(SANITIZE_CFLAGS) $(SANITIZE_LDFLAGS) -o $@ \
		src/verifier/sov_verifier.c \
		tests/conformance/test_verifier.c \
		tests/conformance/test_negative_cases.c \
		$(LDFLAGS)
	@echo "Built sov_verifier_asan"

# Run all 46 tests (38 existing + 8 negative) with sanitizer instrumentation
check-sanitizers: test-asan
	@echo "=== Sanitizer check complete: 46/46 tests passed ==="

# Fuzzer targets
build/fuzz_verifier: tests/fuzzing/fuzz_verifier.c src/verifier/sov_verifier.c
	@mkdir -p build
	clang $(SANITIZE_CFLAGS) -fsanitize=fuzzer $(SANITIZE_LDFLAGS) -g -o $@ \
		tests/fuzzing/fuzz_verifier.c \
		src/verifier/sov_verifier.c \
		$(LDFLAGS)
	@echo "Built fuzz_verifier"

run-fuzzer: build/fuzz_verifier
	@echo "=== Running libFuzzer (10 second timeout) ==="
	build/fuzz_verifier -max_len=65536 -timeout=2 -max_total_time=10 -runs=10000 || true
	@echo "=== Fuzzer complete ==="

clean:
	rm -f $(LIBRARY_OBJS) $(TEST_OBJS) libsov_forge.a test_verifier test_infer
	rm -f tests/conformance/*.o tests/typecheck/*.o
	rm -rf build/

.PHONY: all run-tests test-typecheck test-asan check-sanitizers run-fuzzer clean