Initial version of Makefile that produces library

This commit is contained in:
Rafal Kupiec 2018-07-22 14:05:00 +02:00 committed by David Carlier
parent 357be5ec0d
commit 61d4ea1903
1 changed files with 38 additions and 29 deletions

View File

@ -2,13 +2,16 @@
CFLAGS = -fPIC -Iinclude -I. -W -Wunused -Wall CFLAGS = -fPIC -Iinclude -I. -W -Wunused -Wall
# Additional CFLAGS for debug build # Additional CFLAGS for debug build
DFLAGS = -O0 -g3 DCFLAGS = -O0 -g3
# Addditional CFLAGS for release build # Addditional CFLAGS for release build
RFLAGS = -O3 -s RCFLAGS = -O3 -s
# Flags to pass to the linker # Flags to pass to the linker
LFLAGS = LDFLAGS =
# Destination directory
DESTDIR ?= $(realpath .)/binary
############################################## ##############################################
### Do not modify anything below this line ### ### Do not modify anything below this line ###
@ -21,53 +24,54 @@ endif
ifeq "$(PLATFORM)" "Darwin" ifeq "$(PLATFORM)" "Darwin"
CC := clang CC := clang
CP := cp -av
MD := mkdir -p MD := mkdir -p
RM := rm -rfv RM := rm -rfv
LIBS := -ldl -lm LIBS := -ldl -lm
LFLAGS := $(LFLAGS) -Wl,-export_dynamic -rdynamic -undefined dynamic_lookup EXESUFFIX :=
ESUFFIX := LIBSUFFIX := .dylib
LSUFFIX := .dylib
endif endif
ifeq "$(PLATFORM)" "FreeBSD" ifeq "$(PLATFORM)" "FreeBSD"
CC := clang CC := clang
CP := cp -av
MD := mkdir -p MD := mkdir -p
RM := rm -rfv RM := rm -rfv
LIBS := -lm LIBS := -lm
LFLAGS := $(LFLAGS) -Wl,--export-dynamic -rdynamic EXESUFFIX :=
ESUFFIX := LIBSUFFIX := .so
LSUFFIX := .so
endif endif
ifeq "$(PLATFORM)" "Linux" ifeq "$(PLATFORM)" "Linux"
CC := gcc CC := gcc
CP := cp -av
MD := mkdir -p MD := mkdir -p
RM := rm -rfv RM := rm -rfv
LIBS := -ldl -lm LIBS := -ldl -lm
LFLAGS := $(LFLAGS) -Wl,--export-dynamic -rdynamic EXESUFFIX :=
ESUFFIX := LIBSUFFIX := .so
LSUFFIX := .so
endif endif
ifeq "$(PLATFORM)" "OpenBSD" ifeq "$(PLATFORM)" "OpenBSD"
CC := clang CC := clang
CP := cp -av
MD := mkdir -p MD := mkdir -p
RM := rm -rfv RM := rm -rfv
LIBS := -lm LIBS := -lm
LFLAGS := $(LFLAGS) -Wl,--export-dynamic -rdynamic EXESUFFIX :=
ESUFFIX := LIBSUFFIX := .so
LSUFFIX := .so
endif endif
ifeq "$(PLATFORM)" "Windows" ifeq "$(PLATFORM)" "Windows"
CC := gcc CC := gcc
CP := copy
MD := md MD := md
RM := del /F RM := del /F
LIBS := -ldl -lm LIBS := -ldl -lm
LFLAGS := $(LFLAGS) -Wl,--export-all-symbols -rdynamic EXESUFFIX := .exe
ESUFFIX := .exe LIBSUFFIX := .dll
LSUFFIX := .dll
endif endif
BINARY := psharp BINARY := psharp
BUILD_DIR := build 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_DIRS := engine/lib engine
ENGINE_SRCS := $(foreach dir,$(ENGINE_DIRS),$(wildcard $(dir)/*.c)) ENGINE_SRCS := $(foreach dir,$(ENGINE_DIRS),$(wildcard $(dir)/*.c))
@ -79,16 +83,17 @@ SAPI := $(subst /,,$(subst sapi/,,$(dir $(wildcard sapi/*/))))
.SUFFIXES: .SUFFIXES:
.PHONY: clean debug release style test .PHONY: clean debug install release style test
debug: export CFLAGS := $(CFLAGS) $(DFLAGS) debug: export CFLAGS := $(CFLAGS) $(DCFLAGS)
debug: engine sapi module debug: engine sapi modules
release: export CFLAGS := $(CFLAGS) $(RFLAGS) release: export CFLAGS := $(CFLAGS) $(RCFLAGS)
release: engine sapi module release: engine sapi modules
engine: $(ENGINE_OBJS) engine: $(ENGINE_OBJS)
$(CC) -o $(BUILD_DIR)/lib$(BINARY)$(LIBSUFFIX) $(LDFLAGS) $(LIBS) -shared $(ENGINE_OBJS)
module: $(MODULE) modules: $(MODULE)
sapi: $(SAPI) sapi: $(SAPI)
@ -101,18 +106,22 @@ $(MODULE):
$(eval MODULE_SRCS := $(foreach dir,modules/$(MODULE_DIRS),$(wildcard $(dir)/*.c))) $(eval MODULE_SRCS := $(foreach dir,modules/$(MODULE_DIRS),$(wildcard $(dir)/*.c)))
$(eval MODULE_MAKE := $(MODULE_SRCS:.c=.o)) $(eval MODULE_MAKE := $(MODULE_SRCS:.c=.o))
$(eval MODULE_OBJS := $(addprefix $(BUILD_DIR)/,$(MODULE_MAKE))) $(eval MODULE_OBJS := $(addprefix $(BUILD_DIR)/,$(MODULE_MAKE)))
$(eval MODULE_PROG := $(MODULE_DIRS)$(LSUFFIX)) $(eval MODULE_PROG := $(MODULE_DIRS)$(LIBSUFFIX))
$(MAKE) $(MODULE_OBJS) $(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): $(SAPI):
$(eval SAPI_DIRS := $@) $(eval SAPI_DIRS := $@)
$(eval SAPI_SRCS := $(foreach dir,sapi/$(SAPI_DIRS),$(wildcard $(dir)/*.c))) $(eval SAPI_SRCS := $(foreach dir,sapi/$(SAPI_DIRS),$(wildcard $(dir)/*.c)))
$(eval SAPI_MAKE := $(SAPI_SRCS:.c=.o)) $(eval SAPI_MAKE := $(SAPI_SRCS:.c=.o))
$(eval SAPI_OBJS := $(addprefix $(BUILD_DIR)/,$(SAPI_MAKE))) $(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) $(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: clean:
$(RM) $(BUILD_DIR) $(RM) $(BUILD_DIR)
install:
$(MD) $(DESTDIR)
$(CP) $(BUILD_DIR)/* $(DESTDIR)/