diff --git a/Makefile b/Makefile index 5ba4536..56c4860 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,3 @@ -MACHINE := $(shell $(CC) -dumpmachine) -ARCH := $(firstword $(subst -, ,$(MACHINE))) -BUILD_DIR ?= build-$(MACHINE) - -ifeq ($(ARCH),x86_64) - ARCH_CFLAGS := -mavx -else -ifeq ($(ARCH),arm) - ARCH_CFLAGS := -mfpu=neon -endif # end arm block -endif # end x86_64 block - -CFLAGS ?= -g -O3 $(ARCH_CFLAGS) -flto -DNDEBUG -LDFLAGS ?= -flto - -DSO_NAME=libneatvnc -DSO_MAJOR=0 -DSO_MINOR=0 - DEPENDENCIES := pixman-1 libuv SOURCES := \ @@ -25,34 +6,20 @@ SOURCES := \ src/vec.c \ src/zrle.c \ -OBJECTS := $(SOURCES:src/%.c=$(BUILD_DIR)/%.o) $(BUILD_DIR)/miniz.o +include common.mk -CFLAGS += -std=gnu11 -D_GNU_SOURCE -Iinc -fvisibility=hidden -Icontrib/miniz \ - $(foreach dep,$(DEPENDENCIES),$(shell pkg-config --cflags $(dep))) +DSO_NAME=libneatvnc +DSO_MAJOR=0 +DSO_MINOR=0 -LDFLAGS += $(foreach dep,$(DEPENDENCIES),$(shell pkg-config --libs $(dep))) +CFLAGS += -fvisibility=hidden -Icontrib/miniz +OBJECTS += $(BUILD_DIR)/miniz.o DSO_PATH := $(BUILD_DIR)/$(DSO_NAME) -all: $(DSO_PATH).so.$(DSO_MAJOR).$(DSO_MINOR) - -$(BUILD_DIR): - mkdir -p $(BUILD_DIR) - $(DSO_PATH).so.$(DSO_MAJOR).$(DSO_MINOR): $(OBJECTS) - $(CC) -fPIC -shared $^ $(LDFLAGS) -o $@ + $(LINK_DSO) ln -sf $(DSO_NAME).so.$(DSO_MAJOR).$(DSO_MINOR) $(DSO_PATH).so.$(DSO_MINOR) ln -sf $(DSO_NAME).so.$(DSO_MAJOR).$(DSO_MINOR) $(DSO_PATH).so -CC_OBJ = $(CC) -c $(CFLAGS) $< -o $@ $(CC_DEP_ARGS) -MMD -MP -MF $(@:.o=.deps) -$(BUILD_DIR)/%.o: src/%.c | $(BUILD_DIR) ; $(CC_OBJ) $(BUILD_DIR)/miniz.o: contrib/miniz/miniz.c | $(BUILD_DIR) ; $(CC_OBJ) - -.PHONY: clean -clean: - rm -rf $(BUILD_DIR) - --include $(BUILD_DIR)/*.deps - -.SUFFIXES: -.SECONDARY: diff --git a/common.mk b/common.mk new file mode 100644 index 0000000..c56a4ff --- /dev/null +++ b/common.mk @@ -0,0 +1,37 @@ +MACHINE := $(shell $(CC) -dumpmachine) +ARCH := $(firstword $(subst -, ,$(MACHINE))) +BUILD_DIR ?= build-$(MACHINE) + +ifeq ($(ARCH),x86_64) + ARCH_CFLAGS := -mavx +else +ifeq ($(ARCH),arm) + ARCH_CFLAGS := -mfpu=neon +endif # end arm block +endif # end x86_64 block + +CFLAGS ?= -g -O3 $(ARCH_CFLAGS) -flto -DNDEBUG +LDFLAGS ?= -flto + +CFLAGS += -std=gnu11 -D_GNU_SOURCE -Iinc + +CC_OBJ = $(CC) -c $(CFLAGS) $< -o $@ -MMD -MP -MF $(@:.o=.deps) +LINK_DSO = $(CC) -fPIC -shared $^ $(LDFLAGS) -o $@ + +CFLAGS += $(foreach dep,$(DEPENDENCIES),$(shell pkg-config --cflags $(dep))) +LDFLAGS += $(foreach dep,$(DEPENDENCIES),$(shell pkg-config --libs $(dep))) +OBJECTS := $(SOURCES:src/%.c=$(BUILD_DIR)/%.o) + +$(BUILD_DIR): ; mkdir -p $(BUILD_DIR) +$(BUILD_DIR)/%.o: src/%.c | $(BUILD_DIR) ; $(CC_OBJ) + +.PHONY: clean +clean: ; rm -rf $(BUILD_DIR) + +-include $(BUILD_DIR)/*.deps + +.SUFFIXES: +.SECONDARY: + +# This clears the default target set by this file +.DEFAULT_GOAL :=