1# Copyright 2015 The Weave Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# Run make with BUILD_MODE=Release for release.
6BUILD_MODE ?= Debug
7
8DEFS_Debug := \
9	-D_DEBUG
10
11DEFS_Release := \
12	-DNDEBUG
13
14INCLUDES := \
15	-I. \
16	-Iinclude \
17	-Ithird_party/chromium \
18	-Ithird_party/include \
19	-Ithird_party/libuweave \
20	-Ithird_party/modp_b64/modp_b64
21
22CFLAGS := \
23	-fno-exceptions \
24	-fPIC \
25	-fvisibility=hidden \
26	-Wall \
27	-Werror \
28	-Wextra \
29	-Wformat=2 \
30	-Wl,--exclude-libs,ALL \
31	-Wno-char-subscripts \
32	-Wno-missing-field-initializers \
33	-Wno-unused-local-typedefs \
34	-Wno-unused-parameter \
35	-Wpacked \
36	-Wpointer-arith \
37	-Wwrite-strings
38
39CFLAGS_Debug := \
40	-O0 \
41	-g3
42
43CFLAGS_Release := \
44	-Os
45
46CFLAGS_C := \
47	-std=c99
48
49CFLAGS_CC := \
50	-std=c++11
51
52comma := ,
53ifeq (1, $(CLANG))
54  CC = $(shell which clang-3.6)
55  CXX = $(shell which clang++-3.6)
56  CFLAGS := $(filter-out -Wl$(comma)--exclude-libs$(comma)ALL,$(CFLAGS))
57  CFLAGS += \
58    -fno-omit-frame-pointer \
59    -Wno-deprecated-register \
60    -Wno-inconsistent-missing-override
61  ifeq (Debug, $(BUILD_MODE))
62    CFLAGS += \
63      -fsanitize=address
64    LDFLAGS += \
65      -fsanitize=address
66  endif
67endif
68
69# Headers dependencies.
70CFLAGS += -MMD
71OBJFILES = $(shell find out/$(BUILD_MODE)/ -type f -name '*.o')
72-include $(OBJFILES:.o=.d)
73
74DEFS_TEST := \
75	$(DEFS_$(BUILD_MODE)) \
76	-DHAS_GTEST=1
77
78###
79# libweave.so
80
81out/$(BUILD_MODE)/libweave.so : out/$(BUILD_MODE)/libweave_common.a
82	$(CXX) -shared -Wl,-soname=libweave.so -o $@ -Wl,--whole-archive $^ -Wl,--no-whole-archive -lcrypto -lexpat -lpthread -lrt
83
84include file_lists.mk third_party/third_party.mk examples/examples.mk tests.mk
85
86###
87# src/
88
89weave_obj_files := $(WEAVE_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o)
90
91$(weave_obj_files) : out/$(BUILD_MODE)/%.o : %.cc
92	mkdir -p $(dir $@)
93	$(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $<
94
95out/$(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)
96	rm -f $@
97	$(AR) crsT $@ $^
98
99all : out/$(BUILD_MODE)/libweave.so all-examples out/$(BUILD_MODE)/libweave_exports_testrunner out/$(BUILD_MODE)/libweave_testrunner
100
101clean :
102	rm -rf out
103
104cleanall : clean clean-gtest clean-libevhtp
105
106.PHONY : clean cleanall all
107.DEFAULT_GOAL := all
108
109