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 $(_REL_POS)../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))
49 $(foreach file,$(filter %.cpp$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(eval $f: $(call fcn_obj2src,$f)))
50 $(foreach file,$(filter %.cc$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(eval $f: $(call fcn_obj2src,$f)))
51 $(foreach file,$(filter %.c$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(eval $f: $(call fcn_obj2src,$f)))
52 $(foreach file,$(filter %.S$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(eval $f: $(call fcn_obj2src,$f))))
53 $(foreach file,$(filter %.asm$(OBJECT_SUFFIX).o,$(ALL_OBJ)), $(eval $f: $(call fcn_obj2src,$f)))
55 .PHONY: $(BASE)obj_rules.mk
57 @echo "$(foreach f,$(filter %.cpp$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" > $@
58 @echo "$(foreach f,$(filter %.cc$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
59 @echo "$(foreach f,$(filter %.c$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
60 @echo "$(foreach f,$(filter %.S$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
61 @echo "$(foreach f,$(filter %.asm$(OBJECT_SUFFIX).o,$(ALL_OBJ)),$f: $(call fcn_obj2src,$f)\n)" >> $@
62 include $(BASE)obj_rules.mk
65 # --- Object Files ---
67 %.cpp$(OBJECT_SUFFIX).o:
68 $(eval _dir=$(dir $(subst $(OBJECT_DIR)/,,$*)))
69 $(eval <=$(call fcn_obj2src,$@))
72 @$(CCPP) $(CXXFLAGS) $(CPPFLAGS) $(CXXFLAGS-$(_dir)) $(CPPFLAGS-$(_dir))-c $(_src) -o $@
74 %.cc$(OBJECT_SUFFIX).o:
75 $(eval _dir=$(dir $(subst $(OBJECT_DIR)/,,$*)))
76 $(eval _src=$(call fcn_obj2src,$@))
79 @$(CCPP) $(CXXFLAGS) $(CXXFLAGS-$(_dir)) $(CPPFLAGS-$(_dir)) -c $(_src) -o $@
81 %.c$(OBJECT_SUFFIX).o:
82 $(eval _dir=$(dir $(subst $(OBJECT_DIR)/,,$*)))
83 $(eval _src=$(call fcn_obj2src,$@))
86 @$(CC) $(CFLAGS) $(CPPFLAGS) $(CFLAGS-$(_dir)) $(CPPFLAGS-$(_dir)) -c $(_src) -o $@
88 %.S$(OBJECT_SUFFIX).o:
89 $(eval _dir=$(dir $(subst $(OBJECT_DIR)/,,$*)))
90 $(eval _src=$(call fcn_obj2src,$@))
93 @$(AS) $(ASFLAGS) $(ASFLAGS-$(_dir)) -o $@ $(_src)
96 %.asm$(OBJECT_SUFFIX).o:
97 $(eval _dir=$(dir $(subst $(OBJECT_DIR)/,,$*)))
98 $(eval _src=$(call fcn_obj2src,$@))
101 @$(AS) $(ASFLAGS) $(ASFLAGS-$(_dir)) -o $@ $(_src)
105 # Static Library (.a)
107 $(eval _dir=$(subst $(OBJECT_DIR),,$(dir $<)))
110 @$(AR) ru $@ $(OBJ-$(_dir))
111 # Dynamic Library (.so)
113 $(eval _dir=$(subst $(OBJECT_DIR),,$(dir $<)))
114 @echo [LD] -shared -o $@
115 @$(LD) $(LDFLAGS) -shared -soname $(basename $@) -o $@ $(filter %.o,$^) $(LDFLAGS-$(_dir))
118 $(eval _dir=$(subst $(OBJECT_DIR),,$(dir $<)))
120 @$(ld) $(LDFLAGS) -o $@ $(OBJ-$(_dir)) $(LDFLAGS-$(_dir))
121 @$(CP) $@ $(@:%.bin=%)