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