summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile116
1 files changed, 61 insertions, 55 deletions
diff --git a/Makefile b/Makefile
index cf73f0a..66066d2 100644
--- a/Makefile
+++ b/Makefile
@@ -17,7 +17,7 @@ MANDIR = $(SHAREDIR)/man
EXEC = ./
## Where to store the installation. Empty by default.
DESTDIR =
-LDLIBS = -lsqlite3
+LDLIBS = --static -lscrypt-kdf -lsqlite3 -lm
GOCFLAGS = -I $(GOLIBDIR)
GOLDFLAGS = -L $(GOLIBDIR)
@@ -26,17 +26,26 @@ GOLDFLAGS = -L $(GOLIBDIR)
.SUFFIXES:
.SUFFIXES: .go .a .bin .bin-check
+.go.a:
+ go tool compile $(GOCFLAGS) -I $(@D) -o $@ -p $(*F) \
+ `find $< $$(if [ $(*F) != main ]; then \
+ echo src/$(NAME).go src/version.go; fi) | uniq`
+
+.a.bin:
+ go tool link $(GOLDFLAGS) -L $(@D) -o $@ --extldflags '$(LDLIBS)' $<
+
all:
include deps.mk
-objects = \
- src/$(NAME).a \
- src/main.a \
- tests/$(NAME).a \
- tests/main.a \
+libs.a = $(libs.go:.go=.a)
+mains.a = $(mains.go:.go=.a)
+mains.bin = $(mains.go:.go=.bin)
+functional-tests/lib.a = $(functional-tests/lib.go:.go=.a)
+fuzz-targets/lib.a = $(fuzz-targets/lib.go:.go=.a)
+benchmarks/lib.a = $(benchmarks/lib.go:.go=.a)
sources = \
src/$(NAME).go \
@@ -46,17 +55,18 @@ sources = \
derived-assets = \
src/version.go \
- $(objects) \
- src/main.bin \
- tests/main.bin \
+ $(libs.a) \
+ $(mains.a) \
+ $(mains.bin) \
$(NAME).bin \
side-assets = \
- papod.db \
- papod.public.socket \
- papod.command.socket \
- wscat.socket \
- glaze.socket \
+ $(NAME).db* \
+ tests/functional/*/*.go.db* \
+ tests/fuzz/corpus/ \
+ tests/benchmarks/*/main.txt \
+ $(NAME).public.socket \
+ $(NAME).command.socket \
@@ -65,40 +75,35 @@ side-assets = \
all: $(derived-assets)
-$(objects): Makefile
-
-src/$(NAME).a: src/$(NAME).go src/version.go
- go tool compile $(GOCFLAGS) -o $@ -p $(*F) -I $(@D) $*.go src/version.go
+$(libs.a): Makefile deps.mk
+$(libs.a): src/$(NAME).go src/version.go
-src/main.a: src/main.go src/$(NAME).a
-tests/main.a: tests/main.go tests/$(NAME).a
-src/main.a tests/main.a:
- go tool compile $(GOCFLAGS) -o $@ -p $(*F) -I $(@D) $*.go
-tests/$(NAME).a: tests/$(NAME).go src/$(NAME).go src/version.go
- go tool compile $(GOCFLAGS) -o $@ -p $(*F) $*.go src/$(*F).go src/version.go
+$(fuzz-targets/lib.a):
+ go tool compile $(GOCFLAGS) -o $@ -p $(NAME) -d=libfuzzer \
+ $*.go src/$(NAME).go src/version.go
-src/main.bin: src/main.a
-tests/main.bin: tests/main.a
-src/main.bin tests/main.bin:
- go tool link $(GOLDFLAGS) -o $@ -L $(@D) --extldflags '$(LDLIBS)' $*.a
+src/version.go: Makefile
+ echo 'package $(NAME); const Version = "$(VERSION)"' > $@
$(NAME).bin: src/main.bin
ln -fs $? $@
-src/version.go: Makefile
- echo 'package $(NAME); const Version = "$(VERSION)"' > $@
+.PRECIOUS: tests/queries.sql
+tests/queries.sql: tests/main.bin ALWAYS
+ env TESTING_DUMP_SQL_QUERIES=1 $(EXEC)tests/main.bin | diff -U10 $@ -
tests.bin-check = \
- tests/main.bin-check \
+ tests/main.bin-check \
+ $(functional-tests/main.go:.go=.bin-check) \
-tests/main.bin-check: tests/main.bin
$(tests.bin-check):
$(EXEC)$*.bin
check-unit: $(tests.bin-check)
+check-unit: tests/queries.sql
integration-tests = \
@@ -111,6 +116,7 @@ $(integration-tests): ALWAYS
sh $@
check-integration: $(integration-tests)
+check-integration: fuzz
## Run all tests. Each test suite is isolated, so that a parallel
@@ -120,6 +126,26 @@ check: check-unit check-integration
+FUZZSEC=1
+fuzz-targets/main.bin-check = $(fuzz-targets/main.go:.go=.bin-check)
+$(fuzz-targets/main.bin-check):
+ $(EXEC)$*.bin --test.fuzztime=$(FUZZSEC)s \
+ --test.fuzz='.*' --test.fuzzcachedir=tests/fuzz/corpus
+
+fuzz: $(fuzz-targets/main.bin-check)
+
+
+
+benchmarks/main.bin-check = $(benchmarks/main.go:.go=.bin-check)
+$(benchmarks/main.bin-check):
+ printf '%s\n' '$(EXEC)$*.bin' > $*.txt
+ LANG=POSIX.UTF-8 time -p $(EXEC)$*.bin 2>> $*.txt
+ printf '%s\n' '$*.txt'
+
+bench: $(benchmarks/main.bin-check)
+
+
+
## Remove *all* derived artifacts produced during the build.
## A dedicated test asserts that this is always true.
clean:
@@ -148,30 +174,10 @@ uninstall:
'$(DESTDIR)$(SRCDIR)' \
-run-papod: $(NAME).bin
- rm -f papod.public.socket papod.command.socket
- ./$(NAME).bin
-
-run-wscat:
- rm -f wscat.socket
- wscat wscat.socket papod.public.socket
-
-run-glaze:
- rm -f glaze.socket
- glaze -P '/api/socket:wscat.socket' -P '*:src/static/' glaze.socket
-
-run-binder-web:
- binder localhost:4443 glaze.socket
-
-run-binder-ircd:
- binder localhost:6667 papod.public.socket
-
-## Run it locally, alongside its helper programs.
+## Run it locally.
run: all
- for c in wscat papod binder-web binder-ircd glaze; do \
- $(MAKE) run-$$c & \
- done; \
- wait
+ rm -f $(NAME).public.socket $(NAME).command.socket
+ ./$(NAME).bin
ALWAYS: