Makefile
raw ยท 2364 bytes
export
CC ?= cc
AR := /usr/bin/ar
RANLIB := /usr/bin/ranlib
STRIP ?= strip
PROJECT_ROOT := $(CURDIR)
BIN_DIR := $(CURDIR)/bin
SRC := klog.c \
proxy_proto_v2.c \
route.c \
tcp_route.c \
file_conf.c \
tinyproxy.c
BIN := $(BIN_DIR)/tinyproxy
BUILD_DIR := $(PROJECT_ROOT)/build
# Optional. Set this only when you want to build vendored libevent.
# Example:
# make LIBEVENT_SRC=$(PROJECT_ROOT)/libevent2
LIBEVENT_SRC ?=
LIBEVENT_PREFIX := $(BUILD_DIR)/libevent-install
LIBEVENT_CORE_A := $(LIBEVENT_PREFIX)/lib/libevent_core.a
CFLAGS ?= -Os -Wall -Wextra -ffunction-sections -fdata-sections
ifeq ($(strip $(LIBEVENT_SRC)),)
# System libevent, e.g. Alpine libevent-dev
LIBEVENT_CPPFLAGS := $(shell pkg-config --cflags libevent_core)
LIBEVENT_LDFLAGS := $(shell pkg-config --libs-only-L libevent_core)
LIBEVENT_LDLIBS := $(shell pkg-config --libs-only-l --libs-only-other libevent_core)
LIBEVENT_DEPS :=
else
# Vendored libevent
LIBEVENT_CPPFLAGS := -I$(LIBEVENT_PREFIX)/include
LIBEVENT_LDFLAGS := -L$(LIBEVENT_PREFIX)/lib
LIBEVENT_LDLIBS := -levent_core
LIBEVENT_DEPS := $(LIBEVENT_CORE_A)
endif
CPPFLAGS += $(LIBEVENT_CPPFLAGS)
LDFLAGS += $(LIBEVENT_LDFLAGS)
LDLIBS += $(LIBEVENT_LDLIBS)
$(BIN): $(SRC) $(LIBEVENT_DEPS)
mkdir -p $(BIN_DIR)
$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $(SRC) $(LDFLAGS) $(LDLIBS)
ifneq ($(strip $(LIBEVENT_SRC)),)
$(LIBEVENT_CORE_A):
cd $(LIBEVENT_SRC) && \
AR=$(AR) RANLIB=$(RANLIB) ./configure \
--prefix="$(LIBEVENT_PREFIX)" \
--disable-openssl \
--disable-samples \
--disable-libevent-regress \
--disable-debug-mode \
--disable-malloc-replacement \
--disable-thread-support \
--disable-dependency-tracking \
--enable-static \
--disable-shared
AR=$(AR) RANLIB=$(RANLIB) $(MAKE) -C $(LIBEVENT_SRC)
AR=$(AR) RANLIB=$(RANLIB) $(MAKE) -C $(LIBEVENT_SRC) install
endif
ifeq ($(shell uname),Darwin)
LDFLAGS += -Wl,-dead_strip
TEST_FLAGS := CONCURRENCY=1000 TOTAL=1000 FD_LIMIT=2560
else
LDFLAGS += -Wl,--gc-sections
TEST_FLAGS :=
endif
all: $(BIN)
strip: $(BIN)
$(STRIP) $(BIN)
test: $(BIN)
$(TEST_FLAGS) python3 tests/test_proxy.py $(BIN)
clean:
rm -rf $(BIN_DIR)
clean-libevent:
-$(MAKE) -C $(LIBEVENT_SRC) distclean
rm -rf $(LIBEVENT_PREFIX)
distclean: clean clean-libevent
rm -rf $(BUILD_DIR)
.PHONY: all clean clean-libevent distclean test strip