-CXXFLAGS ?= -g -MMD -Werror -I. -std=c++1y
-LDFLAGS ?=
-CXX ?= g++
-CC ?= g++
-EXTRA_TARGETS ?=
+CLANGXX ?= clang++
+GXX ?= g++
+USE_CLANG ?= 1
+CC = $(CXX)
-all: lock_server lock_tester rsm_tester rpc/rpctest $(EXTRA_TARGETS)
+OPTFLAGS = -O3
+CXXFLAGS = -ggdb3 -MMD -I. -std=c++1y $(STDLIB) $(PEDANTRY) $(OPTFLAGS)
+LDFLAGS = -std=c++1y $(STDLIB) $(OPTFLAGS)
-rpc/librpc.a: rpc/rpc.o rpc/connection.o rpc/poll_mgr.o rpc/thread_pool.o
- rm -f $@
- ar cq $@ $^
- ranlib rpc/librpc.a
+POSTBUILD ?=
-rpc/rpctest: rpc/rpctest.o threaded_log.o rpc/librpc.a t4.o
+PRODUCTS = lock_server lock_tester rsm_tester rpc/rpctest
-lock_tester : lock_tester.o lock_client.o threaded_log.o rsm_client.o rpc/librpc.a t4.o
+ifeq "$(USE_CLANG)" "1"
-lock_server : lock_smain.o threaded_log.o rsm.o paxos.o config.o log.o lock_server.o rpc/librpc.a t4.o
+PEDANTRY = -Werror -Weverything -Wall -Wextra -pedantic-errors -pedantic \
+ -Wno-c++98-compat-pedantic -Wno-padded -Weffc++ \
+ -Wno-non-virtual-dtor -Wno-weak-vtables
+STDLIB = -stdlib=libc++
+CXX = $(CLANGXX)
-rsm_tester: rsm_tester.o rsmtest_client.o threaded_log.o rpc/librpc.a t4.o
+else
-%.o: %.cc
- $(CXX) $(CXXFLAGS) -c $< -o $@
+PEDANTRY = -pedantic -Wall -Wextra -fno-default-inline -Werror
+STDLIB = -pthread
+CXX = $(GXX)
+
+endif
+
+all: $(PRODUCTS) $(POSTBUILD)
+
+LIBRPC_OBJECTS = rpc/rpc.o rpc/connection.o rpc/poll_mgr.o rpc/thread_pool.o
+
+rpc/librpc.a: $(foreach x,$(LIBRPC_OBJECTS),rpc/librpc.a($(x)))
+
+rpc/rpctest: rpc/rpctest.o debug.o rpc/librpc.a t4.o
+
+lock_tester : lock_tester.o lock_client.o debug.o rsm_client.o rpc/librpc.a t4.o
+
+lock_server : lock_smain.o debug.o rsm.o paxos.o config.o log.o lock_server.o rpc/librpc.a t4.o
+
+rsm_tester: rsm_tester.o rsmtest_client.o debug.o rpc/librpc.a t4.o
-include *.d
-include rpc/*.d
clean_files=rpc/rpctest rpc/*.o *.d rpc/*.d rpc/librpc.a *.o config *.log lock_server lock_tester rsm_tester
.PHONY: clean $(EXTRA_TARGETS)
-clean:
- rm -rf $(clean_files)
+clean:
+ -rm -rf $(clean_files)