libweave: Add clang support to Makefile.
To use: "CLANG=1 make all -j"
BUG: 26508278
Change-Id: I6b09e6574634d8e07ce2438c31907466e953eb0f
Reviewed-on: https://weave-review.googlesource.com/2185
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/Makefile b/Makefile
index 0eb4e12..c49462f 100644
--- a/Makefile
+++ b/Makefile
@@ -49,6 +49,23 @@
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
+
include file_lists.mk third_party.mk examples.mk tests.mk
###
diff --git a/examples.mk b/examples.mk
index 970969e..a25194c 100644
--- a/examples.mk
+++ b/examples.mk
@@ -35,22 +35,22 @@
-lcrypto
out/$(BUILD_MODE)/weave_daemon_ledflasher : out/$(BUILD_MODE)/examples/daemon/ledflasher/ledflasher.o out/$(BUILD_MODE)/examples_provider.a out/$(BUILD_MODE)/libweave.so
- $(CXX) -o $@ $^ $(daemon_common_flags)
+ $(CXX) -o $@ $^ $(CFLAGS) $(daemon_common_flags)
out/$(BUILD_MODE)/weave_daemon_light : out/$(BUILD_MODE)/examples/daemon/light/light.o out/$(BUILD_MODE)/examples_provider.a out/$(BUILD_MODE)/libweave.so
- $(CXX) -o $@ $^ $(daemon_common_flags)
+ $(CXX) -o $@ $^ $(CFLAGS) $(daemon_common_flags)
out/$(BUILD_MODE)/weave_daemon_lock : out/$(BUILD_MODE)/examples/daemon/lock/lock.o out/$(BUILD_MODE)/examples_provider.a out/$(BUILD_MODE)/libweave.so
- $(CXX) -o $@ $^ $(daemon_common_flags)
+ $(CXX) -o $@ $^ $(CFLAGS) $(daemon_common_flags)
out/$(BUILD_MODE)/weave_daemon_oven : out/$(BUILD_MODE)/examples/daemon/oven/oven.o out/$(BUILD_MODE)/examples_provider.a out/$(BUILD_MODE)/libweave.so
- $(CXX) -o $@ $^ $(daemon_common_flags)
+ $(CXX) -o $@ $^ $(CFLAGS) $(daemon_common_flags)
out/$(BUILD_MODE)/weave_daemon_sample : out/$(BUILD_MODE)/examples/daemon/sample/sample.o out/$(BUILD_MODE)/examples_provider.a out/$(BUILD_MODE)/libweave.so
- $(CXX) -o $@ $^ $(daemon_common_flags)
+ $(CXX) -o $@ $^ $(CFLAGS) $(daemon_common_flags)
out/$(BUILD_MODE)/weave_daemon_speaker : out/$(BUILD_MODE)/examples/daemon/speaker/speaker.o out/$(BUILD_MODE)/examples_provider.a out/$(BUILD_MODE)/libweave.so
- $(CXX) -o $@ $^ $(daemon_common_flags)
+ $(CXX) -o $@ $^ $(CFLAGS) $(daemon_common_flags)
all-examples : out/$(BUILD_MODE)/weave_daemon_ledflasher out/$(BUILD_MODE)/weave_daemon_light out/$(BUILD_MODE)/weave_daemon_lock out/$(BUILD_MODE)/weave_daemon_oven out/$(BUILD_MODE)/weave_daemon_sample out/$(BUILD_MODE)/weave_daemon_speaker
diff --git a/tests.mk b/tests.mk
index 64fc622..aa9ee53 100644
--- a/tests.mk
+++ b/tests.mk
@@ -23,7 +23,7 @@
$(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $<
out/$(BUILD_MODE)/libweave_testrunner : $(weave_unittest_obj_files) $(third_party_chromium_crypto_unittest_obj_files) $(third_party_chromium_base_unittest_obj_files) out/$(BUILD_MODE)/libweave_common.a out/$(BUILD_MODE)/libweave-test.a
- $(CXX) -o $@ $^ -lcrypto -lexpat -lgmock -lgtest -lpthread -lrt -Lthird_party/lib
+ $(CXX) -o $@ $^ $(CFLAGS) -lcrypto -lexpat -lgmock -lgtest -lpthread -lrt -Lthird_party/lib
test : out/$(BUILD_MODE)/libweave_testrunner
$<
@@ -39,7 +39,7 @@
$(CXX) $(DEFS_$(BUILD_MODE)) $(INCLUDES) $(CFLAGS) $(CFLAGS_$(BUILD_MODE)) $(CFLAGS_CC) -c -o $@ $<
out/$(BUILD_MODE)/libweave_exports_testrunner : $(weave_exports_unittest_obj_files) out/$(BUILD_MODE)/libweave.so out/$(BUILD_MODE)/libweave-test.a out/$(BUILD_MODE)/src/test/weave_testrunner.o
- $(CXX) -o $@ $^ -lcrypto -lexpat -lgmock -lgtest -lpthread -lrt -Lthird_party/lib -Wl,-rpath=out/$(BUILD_MODE)/
+ $(CXX) -o $@ $^ $(CFLAGS) -lcrypto -lexpat -lgmock -lgtest -lpthread -lrt -Lthird_party/lib -Wl,-rpath=out/$(BUILD_MODE)/
export-test : out/$(BUILD_MODE)/libweave_exports_testrunner
$<