forked from residualvm/residualvm-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rules.mk
107 lines (77 loc) · 3.2 KB
/
rules.mk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
###############################################
# Common build rules, used by the sub modules and their module.mk files
#
###############################################
ifdef TOOL
# Copy the list of objects to a new variable. The name of the new variable
# contains the module name, a trick we use so we can keep multiple different
# module object lists, one for each module.
TOOL_OBJS-$(TOOL) := $(addprefix $(MODULE)/, $(TOOL_OBJS))
# Add all involved directories to the MODULE_DIRS list
MODULE_DIRS += $(sort $(dir $(TOOL_OBJS-$(TOOL))))
LDFLAGS_$(TOOL)$(EXEEXT) := $(TOOL_LDFLAGS)
$(MODULE)/$(TOOL)$(EXEEXT): $(TOOL_OBJS-$(TOOL))
$(QUIET_CXX)$(CXX) $(LDFLAGS) $+ $(LDFLAGS_$(@F)) -o $(@F)
$(TOOL): $(TOOL_DEPS) $(MODULE)/$(TOOL)$(EXEEXT)
tools: $(MAKE)
clean: clean-$(TOOL)
clean-$(TOOL): clean-% :
-$(RM) $(TOOL_OBJS-$*) $(TOOL-$*) $(TOOL)$(EXEEXT)
dist-clean: dist-clean/$(TOOL)
dist-clean/$(TOOL): dist-clean/% : clean-%
-$(RM) $(@F)$(EXEEXT)
.PHONY: clean-$(TOOL) $(TOOL)
# Reset TOOL_* vars
TOOL:=
TOOL_DEPS:=
TOOL_LDFLAGS:=
else
#############################################################
# Copy the list of objects to a new variable. The name of the new variable
# contains the module name, a trick we use so we can keep multiple different
# module object lists, one for each module.
MODULE_OBJS-$(MODULE) := $(addprefix $(MODULE)/, $(MODULE_OBJS))
# Add all involved directories to the MODULE_DIRS list
MODULE_DIRS += $(sort $(dir $(MODULE_OBJS-$(MODULE))))
ifdef PLUGIN
################################################
# Build rule for dynamic (loadable) plugins
################################################
PLUGIN-$(MODULE) := plugins/$(PLUGIN_PREFIX)$(notdir $(MODULE))$(PLUGIN_SUFFIX)
$(PLUGIN-$(MODULE)): $(MODULE_OBJS-$(MODULE)) $(PLUGIN_EXTRA_DEPS)
$(QUIET)$(MKDIR) plugins
$(QUIET_PLUGIN)$(CXX) $(filter-out $(PLUGIN_EXTRA_DEPS),$+) $(PLUGIN_LDFLAGS) -o $@
# Reset PLUGIN var
PLUGIN:=
# Add to "plugins" target
plugins: $(PLUGIN-$(MODULE))
# Add to the PLUGINS variable
PLUGINS += $(PLUGIN-$(MODULE))
# Pseudo target for comfort, allows for "make common", "make gui" etc.
$(MODULE): $(PLUGIN-$(MODULE))
clean-plugins: clean-$(MODULE)
else
################################################
# Build rule for static modules/plugins
################################################
MODULE_LIB-$(MODULE) := $(MODULE)/lib$(notdir $(MODULE)).a
# If not building as a plugin, add the object files to the main OBJS list
OBJS += $(MODULE_LIB-$(MODULE))
# Convenience library target
$(MODULE_LIB-$(MODULE)): $(MODULE_OBJS-$(MODULE))
$(QUIET)-$(RM) $@
$(QUIET_AR)$(AR) $@ $+
$(QUIET_RANLIB)$(RANLIB) $@
# Pseudo target for comfort, allows for "make common", "make gui" etc.
$(MODULE): $(MODULE_LIB-$(MODULE))
endif # PLUGIN
###############################################
# Clean target, removes all object files. This looks a bit hackish, as we have to
# copy the content of MODULE_OBJS to another unique variable (the next module.mk
# will overwrite it after all). The same for the libMODULE.a library file.
###############################################
clean: clean-$(MODULE)
clean-$(MODULE): clean-% :
-$(RM) $(MODULE_OBJS-$*) $(MODULE_LIB-$*) $(PLUGIN-$*) $(TOOL-$*)
.PHONY: clean-$(MODULE) $(MODULE)
endif # TOOL