2 # Acess2 Global Makefile
7 OBJECT_DIR = obj-$(ARCH)
10 # Functions used later
12 $(patsubst %,%$(OBJECT_SUFFIX).o,$(filter %.c,$1)) \
13 $(patsubst %,%$(OBJECT_SUFFIX).o,$(filter %.cpp,$1)) \
14 $(patsubst %,%$(OBJECT_SUFFIX).o,$(filter %.cc,$1)) \
15 $(patsubst %,%$(OBJECT_SUFFIX).o,$(filter %.S,$1)) \
16 $(patsubst %,%$(OBJECT_SUFFIX).o,$(filter %.asm,$1))
17 fcn_mkobj = $(addprefix $(DIR)$(OBJECT_DIR)/,$(patsubst $(SOURCE_DIR)%,%,$1))
18 fcn_src2obj = $(call fcn_mkobj, $(call fcn_src2obj_int,$1))
20 # Start of Voodoo code
21 SUB_DIRS = $(wildcard */rules.mk)
23 _REL_POS := $(dir $(lastword $(MAKEFILE_LIST)))
24 BASE = $(abspath $(_REL_POS))/
27 DEFAULT_RULES := $(dir $(SUB_DIRS))
29 # Build part of the tree
30 DEFAULT_RULES := $(abspath $(pwd)/$(_REL_POS))
33 include $(BASE)Makefile.cfg
37 all: $(BASE)obj_rules.mk $(addprefix all-,$(DEFAULT_RULES))
38 clean: $(addprefix clean-,$(DEFAULT_RULES))
46 fcn_obj2src = $(subst $(OBJECT_DIR)/,$(SOURCE_DIR)/,$(patsubst %$(OBJECT_SUFFIX).o,%,$1))
48 fcn_getlibs = $(patsubst -l%,$(OUTPUTDIR)/Libs/lib%.so,$(filter -l%,$(LDFLAGS-$(_DIR-$1))))
50 fcn_mkrule = $(eval $f: $(call fcn_getlibs,$f) $(call fcn_obj2src,$f))
52 $(foreach file,$(filter %.cpp$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
53 $(foreach file,$(filter %.cc$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
54 $(foreach file,$(filter %.c$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
55 $(foreach file,$(filter %.S$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
56 $(foreach file,$(filter %.asm$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
58 .PHONY: $(BASE)obj_rules.mk
60 @echo "$(foreach f,$(filter %.cpp$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" > $@
61 @echo "$(foreach f,$(filter %.cc$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
62 @echo "$(foreach f,$(filter %.c$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
63 @echo "$(foreach f,$(filter %.S$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
64 @echo "$(foreach f,$(filter %.asm$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
65 include $(BASE)obj_rules.mk
68 # --- Object Files ---
70 %.cpp$(OBJECT_SUFFIX).o:
71 $(eval _dir=$(_DIR-$@))
72 $(eval <=$(call fcn_obj2src,$@))
75 @$(CCPP) $(CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS-$(_dir)) $(CPPFLAGS-$(_dir))-c $(_src) -o $@
77 %.cc$(OBJECT_SUFFIX).o:
78 $(eval _dir=$(_DIR-$@))
79 $(eval _src=$(call fcn_obj2src,$@))
82 @$(CCPP) $(CXXFLAGS) $(CXXFLAGS-$(_dir)) $(CPPFLAGS-$(_dir)) -c $(_src) -o $@
84 %.c$(OBJECT_SUFFIX).o:
85 $(eval _dir=$(_DIR-$@))
86 $(eval _src=$(call fcn_obj2src,$@))
89 @$(CC) $(CFLAGS) $(CPPFLAGS) $(CFLAGS-$(_dir)) $(CPPFLAGS-$(_dir)) -c $(_src) -o $@
91 %.S$(OBJECT_SUFFIX).o:
92 $(eval _dir=$(_DIR-$@))
93 $(eval _src=$(call fcn_obj2src,$@))
96 @$(AS) $(ASFLAGS) $(ASFLAGS-$(_dir)) -o $@ $(_src)
99 %.asm$(OBJECT_SUFFIX).o:
100 $(eval _dir=$(_DIR-$@))
101 $(eval _src=$(call fcn_obj2src,$@))
104 @$(AS) $(ASFLAGS) $(ASFLAGS-$(_dir)) -o $@ $(_src)
108 # Static Library (.a)
110 $(eval _dir=$(_DIR-$@))
113 @$(AR) ru $@ $(OBJ-$(_dir))
114 # Dynamic Library (.so)
116 $(eval _dir=$(_DIR-$@))
117 @echo [LD] -shared -o $@
118 @$(LD) $(LDFLAGS) -shared -soname $(basename $@) -o $@ $(filter %.o,$^) $(LDFLAGS-$(_dir))
121 $(eval _dir=$(_DIR-$@))
123 @$(LD) $(LDFLAGS) -o $@ $(OBJ-$(_dir)) $(LDFLAGS-$(_dir))
124 @$(CP) $@ $(@:%.bin=%)
126 $(eval _dir=$(_DIR-$@))
128 @$(LD) $(LDFLAGS) -o $@ $(OBJ-$(_dir)) $(LDFLAGS-$(_dir))