2
# Loads my- and config-files, links them together, and infers the build model.
5
# Author: Eldar Abusalimov
9
MYFILES_PATH := mk/ src/ platform/ project/ third-party/
11
ifneq ($(wildcard ext_project/),)
12
MYFILES_PATH += ext_project/
16
$(shell find $(MYFILES_PATH) -depth \
17
\( -name Mybuild -o -name \*.my \) -print)
19
CONFIGFILES_PATH := $(CONF_DIR)
20
CONFIGFILES := $(wildcard $(CONFIGFILES_PATH)/mods.conf)
22
ifeq ($(strip $(CONFIGFILES)),)
23
$(error No config files were found in '$(CONFIGFILES_PATH)')
26
ifneq ($(word 2,$(CONFIGFILES)),)
27
$(error Handling multiplie config files is not implemented: '$(CONFIGFILES)')
31
# Directories where to put generated scripts.
34
$(error CACHE_DIR is not defined, \
35
do not include this script directly, use mk/load.mk instead)
38
export MYBUILD_CACHE_DIR := $(CACHE_DIR)/mybuild
39
export MYBUILD_FILES_CACHE_DIR := $(MYBUILD_CACHE_DIR)/files
46
annotations_core_mk := $(MYBUILD_FILES_CACHE_DIR)/annotations_core.mk
47
$(annotations_core_mk) : MAKEFILES := $(mk_annotations_core) $(mk_annotations_handlers_mk)
48
$(annotations_core_mk) :
49
@echo ' ANNOTATION CORE'
50
@$(MAKE) -f mk/script/mk-persist.mk \
51
PERSIST_OBJECTS='$$(call new,AnnotationsCore,$(mk_annotations_handlers))' \
52
PERSIST_REALLOC='hnd' \
53
PERSIST_VARIABLE='annotationsCore' \
54
ALLOC_SCOPE='hnd' > $@
55
load_mybuild_files += $(annotations_core_mk)
59
$(patsubst $(abspath ./%),$(MYBUILD_FILES_CACHE_DIR)/%.mk, \
60
$(abspath $(MYFILES)))
61
$(myfiles_mk) : recipe_tag := MYFILE
62
$(myfiles_mk) : MAKEFILES := $(mk_mybuild_myfile)
63
$(myfiles_mk) : PERSIST_OBJECTS = $$(call new,MyFileResource,$<)
67
$(patsubst $(abspath ./%),$(MYBUILD_FILES_CACHE_DIR)/%.mk, \
68
$(abspath $(CONFIGFILES)))
69
$(configfiles_mk) : recipe_tag := CONFIGFILE
70
$(configfiles_mk) : MAKEFILES := $(mk_mybuild_configfile)
71
$(configfiles_mk) : PERSIST_OBJECTS = $$(call new,ConfigFileResource,$<)
73
# Defaults, must be overridden with target-specific variables.
74
$(myfiles_mk) $(configfiles_mk) : export PERSIST_OBJECTS ?=
75
$(myfiles_mk) $(configfiles_mk) : export MAKEFILES ?=
77
$(myfiles_mk) $(configfiles_mk) : $$(MAKEFILES)
78
$(myfiles_mk) $(configfiles_mk) : mk/load-mybuild.inc.mk
79
$(myfiles_mk) $(configfiles_mk) : mk/script/mk-persist.mk
80
$(myfiles_mk) $(configfiles_mk) : | $$(@D)/.
82
$(myfiles_mk) $(configfiles_mk) : $(MYBUILD_FILES_CACHE_DIR)/%.mk : %
83
@echo ' $(recipe_tag) $<'
84
@SCOPE=`echo '$<' | $(MD5) | cut -c -8`; \
85
$(MAKE) -f mk/script/mk-persist.mk ALLOC_SCOPE="@$$SCOPE" > $@ && \
86
echo '__resource-$@ := '".obj1@$$SCOPE" >> $@
89
# Linking files together.
93
export myfiles_model_mk := $(MYBUILD_CACHE_DIR)/myfiles-model.mk
94
myfiles_mk_cached_list_mk := $(MYBUILD_CACHE_DIR)/myfiles-list.mk
96
$(myfiles_model_mk) : MAKEFILES := $(mk_mybuild_myfile) $(myfiles_mk) \
97
$(annotations_core_mk) $(mk_annotations_handlers_mk)
99
@echo ' MYLINK: $(words $(myfiles_mk)) files $(__myfiles_model_stats)'
100
@$(MAKE) -f mk/script/mk-persist.mk \
101
PERSIST_OBJECTS='$$(call myfile_create_resource_set, \
102
$$(foreach f,$(myfiles_mk),$$(__resource-$$f)))' \
103
PERSIST_REALLOC='my' \
104
PERSIST_VARIABLE='__myfile_resource_set' \
106
@$(PRINTF) 'myfiles_mk_cached := %b' '$(myfiles_mk:%=\\\n\t%)' \
107
> $(myfiles_mk_cached_list_mk)
108
load_mybuild_files += $(myfiles_model_mk)
110
# Config-files are linked agains linked model of my-files.
111
export configfiles_model_mk := $(MYBUILD_CACHE_DIR)/configfiles-model.mk
113
$(configfiles_model_mk) : MAKEFILES := $(mk_mybuild) $(configfiles_mk) $(myfiles_model_mk)
114
$(configfiles_model_mk) :
116
@$(MAKE) -f mk/script/mk-persist.mk \
117
PERSIST_OBJECTS='$$(call config_create_resource_set, \
118
$$(foreach f,$(configfiles_mk),$$(__resource-$$f)), \
119
$$(__myfile_resource_set))' \
120
PERSIST_REALLOC='cfg' \
121
PERSIST_VARIABLE='__config_resource_set' \
123
load_mybuild_files += $(configfiles_model_mk)
125
# Build model is inferred from both configuration and myfiles models.
126
export build_model_mk := $(MYBUILD_CACHE_DIR)/build-model.mk
128
$(build_model_mk) : MAKEFILES := $(mk_mybuild) $(configfiles_model_mk) $(myfiles_model_mk) \
129
$(annotations_core_mk) $(mk_annotations_handlers_mk)
132
@$(MAKE) -f mk/script/mk-persist.mk \
133
PERSIST_OBJECTS='$$(call mybuild_create_build, \
134
$$(__config_resource_set))' \
135
PERSIST_REALLOC='bld' \
136
PERSIST_VARIABLE='build_model' \
138
load_mybuild_files += $(build_model_mk)
140
export load_mybuild_files := $(load_mybuild_files)
142
$(load_mybuild_files) : export MAKEFILES ?=
144
$(load_mybuild_files) : $$(MAKEFILES)
145
$(load_mybuild_files) : mk/load-mybuild.inc.mk
146
$(load_mybuild_files) : mk/script/mk-persist.mk
147
$(load_mybuild_files) : | $$(@D)/.
150
# Added/removed myfiles detection.
153
-include $(myfiles_mk_cached_list_mk)
156
export myfiles_mk_added := \
157
$(filter-out $(myfiles_mk_cached),$(myfiles_mk))
158
export myfiles_mk_removed := \
159
$(filter-out $(myfiles_mk),$(myfiles_mk_cached))
161
ifneq ($(or $(myfiles_mk_added),$(myfiles_mk_removed)),)
162
.PHONY : $(myfiles_model_mk)
163
ifneq ($(filter-out recursive,$(flavor myfiles_mk_cached)),)
164
$(myfiles_model_mk) : __myfiles_model_stats := ($(if \
165
$(myfiles_mk_added),$(words $(myfiles_mk_added)) added)$(and \
166
$(myfiles_mk_added),$(myfiles_mk_removed),$(if ,,, ))$(if \
167
$(myfiles_mk_removed),$(words $(myfiles_mk_removed)) removed))
171
$(myfiles_model_mk) : __myfiles_model_stats ?=