diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 104 |
1 files changed, 77 insertions, 27 deletions
| @@ -1,7 +1,5 @@ | |||
| 1 | # $Id$ | 1 | # $Id$ |
| 2 | 2 | ||
| 3 | CC?=gcc | ||
| 4 | |||
| 5 | # Linux flavour | 3 | # Linux flavour |
| 6 | # PREFIX?=/opt/diet | 4 | # PREFIX?=/opt/diet |
| 7 | # LIBOWFAT_HEADERS=$(PREFIX)/include | 5 | # LIBOWFAT_HEADERS=$(PREFIX)/include |
| @@ -18,16 +16,26 @@ LIBOWFAT_HEADERS=$(PREFIX)/libowfat | |||
| 18 | LIBOWFAT_LIBRARY=$(PREFIX)/libowfat | 16 | LIBOWFAT_LIBRARY=$(PREFIX)/libowfat |
| 19 | 17 | ||
| 20 | BINDIR?=$(PREFIX)/bin | 18 | BINDIR?=$(PREFIX)/bin |
| 19 | STRIP?=strip | ||
| 21 | 20 | ||
| 22 | #FEATURES+=-DWANT_V6 | 21 | #FEATURES+=-DWANT_V4_ONLY |
| 23 | |||
| 24 | #FEATURES+=-DWANT_ACCESSLIST_BLACK | 22 | #FEATURES+=-DWANT_ACCESSLIST_BLACK |
| 25 | #FEATURES+=-DWANT_ACCESSLIST_WHITE | 23 | #FEATURES+=-DWANT_ACCESSLIST_WHITE |
| 24 | #FEATURES+=-DWANT_DYNAMIC_ACCESSLIST | ||
| 26 | 25 | ||
| 27 | #FEATURES+=-DWANT_SYNC_LIVE | 26 | #FEATURES+=-DWANT_SYNC_LIVE |
| 28 | #FEATURES+=-DWANT_IP_FROM_QUERY_STRING | 27 | #FEATURES+=-DWANT_IP_FROM_QUERY_STRING |
| 29 | #FEATURES+=-DWANT_COMPRESSION_GZIP | 28 | |
| 30 | #FEATURES+=-DWANT_COMPRESSION_GZIP_ALWAYS | 29 | # If you want gzip support to be compiled in, uncomment the next include. |
| 30 | # You can further modify the behaviour by setting DWANT_COMPRESSION_GZIP_ALWAYS | ||
| 31 | # in Makefile.gzip | ||
| 32 | include Makefile.gzip | ||
| 33 | |||
| 34 | # If you want zstd support to be compiled in, uncomment the next include. | ||
| 35 | # You can further modify the behaviour by setting DWANT_COMPRESSION_ZSTD_ALWAYS | ||
| 36 | # in Makefile.zstd | ||
| 37 | #include Makefile.zstd | ||
| 38 | |||
| 31 | #FEATURES+=-DWANT_LOG_NETWORKS | 39 | #FEATURES+=-DWANT_LOG_NETWORKS |
| 32 | #FEATURES+=-DWANT_RESTRICT_STATS | 40 | #FEATURES+=-DWANT_RESTRICT_STATS |
| 33 | #FEATURES+=-DWANT_IP_FROM_PROXY | 41 | #FEATURES+=-DWANT_IP_FROM_PROXY |
| @@ -39,54 +47,96 @@ BINDIR?=$(PREFIX)/bin | |||
| 39 | #FEATURES+=-DWANT_DEV_RANDOM | 47 | #FEATURES+=-DWANT_DEV_RANDOM |
| 40 | FEATURES+=-DWANT_FULLSCRAPE | 48 | FEATURES+=-DWANT_FULLSCRAPE |
| 41 | 49 | ||
| 42 | # Is enabled on BSD systems by default in trackerlogic.h | 50 | # You need libowfat version 0.34 to allow for automatic release of chunks during |
| 43 | # on Linux systems you will need -lbds | 51 | # full scrape transfer, if you rely on an older versions, enable this flag |
| 44 | #FEATURES+=-DWANT_ARC4RANDOM | 52 | #FEATURES+=-DWANT_NO_AUTO_FREE |
| 53 | |||
| 54 | # opentracker takes its randomness from arc4random, which is part of libc on | ||
| 55 | # the BSDs, on macOS and on glibc 2.36 and newer. On an older glibc or on musl | ||
| 56 | # it comes from libbsd instead, so uncomment the next include to link it. | ||
| 57 | #LDFLAGS+=-lbsd | ||
| 45 | 58 | ||
| 46 | #FEATURES+=-D_DEBUG_HTTPERROR | 59 | #FEATURES+=-D_DEBUG_HTTPERROR |
| 60 | #FEATURES+=-D_DEBUG_RANDOMTORRENTS | ||
| 61 | |||
| 62 | GIT_VERSION=`sh -c 'command -v git >/dev/null && test -d .git && git rev-parse HEAD || echo _git_or_commit_not_found_'` | ||
| 47 | 63 | ||
| 48 | OPTS_debug=-D_DEBUG -g -ggdb # -pg -fprofile-arcs -ftest-coverage | 64 | OPTS_debug=-D_DEBUG -g -ggdb # -pg -fprofile-arcs -ftest-coverage |
| 49 | OPTS_production=-O3 | 65 | OPTS_production=-O3 |
| 50 | 66 | ||
| 51 | CFLAGS+=-I$(LIBOWFAT_HEADERS) -Wall -pipe -Wextra #-ansi -pedantic | 67 | CFLAGS+=-I$(LIBOWFAT_HEADERS) -DGIT_VERSION=$(GIT_VERSION) -Wall -pipe -pthread -Wextra #-ansi -pedantic |
| 52 | LDFLAGS+=-L$(LIBOWFAT_LIBRARY) -lowfat -pthread -lpthread -lz | 68 | LDFLAGS+=-L$(LIBOWFAT_LIBRARY) -lowfat -pthread |
| 53 | #LDFLAGS+=-lbsd | ||
| 54 | 69 | ||
| 55 | BINARY =opentracker | 70 | BINARY =opentracker |
| 56 | HEADERS=trackerlogic.h scan_urlencoded_query.h ot_mutex.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 | 71 | HEADERS=trackerlogic.h scan_urlencoded_query.h ot_buf.h ot_hex.h ot_ip.h ot_scan.h ot_socket.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 |
| 57 | SOURCES=opentracker.c trackerlogic.c scan_urlencoded_query.c ot_mutex.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 | 72 | SOURCES=opentracker.c trackerlogic.c scan_urlencoded_query.c ot_buf.c ot_hex.c ot_ip.c ot_scan.c ot_socket.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 |
| 58 | SOURCES_proxy=proxy.c ot_vector.c ot_mutex.c | 73 | SOURCES_proxy=proxy.c ot_vector.c ot_mutex.c ot_random.c ot_scan.c ot_ip.c ot_socket.c |
| 59 | 74 | ||
| 60 | OBJECTS = $(SOURCES:%.c=%.o) | 75 | OBJECTS = $(SOURCES:%.c=%.o) |
| 61 | OBJECTS_debug = $(SOURCES:%.c=%.debug.o) | 76 | OBJECTS_debug = $(SOURCES:%.c=%.debug.o) |
| 62 | OBJECTS_proxy = $(SOURCES_proxy:%.c=%.o) | 77 | OBJECTS_proxy = $(SOURCES_proxy:%.c=%.proxy.o) |
| 63 | OBJECTS_proxy_debug = $(SOURCES_proxy:%.c=%.debug.o) | 78 | OBJECTS_proxy_debug = $(SOURCES_proxy:%.c=%.proxy.debug.o) |
| 64 | 79 | ||
| 65 | .SUFFIXES: .debug.o .o .c | 80 | .SUFFIXES: .proxy.debug.o .proxy.o .debug.o .o .c |
| 66 | 81 | ||
| 67 | all: $(BINARY) $(BINARY).debug | 82 | all: $(BINARY) $(BINARY).debug |
| 68 | 83 | ||
| 69 | CFLAGS_production = $(CFLAGS) $(OPTS_production) $(FEATURES) | 84 | CFLAGS_production = $(CFLAGS) $(OPTS_production) $(FEATURES) |
| 70 | CFLAGS_debug = $(CFLAGS) $(OPTS_debug) $(FEATURES) | 85 | CFLAGS_debug = $(CFLAGS) $(OPTS_debug) $(FEATURES) |
| 71 | 86 | ||
| 72 | $(BINARY): $(OBJECTS) $(HEADERS) | 87 | CFLAGS_proxy = $(CFLAGS_production) -DWANT_SYNC_LIVE |
| 88 | CFLAGS_proxy_debug = $(CFLAGS_debug) -DWANT_SYNC_LIVE | ||
| 89 | |||
| 90 | $(BINARY): $(OBJECTS) | ||
| 73 | $(CC) -o $@ $(OBJECTS) $(LDFLAGS) | 91 | $(CC) -o $@ $(OBJECTS) $(LDFLAGS) |
| 74 | strip $@ | 92 | $(STRIP) $@ |
| 75 | $(BINARY).debug: $(OBJECTS_debug) $(HEADERS) | 93 | $(BINARY).debug: $(OBJECTS_debug) |
| 76 | $(CC) -o $@ $(OBJECTS_debug) $(LDFLAGS) | 94 | $(CC) -o $@ $(OBJECTS_debug) $(LDFLAGS) |
| 77 | proxy: $(OBJECTS_proxy) $(HEADERS) | 95 | proxy: $(OBJECTS_proxy) |
| 78 | $(CC) -o $@ $(OBJECTS_proxy) $(CFLAGS_production) $(LDFLAGS) | 96 | $(CC) -o $@ $(OBJECTS_proxy) $(CFLAGS_production) $(LDFLAGS) |
| 79 | proxy.debug: $(OBJECTS_proxy_debug) $(HEADERS) | 97 | proxy.debug: $(OBJECTS_proxy_debug) |
| 80 | $(CC) -o $@ $(OBJECTS_proxy_debug) $(LDFLAGS) | 98 | $(CC) -o $@ $(OBJECTS_proxy_debug) $(LDFLAGS) |
| 81 | 99 | ||
| 82 | .c.debug.o : $(HEADERS) | 100 | $(OBJECTS): $(HEADERS) |
| 101 | $(OBJECTS_debug): $(HEADERS) | ||
| 102 | $(OBJECTS_proxy): $(HEADERS) | ||
| 103 | $(OBJECTS_proxy_debug): $(HEADERS) | ||
| 104 | |||
| 105 | .c.proxy.debug.o : | ||
| 106 | $(CC) -c -o $@ $(CFLAGS_proxy_debug) $(<:.proxy.debug.o=.c) | ||
| 107 | |||
| 108 | .c.proxy.o : | ||
| 109 | $(CC) -c -o $@ $(CFLAGS_proxy) $(<:.proxy.o=.c) | ||
| 110 | |||
| 111 | .c.debug.o : | ||
| 83 | $(CC) -c -o $@ $(CFLAGS_debug) $(<:.debug.o=.c) | 112 | $(CC) -c -o $@ $(CFLAGS_debug) $(<:.debug.o=.c) |
| 84 | 113 | ||
| 85 | .c.o : $(HEADERS) | 114 | .c.o : |
| 86 | $(CC) -c -o $@ $(CFLAGS_production) $< | 115 | $(CC) -c -o $@ $(CFLAGS_production) $< |
| 87 | 116 | ||
| 117 | # Unit tests. The modules under test are compiled straight into the test | ||
| 118 | # binary, so a test may reach a static function by including the source if it | ||
| 119 | # has to. tests/stubs.c supplies the few symbols those modules reference but | ||
| 120 | # the tests never reach. | ||
| 121 | TESTBIN=tests/runner | ||
| 122 | TEST_SOURCES=tests/runner.c tests/test.c tests/stubs.c tests/t_scan_urlencoded_query.c tests/t_iovec.c tests/t_vector.c tests/t_random.c tests/t_hex.c tests/t_accesslist.c tests/t_scan.c tests/t_buf.c tests/t_ip.c tests/t_socket.c | ||
| 123 | TEST_UNITS=scan_urlencoded_query.c ot_buf.c ot_ip.c ot_socket.c ot_iovec.c ot_vector.c ot_random.c ot_hex.c ot_scan.c ot_accesslist.c | ||
| 124 | TEST_HEADERS=tests/test.h $(HEADERS) | ||
| 125 | # Tests reach code that sits behind feature flags, so the units under test are | ||
| 126 | # built with those features enabled. A test binary is not a production binary. | ||
| 127 | FEATURES_test=$(FEATURES) -DWANT_ACCESSLIST_BLACK -DWANT_SYNC_LIVE | ||
| 128 | CFLAGS_test = $(CFLAGS) -I. -g -O1 $(FEATURES_test) | ||
| 129 | |||
| 130 | $(TESTBIN): $(TEST_SOURCES) $(TEST_UNITS) $(TEST_HEADERS) | ||
| 131 | $(CC) -o $@ $(CFLAGS_test) $(TEST_SOURCES) $(TEST_UNITS) | ||
| 132 | |||
| 133 | check: $(TESTBIN) | ||
| 134 | ./$(TESTBIN) | ||
| 135 | |||
| 136 | .PHONY: all check clean install | ||
| 137 | |||
| 88 | clean: | 138 | clean: |
| 89 | rm -rf opentracker opentracker.debug *.o *~ | 139 | rm -rf opentracker opentracker.debug proxy proxy.debug $(TESTBIN) *.o *~ |
| 90 | 140 | ||
| 91 | install: | 141 | install: |
| 92 | install -m 755 opentracker $(BINDIR) | 142 | install -m 755 opentracker $(DESTDIR)$(BINDIR) |
