Rework the build system to be more modular
Split most of the work off into make/base.mk and allow for easy wrappers to be created around that that can build with different instrumentation in their own build directory. Create wrappers for the following: - release build - debug build - afl++ fuzzing build - static analysis with clang - clang memory sanitizer - clang address/undefined sanitizer
This commit is contained in:
14
make/afl.mk
Normal file
14
make/afl.mk
Normal file
@ -0,0 +1,14 @@
|
||||
.PHONY: fuzz distclean
|
||||
|
||||
CC=afl-clang-fast
|
||||
LD=afl-clang-fast
|
||||
BUILD_DIR=build/afl/
|
||||
|
||||
-include make/base.mk
|
||||
|
||||
fuzz: $(BUILD_DIR)$(TARGET)
|
||||
mkdir -p reports/afl
|
||||
afl-fuzz -i tests/input -o reports/afl -m none -- ./$< -tokens @@
|
||||
|
||||
distclean: clean
|
||||
rm -rf reports/afl
|
9
make/analyze.mk
Normal file
9
make/analyze.mk
Normal file
@ -0,0 +1,9 @@
|
||||
BUILD_DIR=build/analyze/
|
||||
-include make/base.mk
|
||||
|
||||
analyze:
|
||||
mkdir -p reports/static-analysis
|
||||
scan-build -o reports/static-analysis/ -plist-html --status-bugs make -rRf make/analyze.mk all
|
||||
|
||||
distclean: clean
|
||||
rm -rf reports/static-analysis
|
5
make/asan.mk
Normal file
5
make/asan.mk
Normal file
@ -0,0 +1,5 @@
|
||||
CFLAGS=-Wall -Wextra -Wpedantic -O0 -g3 -std=c23 -fno-omit-frame-pointer -fno-optimize-sibling-calls -D_POSIX_C_SOURCE=200809L -fsanitize=address,undefined
|
||||
LDFLAGS=-fsanitize=address,undefined
|
||||
BUILD_DIR=build/asan/
|
||||
|
||||
-include make/base.mk
|
27
make/base.mk
Normal file
27
make/base.mk
Normal file
@ -0,0 +1,27 @@
|
||||
.PHONY: all clean
|
||||
|
||||
CC?=clang
|
||||
LD?=clang
|
||||
CFLAGS?=-Wall -Wextra -Wpedantic -O0 -g3 -std=c23 -fno-omit-frame-pointer -fno-optimize-sibling-calls -D_POSIX_C_SOURCE=200809L
|
||||
LDFLAGS?=
|
||||
BUILD_DIR?=build/debug/
|
||||
|
||||
SOURCES?=$(shell find src/ -type f -name '*.c')
|
||||
OBJECTS=$(patsubst %.c,$(BUILD_DIR)%.o,$(SOURCES))
|
||||
DEPENDENCIES=$(OBJECTS:.o=.d)
|
||||
TARGET?=oas
|
||||
|
||||
all: $(BUILD_DIR)$(TARGET)
|
||||
|
||||
|
||||
$(BUILD_DIR)$(TARGET): $(OBJECTS)
|
||||
$(LD) $(LDFLAGS) -o $@ $^
|
||||
|
||||
$(BUILD_DIR)%.o: %.c
|
||||
mkdir -p $(dir $@)
|
||||
$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
|
||||
|
||||
-include $(DEPENDENCIES)
|
||||
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR)
|
1
make/debug.mk
Normal file
1
make/debug.mk
Normal file
@ -0,0 +1 @@
|
||||
-include make/base.mk
|
5
make/msan.mk
Normal file
5
make/msan.mk
Normal file
@ -0,0 +1,5 @@
|
||||
CFLAGS=-Wall -Wextra -Wpedantic -O0 -g3 -std=c23 -fno-omit-frame-pointer -fno-optimize-sibling-calls -D_POSIX_C_SOURCE=200809L -fsanitize=memory
|
||||
LDFLAGS=-fsanitize=memory
|
||||
BUILD_DIR=build/msan/
|
||||
|
||||
-include make/base.mk
|
5
make/release.mk
Normal file
5
make/release.mk
Normal file
@ -0,0 +1,5 @@
|
||||
CFLAGS?=-Wall -Wextra -Wpedantic -O2 -std=c23 -flto -fomit-frame-pointer -DNDEBUG -D_POSIX_C_SOURCE=200809L
|
||||
LDFLAGS?=-flto -s -Wl,--gc-sections
|
||||
BUILD_DIR?=build/release/
|
||||
|
||||
-include make/base.mk
|
Reference in New Issue
Block a user