X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=build%2Frules.mk;h=d538bbcf6df361238f58f305bbe4106fac4015f4;hb=5e1e6e6c4467839ec70cee64dc1faabcf08e2a5f;hp=3f8a42d0cfff40963a6d6e5dad16a20655069753;hpb=8366314611bf30a0f31d25bf5f5023186fa87692;p=ion3.git diff --git a/build/rules.mk b/build/rules.mk index 3f8a42d..d538bbc 100644 --- a/build/rules.mk +++ b/build/rules.mk @@ -16,6 +16,17 @@ LUA_COMPILED := $(subst .lua,.lc, $(LUA_SOURCES)) TARGETS := $(TARGETS) $(LUA_COMPILED) endif +ifdef EXTRA_EXECUTABLE +EXECUTABLE := $(EXTRA_EXECUTABLE) +BINDIR_ := $(EXTRABINDIR) +endif + +ifdef EXECUTABLE +BINDIR_ ?= $(BINDIR) +EXECUTABLE_ := $(EXECUTABLE)$(BIN_SUFFIX) +TARGETS := $(TARGETS) $(EXECUTABLE_) +endif + # Main targets ###################################### @@ -40,11 +51,11 @@ depend: subdirs-depend _depend install: subdirs-install _install +ifdef MAKE_EXPORTS + # Exports ###################################### -ifdef MAKE_EXPORTS - EXPORTS_C = exports.c EXPORTS_H = exports.h @@ -56,14 +67,28 @@ _exports: $(EXPORTS_C) $(EXPORTS_H): $(EXPORTS_C) -$(EXPORTS_C): $(SOURCES) +$(EXPORTS_C): $(SOURCES) $(MKEXPORTS_EXTRA_DEPS) $(MKEXPORTS) -module $(MAKE_EXPORTS) -o $(EXPORTS_C) -h $(EXPORTS_H) \ $(SOURCES) $(MKEXPORTS_EXTRAS) +# Exports documentation +###################################### + +EXPORTS_DOC = exports.tex + +TO_CLEAN := $(TO_CLEAN) $(EXPORTS_DOC) + +_exports_doc: $(EXPORTS_DOC) + +$(EXPORTS_DOC): $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRA_DEPS) + $(MKEXPORTS) -mkdoc -module $(MAKE_EXPORTS) -o $(EXPORTS_DOC) \ + $(SOURCES) $(LUA_SOURCES) $(MKEXPORTS_EXTRAS) + else # !MAKE_EXPORTS EXPORTS_C = EXPORTS_H = +EXPORTS_DOC = endif # !MAKE_EXPORTS @@ -73,6 +98,42 @@ endif # !MAKE_EXPORTS OBJS=$(subst .c,.o,$(SOURCES) $(EXPORTS_C)) + +ifdef EXECUTABLE + +ifdef MODULE_LIST +ifdef MODULE_PATH +ifeq ($(PRELOAD_MODULES),1) +EXT_OBJS += $(foreach mod, $(MODULE_LIST), $(MODULE_PATH)/$(mod)/$(mod).a) +DEPEND_DEPENDS += preload.c +SOURCES += preload.c +TO_CLEAN += preload.c +else # !PRELOAD_MODULES +LDFLAGS += $(EXPORT_DYNAMIC) +WHOLEA = -Wl,-whole-archive +NO_WHOLEA = -Wl,-no-whole-archive +endif # !PRELOAD_MODULES + +preload.c: + $(LUA) $(TOPDIR)/build/mkpreload.lua $(MODULE_LIST) > preload.c + +endif # MODULE_PATH +endif # MODULE_LIST + +ifeq ($(RELOCATABLE),1) +DEFINES += -DCF_RELOCATABLE_BIN_LOCATION=\"$(BINDIR_)/$(EXECUTABLE)\" +endif + +$(EXECUTABLE_): $(OBJS) $(EXT_OBJS) + $(CC) $(OBJS) $(WHOLEA) $(EXT_OBJS) $(NO_WHOLEA) $(LDFLAGS) -o $@ + +executable_install: + $(INSTALLDIR) $(BINDIR_) + $(INSTALLBIN) $(EXECUTABLE_) $(BINDIR_) + +endif # EXECUTABLE + + ifdef MODULE ifneq ($(PRELOAD_MODULES),1) @@ -89,7 +150,7 @@ $(MODULE).so: $(OBJS) $(EXT_OBJS) module_install: module_stub_install $(INSTALLDIR) $(MODULEDIR) - $(INSTALL) -m $(BIN_MODE) $(MODULE).so $(MODULEDIR) + $(INSTALLBIN) $(MODULE).so $(MODULEDIR) else # PRELOAD_MODULES @@ -202,3 +263,9 @@ TO_CLEAN += potfiles_c potfiles_lua _potfiles: echo "$(SOURCES)"|tr ' ' '\n' > potfiles_c echo "$(LUA_SOURCES) $(ETC)"|tr ' ' '\n' > potfiles_lua + +# Defaults +###################################### + +INSTALL_STRIP ?= -s +INSTALLBIN ?= $(INSTALL) $(INSTALL_STRIP) -m $(BIN_MODE)