summaryrefslogtreecommitdiff
path: root/Makefile
blob: ddf1e05b2acf936f3b18d29c21c46b919a8ac76f (plain)
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
PREFIX?=..
BINDIR?=$(PREFIX)/bin
STRIP?=strip

#FEATURES+=-DWANT_V4_ONLY
#FEATURES+=-DWANT_ACCESSLIST_BLACK
#FEATURES+=-DWANT_ACCESSLIST_WHITE
#FEATURES+=-DWANT_DYNAMIC_ACCESSLIST

#FEATURES+=-DWANT_SYNC_LIVE
#FEATURES+=-DWANT_IP_FROM_QUERY_STRING

#FEATURES+=-DWANT_RESTRICT_STATS
#FEATURES+=-DWANT_IP_FROM_PROXY
#FEATURES+=-DWANT_LOG_NUMWANT
#FEATURES+=-DWANT_MODEST_FULLSCRAPES
#FEATURES+=-DWANT_SPOT_WOODPECKER
#FEATURES+=-DWANT_SYSLOGS
#FEATURES+=-DWANT_DEV_RANDOM
FEATURES+=-DWANT_FULLSCRAPE

#FEATURES+=-D_DEBUG_HTTPERROR
#FEATURES+=-D_DEBUG_RANDOMTORRENTS

# Compression support, off unless included. Each file carries a second switch
# to compress even where the client did not ask.
include Mk/gzip.mk
#include Mk/zstd.mk

# arc4random is part of libc on the BSDs, on macOS and on glibc 2.36 and
# newer. On an older glibc or on musl it comes from libbsd instead.
#OT_LDLIBS+=-lbsd

CFLAGS?=-O3

# What the build requires, whatever you do to those.
OT_CFLAGS+=-Wall -Wextra -Wwrite-strings -pipe -pthread
OT_LDFLAGS+=-pthread

OPTS_debug=-D_DEBUG -g -ggdb

COMPILE=$(CPPFLAGS) $(OT_CFLAGS) $(FEATURES)
LINK=$(LDFLAGS) $(OT_LDFLAGS) $(LDLIBS) $(OT_LDLIBS)

BINARY=opentracker
HEADERS=trackerlogic.h ot_urlencoded.h ot_batch.h ot_buf.h ot_event.h ot_fdstate.h ot_fmt.h ot_hex.h ot_ip.h ot_config.h ot_scan.h ot_socket.h ot_tcp.h ot_worker.h ot_workqueue.h ot_mutex.h ot_random.h ot_stats.h ot_vector.h ot_clean.h ot_udp.h ot_iovec.h ot_fullscrape.h ot_accesslist.h ot_http.h ot_livesync.h ot_rijndael.h
SOURCES=opentracker.c trackerlogic.c ot_urlencoded.c ot_batch.c ot_buf.c ot_event.c ot_fdstate.c ot_fmt.c ot_hex.c ot_ip.c ot_config.c ot_scan.c ot_socket.c ot_tcp.c ot_worker.c ot_workqueue.c ot_mutex.c ot_random.c ot_stats.c ot_vector.c ot_clean.c ot_udp.c ot_iovec.c ot_fullscrape.c ot_accesslist.c ot_http.c ot_livesync.c ot_rijndael.c
BINARIES=$(BINARY) $(BINARY).debug

# Everything is built in one go from sources, so there are no object files to
# carry a flag change over into the next build. The stamp holds the flags the
# last build used, which covers FEATURES passed in the environment and a moved
# HEAD. It is only written when they differ.
BUILDSTAMP=.buildstamp
BUILDDEPS=Makefile $(BUILDSTAMP)

all: $(BINARY) $(BINARY).debug

$(BINARY): $(SOURCES) $(HEADERS) $(BUILDDEPS)
	$(CC) -o $@ $(CFLAGS) $(COMPILE) $(SOURCES) $(LINK)
	$(STRIP) $@

$(BINARY).debug: $(SOURCES) $(HEADERS) $(BUILDDEPS)
	$(CC) -o $@ $(OPTS_debug) $(COMPILE) $(SOURCES) $(LINK)

$(BUILDSTAMP): FORCE
	@echo "$(CFLAGS) $(COMPILE) $(LINK)" | cmp -s - $@ 2>/dev/null || echo "$(CFLAGS) $(COMPILE) $(LINK)" > $@

clean:
	rm -rf $(BINARIES) $(BINARIES:=.dSYM) $(BUILDSTAMP) *.o *~

install:
	install -m 755 $(BINARY) $(DESTDIR)$(BINDIR)

FORCE:

.PHONY: all clean install FORCE

include Mk/tests.mk
include Mk/release.mk
include Mk/proxy.mk