xref: /aosp_15_r20/external/rappor/client/cpp/Makefile (revision 2abb31345f6c95944768b5222a9a5ed3fc68cc00)
1*2abb3134SXin Li# Build RAPPOR C++ code.
2*2abb3134SXin Li
3*2abb3134SXin Lidefault : \
4*2abb3134SXin Li	_tmp/rappor_sim \
5*2abb3134SXin Li	_tmp/encoder_demo \
6*2abb3134SXin Li	_tmp/protobuf_encoder_demo \
7*2abb3134SXin Li	_tmp/openssl_hash_impl_test
8*2abb3134SXin Li
9*2abb3134SXin Li# All intermediate files live in _tmp/
10*2abb3134SXin Liclean :
11*2abb3134SXin Li	rm -f --verbose _tmp/*
12*2abb3134SXin Li
13*2abb3134SXin Li# Use protobuf compiler to generate .cc and .h files.  The .o and the .d depend
14*2abb3134SXin Li# on .cc, so that is the target of this rule.
15*2abb3134SXin Li
16*2abb3134SXin Li_tmp/%.pb.cc : ../proto/%.proto
17*2abb3134SXin Li	protoc --cpp_out _tmp --proto_path=../proto $<
18*2abb3134SXin Li
19*2abb3134SXin Li#
20*2abb3134SXin Li# Generate .d Makefile fragments.
21*2abb3134SXin Li#
22*2abb3134SXin Li
23*2abb3134SXin Li# CXX flags:
24*2abb3134SXin Li#   -MM: exclude system headers
25*2abb3134SXin Li#   -I _tmp: So that protobuf files found
26*2abb3134SXin Li#
27*2abb3134SXin Li# Makefile stuff:
28*2abb3134SXin Li#   $*: the part that matched the wildcard, e.g. 'rappor_sim' for '%.cc'
29*2abb3134SXin Li#   matching 'rappor_sim.cc'
30*2abb3134SXin Li#
31*2abb3134SXin Li#   We use $< (first prereq) to generate .d and and .o files from .cc, because
32*2abb3134SXin Li#   it only needs the .cc file.  We used $^ (all prereqs) to pass ALL the .o
33*2abb3134SXin Li#   files to the link step.
34*2abb3134SXin Li
35*2abb3134SXin Li_tmp/%.d : %.cc
36*2abb3134SXin Li	./dotd.sh $* $@ \
37*2abb3134SXin Li		$(CXX) -I _tmp/ -MM $(CPPFLAGS) $<
38*2abb3134SXin Li
39*2abb3134SXin Li# Special case for .d file of generated source.
40*2abb3134SXin Li_tmp/%.pb.d : _tmp/%.pb.cc
41*2abb3134SXin Li	./dotd.sh $*.pb $@ \
42*2abb3134SXin Li		$(CXX) -I _tmp/ -MM $(CPPFLAGS) $<
43*2abb3134SXin Li
44*2abb3134SXin Li#
45*2abb3134SXin Li# Include the Makefile fragments we generated, so that changes to headers will
46*2abb3134SXin Li# rebuild both .d files and .o files.  ('-include' suppresses the error if they
47*2abb3134SXin Li# don't exist.)
48*2abb3134SXin Li#
49*2abb3134SXin Li# NOTE: We have to list them explicitly.  Every time you add a source file, add
50*2abb3134SXin Li# the corresponding .d file here.
51*2abb3134SXin Li#
52*2abb3134SXin Li
53*2abb3134SXin Li-include \
54*2abb3134SXin Li	_tmp/encoder.d \
55*2abb3134SXin Li	_tmp/libc_rand_impl.d \
56*2abb3134SXin Li	_tmp/openssl_hash_impl.d \
57*2abb3134SXin Li	_tmp/openssl_hash_impl_test.d \
58*2abb3134SXin Li	_tmp/protobuf_encoder.d \
59*2abb3134SXin Li	_tmp/protobuf_encoder_demo.d \
60*2abb3134SXin Li	_tmp/rappor_sim.d \
61*2abb3134SXin Li	_tmp/unix_kernel_rand_impl.d \
62*2abb3134SXin Li	_tmp/rappor.pb.d \
63*2abb3134SXin Li  _tmp/example_app.pb.d
64*2abb3134SXin Li
65*2abb3134SXin Li# For example, -Wextra warns about unused params, but -Wall doesn't.
66*2abb3134SXin LiCXXFLAGS = -Wall -Wextra #-Wpedantic
67*2abb3134SXin Li
68*2abb3134SXin Li#
69*2abb3134SXin Li# Build object files (-c: compile only)
70*2abb3134SXin Li#
71*2abb3134SXin Li
72*2abb3134SXin Li# NOTE: More prerequisites to _tmp/%.o (header files) are added by the .d
73*2abb3134SXin Li# files, so we need $<.
74*2abb3134SXin Li_tmp/%.o : %.cc
75*2abb3134SXin Li	$(CXX) $(CXXFLAGS) -I _tmp/ -c -o $@ $<
76*2abb3134SXin Li
77*2abb3134SXin Li_tmp/%.pb.o : _tmp/%.pb.cc
78*2abb3134SXin Li	$(CXX) $(CXXFLAGS) -I _tmp/ -c -o $@ $<
79*2abb3134SXin Li
80*2abb3134SXin Li#
81*2abb3134SXin Li# Build executables
82*2abb3134SXin Li#
83*2abb3134SXin Li
84*2abb3134SXin Li# CXX flag notes:
85*2abb3134SXin Li# -lcrypto from openssl
86*2abb3134SXin Li# -g for debug info
87*2abb3134SXin Li#
88*2abb3134SXin Li# You can add -std=c++0x for std::array, etc.
89*2abb3134SXin Li
90*2abb3134SXin Li# $^ : all prerequisites
91*2abb3134SXin Li_tmp/rappor_sim : \
92*2abb3134SXin Li	_tmp/encoder.o \
93*2abb3134SXin Li	_tmp/libc_rand_impl.o \
94*2abb3134SXin Li	_tmp/unix_kernel_rand_impl.o \
95*2abb3134SXin Li	_tmp/openssl_hash_impl.o \
96*2abb3134SXin Li	_tmp/rappor_sim.o
97*2abb3134SXin Li	$(CXX) \
98*2abb3134SXin Li		$(CXXFLAGS) \
99*2abb3134SXin Li		-o $@ \
100*2abb3134SXin Li		$^ \
101*2abb3134SXin Li		-lcrypto \
102*2abb3134SXin Li		-g
103*2abb3134SXin Li
104*2abb3134SXin Li# $^ : all prerequisites
105*2abb3134SXin Li_tmp/encoder_demo: \
106*2abb3134SXin Li	_tmp/encoder.o \
107*2abb3134SXin Li	_tmp/unix_kernel_rand_impl.o \
108*2abb3134SXin Li	_tmp/openssl_hash_impl.o \
109*2abb3134SXin Li	_tmp/encoder_demo.o
110*2abb3134SXin Li	$(CXX) \
111*2abb3134SXin Li		$(CXXFLAGS) \
112*2abb3134SXin Li		-o $@ \
113*2abb3134SXin Li		$^ \
114*2abb3134SXin Li		-lcrypto \
115*2abb3134SXin Li		-g
116*2abb3134SXin Li
117*2abb3134SXin Li# -I _tmp for protobuf headers
118*2abb3134SXin Li_tmp/protobuf_encoder_demo : \
119*2abb3134SXin Li	_tmp/encoder.o \
120*2abb3134SXin Li	_tmp/libc_rand_impl.o \
121*2abb3134SXin Li	_tmp/unix_kernel_rand_impl.o \
122*2abb3134SXin Li	_tmp/openssl_hash_impl.o \
123*2abb3134SXin Li	_tmp/protobuf_encoder.o \
124*2abb3134SXin Li	_tmp/protobuf_encoder_demo.o \
125*2abb3134SXin Li	_tmp/example_app.pb.o \
126*2abb3134SXin Li	_tmp/rappor.pb.o
127*2abb3134SXin Li	$(CXX) \
128*2abb3134SXin Li		$(CXXFLAGS) \
129*2abb3134SXin Li		-I _tmp \
130*2abb3134SXin Li		-o $@ \
131*2abb3134SXin Li		$^ \
132*2abb3134SXin Li		-lprotobuf \
133*2abb3134SXin Li		-lcrypto \
134*2abb3134SXin Li		-g
135*2abb3134SXin Li
136*2abb3134SXin Li_tmp/openssl_hash_impl_test : \
137*2abb3134SXin Li 	_tmp/openssl_hash_impl.o \
138*2abb3134SXin Li	_tmp/openssl_hash_impl_test.o
139*2abb3134SXin Li	$(CXX) \
140*2abb3134SXin Li		$(CXXFLAGS) \
141*2abb3134SXin Li		-o $@ \
142*2abb3134SXin Li		$^ \
143*2abb3134SXin Li		-lcrypto \
144*2abb3134SXin Li		-g
145*2abb3134SXin Li
146*2abb3134SXin Li# Unittests are currently run manually, and require the Google gtest
147*2abb3134SXin Li# framework version 1.7.0 or greater, found at
148*2abb3134SXin Li#   https://github.com/google/googletest/releases
149*2abb3134SXin Li# TODO(mdeshon-google): Installer script
150*2abb3134SXin Liunittest: _tmp/openssl_hash_impl_unittest _tmp/encoder_unittest
151*2abb3134SXin Li	_tmp/openssl_hash_impl_unittest
152*2abb3134SXin Li	_tmp/encoder_unittest
153*2abb3134SXin Li
154*2abb3134SXin Li_tmp/openssl_hash_impl_unittest: openssl_hash_impl_unittest.cc openssl_hash_impl.cc
155*2abb3134SXin Li	$(CXX) -g -o $@  $^ -lssl -lcrypto -lgtest
156*2abb3134SXin Li
157*2abb3134SXin Li_tmp/encoder_unittest: encoder_unittest.cc encoder.cc unix_kernel_rand_impl.cc openssl_hash_impl.cc
158*2abb3134SXin Li	$(CXX) -g -o $@  $^ -lssl -lcrypto -lgtest
159