blob: 0eff8e1784a1e7899012902566a7da08b35a0ced [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.
# Disable all builtin rules first as we don't use any of them (we define all
# rules/targets ourselves, nor do we want to rely on them.
MAKEFLAGS += --no-builtin-rules
.SUFFIXES:
# 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/googletest/googletest/include \
-Ithird_party/googletest/googlemock/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 cross.mk file_lists.mk third_party/third_party.mk examples/examples.mk tests.mk tests_schema/tests_schema.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-libs : out/$(BUILD_MODE)/libweave.so
all-tests : out/$(BUILD_MODE)/libweave_exports_testrunner out/$(BUILD_MODE)/libweave_testrunner
all : all-libs all-examples all-tests all-testdevices
clean :
rm -rf out
cleanall : clean clean-gtest clean-libevhtp
.PHONY : clean cleanall all
.DEFAULT_GOAL := all