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