summaryrefslogtreecommitdiff
path: root/net/arataga/files/makefile
blob: 5ee132825d72ffe0e65084caa24a06247ff05063 (plain) (blame)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
CXXFLAGS+=	-std=c++17 -Wall -Wextra
CPPFLAGS+=	-I.$(if $(findstring run_unit_tests,$(MAKECMDGOALS)),./arataga)
CPPFLAGS+=	-I.. -I$(LOCALBASE)/include -DSPDLOG_FMT_EXTERNAL
LDFLAGS+=	-L$(LOCALBASE)/lib
LIBS=		-lpthread $(LOCALBASE)/lib/libso.$(SO5_LIBVER).so \
		-lfmt -lhttp_parser

oess_OBJS=	oess_2/defs/err_code.o \
		oess_2/defs/ex.o \
		oess_2/defs/quantity.o \
		oess_2/io/binbuffer.o \
		oess_2/io/bstring_buf.o \
		oess_2/io/fixed_mem_buf.o \
		oess_2/io/stream.o \
		oess_2/stdsn/ent.o \
		oess_2/stdsn/ent_std.o \
		oess_2/stdsn/serializable.o \
		oess_2/stdsn/shptr.o \
		oess_2/stdsn/type_tag/type_tag.o

stats_OBJS=	stats/auth/pub.o \
		stats/connections/pub.o \
		stats/dns/pub.o

logging_OBJS=	logging/stats_counters.o \
		logging/wrap_logging.o

connection_handlers_OBJS=\
		acl_handler/connection_handler_ifaces.o \
		acl_handler/handlers/protocol_detection.o \
		acl_handler/handlers/data_transfer.o \
		acl_handler/handlers/socks5.o \
		acl_handler/handlers/http/basics.o \
		acl_handler/handlers/http/negative_response_sender.o \
		acl_handler/handlers/http/initial_handler.o \
		acl_handler/handlers/http/authentification_handler.o \
		acl_handler/handlers/http/dns_lookup_handler.o \
		acl_handler/handlers/http/target_connector.o \
		acl_handler/handlers/http/connect_method_handler.o \
		acl_handler/handlers/http/ordinary_method_handler.o

misc_OBJS=	admin_http_entry/pub.o \
		stats_collector/a_stats_collector.o \
		authentificator/a_authentificator.o \
		dns_resolver/interactor/a_nameserver_interactor.o \
		dns_resolver/lookup_conductor/a_conductor.o \
		dns_resolver/pub.o \
		io_thread_timer/a_timer_handler.o \
		acl_handler/bandlim_manager.o \
		acl_handler/a_handler.o \
		user_list_processor/a_processor.o \
		config_processor/a_processor.o \
		startup_manager/a_manager.o

all_OBJS=	$(oess_OBJS) $(stats_OBJS) config.o $(logging_OBJS) \
		user_list_auth_data.o $(connection_handlers_OBJS) \
		$(misc_OBJS) main.o

CCACHE?=	$(shell command -v ccache)

%.o: %.cpp
# XXX: $@ does not play well with VPATH :(
	$(CCACHE) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $(<:.cpp=.o) -c $<

arataga: $(all_OBJS)
	$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)

all: arataga

install: arataga
	$(BSD_INSTALL_PROGRAM) $^ $(DESTDIR)$(PREFIX)/bin

UNIT_TESTS=	config_parser local_user_list_data dns_types \
		socks5_1 socks5_2 socks5_3 \
		http_1 http_2 http_3 http_4 http_5

# Tests live in (and built from) their own subdirectory, but use main
# project files as well, so use VPATH to help make(1) find them.
VPATH=		../arataga

config_parser_test_OBJS=\
		config_parser/main.o \
		config.o
config_parser_test_LIBS=	-lfmt

local_user_list_data_test_OBJS=\
		local_user_list_data/main.o \
		user_list_auth_data.o
local_user_list_data_test_LIBS=	-lfmt

dns_types_test_OBJS=\
		dns_types/main.o \
		oess_2/defs/err_code.o \
		oess_2/defs/ex.o \
		oess_2/defs/quantity.o \
		oess_2/io/binbuffer.o \
		oess_2/io/bstring_buf.o \
		oess_2/io/fixed_mem_buf.o \
		oess_2/io/stream.o
dns_types_test_LIBS=	-lfmt

# These object files are common to (shared by) SOCKS and HTTP tests.
common_test_OBJS=\
		connection_handler_simulator/impl.o \
		$(connection_handlers_OBJS) $(logging_OBJS)

socks5_1_test_OBJS=	socks5/bind_pdu/main.o $(common_test_OBJS)
socks5_1_test_LIBS=	$(LIBS)

socks5_2_test_OBJS=	socks5/command_pdu/main.o $(common_test_OBJS)
socks5_2_test_LIBS=	$(LIBS)

socks5_3_test_OBJS=	socks5/illegal_first_pdu/main.o $(common_test_OBJS)
socks5_3_test_LIBS=	$(LIBS)

socks5_4_test_OBJS=	socks5/username_password_auth/main.o $(common_test_OBJS)
socks5_4_test_LIBS=	$(LIBS)

http_1_test_OBJS=	http/auth_params/main.o $(common_test_OBJS)
http_1_test_LIBS=	$(LIBS)

http_2_test_OBJS=	http/chunked_encoding/main.o $(common_test_OBJS)
http_2_test_LIBS=	$(LIBS)

http_3_test_OBJS=	http/connect_data_transfer/main.o $(common_test_OBJS)
http_3_test_LIBS=	$(LIBS)

http_4_test_OBJS=	http/http_fields/main.o $(common_test_OBJS)
http_4_test_LIBS=	$(LIBS)

http_5_test_OBJS=	http/illegal_responses/main.o $(common_test_OBJS)
http_5_test_LIBS=	$(LIBS)

define make_test
$(1)_test: $$($(1)_test_OBJS)
# XXX: again, if object file is missing, make(1) will build it, but
# $^ will contain incorrect path if prerequisite was found via VPATH.
	$(CXX) $(LDFLAGS) -o $$@ $$(foreach o,$$^,$$(if $$(wildcard \
		$$o),$$o,$(VPATH)/$$o)) $$($(1)_test_LIBS)

run_$(1)_test: $(1)_test
# At least one test (local_user_list_data) reads configuration files
# and expects to be run from the project's top directory.
	cd .. && tests/$$<

.PHONY: run_$(1)_test
run_unit_tests: run_$(1)_test
endef

$(foreach t,$(UNIT_TESTS),$(eval $(call make_test,$(t))))

.PHONY: all install run_unit_tests