embox

Форк
0
/
load-mybuild.inc.mk 
171 строка · 5.5 Кб
1
#
2
# Loads my- and config-files, links them together, and infers the build model.
3
#
4
#   Date: Feb 9, 2012
5
# Author: Eldar Abusalimov
6
# Author: Anton Kozlov
7
#
8

9
MYFILES_PATH := mk/ src/ platform/ project/ third-party/
10

11
ifneq ($(wildcard ext_project/),)
12
MYFILES_PATH += ext_project/
13
endif
14

15
MYFILES := \
16
	$(shell find $(MYFILES_PATH) -depth \
17
		\( -name Mybuild -o -name \*.my \) -print)
18

19
CONFIGFILES_PATH := $(CONF_DIR)
20
CONFIGFILES := $(wildcard $(CONFIGFILES_PATH)/mods.conf)
21

22
ifeq ($(strip $(CONFIGFILES)),)
23
$(error No config files were found in '$(CONFIGFILES_PATH)')
24
endif
25

26
ifneq ($(word 2,$(CONFIGFILES)),)
27
$(error Handling multiplie config files is not implemented: '$(CONFIGFILES)')
28
endif
29

30
#
31
# Directories where to put generated scripts.
32
#
33
ifndef CACHE_DIR
34
$(error CACHE_DIR is not defined, \
35
	do not include this script directly, use mk/load.mk instead)
36
endif
37

38
export MYBUILD_CACHE_DIR       := $(CACHE_DIR)/mybuild
39
export MYBUILD_FILES_CACHE_DIR := $(MYBUILD_CACHE_DIR)/files
40

41
#
42
# Generated artifacts.
43
#
44

45

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)
56

57
# My-files.
58
myfiles_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,$<)
64

65
# Config-files.
66
configfiles_mk := \
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,$<)
72

73
# Defaults, must be overridden with target-specific variables.
74
$(myfiles_mk) $(configfiles_mk) : export PERSIST_OBJECTS ?=
75
$(myfiles_mk) $(configfiles_mk) : export MAKEFILES ?=
76

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)/.
81

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" >> $@
87

88
#
89
# Linking files together.
90
#
91

92
# My-files.
93
export myfiles_model_mk := $(MYBUILD_CACHE_DIR)/myfiles-model.mk
94
myfiles_mk_cached_list_mk := $(MYBUILD_CACHE_DIR)/myfiles-list.mk
95

96
$(myfiles_model_mk) : MAKEFILES := $(mk_mybuild_myfile) $(myfiles_mk) \
97
	$(annotations_core_mk) $(mk_annotations_handlers_mk)
98
$(myfiles_model_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' \
105
		ALLOC_SCOPE='z' > $@
106
	@$(PRINTF) 'myfiles_mk_cached := %b' '$(myfiles_mk:%=\\\n\t%)' \
107
		> $(myfiles_mk_cached_list_mk)
108
load_mybuild_files += $(myfiles_model_mk)
109

110
# Config-files are linked agains linked model of my-files.
111
export configfiles_model_mk := $(MYBUILD_CACHE_DIR)/configfiles-model.mk
112

113
$(configfiles_model_mk) : MAKEFILES := $(mk_mybuild) $(configfiles_mk) $(myfiles_model_mk)
114
$(configfiles_model_mk) :
115
	@echo ' CONFIGLINK'
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' \
122
		ALLOC_SCOPE='y' > $@
123
load_mybuild_files += $(configfiles_model_mk)
124

125
# Build model is inferred from both configuration and myfiles models.
126
export build_model_mk := $(MYBUILD_CACHE_DIR)/build-model.mk
127

128
$(build_model_mk) : MAKEFILES := $(mk_mybuild) $(configfiles_model_mk) $(myfiles_model_mk) \
129
	$(annotations_core_mk) $(mk_annotations_handlers_mk)
130
$(build_model_mk) :
131
	@echo ' BUILDMODEL'
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' \
137
		ALLOC_SCOPE='x' > $@
138
load_mybuild_files += $(build_model_mk)
139

140
export load_mybuild_files := $(load_mybuild_files)
141

142
$(load_mybuild_files) : export MAKEFILES ?=
143

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)/.
148

149
#
150
# Added/removed myfiles detection.
151
#
152

153
-include $(myfiles_mk_cached_list_mk)
154
myfiles_mk_cached ?=
155

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))
160

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))
168
endif
169
endif
170

171
$(myfiles_model_mk) : __myfiles_model_stats ?=
172

173

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.