159 lines
3.6 KiB
Makefile
159 lines
3.6 KiB
Makefile
# 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
|