blob: de69f40a9986bbb30483a23ebc3d722fb8ccbdc7 [file] [log] [blame]
# 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