diff --git a/Makefile b/Makefile index e4e1213eb79852bd875816860f42031efab2af3b..76fa9e153f45ca540295ffbebf09934dd58a7017 100644 --- a/Makefile +++ b/Makefile @@ -2,16 +2,67 @@ # This currently builds C and C++ code. +# Configurations + +VALID_CONFIG_opt = 1 +CC_opt = gcc +CXX_opt = g++ +LD_opt = gcc +LDXX_opt = g++ +CPPFLAGS_opt = -O2 +LDFLAGS_opt = +DEFINES_opt = NDEBUG + +VALID_CONFIG_dbg = 1 +CC_dbg = gcc +CXX_dbg = g++ +LD_dbg = gcc +LDXX_dbg = g++ +CPPFLAGS_dbg = -O0 +LDFLAGS_dbg = +DEFINES_dbg = _DEBUG DEBUG + +VALID_CONFIG_tsan = 1 +CC_tsan = clang +CXX_tsan = clang++ +LD_tsan = clang +LDXX_tsan = clang++ +CPPFLAGS_tsan = -O1 -fsanitize=thread -fno-omit-frame-pointer +LDFLAGS_tsan = -fsanitize=thread +DEFINES_tsan = NDEBUG + +VALID_CONFIG_asan = 1 +CC_asan = clang +CXX_asan = clang++ +LD_asan = clang +LDXX_asan = clang++ +CPPFLAGS_asan = -O1 -fsanitize=address -fno-omit-frame-pointer +LDFLAGS_asan = -fsanitize=address +DEFINES_asan = NDEBUG + +VALID_CONFIG_msan = 1 +CC_msan = clang +CXX_msan = clang++ +LD_msan = clang +LDXX_msan = clang++ +CPPFLAGS_msan = -O1 -fsanitize=memory -fno-omit-frame-pointer +LDFLAGS_msan = -fsanitize=memory +DEFINES_msan = NDEBUG + +ifndef VALID_CONFIG_$(CONFIG) +$(error Invalid CONFIG value '$(CONFIG)') +endif + # General settings. # You may want to change these depending on your system. prefix ?= /usr/local PROTOC = protoc -CC = gcc -CXX = g++ -LD = gcc -LDXX = g++ +CC = $(CC_$(CONFIG)) +CXX = $(CXX_$(CONFIG)) +LD = $(LD_$(CONFIG)) +LDXX = $(LDXX_$(CONFIG)) AR = ar STRIP = strip --strip-unneeded INSTALL = install -D @@ -24,20 +75,9 @@ HOST_LDXX = $(LDXX) CONFIG ?= opt -VALID_CONFIG_opt = 1 -CPPFLAGS_opt = -O2 -DEFINES_opt = NDEBUG - -VALID_CONFIG_dbg = 1 -CPPFLAGS_dbg = -O0 -DEFINES_dbg = _DEBUG DEBUG - -ifndef VALID_CONFIG_$(CONFIG) -$(error Invalid CONFIG value '$(CONFIG)') -endif - CPPFLAGS += $(CPPFLAGS_$(CONFIG)) DEFINES += $(DEFINES_$(CONFIG)) +LDFLAGS += $(LDFLAGS_$(CONFIG)) CFLAGS += -std=c89 -pedantic CXXFLAGS += -std=c++11 diff --git a/templates/Makefile.template b/templates/Makefile.template index 3350f18d66cd9964eb3f0a279a9c58cd8a8cfca2..470ac0c2359d9f9b7c240e4e004a97a0669c4763 100644 --- a/templates/Makefile.template +++ b/templates/Makefile.template @@ -18,16 +18,67 @@ return 'gens/' + m.group(1) + '.pb.cc' %> +# Configurations + +VALID_CONFIG_opt = 1 +CC_opt = gcc +CXX_opt = g++ +LD_opt = gcc +LDXX_opt = g++ +CPPFLAGS_opt = -O2 +LDFLAGS_opt = +DEFINES_opt = NDEBUG + +VALID_CONFIG_dbg = 1 +CC_dbg = gcc +CXX_dbg = g++ +LD_dbg = gcc +LDXX_dbg = g++ +CPPFLAGS_dbg = -O0 +LDFLAGS_dbg = +DEFINES_dbg = _DEBUG DEBUG + +VALID_CONFIG_tsan = 1 +CC_tsan = clang +CXX_tsan = clang++ +LD_tsan = clang +LDXX_tsan = clang++ +CPPFLAGS_tsan = -O1 -fsanitize=thread -fno-omit-frame-pointer +LDFLAGS_tsan = -fsanitize=thread +DEFINES_tsan = NDEBUG + +VALID_CONFIG_asan = 1 +CC_asan = clang +CXX_asan = clang++ +LD_asan = clang +LDXX_asan = clang++ +CPPFLAGS_asan = -O1 -fsanitize=address -fno-omit-frame-pointer +LDFLAGS_asan = -fsanitize=address +DEFINES_asan = NDEBUG + +VALID_CONFIG_msan = 1 +CC_msan = clang +CXX_msan = clang++ +LD_msan = clang +LDXX_msan = clang++ +CPPFLAGS_msan = -O1 -fsanitize=memory -fno-omit-frame-pointer +LDFLAGS_msan = -fsanitize=memory +DEFINES_msan = NDEBUG + +ifndef VALID_CONFIG_$(CONFIG) +$(error Invalid CONFIG value '$(CONFIG)') +endif + # General settings. # You may want to change these depending on your system. prefix ?= /usr/local PROTOC = protoc -CC = gcc -CXX = g++ -LD = gcc -LDXX = g++ +CC = $(CC_$(CONFIG)) +CXX = $(CXX_$(CONFIG)) +LD = $(LD_$(CONFIG)) +LDXX = $(LDXX_$(CONFIG)) AR = ar STRIP = strip --strip-unneeded INSTALL = install -D @@ -40,20 +91,9 @@ HOST_LDXX = $(LDXX) CONFIG ?= opt -VALID_CONFIG_opt = 1 -CPPFLAGS_opt = -O2 -DEFINES_opt = NDEBUG - -VALID_CONFIG_dbg = 1 -CPPFLAGS_dbg = -O0 -DEFINES_dbg = _DEBUG DEBUG - -ifndef VALID_CONFIG_$(CONFIG) -$(error Invalid CONFIG value '$(CONFIG)') -endif - CPPFLAGS += $(CPPFLAGS_$(CONFIG)) DEFINES += $(DEFINES_$(CONFIG)) +LDFLAGS += $(LDFLAGS_$(CONFIG)) CFLAGS += -std=c89 -pedantic CXXFLAGS += -std=c++11