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
18 define int_get_all_dependencies
19 $(sort $(foreach dep
,$(2),$(2) $(call int_get_all_dependencies
,$(1),$($(dep
)_dependencies
))))
23 (test -f
$$($(1)_source_dir
)/$(4) || \
24 ( mkdir
-p
$$($(1)_download_dir
) && echo Fetching
$(1)...
&& \
25 ( $(build_DOWNLOAD
) "$$($(1)_download_dir)/$(4).temp" "$(2)/$(3)" || \
26 $(build_DOWNLOAD
) "$$($(1)_download_dir)/$(4).temp" "$(FALLBACK_DOWNLOAD_PATH)/$(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
) ))
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
))
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
)
46 #compute package-specific paths
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
)
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
))
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 ?
=
84 all_sources
+=$$($(1)_fetched
)
86 #$(foreach dep_target,$($(1)_all_dependencies),$(eval $(1)_dependency_targets=$($(dep_target)_cached)))
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
))
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
))
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
))
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
))
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
))
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
))
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
))
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)"
134 $(1)_autoconf
+= NM
="$$($(1)_nm)"
136 ifneq ($($(1)_ranlib
),)
137 $(1)_autoconf
+= RANLIB
="$$($(1)_ranlib)"
140 $(1)_autoconf
+= AR
="$$($(1)_ar)"
142 ifneq ($($(1)_cflags
),)
143 $(1)_autoconf
+= CFLAGS
="$$($(1)_cflags)"
145 ifneq ($($(1)_cxxflags
),)
146 $(1)_autoconf
+= CXXFLAGS
="$$($(1)_cxxflags)"
148 ifneq ($($(1)_cppflags
),)
149 $(1)_autoconf
+= CPPFLAGS
="$$($(1)_cppflags)"
151 ifneq ($($(1)_ldflags
),)
152 $(1)_autoconf
+= LDFLAGS
="$$($(1)_ldflags)"
158 $(AT
)mkdir
-p
$$(@D
) $(SOURCES_PATH
)
161 $(AT
)cd
$$(@D
); $(call
$(1)_fetch_cmds
,$(1))
162 $(AT
)cd
$($(1)_source_dir
); $(foreach source
,$($(1)_all_sources
),$(build_SHA256SUM
) $(source
) >> $$(@
);)
164 $($(1)_extracted
): |
$($(1)_fetched
)
165 $(AT
)echo Extracting
$(1)...
167 $(AT
)cd
$$(@D
); $(call
$(1)_extract_cmds
,$(1))
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))
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
); )
179 $(AT
)+cd
$$(@D
); $($(1)_config_env
) $(call
$(1)_config_cmds
, $(1))
181 $($(1)_built
): |
$($(1)_configured
)
182 $(AT
)echo Building
$(1)...
184 $(AT
)+cd
$$(@D
); $($(1)_build_env
) $(call
$(1)_build_cmds
, $(1))
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
)
192 $($(1)_postprocessed
): |
$($(1)_staged
)
193 $(AT
)echo Postprocessing
$(1)...
194 $(AT
)cd
$($(1)_staging_prefix_dir
); $(call
$(1)_postprocess_cmds
)
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
-
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
) > $$(@
)
207 $(1): |
$($(1)_cached_checksum
)
208 .SECONDARY
: $($(1)_cached
) $($(1)_postprocessed
) $($(1)_staged
) $($(1)_built
) $($(1)_configured
) $($(1)_preprocessed
) $($(1)_extracted
) $($(1)_fetched
)
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.
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
)))
222 #set overridable defaults
223 $(foreach package
,$(all_packages
),$(eval
$(call int_vars
,$(package
))))
225 #include package files
226 $(foreach package
,$(all_packages
),$(eval
include packages
/$(package
).mk
))
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
))))
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
))))
234 #compute final vars after reading package vars
235 $(foreach package
,$(all_packages
),$(eval
$(call int_config_attach_build_config
,$(package
))))
237 #create build targets
238 $(foreach package
,$(all_packages
),$(eval
$(call int_add_cmds
,$(package
))))
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
) ))