export CC ?= cc AR ?= ar RANLIB ?= ranlib STRIP ?= strip PKG_CONFIG ?= pkg-config PROJECT_ROOT ?= $(CURDIR) SRC_DIR ?= $(PROJECT_ROOT)/src BIN_DIR ?= $(PROJECT_ROOT)/bin BUILD_DIR ?= $(PROJECT_ROOT)/build STATIC ?= 0 EXEEXT := WINDOWS_LDLIBS := ifeq ($(OS),Windows_NT) EXEEXT := .exe WINDOWS_LDLIBS += -lws2_32 endif BASE_CFLAGS ?= -O2 -DNDEBUG -Wall -Wextra -ffunction-sections -fdata-sections CFLAGS += $(BASE_CFLAGS) CFLAGS += $(EXTRA_CFLAGS) CPPFLAGS += -I$(SRC_DIR) UNAME_S := $(shell uname) ifeq ($(UNAME_S),Darwin) CFLAGS += -pthread CFLAGS += -Wno-gnu-zero-variadic-macro-arguments LDFLAGS += -Wl,-dead_strip TEST_FLAGS := CONCURRENCY=1000 TOTAL=1000 FD_LIMIT=2560 else ifeq ($(OS),Windows_NT) LDFLAGS += -Wl,--gc-sections TEST_FLAGS := CONCURRENCY=100 TOTAL=100 FD_LIMIT=512 else ifeq ($(UNAME_S),FreeBSD) CFLAGS += -pthread CFLAGS += -Wno-gnu-zero-variadic-macro-arguments CPPFLAGS += -I/usr/local/include LDFLAGS += -pthread LDFLAGS += -L/usr/local/lib LDFLAGS += -Wl,--gc-sections TEST_FLAGS := else CFLAGS += -pthread LDFLAGS += -Wl,--gc-sections TEST_FLAGS := endif ifeq ($(STATIC),1) LDFLAGS += -static PKG_CONFIG_STATIC := --static else PKG_CONFIG_STATIC := endif LDLIBS += $(WINDOWS_LDLIBS)