| # 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. |
| |
| THIS_PATH := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) |
| PROJ_PATH := $(shell cd $(THIS_PATH)/..;pwd) |
| OUT_DIR=$(PROJ_PATH)/out |
| PROTOBUF_DIR=$(PROJ_PATH)/third_party/protobuf/ |
| PROTOBUF_HDRS=$(PROJ_PATH)/out/include/ |
| PROTOBUF_LIBS=$(PROJ_PATH)/out/lib/ |
| PROTOC=$(PROJ_PATH)/out/bin/protoc |
| GTEST_DIR=$(PROJ_PATH)/third_party/gtest/googletest |
| GTEST_HDRS=$(GTEST_DIR)/include |
| GTEST_LIBS=$(PROJ_PATH)/out/lib/ |
| GTEST_MAIN=$(GTEST_DIR)/src/gtest_main.cc |
| SM_SRC=$(THIS_PATH)/src/securemessage/ |
| SM_TEST=$(THIS_PATH)/test/securemessage/ |
| PROTO_DIR=$(PROJ_PATH)/proto |
| 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.pb.h: $(PROTO_DIR)/securemessage.proto |
| ${PROTOC} --cpp_out=. --proto_path=$(PROTO_DIR) $< |
| |
| |
| ################################## |
| # 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 |
| |
| $(OUT_DIR): |
| mkdir -p $(OUT_DIR) |
| |
| submodule: |
| git submodule update --init --recursive |
| |
| $(PROTOBUF_DIR)/.configure: submodule |
| cd ${PROTOBUF_DIR}; ./autogen.sh |
| |
| $(PROTOBUF_DIR)/third_party/googletest/googletest: |
| cd ${PROTOBUF_DIR}; git submodule init; git submodule update |
| |
| protobuf: $(PROTOBUF_DIR)/.configure | $(OUT_DIR) |
| cd ${PROTOBUF_DIR}; ./configure --prefix=$(OUT_DIR) |
| make -j16 -C ${PROTOBUF_DIR} |
| make -j16 -C ${PROTOBUF_DIR} check |
| make -j16 -C ${PROTOBUF_DIR} install |
| |
| gtest: submodule |
| ${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} |