| # 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 |