1.NOTPARALLEL : 2 3SOURCES_PATH ?= $(BASEDIR)/sources 4WORK_PATH = $(BASEDIR)/work 5BASE_CACHE ?= $(BASEDIR)/built 6SDK_PATH ?= $(BASEDIR)/SDKs 7NO_QT ?= 8RAPIDCHECK ?= 9NO_WALLET ?= 10NO_UPNP ?= 11FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources 12 13BUILD = $(shell ./config.guess) 14HOST ?= $(BUILD) 15PATCHES_PATH = $(BASEDIR)/patches 16BASEDIR = $(CURDIR) 17HASH_LENGTH:=11 18DOWNLOAD_CONNECT_TIMEOUT:=30 19DOWNLOAD_RETRIES:=3 20HOST_ID_SALT ?= salt 21BUILD_ID_SALT ?= salt 22 23host:=$(BUILD) 24ifneq ($(HOST),) 25host:=$(HOST) 26endif 27 28ifneq ($(DEBUG),) 29release_type=debug 30else 31release_type=release 32endif 33 34base_build_dir=$(WORK_PATH)/build 35base_staging_dir=$(WORK_PATH)/staging 36base_download_dir=$(WORK_PATH)/download 37canonical_host:=$(shell ./config.sub $(HOST)) 38build:=$(shell ./config.sub $(BUILD)) 39 40build_arch =$(firstword $(subst -, ,$(build))) 41build_vendor=$(word 2,$(subst -, ,$(build))) 42full_build_os:=$(subst $(build_arch)-$(build_vendor)-,,$(build)) 43build_os:=$(findstring linux,$(full_build_os)) 44build_os+=$(findstring darwin,$(full_build_os)) 45build_os:=$(strip $(build_os)) 46ifeq ($(build_os),) 47build_os=$(full_build_os) 48endif 49 50host_arch=$(firstword $(subst -, ,$(canonical_host))) 51host_vendor=$(word 2,$(subst -, ,$(canonical_host))) 52full_host_os:=$(subst $(host_arch)-$(host_vendor)-,,$(canonical_host)) 53host_os:=$(findstring linux,$(full_host_os)) 54host_os+=$(findstring darwin,$(full_host_os)) 55host_os+=$(findstring mingw32,$(full_host_os)) 56host_os:=$(strip $(host_os)) 57ifeq ($(host_os),) 58host_os=$(full_host_os) 59endif 60 61$(host_arch)_$(host_os)_prefix=$(BASEDIR)/$(host) 62$(host_arch)_$(host_os)_host=$(host) 63host_prefix=$($(host_arch)_$(host_os)_prefix) 64build_prefix=$(host_prefix)/native 65build_host=$(build) 66 67AT_$(V):= 68AT_:=@ 69AT:=$(AT_$(V)) 70 71all: install 72 73include hosts/$(host_os).mk 74include hosts/default.mk 75include builders/$(build_os).mk 76include builders/default.mk 77include packages/packages.mk 78 79build_id_string:=$(BUILD_ID_SALT) 80build_id_string+=$(shell $(build_CC) --version 2>/dev/null) 81build_id_string+=$(shell $(build_AR) --version 2>/dev/null) 82build_id_string+=$(shell $(build_CXX) --version 2>/dev/null) 83build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null) 84build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null) 85 86$(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT) 87$(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) --version 2>/dev/null) 88$(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null) 89$(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null) 90$(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null) 91$(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null) 92 93qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) 94wallet_packages_$(NO_WALLET) = $(wallet_packages) 95upnp_packages_$(NO_UPNP) = $(upnp_packages) 96 97rapidcheck_packages_$(RAPIDCHECK) = $(rapidcheck_packages) 98 99packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) 100native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages) 101 102ifneq ($(qt_packages_),) 103native_packages += $(qt_native_packages) 104endif 105 106ifeq ($(rapidcheck_packages_),) 107packages += $(rapidcheck_packages) 108endif 109 110all_packages = $(packages) $(native_packages) 111 112meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk 113 114$(host_arch)_$(host_os)_native_toolchain?=$($(host_os)_native_toolchain) 115 116include funcs.mk 117 118toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin) 119final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in) 120final_build_id+=$(shell echo -n "$(final_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)) 121$(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) 122 $(AT)rm -rf $(@D) 123 $(AT)mkdir -p $(@D) 124 $(AT)echo copying packages: $^ 125 $(AT)echo to: $(@D) 126 $(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); ) 127 $(AT)touch $@ 128 129$(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id) 130 $(AT)@mkdir -p $(@D) 131 $(AT)sed -e 's|@HOST@|$(host)|' \ 132 -e 's|@CC@|$(toolchain_path)$(host_CC)|' \ 133 -e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \ 134 -e 's|@AR@|$(toolchain_path)$(host_AR)|' \ 135 -e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \ 136 -e 's|@NM@|$(toolchain_path)$(host_NM)|' \ 137 -e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \ 138 -e 's|@build_os@|$(build_os)|' \ 139 -e 's|@host_os@|$(host_os)|' \ 140 -e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \ 141 -e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \ 142 -e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \ 143 -e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \ 144 -e 's|@allow_host_packages@|$(ALLOW_HOST_PACKAGES)|' \ 145 -e 's|@no_qt@|$(NO_QT)|' \ 146 -e 's|@no_wallet@|$(NO_WALLET)|' \ 147 -e 's|@no_upnp@|$(NO_UPNP)|' \ 148 -e 's|@debug@|$(DEBUG)|' \ 149 $< > $@ 150 $(AT)touch $@ 151 152 153define check_or_remove_cached 154 mkdir -p $(BASE_CACHE)/$(host)/$(package) && cd $(BASE_CACHE)/$(host)/$(package); \ 155 $(build_SHA256SUM) -c $($(package)_cached_checksum) >/dev/null 2>/dev/null || \ 156 ( rm -f $($(package)_cached_checksum); \ 157 if test -f "$($(package)_cached)"; then echo "Checksum mismatch for $(package). Forcing rebuild.."; rm -f $($(package)_cached_checksum) $($(package)_cached); fi ) 158endef 159 160define check_or_remove_sources 161 mkdir -p $($(package)_source_dir); cd $($(package)_source_dir); \ 162 test -f $($(package)_fetched) && ( $(build_SHA256SUM) -c $($(package)_fetched) >/dev/null 2>/dev/null || \ 163 ( echo "Checksum missing or mismatched for $(package) source. Forcing re-download."; \ 164 rm -f $($(package)_all_sources) $($(1)_fetched))) || true 165endef 166 167check-packages: 168 @$(foreach package,$(all_packages),$(call check_or_remove_cached,$(package));) 169check-sources: 170 @$(foreach package,$(all_packages),$(call check_or_remove_sources,$(package));) 171 172$(host_prefix)/share/config.site: check-packages 173 174check-packages: check-sources 175 176clean-all: clean 177 @rm -rf $(SOURCES_PATH) x86_64* i686* mips* arm* aarch64* riscv32* riscv64* 178 179clean: 180 @rm -rf $(WORK_PATH) $(BASE_CACHE) $(BUILD) 181 182install: check-packages $(host_prefix)/share/config.site 183 184 185download-one: check-sources $(all_sources) 186 187download-osx: 188 @$(MAKE) -s HOST=x86_64-apple-darwin14 download-one 189download-linux: 190 @$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one 191download-win: 192 @$(MAKE) -s HOST=x86_64-w64-mingw32 download-one 193download: download-osx download-linux download-win 194 195.PHONY: install cached clean clean-all download-one download-osx download-linux download-win download check-packages check-sources 196