Inside Bitcoin
Opening the selected file…
Inside Bitcoin
Opening the selected file…
The code behind the network, with room to understand it.
Release published 2026-10-28 · Snapshot fetched 2026-11-01. Latest stable release at fetch time; development branches and Git history are excluded. Only the selected code window and visible folders load here.
251mkdir -p $$(@D) $(SOURCES_PATH)252rm -f $$@253cd $$(@D); $($(1)_fetch_cmds)254cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);)255touch $$@256$($(1)_extracted): | $($(1)_fetched)257echo Extracting $(1)...258mkdir -p $$(@D)259cd $$(@D); $($(1)_extract_cmds)260touch $$@261$($(1)_preprocessed): | $($(1)_extracted)262echo Preprocessing $(1)...263mkdir -p $$(@D) $($(1)_patch_dir)264$(foreach patch,$($(1)_patches),cd $($(1)_patches_path); cp $(patch) $($(1)_patch_dir) ;)265{ cd $$(@D); $($(1)_preprocess_cmds); } $$($(1)_logging)266touch $$@267$($(1)_configured): | $($(1)_dependencies) $($(1)_preprocessed)268echo Configuring $(1)...269rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), $(build_TAR) --no-same-owner -xf $($(package)_cached); )270mkdir -p $$($(1)_build_dir)271+{ cd $$($(1)_build_dir); export $($(1)_config_env); $($(1)_config_cmds); } $$($(1)_logging)272touch $$@273$($(1)_built): | $($(1)_configured)274echo Building $(1)...275mkdir -p $$(@D)276+{ cd $$(@D); export $($(1)_build_env); $($(1)_build_cmds); } $$($(1)_logging)277touch $$@278$($(1)_staged): | $($(1)_built)279echo Staging $(1)...280mkdir -p $($(1)_staging_dir)/$(host_prefix)281+{ cd $($(1)_build_dir); export $($(1)_stage_env); $($(1)_stage_cmds); } $$($(1)_logging)282rm -rf $($(1)_extract_dir)283touch $$@284$($(1)_postprocessed): | $($(1)_staged)285echo Postprocessing $(1)...286cd $($(1)_staging_prefix_dir); $($(1)_postprocess_cmds)287touch $$@288$($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed)289echo Caching $(1)...290cd $$($(1)_staging_dir)/$(host_prefix); \291find . ! -name '.stamp_postprocessed' -print0 | TZ=UTC xargs -0r $(build_TOUCH); \292find . ! -name '.stamp_postprocessed' | LC_ALL=C sort | $(build_TAR) --numeric-owner --no-recursion -czf $$($(1)_staging_dir)/$$(@F) -T -293mkdir -p $$(@D)294rm -rf $$(@D) && mkdir -p $$(@D)295mv $$($(1)_staging_dir)/$$(@F) $$(@)296rm -rf $($(1)_staging_dir)297if test -f $($(1)_build_log); then mv $($(1)_build_log) $$(@D); fi298$($(1)_cached_checksum): $($(1)_cached)299cd $$(@D); $(build_SHA256SUM) $$(<F) > $$(@)301.PHONY: $(1)302$(1): | $($(1)_cached_checksum)303.SECONDARY: $($(1)_cached) $($(1)_postprocessed) $($(1)_staged) $($(1)_built) $($(1)_configured) $($(1)_preprocessed) $($(1)_extracted) $($(1)_fetched)305endef307stages = fetched extracted preprocessed configured built staged postprocessed cached cached_checksum309define ext_add_stages310$(foreach stage,$(stages),311$(1)_$(stage): $($(1)_$(stage))312.PHONY: $(1)_$(stage))313endef315# These functions create the build targets for each package. They must be316# broken down into small steps so that each part is done for all packages317# before moving on to the next step. Otherwise, a package's info318# (build-id for example) would only be available to another package if it319# happened to be computed already.321#set the type for host/build packages.322$(foreach native_package,$(native_packages),$(eval $(native_package)_type=build))323$(foreach package,$(packages),$(eval $(package)_type=$(host_arch)_$(host_os)))325#set overridable defaults326$(foreach package,$(all_packages),$(eval $(call int_vars,$(package))))328#include package files329$(foreach native_package,$(native_packages),$(eval include packages/$(native_package).mk))330$(foreach package,$(packages),$(eval include packages/$(package).mk))332#set build properties for included package files333$(foreach package,$(all_packages),$(eval $(call int_get_build_properties,$(package))))335#compute a hash of all files that comprise this package's build recipe336$(foreach package,$(all_packages),$(eval $(call int_get_build_recipe_hash,$(package))))338#generate a unique id for this package, incorporating its dependencies as well339$(foreach package,$(all_packages),$(eval $(call int_get_build_id,$(package))))341#compute final vars after reading package vars342$(foreach package,$(all_packages),$(eval $(call int_config_attach_build_config,$(package))))344#create build targets345$(foreach package,$(all_packages),$(eval $(call int_add_cmds,$(package))))
Independent explanations by MyBitcoinExplorer. Not affiliated with or endorsed by Bitcoin Core. Guides are educational and do not replace the source or its tests.
Bitcoin Core source © its contributors, distributed under the MIT license. Original notices and bundled third-party licenses are retained in the source tree.