]> git.decadent.org.uk Git - ion3.git/blobdiff - build/rules.mk
Add 20081002-1.
[ion3.git] / build / rules.mk
index f4f18d1f261e0b88175759a482da7c796d477bad..d538bbcf6df361238f58f305bbe4106fac4015f4 100644 (file)
@@ -2,10 +2,6 @@
 ## Some make rules
 ##
 
-ifdef RELOCATABLE
-DEFINES += -DCF_RELOCATABLE
-endif
-
 ifdef MODULE
 ifeq ($(PRELOAD_MODULES),1)
 MODULE_TARGETS := $(MODULE).a $(MODULE).lc
@@ -20,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
 ######################################
@@ -91,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)
@@ -107,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
 
@@ -220,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)