| # 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) |
| |
| # TODO(jacobmarble): There are too many gtest/gmock deps in non-test targets. Fix. |
| $(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-libevent |
| |
| .PHONY : clean cleanall all |
| |