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))
19 fcn_obj2src = $(subst $(OBJECT_DIR),$(SOURCE_DIR),$(patsubst %$(OBJECT_SUFFIX).o,%,$1))
21 fcn_addbin = $(eval ALL_OBJ:=$(ALL_OBJ) $2) $(eval ALL_BIN:=$(ALL_BIN) $1) $(foreach f,$2 $1,$(eval _DIR-$f := $(DIR))) $(eval $1: $2) $(eval OBJ-$(DIR):=$(OBJ-$(DIR)) $2) $(eval BIN-$(DIR):=$(BIN-$(DIR)) $1)
23 # Start of Voodoo code
24 SUB_DIRS = $(wildcard */rules.mk)
26 _REL_POS := $(dir $(lastword $(MAKEFILE_LIST)))
27 BASE = $(abspath $(_REL_POS))/
30 DEFAULT_RULES := $(dir $(SUB_DIRS))
32 # Build part of the tree
33 DEFAULT_RULES := $(abspath $(pwd)/$(_REL_POS))
36 include $(BASE)Makefile.cfg
40 all: $(addprefix all-,$(DEFAULT_RULES))
41 clean: $(addprefix clean-,$(DEFAULT_RULES))
50 fcn_getlibs = $(patsubst -l%,$(OUTPUTDIR)Libs/lib%.so,$(filter -l%,$(LDFLAGS-$(_DIR-$1))))
52 fcn_mkrule = $(eval $1: $(call fcn_obj2src,$1))
53 $(foreach f,$(filter %.cpp$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
54 $(foreach f,$(filter %.cc$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
55 $(foreach f,$(filter %.c$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
56 $(foreach f,$(filter %.S$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
57 $(foreach f,$(filter %.asm$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(call fcn_mkrule,$f))
58 $(foreach f,$(ALL_BIN), $(eval $f: $(EXTRA_DEP-$(_DIR-$f)) $(call fcn_getlibs,$f)))
60 # --- Object Files ---
62 %.cpp$(OBJECT_SUFFIX).o:
63 $(eval _dir=$(_DIR-$@))
64 $(eval <=$(call fcn_obj2src,$@))
67 @$(CCPP) $(CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS-$(_dir)) $(CPPFLAGS-$(_dir))-c $(_src) -o $@
69 %.cc$(OBJECT_SUFFIX).o:
70 $(eval _dir=$(_DIR-$@))
71 $(eval _src=$(call fcn_obj2src,$@))
74 @$(CCPP) $(CXXFLAGS) $(CXXFLAGS-$(_dir)) $(CPPFLAGS-$(_dir)) -c $(_src) -o $@
76 %.c$(OBJECT_SUFFIX).o:
77 $(eval _dir=$(_DIR-$@))
78 $(eval _src=$(call fcn_obj2src,$@))
81 @$(CC) $(CFLAGS) $(CPPFLAGS) $(CFLAGS-$(_dir)) $(CPPFLAGS-$(_dir)) -c $(_src) -o $@
83 %.S$(OBJECT_SUFFIX).o:
84 $(eval _dir=$(_DIR-$@))
85 $(eval _src=$(call fcn_obj2src,$@))
88 @$(AS) $(ASFLAGS) $(ASFLAGS-$(_dir)) -o $@ $(_src)
91 %.asm$(OBJECT_SUFFIX).o:
92 $(eval _dir=$(_DIR-$@))
93 $(eval _src=$(call fcn_obj2src,$@))
96 @$(AS) $(ASFLAGS) $(ASFLAGS-$(_dir)) -o $@ $(_src)
100 # Static Library (.a)
102 $(eval _dir=$(_DIR-$@))
105 @$(AR) ru $@ $(OBJ-$(_dir))
106 # Dynamic Library (.so)
108 $(eval _dir=$(_DIR-$@))
109 @echo [LD] -shared -o $@
110 @$(LD) $(LDFLAGS) -shared -soname $(basename $@) -o $@ $(filter %.o,$^) $(LDFLAGS-$(_dir))
113 $(eval _dir=$(_DIR-$@))
115 @$(LD) $(LDFLAGS) -o $@ $(OBJ-$(_dir)) $(LDFLAGS-$(_dir))
116 @$(CP) $@ $(@:%.bin=%)
118 $(eval _dir=$(_DIR-$@))
120 @$(LD) $(LDFLAGS) -o $@ $(OBJ-$(_dir)) $(LDFLAGS-$(_dir))
122 -include $(ALL_OBJ:%=%.dep)