| # Copyright 2015 The Weave Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # Run make with BUILD_MODE=Release for release. | |
| BUILD_MODE ?= Debug | |
| DEFS_Debug := \ | |
| -D_DEBUG | |
| DEFS_Release := \ | |
| -DNDEBUG | |
| INCLUDES := \ | |
| -I. \ | |
| -Iinclude \ | |
| -Ithird_party/chromium \ | |
| -Ithird_party/include \ | |
| -Ithird_party/libuweave \ | |
| -Ithird_party/modp_b64/modp_b64 | |
| CFLAGS := \ | |
| -fno-exceptions \ | |
| -fPIC \ | |
| -fvisibility=hidden \ | |
| -Wall \ | |
| -Werror \ | |
| -Wextra \ | |
| -Wformat=2 \ | |
| -Wl,--exclude-libs,ALL \ | |
| -Wno-missing-field-initializers \ | |
| -Wno-unused-parameter \ | |
| CFLAGS_Debug := \ | |
| -O0 \ | |
| -g3 | |
| CFLAGS_Release := \ | |
| -Os | |
| CFLAGS_C := \ | |
| -std=c99 | |
| CFLAGS_CC := \ | |
| -std=c++11 | |
| comma := , | |
| ifeq (1, $(CLANG)) | |
| CC = $(shell which clang-3.6) | |
| CXX = $(shell which clang++-3.6) | |
| CFLAGS := $(filter-out -Wl$(comma)--exclude-libs$(comma)ALL,$(CFLAGS)) | |
| CFLAGS += \ | |
| -fno-omit-frame-pointer \ | |
| -Wno-inconsistent-missing-override | |
| ifeq (Debug, $(BUILD_MODE)) | |
| CFLAGS += \ | |
| -fsanitize=address | |
| LDFLAGS += \ | |
| -fsanitize=address | |
| endif | |
| endif | |
| # Headers dependencies. | |
| CFLAGS += -MMD | |
| OBJFILES = $(shell find out/$(BUILD_MODE)/ -type f -name '*.o') | |
| -include $(OBJFILES:.o=.d) | |
| DEFS_TEST := \ | |
| $(DEFS_$(BUILD_MODE)) \ | |
| -DHAS_GTEST=1 | |
| ### | |
| # libweave.so | |
| out/$(BUILD_MODE)/libweave.so : out/$(BUILD_MODE)/libweave_common.a | |
| $(CXX) -shared -Wl,-soname=libweave.so -o $@ -Wl,--whole-archive $^ -Wl,--no-whole-archive -lcrypto -lexpat -lpthread -lrt | |
| include file_lists.mk third_party/third_party.mk examples/examples.mk tests.mk | |
| ### | |
| # src/ | |
| weave_obj_files := $(WEAVE_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) | |
| $(weave_obj_files) : out/$(BUILD_MODE)/%.o : %.cc | |
| mkdir -p $(dir $@) | |
| $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< | |
| out/$(BUILD_MODE)/libweave_common.a : $(weave_obj_files) $(third_party_chromium_base_obj_files) $(third_party_chromium_crypto_obj_files) $(third_party_modp_b64_obj_files) $(third_party_libuweave_obj_files) | |
| rm -f $@ | |
| $(AR) crsT $@ $^ | |
| all : out/$(BUILD_MODE)/libweave.so all-examples out/$(BUILD_MODE)/libweave_exports_testrunner out/$(BUILD_MODE)/libweave_testrunner | |
| clean : | |
| rm -rf out | |
| cleanall : clean clean-gtest clean-libevhtp | |
| .PHONY : clean cleanall all | |
| .DEFAULT_GOAL := all | |