blob: 10797610b3bfc3ee397a88390726f2d541122e6f [file] [log] [blame]
# Copyright 2014 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
PROTOBUF_DIR=third-party/google/protobuf/protobuf-2.5.0/
PROTOBUF_HDRS=third-party/google/protobuf/include/
PROTOBUF_LIBS=third-party/google/protobuf/lib/
PROTOC=third-party/google/protobuf/bin/protoc
GTEST_DIR=third-party/google/gtest/gtest-1.7.0/
GTEST_HDRS=third-party/google/gtest/gtest-1.7.0/include
GTEST_LIBS=third-party/google/gtest/
GTEST_MAIN=third-party/google/gtest/gtest-1.7.0/src/gtest_main.cc
SM_SRC=src/securemessage/
SM_TEST=test/securemessage/
CC=g++
TEST_STDERR=test_stderr.log
# TODO: remove the debug and optimization flags when ready for deployment
CFLAGS=-std=gnu++0x -Wall -Wnarrowing -Wextra -Werror -pthread -fPIC -g -O0 -I include -I .
INC_PATH = include/securemessage
PROJ_BASE_OBJECT_FILES = \
byte_buffer.o \
crypto_ops.o \
public_key_proto_util.o \
securemessage.pb.o \
raw_secure_message_parser.o \
secure_message_builder.o \
secure_message_parser.o \
secure_message_wrapper.o \
util.o
PROJ_OPENSSL_OBJECT_FILES = \
$(PROJ_BASE_OBJECT_FILES) \
crypto_ops_openssl.o
################################
#
# Note, run
# make deps
#
# before running anything else
#################################
# Library -- we can build securemessage with a variety of backends
libsecuremessage-openssl.so: ${PROJ_OPENSSL_OBJECT_FILES}
${CC} -o $@ -shared $^ -lcrypto
#################################
# Running tests
run_tests: run_parser_tests run_proto_util_tests run_openssl_test
run_parser_tests: secure_message_parser_openssl_test
export LD_LIBRARY_PATH=${PROTOBUF_LIBS}:${LD_LIBRARY_PATH}; ./secure_message_parser_openssl_test 2> ${TEST_STDERR}
run_proto_util_tests: public_key_proto_util_openssl_test
export LD_LIBRARY_PATH=${PROTOBUF_LIBS}:${LD_LIBRARY_PATH}; ./public_key_proto_util_openssl_test 2> ${TEST_STDERR}
run_openssl_test: crypto_ops_openssl_test
export LD_LIBRARY_PATH=${PROTOBUF_LIBS}:${LD_LIBRARY_PATH}; ./crypto_ops_openssl_test 2> ${TEST_STDERR}
run_builder_openssl_test: builder_openssl_test
export LD_LIBRARY_PATH=${PROTOBUF_LIBS}:${LD_LIBRARY_PATH}; ./builder_openssl_test 2> ${TEST_STDERR}
#################################
# Utilities
util.o: ${SM_SRC}/util.cc ${INC_PATH}/util.h
${CC} ${CFLAGS} -c $<
byte_buffer.o: ${SM_SRC}/byte_buffer.cc ${INC_PATH}/byte_buffer.h
${CC} ${CFLAGS} -c $<
#################################
# Crypto Operations
crypto_ops.o: ${SM_SRC}/crypto_ops.cc ${INC_PATH}/crypto_ops.h ${INC_PATH}/byte_buffer.h ${INC_PATH}/common.h ${INC_PATH}/secure_message_wrapper.h
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -c $<
crypto_ops_openssl.o: ${SM_SRC}/crypto_ops_openssl.cc ${INC_PATH}/crypto_ops.h ${INC_PATH}/byte_buffer.h ${INC_PATH}/util.h
${CC} ${CFLAGS} -c $<
crypto_ops_test.o: ${SM_TEST}/crypto_ops_test.cc crypto_ops.o
${CC} ${CFLAGS} -I ${GTEST_HDRS} -c $<
crypto_ops_openssl_test: crypto_ops_test.o ${PROJ_OPENSSL_OBJECT_FILES} ${GTEST_MAIN}
${CC} ${CFLAGS} -I ${GTEST_HDRS} -L ${PROTOBUF_LIBS} -L ${GTEST_LIBS} -o $@ $^ -lgtest -lcrypto -lprotobuf
#################################
# The parser
secure_message_parser.o: ${SM_SRC}/secure_message_parser.cc ${INC_PATH}/secure_message_parser.h securemessage.pb.h ${INC_PATH}/common.h ${INC_PATH}/crypto_ops.h ${INC_PATH}/raw_secure_message_parser.h
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -c $<
raw_secure_message_parser.o: ${SM_SRC}/raw_secure_message_parser.cc ${INC_PATH}/raw_secure_message_parser.h ${INC_PATH}/crypto_ops.h ${INC_PATH}/common.h ${INC_PATH}/secure_message_wrapper.h
${CC} ${CFLAGS} -c $<
secure_message_parser_openssl_test: ${SM_TEST}/secure_message_parser_test.cc ${PROJ_OPENSSL_OBJECT_FILES} ${GTEST_MAIN}
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -L ${PROTOBUF_LIBS} -I ${GTEST_HDRS} -L ${GTEST_LIBS} -o $@ $^ -lprotobuf -lgtest -lcrypto
#################################
# The builder
secure_message_builder.o: ${SM_SRC}/secure_message_builder.cc ${INC_PATH}/secure_message_builder.h securemessage.pb.h ${INC_PATH}/byte_buffer.h ${INC_PATH}/common.h ${INC_PATH}/crypto_ops.h ${INC_PATH}/secure_message_wrapper.h
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -c $<
builder_parser_test.o: ${SM_TEST}/builder_parser_test.cc ${INC_PATH}/secure_message_builder.h
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -I ${GTEST_HDRS} -c $<
builder_openssl_test: builder_parser_test.o ${PROJ_OPENSSL_OBJECT_FILES} ${GTEST_MAIN}
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -L ${PROTOBUF_LIBS} -I ${GTEST_HDRS} -L ${GTEST_LIBS} -o $@ $^ -lprotobuf -lgtest -lcrypto
#################################
# The protobuf defintion
securemessage.pb.o: securemessage.pb.cc securemessage.pb.h
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -L ${PROTOBUF_LIBS} -c $< -lprotobuf
securemessage.pb.cc: securemessage.proto
${PROTOC} --cpp_out=. $<
securemessage.pb.h: securemessage.proto
${PROTOC} --cpp_out=. $<
##################################
# The Proto Utils
secure_message_wrapper.o: ${SM_SRC}/secure_message_wrapper.cc ${INC_PATH}/secure_message_wrapper.h ${INC_PATH}/crypto_ops.h ${INC_PATH}/common.h securemessage.pb.h
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -c $<
public_key_proto_util.o: ${SM_SRC}/public_key_proto_util.cc ${INC_PATH}/public_key_proto_util.h ${INC_PATH}/common.h ${INC_PATH}/secure_message_wrapper.h securemessage.pb.h
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -c $<
public_key_proto_util_openssl_test: ${SM_TEST}/public_key_proto_util_test.cc ${PROJ_OPENSSL_OBJECT_FILES} ${GTEST_MAIN}
${CC} ${CFLAGS} -I ${PROTOBUF_HDRS} -L ${PROTOBUF_LIBS} -I ${GTEST_HDRS} -L ${GTEST_LIBS} -o $@ $^ -lprotobuf -lgtest -lcrypto
##################################
# Third Party Dependencides
deps: protobuf gtest
protobuf:
cd ${PROTOBUF_DIR}; ./configure --prefix=`pwd`/../
make -C ${PROTOBUF_DIR}
make -C ${PROTOBUF_DIR} check
make -C ${PROTOBUF_DIR} install
gtest:
${CC} -isystem ${GTEST_DIR}/include -I ${GTEST_DIR} -pthread -c ${GTEST_DIR}/src/gtest-all.cc
ar -rv libgtest.a gtest-all.o
mv libgtest.a gtest-all.o ${GTEST_LIBS}
##################################
# Clean up
clean:
rm -f *.o
rm -f securemessage.pb.*
rm -rf *_test
rm -f core
rm -f *.so
realclean: clean
make -C ${PROTOBUF_DIR} clean
rm -rf ${PROTOBUF_DIR}../{bin,include,lib}
rm -f ${GTEST_DIR}/../*.{a,o}