Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 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 | |
Mike Frysinger | fcffce3 | 2016-04-06 16:22:42 -0400 | [diff] [blame] | 5 | # Disable all builtin rules first as we don't use any of them (we define all |
| 6 | # rules/targets ourselves, nor do we want to rely on them. |
| 7 | MAKEFLAGS += --no-builtin-rules |
| 8 | .SUFFIXES: |
| 9 | |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 10 | # Run make with BUILD_MODE=Release for release. |
| 11 | BUILD_MODE ?= Debug |
| 12 | |
| 13 | DEFS_Debug := \ |
| 14 | -D_DEBUG |
| 15 | |
| 16 | DEFS_Release := \ |
| 17 | -DNDEBUG |
| 18 | |
| 19 | INCLUDES := \ |
| 20 | -I. \ |
| 21 | -Iinclude \ |
| 22 | -Ithird_party/chromium \ |
Mike Frysinger | d70a965 | 2016-03-17 04:14:27 -0400 | [diff] [blame] | 23 | -Ithird_party/googletest/googletest/include \ |
| 24 | -Ithird_party/googletest/googlemock/include \ |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 25 | -Ithird_party/libuweave \ |
| 26 | -Ithird_party/modp_b64/modp_b64 |
| 27 | |
| 28 | CFLAGS := \ |
| 29 | -fno-exceptions \ |
| 30 | -fPIC \ |
| 31 | -fvisibility=hidden \ |
| 32 | -Wall \ |
| 33 | -Werror \ |
| 34 | -Wextra \ |
Vitaly Buka | 50a147a | 2016-01-22 12:33:59 -0800 | [diff] [blame] | 35 | -Wformat=2 \ |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 36 | -Wl,--exclude-libs,ALL \ |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 37 | -Wno-missing-field-initializers \ |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 38 | -Wno-unused-parameter \ |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 39 | |
| 40 | CFLAGS_Debug := \ |
Jacob Marble | ddb8759 | 2016-02-02 12:35:23 -0800 | [diff] [blame] | 41 | -O0 \ |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 42 | -g3 |
| 43 | |
| 44 | CFLAGS_Release := \ |
| 45 | -Os |
| 46 | |
| 47 | CFLAGS_C := \ |
| 48 | -std=c99 |
| 49 | |
| 50 | CFLAGS_CC := \ |
| 51 | -std=c++11 |
| 52 | |
Jacob Marble | f1ac1d4 | 2016-01-12 16:34:39 -0800 | [diff] [blame] | 53 | comma := , |
| 54 | ifeq (1, $(CLANG)) |
| 55 | CC = $(shell which clang-3.6) |
| 56 | CXX = $(shell which clang++-3.6) |
| 57 | CFLAGS := $(filter-out -Wl$(comma)--exclude-libs$(comma)ALL,$(CFLAGS)) |
| 58 | CFLAGS += \ |
| 59 | -fno-omit-frame-pointer \ |
Jacob Marble | f1ac1d4 | 2016-01-12 16:34:39 -0800 | [diff] [blame] | 60 | -Wno-inconsistent-missing-override |
| 61 | ifeq (Debug, $(BUILD_MODE)) |
| 62 | CFLAGS += \ |
| 63 | -fsanitize=address |
| 64 | LDFLAGS += \ |
| 65 | -fsanitize=address |
| 66 | endif |
| 67 | endif |
| 68 | |
Vitaly Buka | e0b0c6d | 2016-01-14 18:22:43 -0800 | [diff] [blame] | 69 | # Headers dependencies. |
| 70 | CFLAGS += -MMD |
| 71 | OBJFILES = $(shell find out/$(BUILD_MODE)/ -type f -name '*.o') |
| 72 | -include $(OBJFILES:.o=.d) |
| 73 | |
Vitaly Buka | e03c094 | 2016-01-22 20:16:21 -0800 | [diff] [blame] | 74 | DEFS_TEST := \ |
| 75 | $(DEFS_$(BUILD_MODE)) \ |
| 76 | -DHAS_GTEST=1 |
| 77 | |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 78 | ### |
| 79 | # libweave.so |
| 80 | |
| 81 | out/$(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 | |
Surender Kodam | 39b96b6 | 2016-03-28 16:15:57 -0700 | [diff] [blame] | 84 | include cross.mk file_lists.mk third_party/third_party.mk examples/examples.mk tests.mk tests_schema/tests_schema.mk |
Jacob Marble | e785ec9 | 2016-01-13 13:49:44 -0800 | [diff] [blame] | 85 | |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 86 | ### |
| 87 | # src/ |
| 88 | |
| 89 | weave_obj_files := $(WEAVE_SRC_FILES:%.cc=out/$(BUILD_MODE)/%.o) |
| 90 | |
Vitaly Buka | e03c094 | 2016-01-22 20:16:21 -0800 | [diff] [blame] | 91 | $(weave_obj_files) : out/$(BUILD_MODE)/%.o : %.cc |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 92 | mkdir -p $(dir $@) |
| 93 | $(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $< |
| 94 | |
| 95 | 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) |
| 96 | rm -f $@ |
| 97 | $(AR) crsT $@ $^ |
| 98 | |
Mike Frysinger | d70a965 | 2016-03-17 04:14:27 -0400 | [diff] [blame] | 99 | all-libs : out/$(BUILD_MODE)/libweave.so |
| 100 | all-tests : out/$(BUILD_MODE)/libweave_exports_testrunner out/$(BUILD_MODE)/libweave_testrunner |
| 101 | |
Surender Kodam | 39b96b6 | 2016-03-28 16:15:57 -0700 | [diff] [blame] | 102 | all : all-libs all-examples all-tests all-testdevices |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 103 | |
| 104 | clean : |
| 105 | rm -rf out |
| 106 | |
Jacob Marble | 3313558 | 2016-01-28 10:29:23 -0800 | [diff] [blame] | 107 | cleanall : clean clean-gtest clean-libevhtp |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 108 | |
| 109 | .PHONY : clean cleanall all |
Jacob Marble | c3d7714 | 2016-02-01 12:30:57 -0800 | [diff] [blame] | 110 | .DEFAULT_GOAL := all |
Jacob Marble | 7e72437 | 2016-01-07 16:16:47 -0800 | [diff] [blame] | 111 | |