6 ifeq ($(PRELOAD_MODULES
),1)
7 MODULE_TARGETS
:= $(MODULE
).a
$(MODULE
).lc
9 MODULE_TARGETS
:= $(MODULE
).so
$(MODULE
).lc
11 TARGETS
:= $(TARGETS
) $(MODULE_TARGETS
)
15 LUA_COMPILED
:= $(subst .lua
,.lc
, $(LUA_SOURCES
))
16 TARGETS
:= $(TARGETS
) $(LUA_COMPILED
)
19 ifdef EXTRA_EXECUTABLE
20 EXECUTABLE
:= $(EXTRA_EXECUTABLE
)
21 BINDIR_
:= $(EXTRABINDIR
)
26 EXECUTABLE_
:= $(EXECUTABLE
)$(BIN_SUFFIX
)
27 TARGETS
:= $(TARGETS
) $(EXECUTABLE_
)
32 ######################################
36 .PHONY
: subdirs-realclean
37 .PHONY
: subdirs-install
41 all: subdirs _exports
$(TARGETS
)
43 clean: subdirs-clean _clean
45 realclean: subdirs-realclean _clean _realclean
47 install: subdirs-install _install
53 ######################################
58 TO_CLEAN
:= $(TO_CLEAN
) $(EXPORTS_C
) $(EXPORTS_H
)
60 _exports
: $(EXPORTS_C
)
62 # this funny syntax (more than one pattern-based target) is meant to tell Make
63 # that this rule makes BOTH of these targets. Look at the last paragraph of
64 # http://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html
65 %xports.c
%xports.h
: $(SOURCES
) $(MKEXPORTS_EXTRA_DEPS
)
66 $(MKEXPORTS
) -module
$(MAKE_EXPORTS
) -o
$(EXPORTS_C
) -h
$(EXPORTS_H
) \
67 $(SOURCES
) $(MKEXPORTS_EXTRAS
)
69 # Exports documentation
70 ######################################
72 EXPORTS_DOC
= exports.
tex
74 TO_CLEAN
:= $(TO_CLEAN
) $(EXPORTS_DOC
)
76 _exports_doc
: $(EXPORTS_DOC
)
78 $(EXPORTS_DOC
): $(SOURCES
) $(LUA_SOURCES
) $(MKEXPORTS_EXTRA_DEPS
)
79 $(MKEXPORTS
) -mkdoc
-module
$(MAKE_EXPORTS
) -o
$(EXPORTS_DOC
) \
80 $(SOURCES
) $(LUA_SOURCES
) $(MKEXPORTS_EXTRAS
)
91 # Compilation and linking
92 ######################################
94 OBJS
=$(subst .c
,.o
,$(SOURCES
) $(EXPORTS_C
))
101 ifeq ($(PRELOAD_MODULES
),1)
102 EXT_OBJS
+= $(foreach mod
, $(MODULE_LIST
), $(MODULE_PATH
)/$(mod
)/$(mod
).a
)
104 TO_CLEAN
+= preload.c
105 else # !PRELOAD_MODULES
106 LDFLAGS
+= $(EXPORT_DYNAMIC
)
107 WHOLEA
= -Wl
,-whole-archive
108 NO_WHOLEA
= -Wl
,-no-whole-archive
109 endif # !PRELOAD_MODULES
112 $(LUA
) $(TOPDIR
)/build
/mkpreload.lua
$(MODULE_LIST
) > preload.c
117 ifeq ($(RELOCATABLE
),1)
118 DEFINES
+= -DCF_RELOCATABLE_BIN_LOCATION
=\"$(BINDIR_
)/$(EXECUTABLE
)\"
121 DEFINES
+= -DCF_EXECUTABLE
=\"$(EXECUTABLE
)\"
123 $(EXECUTABLE_
): $(OBJS
) $(EXT_OBJS
)
124 $(CC
) $(OBJS
) $(WHOLEA
) $(EXT_OBJS
) $(NO_WHOLEA
) $(LDFLAGS
) -o
$@
127 $(INSTALLDIR
) $(DESTDIR
)$(BINDIR_
)
128 $(INSTALLBIN
) $(EXECUTABLE_
) $(DESTDIR
)$(BINDIR_
)
135 $(CC
) $(CFLAGS
) -c
$< -o
$@
139 ifneq ($(PRELOAD_MODULES
),1)
141 CFLAGS
+= -fPIC
-DPIC
142 LD_SHAREDFLAGS
=-shared
144 # notion might not link to Xext, so modules will have to link to it themselves
148 $(MODULE
).so
: $(OBJS
) $(EXT_OBJS
)
149 $(CC
) $(LD_SHAREDFLAGS
) $(LDFLAGS
) $(OBJS
) $(EXT_OBJS
) $(LIBS
) -o
$@
152 module_install
: module_stub_install
153 $(INSTALLDIR
) $(DESTDIR
)$(MODULEDIR
)
154 $(INSTALLBIN
) $(MODULE
).so
$(DESTDIR
)$(MODULEDIR
)
156 else # PRELOAD_MODULES
161 $(MODULE
).a
: $(OBJS
) $(EXT_OBJS
)
162 $(AR
) $(ARFLAGS
) $@
$+
165 module_install
: module_stub_install
167 endif # PRELOAD_MODULES
170 $(INSTALLDIR
) $(DESTDIR
)$(LCDIR
)
171 $(INSTALL
) -m
$(DATA_MODE
) $(MODULE
).lc
$(DESTDIR
)$(LCDIR
)
176 echo
"ioncore.load_module('$(MODULE)') package.loaded['$(MODULE)']=true" |
$(LUAC
) -o
$@
-
179 LUA_SOURCES
+= $(MODULE_STUB
)
187 ######################################
190 $(RM
) -f
$(TO_CLEAN
) core
*.d
$(OBJS
)
193 $(RM
) -f
$(TO_REALCLEAN
) $(TARGETS
)
196 ######################################
202 $(INSTALLDIR
) $(DESTDIR
)$(LCDIR
)
203 for i in
$(LUA_COMPILED
); do \
204 $(INSTALL
) -m
$(DATA_MODE
) $$i $(DESTDIR
)$(LCDIR
); \
208 $(INSTALLDIR
) $(DESTDIR
)$(ETCDIR
)
209 for i in
$(ETC
); do \
210 $(INSTALL
) -m
$(DATA_MODE
) $$i $(DESTDIR
)$(ETCDIR
); \
214 ######################################
220 ######################################
225 set
-e
; for i in
$(SUBDIRS
); do
$(MAKE
) -C
$$i; done
228 set
-e
; for i in
$(SUBDIRS
); do
$(MAKE
) -C
$$i clean; done
231 set
-e
; for i in
$(SUBDIRS
); do
$(MAKE
) -C
$$i realclean; done
234 set
-e
; for i in
$(INSTALL_SUBDIRS
); do
$(MAKE
) -C
$$i install; done
239 ######################################
241 TO_CLEAN
+= potfiles_c potfiles_lua
244 echo
"$(SOURCES)"|tr
' ' '\n' > potfiles_c
245 echo
"$(LUA_SOURCES) $(ETC)"|tr
' ' '\n' > potfiles_lua
248 ######################################
251 INSTALLBIN ?
= $(INSTALL
) $(INSTALL_STRIP
) -m
$(BIN_MODE
)