From 61d4ea1903e3f9ba9a8140e75c0ce869d396bdab Mon Sep 17 00:00:00 2001 From: belliash Date: Sun, 22 Jul 2018 14:05:00 +0200 Subject: [PATCH] Initial version of Makefile that produces library --- Makefile | 67 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index 980dc76..ffa3bcb 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,16 @@ CFLAGS = -fPIC -Iinclude -I. -W -Wunused -Wall # Additional CFLAGS for debug build -DFLAGS = -O0 -g3 +DCFLAGS = -O0 -g3 # Addditional CFLAGS for release build -RFLAGS = -O3 -s +RCFLAGS = -O3 -s # Flags to pass to the linker -LFLAGS = +LDFLAGS = + +# Destination directory +DESTDIR ?= $(realpath .)/binary ############################################## ### Do not modify anything below this line ### @@ -21,53 +24,54 @@ endif ifeq "$(PLATFORM)" "Darwin" CC := clang + CP := cp -av MD := mkdir -p RM := rm -rfv LIBS := -ldl -lm - LFLAGS := $(LFLAGS) -Wl,-export_dynamic -rdynamic -undefined dynamic_lookup - ESUFFIX := - LSUFFIX := .dylib + EXESUFFIX := + LIBSUFFIX := .dylib endif ifeq "$(PLATFORM)" "FreeBSD" CC := clang + CP := cp -av MD := mkdir -p RM := rm -rfv LIBS := -lm - LFLAGS := $(LFLAGS) -Wl,--export-dynamic -rdynamic - ESUFFIX := - LSUFFIX := .so + EXESUFFIX := + LIBSUFFIX := .so endif ifeq "$(PLATFORM)" "Linux" CC := gcc + CP := cp -av MD := mkdir -p RM := rm -rfv LIBS := -ldl -lm - LFLAGS := $(LFLAGS) -Wl,--export-dynamic -rdynamic - ESUFFIX := - LSUFFIX := .so + EXESUFFIX := + LIBSUFFIX := .so endif ifeq "$(PLATFORM)" "OpenBSD" CC := clang + CP := cp -av MD := mkdir -p RM := rm -rfv LIBS := -lm - LFLAGS := $(LFLAGS) -Wl,--export-dynamic -rdynamic - ESUFFIX := - LSUFFIX := .so + EXESUFFIX := + LIBSUFFIX := .so endif ifeq "$(PLATFORM)" "Windows" CC := gcc + CP := copy MD := md RM := del /F LIBS := -ldl -lm - LFLAGS := $(LFLAGS) -Wl,--export-all-symbols -rdynamic - ESUFFIX := .exe - LSUFFIX := .dll + EXESUFFIX := .exe + LIBSUFFIX := .dll endif BINARY := psharp BUILD_DIR := build -CFLAGS := $(CFLAGS) -DPH7_LIBRARY_SUFFIX=\"$(LSUFFIX)\" +CFLAGS := $(CFLAGS) -DPH7_LIBRARY_SUFFIX=\"$(LIBSUFFIX)\" +LIBFLAGS := -Wl,-rpath=$(DESTDIR) -L$(BUILD_DIR) -l$(BINARY) ENGINE_DIRS := engine/lib engine ENGINE_SRCS := $(foreach dir,$(ENGINE_DIRS),$(wildcard $(dir)/*.c)) @@ -79,16 +83,17 @@ SAPI := $(subst /,,$(subst sapi/,,$(dir $(wildcard sapi/*/)))) .SUFFIXES: -.PHONY: clean debug release style test +.PHONY: clean debug install release style test -debug: export CFLAGS := $(CFLAGS) $(DFLAGS) -debug: engine sapi module -release: export CFLAGS := $(CFLAGS) $(RFLAGS) -release: engine sapi module +debug: export CFLAGS := $(CFLAGS) $(DCFLAGS) +debug: engine sapi modules +release: export CFLAGS := $(CFLAGS) $(RCFLAGS) +release: engine sapi modules engine: $(ENGINE_OBJS) + $(CC) -o $(BUILD_DIR)/lib$(BINARY)$(LIBSUFFIX) $(LDFLAGS) $(LIBS) -shared $(ENGINE_OBJS) -module: $(MODULE) +modules: $(MODULE) sapi: $(SAPI) @@ -101,18 +106,22 @@ $(MODULE): $(eval MODULE_SRCS := $(foreach dir,modules/$(MODULE_DIRS),$(wildcard $(dir)/*.c))) $(eval MODULE_MAKE := $(MODULE_SRCS:.c=.o)) $(eval MODULE_OBJS := $(addprefix $(BUILD_DIR)/,$(MODULE_MAKE))) - $(eval MODULE_PROG := $(MODULE_DIRS)$(LSUFFIX)) + $(eval MODULE_PROG := $(MODULE_DIRS)$(LIBSUFFIX)) $(MAKE) $(MODULE_OBJS) - $(CC) -o $(BUILD_DIR)/$(MODULE_PROG) $(LFLAGS) $(LIBS) -shared $(MODULE_OBJS) + $(CC) -o $(BUILD_DIR)/$(MODULE_PROG) $(LDFLAGS) $(LIBFLAGS) -shared $(MODULE_OBJS) $(SAPI): $(eval SAPI_DIRS := $@) $(eval SAPI_SRCS := $(foreach dir,sapi/$(SAPI_DIRS),$(wildcard $(dir)/*.c))) $(eval SAPI_MAKE := $(SAPI_SRCS:.c=.o)) $(eval SAPI_OBJS := $(addprefix $(BUILD_DIR)/,$(SAPI_MAKE))) - $(eval SAPI_PROG := $(subst -cli,,$(BINARY)-$(SAPI_DIRS))$(ESUFFIX)) + $(eval SAPI_PROG := $(subst -cli,,$(BINARY)-$(SAPI_DIRS))$(EXESUFFIX)) $(MAKE) $(SAPI_OBJS) - $(CC) -o $(BUILD_DIR)/$(SAPI_PROG) $(LFLAGS) $(LIBS) $(ENGINE_OBJS) $(SAPI_OBJS) + $(CC) -o $(BUILD_DIR)/$(SAPI_PROG) $(LDFLAGS) $(LIBFLAGS) $(SAPI_OBJS) clean: $(RM) $(BUILD_DIR) + +install: + $(MD) $(DESTDIR) + $(CP) $(BUILD_DIR)/* $(DESTDIR)/