]> Git Repo - VerusCoin.git/blob - depends/funcs.mk
Auto merge of #2055 - str4d:1545-note-decryption-error-class, r=daira
[VerusCoin.git] / depends / funcs.mk
1 define int_vars
2 #Set defaults for vars which may be overridden per-package
3 $(1)_cc=$($($(1)_type)_CC)
4 $(1)_cxx=$($($(1)_type)_CXX)
5 $(1)_objc=$($($(1)_type)_OBJC)
6 $(1)_objcxx=$($($(1)_type)_OBJCXX)
7 $(1)_ar=$($($(1)_type)_AR)
8 $(1)_ranlib=$($($(1)_type)_RANLIB)
9 $(1)_libtool=$($($(1)_type)_LIBTOOL)
10 $(1)_nm=$($($(1)_type)_NM)
11 $(1)_cflags=$($($(1)_type)_CFLAGS) $($($(1)_type)_$(release_type)_CFLAGS)
12 $(1)_cxxflags=$($($(1)_type)_CXXFLAGS) $($($(1)_type)_$(release_type)_CXXFLAGS)
13 $(1)_ldflags=$($($(1)_type)_LDFLAGS) $($($(1)_type)_$(release_type)_LDFLAGS) -L$($($(1)_type)_prefix)/lib
14 $(1)_cppflags=$($($(1)_type)_CPPFLAGS) $($($(1)_type)_$(release_type)_CPPFLAGS) -I$($($(1)_type)_prefix)/include
15 $(1)_recipe_hash:=
16 endef
17
18 define int_get_all_dependencies
19 $(sort $(foreach dep,$(2),$(2) $(call int_get_all_dependencies,$(1),$($(dep)_dependencies))))
20 endef
21
22 define fetch_file
23 (test -f $$($(1)_source_dir)/$(4) || \
24   ( mkdir -p $$($(1)_download_dir) && echo Fetching $(1)... && \
25   ( $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(4)" || \
26     $(build_DOWNLOAD) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" ) && \
27     echo "$(5)  $$($(1)_download_dir)/$(4).temp" > $$($(1)_download_dir)/.$(4).hash && \
28     $(build_SHA256SUM) -c $$($(1)_download_dir)/.$(4).hash && \
29     mv $$($(1)_download_dir)/$(4).temp $$($(1)_source_dir)/$(4) && \
30     rm -rf $$($(1)_download_dir) ))
31 endef
32
33 define int_get_build_recipe_hash
34 $(eval $(1)_all_file_checksums:=$(shell $(build_SHA256SUM) $(meta_depends) packages/$(1).mk $(addprefix $(PATCHES_PATH)/$(1)/,$($(1)_patches)) | cut -d" " -f1))
35 $(eval $(1)_recipe_hash:=$(shell echo -n "$($(1)_all_file_checksums)" | $(build_SHA256SUM) | cut -d" " -f1))
36 endef
37
38 define int_get_build_id
39 $(eval $(1)_dependencies += $($(1)_$(host_arch)_$(host_os)_dependencies) $($(1)_$(host_os)_dependencies))
40 $(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($(1)_dependencies)))
41 $(foreach dep,$($(1)_all_dependencies),$(eval $(1)_build_id_deps+=$(dep)-$($(dep)_version)-$($(dep)_recipe_hash)))
42 $(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps))
43 $(eval $(1)_build_id:=$(shell echo -n "$($(1)_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)))
44 final_build_id_long+=$($(package)_build_id_long)
45
46 #compute package-specific paths
47 $(1)_build_subdir?=.
48 $(1)_download_file?=$($(1)_file_name)
49 $(1)_source_dir:=$(SOURCES_PATH)
50 $(1)_source:=$$($(1)_source_dir)/$($(1)_file_name)
51 $(1)_staging_dir=$(base_staging_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)
52 $(1)_staging_prefix_dir:=$$($(1)_staging_dir)$($($(1)_type)_prefix)
53 $(1)_extract_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)
54 $(1)_download_dir:=$(base_download_dir)/$(1)-$($(1)_version)
55 $(1)_build_dir:=$$($(1)_extract_dir)/$$($(1)_build_subdir)
56 $(1)_cached_checksum:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz.hash
57 $(1)_patch_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)/.patches-$($(1)_build_id)
58 $(1)_prefixbin:=$($($(1)_type)_prefix)/bin/
59 $(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz
60 $(1)_all_sources=$($(1)_file_name) $($(1)_extra_sources)
61
62 #stamps
63 $(1)_fetched=$(SOURCES_PATH)/download-stamps/.stamp_fetched-$(1)-$($(1)_file_name).hash
64 $(1)_extracted=$$($(1)_extract_dir)/.stamp_extracted
65 $(1)_preprocessed=$$($(1)_extract_dir)/.stamp_preprocessed
66 $(1)_cleaned=$$($(1)_extract_dir)/.stamp_cleaned
67 $(1)_built=$$($(1)_build_dir)/.stamp_built
68 $(1)_configured=$$($(1)_build_dir)/.stamp_configured
69 $(1)_staged=$$($(1)_staging_dir)/.stamp_staged
70 $(1)_postprocessed=$$($(1)_staging_prefix_dir)/.stamp_postprocessed
71 $(1)_download_path_fixed=$(subst :,\:,$$($(1)_download_path))
72
73
74 #default commands
75 $(1)_fetch_cmds ?= $(call fetch_file,$(1),$(subst \:,:,$$($(1)_download_path_fixed)),$$($(1)_download_file),$($(1)_file_name),$($(1)_sha256_hash))
76 $(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash)  $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash &&  $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && tar --strip-components=1 -xf $$($(1)_source)
77 $(1)_preprocess_cmds ?=
78 $(1)_build_cmds ?=
79 $(1)_config_cmds ?=
80 $(1)_stage_cmds ?=
81 $(1)_set_vars ?=
82
83
84 all_sources+=$$($(1)_fetched)
85 endef
86 #$(foreach dep_target,$($(1)_all_dependencies),$(eval $(1)_dependency_targets=$($(dep_target)_cached)))
87
88
89 define int_config_attach_build_config
90 $(eval $(call $(1)_set_vars,$(1)))
91 $(1)_cflags+=$($(1)_cflags_$(release_type))
92 $(1)_cflags+=$($(1)_cflags_$(host_arch)) $($(1)_cflags_$(host_arch)_$(release_type))
93 $(1)_cflags+=$($(1)_cflags_$(host_os)) $($(1)_cflags_$(host_os)_$(release_type))
94 $(1)_cflags+=$($(1)_cflags_$(host_arch)_$(host_os)) $($(1)_cflags_$(host_arch)_$(host_os)_$(release_type))
95
96 $(1)_cxxflags+=$($(1)_cxxflags_$(release_type))
97 $(1)_cxxflags+=$($(1)_cxxflags_$(host_arch)) $($(1)_cxxflags_$(host_arch)_$(release_type))
98 $(1)_cxxflags+=$($(1)_cxxflags_$(host_os)) $($(1)_cxxflags_$(host_os)_$(release_type))
99 $(1)_cxxflags+=$($(1)_cxxflags_$(host_arch)_$(host_os)) $($(1)_cxxflags_$(host_arch)_$(host_os)_$(release_type))
100
101 $(1)_cppflags+=$($(1)_cppflags_$(release_type))
102 $(1)_cppflags+=$($(1)_cppflags_$(host_arch)) $($(1)_cppflags_$(host_arch)_$(release_type))
103 $(1)_cppflags+=$($(1)_cppflags_$(host_os)) $($(1)_cppflags_$(host_os)_$(release_type))
104 $(1)_cppflags+=$($(1)_cppflags_$(host_arch)_$(host_os)) $($(1)_cppflags_$(host_arch)_$(host_os)_$(release_type))
105
106 $(1)_ldflags+=$($(1)_ldflags_$(release_type))
107 $(1)_ldflags+=$($(1)_ldflags_$(host_arch)) $($(1)_ldflags_$(host_arch)_$(release_type))
108 $(1)_ldflags+=$($(1)_ldflags_$(host_os)) $($(1)_ldflags_$(host_os)_$(release_type))
109 $(1)_ldflags+=$($(1)_ldflags_$(host_arch)_$(host_os)) $($(1)_ldflags_$(host_arch)_$(host_os)_$(release_type))
110
111 $(1)_build_opts+=$$($(1)_build_opts_$(release_type))
112 $(1)_build_opts+=$$($(1)_build_opts_$(host_arch)) $$($(1)_build_opts_$(host_arch)_$(release_type))
113 $(1)_build_opts+=$$($(1)_build_opts_$(host_os)) $$($(1)_build_opts_$(host_os)_$(release_type))
114 $(1)_build_opts+=$$($(1)_build_opts_$(host_arch)_$(host_os)) $$($(1)_build_opts_$(host_arch)_$(host_os)_$(release_type))
115
116 $(1)_config_opts+=$$($(1)_config_opts_$(release_type))
117 $(1)_config_opts+=$$($(1)_config_opts_$(host_arch)) $$($(1)_config_opts_$(host_arch)_$(release_type))
118 $(1)_config_opts+=$$($(1)_config_opts_$(host_os)) $$($(1)_config_opts_$(host_os)_$(release_type))
119 $(1)_config_opts+=$$($(1)_config_opts_$(host_arch)_$(host_os)) $$($(1)_config_opts_$(host_arch)_$(host_os)_$(release_type))
120
121 $(1)_config_env+=$$($(1)_config_env_$(release_type))
122 $(1)_config_env+=$($(1)_config_env_$(host_arch)) $($(1)_config_env_$(host_arch)_$(release_type))
123 $(1)_config_env+=$($(1)_config_env_$(host_os)) $($(1)_config_env_$(host_os)_$(release_type))
124 $(1)_config_env+=$($(1)_config_env_$(host_arch)_$(host_os)) $($(1)_config_env_$(host_arch)_$(host_os)_$(release_type))
125
126 $(1)_config_env+=PKG_CONFIG_LIBDIR=$($($(1)_type)_prefix)/lib/pkgconfig
127 $(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig
128 $(1)_config_env+=PATH=$(build_prefix)/bin:$(PATH)
129 $(1)_build_env+=PATH=$(build_prefix)/bin:$(PATH)
130 $(1)_stage_env+=PATH=$(build_prefix)/bin:$(PATH)
131 $(1)_autoconf=./configure --host=$($($(1)_type)_host) --disable-dependency-tracking --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)"
132
133 ifneq ($($(1)_nm),)
134 $(1)_autoconf += NM="$$($(1)_nm)"
135 endif
136 ifneq ($($(1)_ranlib),)
137 $(1)_autoconf += RANLIB="$$($(1)_ranlib)"
138 endif
139 ifneq ($($(1)_ar),)
140 $(1)_autoconf += AR="$$($(1)_ar)"
141 endif
142 ifneq ($($(1)_cflags),)
143 $(1)_autoconf += CFLAGS="$$($(1)_cflags)"
144 endif
145 ifneq ($($(1)_cxxflags),)
146 $(1)_autoconf += CXXFLAGS="$$($(1)_cxxflags)"
147 endif
148 ifneq ($($(1)_cppflags),)
149 $(1)_autoconf += CPPFLAGS="$$($(1)_cppflags)"
150 endif
151 ifneq ($($(1)_ldflags),)
152 $(1)_autoconf += LDFLAGS="$$($(1)_ldflags)"
153 endif
154 endef
155
156 define int_add_cmds
157 $($(1)_fetched):
158         $(AT)mkdir -p $$(@D) $(SOURCES_PATH)
159         $(AT)rm -f $$@
160         $(AT)touch $$@
161         $(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1))
162         $(AT)cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);)
163         $(AT)touch $$@
164 $($(1)_extracted): | $($(1)_fetched)
165         $(AT)echo Extracting $(1)...
166         $(AT)mkdir -p $$(@D)
167         $(AT)cd $$(@D); $(call $(1)_extract_cmds,$(1))
168         $(AT)touch $$@
169 $($(1)_preprocessed): | $($(1)_dependencies) $($(1)_extracted)
170         $(AT)echo Preprocessing $(1)...
171         $(AT)mkdir -p $$(@D) $($(1)_patch_dir)
172         $(AT)$(foreach patch,$($(1)_patches),cd $(PATCHES_PATH)/$(1); cp $(patch) $($(1)_patch_dir) ;)
173         $(AT)cd $$(@D); $(call $(1)_preprocess_cmds, $(1))
174         $(AT)touch $$@
175 $($(1)_configured): | $($(1)_preprocessed)
176         $(AT)echo Configuring $(1)...
177         $(AT)rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), tar xf $($(package)_cached); )
178         $(AT)mkdir -p $$(@D)
179         $(AT)+cd $$(@D); $($(1)_config_env) $(call $(1)_config_cmds, $(1))
180         $(AT)touch $$@
181 $($(1)_built): | $($(1)_configured)
182         $(AT)echo Building $(1)...
183         $(AT)mkdir -p $$(@D)
184         $(AT)+cd $$(@D); $($(1)_build_env) $(call $(1)_build_cmds, $(1))
185         $(AT)touch $$@
186 $($(1)_staged): | $($(1)_built)
187         $(AT)echo Staging $(1)...
188         $(AT)mkdir -p $($(1)_staging_dir)/$(host_prefix)
189         $(AT)cd $($(1)_build_dir); $($(1)_stage_env) $(call $(1)_stage_cmds, $(1))
190         $(AT)rm -rf $($(1)_extract_dir)
191         $(AT)touch $$@
192 $($(1)_postprocessed): | $($(1)_staged)
193         $(AT)echo Postprocessing $(1)...
194         $(AT)cd $($(1)_staging_prefix_dir); $(call $(1)_postprocess_cmds)
195         $(AT)touch $$@
196 $($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed)
197         $(AT)echo Caching $(1)...
198         $(AT)cd $$($(1)_staging_dir)/$(host_prefix); find . | sort | tar --no-recursion -czf $$($(1)_staging_dir)/$$(@F) -T -
199         $(AT)mkdir -p $$(@D)
200         $(AT)rm -rf $$(@D) && mkdir -p $$(@D)
201         $(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@)
202         $(AT)rm -rf $($(1)_staging_dir)
203 $($(1)_cached_checksum): $($(1)_cached)
204         $(AT)cd $$(@D); $(build_SHA256SUM) $$(<F) > $$(@)
205
206 .PHONY: $(1)
207 $(1): | $($(1)_cached_checksum)
208 .SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)
209
210 endef
211
212 # These functions create the build targets for each package. They must be
213 # broken down into small steps so that each part is done for all packages
214 # before moving on to the next step. Otherwise, a package's info
215 # (build-id for example) would only be available to another package if it
216 # happened to be computed already.
217
218 #set the type for host/build packages.
219 $(foreach native_package,$(native_packages),$(eval $(native_package)_type=build))
220 $(foreach package,$(packages),$(eval $(package)_type=$(host_arch)_$(host_os)))
221
222 #set overridable defaults
223 $(foreach package,$(all_packages),$(eval $(call int_vars,$(package))))
224
225 #include package files
226 $(foreach package,$(all_packages),$(eval include packages/$(package).mk))
227
228 #compute a hash of all files that comprise this package's build recipe
229 $(foreach package,$(all_packages),$(eval $(call int_get_build_recipe_hash,$(package))))
230
231 #generate a unique id for this package, incorporating its dependencies as well
232 $(foreach package,$(all_packages),$(eval $(call int_get_build_id,$(package))))
233
234 #compute final vars after reading package vars
235 $(foreach package,$(all_packages),$(eval $(call int_config_attach_build_config,$(package))))
236
237 #create build targets
238 $(foreach package,$(all_packages),$(eval $(call int_add_cmds,$(package))))
239
240 #special exception: if a toolchain package exists, all non-native packages depend on it
241 $(foreach package,$(packages),$(eval $($(package)_unpacked): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) ))
This page took 0.034828 seconds and 4 git commands to generate.