--- Makefile.orig 2026-03-10 03:34:23.000000000 +0000 +++ Makefile 2026-03-17 16:26:48.654370000 +0000 @@ -2,6 +2,8 @@ DIR_SRC := ./src DIR_OBJ := ./obj +STRIP ?= strip + PREFIX ?= /usr/local BINDIR ?= $(PREFIX)/bin INCLUDE_DIRS ?= @@ -15,26 +17,29 @@ BIN_TARGET := ${TARGET} CXX ?= g++ -CXXFLAGS := -std=c++11 -pthread -g -O3 -MD -MP -I. -I${DIR_INC} $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir)) ${CXXFLAGS} +CXXFLAGS ?= -g -O3 -MD -MP +CXXFLAGS += -std=c++11 -I. -I${DIR_INC} $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir)) LIBS := -lisal -ldeflate -lhwy -lpthread UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Linux) - # Linux: fully static binary - LD_FLAGS := $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) -static -Wl,--no-as-needed -pthread $(LIBS) $(LD_FLAGS) +# Linux: fully static binary +LD_FLAGS := $(LDFLAGS) $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) -static -Wl,--no-as-needed -pthread $(LIBS) +else ifeq ($(UNAME_S),Darwin) +# macOS: link 3rd-party libs statically via .a when available, fallback to dynamic +FIND_STATIC = $(firstword $(foreach d,$(LIBRARY_DIRS),$(wildcard $(d)/lib$(1).a)) $(wildcard /usr/local/lib/lib$(1).a /opt/homebrew/lib/lib$(1).a)) +STATIC_LIBS := +DYNAMIC_LIBS := +$(foreach lib,isal deflate hwy,\ + $(if $(call FIND_STATIC,$(lib)),\ + $(eval STATIC_LIBS += $(call FIND_STATIC,$(lib))),\ + $(eval DYNAMIC_LIBS += -l$(lib)))) +LD_FLAGS := $(LDFLAGS) $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(STATIC_LIBS) $(DYNAMIC_LIBS) -lpthread else - # macOS: link 3rd-party libs statically via .a when available, fallback to dynamic - FIND_STATIC = $(firstword $(foreach d,$(LIBRARY_DIRS),$(wildcard $(d)/lib$(1).a)) $(wildcard /usr/local/lib/lib$(1).a /opt/homebrew/lib/lib$(1).a)) - STATIC_LIBS := - DYNAMIC_LIBS := - $(foreach lib,isal deflate hwy,\ - $(if $(call FIND_STATIC,$(lib)),\ - $(eval STATIC_LIBS += $(call FIND_STATIC,$(lib))),\ - $(eval DYNAMIC_LIBS += -l$(lib)))) - LD_FLAGS := $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(STATIC_LIBS) $(DYNAMIC_LIBS) -lpthread $(LD_FLAGS) +# Other Unix-like systems (e.g. FreeBSD): use normal dynamic linking +LD_FLAGS := $(LDFLAGS) $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(LIBS) endif - ${BIN_TARGET}:${OBJ} $(CXX) $(OBJ) -o $@ $(LD_FLAGS) @@ -47,8 +52,16 @@ @rm -rf $(DIR_OBJ) @rm -f $(TARGET) +# Respect DESTDIR for staged installs (used by most package managers). +# DESTDIR is empty by default, so this will install directly to BINDIR +# unless DESTDIR is supplied by the user. install: - install $(TARGET) $(BINDIR)/$(TARGET) + mkdir -p $(DESTDIR)$(BINDIR) + install $(TARGET) $(DESTDIR)$(BINDIR) @echo "Installed." +# Many package managers use install-strip target if debugging is not enabled +install-strip: install + $(STRIP) $(DESTDIR)$(BINDIR)/$(TARGET) + -include $(OBJ:.o=.d)