|  | # 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-char-subscripts \ | 
|  | -Wno-missing-field-initializers \ | 
|  | -Wno-unused-local-typedefs \ | 
|  | -Wno-unused-parameter \ | 
|  | -Wpacked \ | 
|  | -Wpointer-arith \ | 
|  | -Wwrite-strings | 
|  |  | 
|  | 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-deprecated-register \ | 
|  | -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 | 
|  |  |