diff options
Diffstat (limited to 'client/cpp/Makefile')
-rw-r--r-- | client/cpp/Makefile | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/client/cpp/Makefile b/client/cpp/Makefile new file mode 100644 index 0000000..b4c7f7e --- /dev/null +++ b/client/cpp/Makefile @@ -0,0 +1,158 @@ +# Build RAPPOR C++ code. + +default : \ + _tmp/rappor_sim \ + _tmp/encoder_demo \ + _tmp/protobuf_encoder_demo \ + _tmp/openssl_hash_impl_test + +# All intermediate files live in _tmp/ +clean : + rm -f --verbose _tmp/* + +# Use protobuf compiler to generate .cc and .h files. The .o and the .d depend +# on .cc, so that is the target of this rule. + +_tmp/%.pb.cc : ../proto/%.proto + protoc --cpp_out _tmp --proto_path=../proto $< + +# +# Generate .d Makefile fragments. +# + +# CXX flags: +# -MM: exclude system headers +# -I _tmp: So that protobuf files found +# +# Makefile stuff: +# $*: the part that matched the wildcard, e.g. 'rappor_sim' for '%.cc' +# matching 'rappor_sim.cc' +# +# We use $< (first prereq) to generate .d and and .o files from .cc, because +# it only needs the .cc file. We used $^ (all prereqs) to pass ALL the .o +# files to the link step. + +_tmp/%.d : %.cc + ./dotd.sh $* $@ \ + $(CXX) -I _tmp/ -MM $(CPPFLAGS) $< + +# Special case for .d file of generated source. +_tmp/%.pb.d : _tmp/%.pb.cc + ./dotd.sh $*.pb $@ \ + $(CXX) -I _tmp/ -MM $(CPPFLAGS) $< + +# +# Include the Makefile fragments we generated, so that changes to headers will +# rebuild both .d files and .o files. ('-include' suppresses the error if they +# don't exist.) +# +# NOTE: We have to list them explicitly. Every time you add a source file, add +# the corresponding .d file here. +# + +-include \ + _tmp/encoder.d \ + _tmp/libc_rand_impl.d \ + _tmp/openssl_hash_impl.d \ + _tmp/openssl_hash_impl_test.d \ + _tmp/protobuf_encoder.d \ + _tmp/protobuf_encoder_demo.d \ + _tmp/rappor_sim.d \ + _tmp/unix_kernel_rand_impl.d \ + _tmp/rappor.pb.d \ + _tmp/example_app.pb.d + +# For example, -Wextra warns about unused params, but -Wall doesn't. +CXXFLAGS = -Wall -Wextra #-Wpedantic + +# +# Build object files (-c: compile only) +# + +# NOTE: More prerequisites to _tmp/%.o (header files) are added by the .d +# files, so we need $<. +_tmp/%.o : %.cc + $(CXX) $(CXXFLAGS) -I _tmp/ -c -o $@ $< + +_tmp/%.pb.o : _tmp/%.pb.cc + $(CXX) $(CXXFLAGS) -I _tmp/ -c -o $@ $< + +# +# Build executables +# + +# CXX flag notes: +# -lcrypto from openssl +# -g for debug info +# +# You can add -std=c++0x for std::array, etc. + +# $^ : all prerequisites +_tmp/rappor_sim : \ + _tmp/encoder.o \ + _tmp/libc_rand_impl.o \ + _tmp/unix_kernel_rand_impl.o \ + _tmp/openssl_hash_impl.o \ + _tmp/rappor_sim.o + $(CXX) \ + $(CXXFLAGS) \ + -o $@ \ + $^ \ + -lcrypto \ + -g + +# $^ : all prerequisites +_tmp/encoder_demo: \ + _tmp/encoder.o \ + _tmp/unix_kernel_rand_impl.o \ + _tmp/openssl_hash_impl.o \ + _tmp/encoder_demo.o + $(CXX) \ + $(CXXFLAGS) \ + -o $@ \ + $^ \ + -lcrypto \ + -g + +# -I _tmp for protobuf headers +_tmp/protobuf_encoder_demo : \ + _tmp/encoder.o \ + _tmp/libc_rand_impl.o \ + _tmp/unix_kernel_rand_impl.o \ + _tmp/openssl_hash_impl.o \ + _tmp/protobuf_encoder.o \ + _tmp/protobuf_encoder_demo.o \ + _tmp/example_app.pb.o \ + _tmp/rappor.pb.o + $(CXX) \ + $(CXXFLAGS) \ + -I _tmp \ + -o $@ \ + $^ \ + -lprotobuf \ + -lcrypto \ + -g + +_tmp/openssl_hash_impl_test : \ + _tmp/openssl_hash_impl.o \ + _tmp/openssl_hash_impl_test.o + $(CXX) \ + $(CXXFLAGS) \ + -o $@ \ + $^ \ + -lcrypto \ + -g + +# Unittests are currently run manually, and require the Google gtest +# framework version 1.7.0 or greater, found at +# https://github.com/google/googletest/releases +# TODO(mdeshon-google): Installer script +unittest: _tmp/openssl_hash_impl_unittest _tmp/encoder_unittest + _tmp/openssl_hash_impl_unittest + _tmp/encoder_unittest + +_tmp/openssl_hash_impl_unittest: openssl_hash_impl_unittest.cc openssl_hash_impl.cc + $(CXX) -g -o $@ $^ -lssl -lcrypto -lgtest + +_tmp/encoder_unittest: encoder_unittest.cc encoder.cc unix_kernel_rand_impl.cc openssl_hash_impl.cc + $(CXX) -g -o $@ $^ -lssl -lcrypto -lgtest |