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