Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adding depends system, update makefiles next
- Loading branch information
Showing
57 changed files
with
5,604 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
SDKs/ | ||
work/ | ||
built/ | ||
sources/ | ||
config.site | ||
x86_64* | ||
i686* | ||
mips* | ||
arm* | ||
aarch64* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,181 @@ | ||
.NOTPARALLEL : | ||
|
||
SOURCES_PATH ?= $(BASEDIR)/sources | ||
BASE_CACHE ?= $(BASEDIR)/built | ||
SDK_PATH ?= $(BASEDIR)/SDKs | ||
NO_QT ?= | ||
NO_WALLET ?= | ||
NO_UPNP ?= | ||
FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources | ||
|
||
BUILD = $(shell ./config.guess) | ||
HOST ?= $(BUILD) | ||
PATCHES_PATH = $(BASEDIR)/patches | ||
BASEDIR = $(CURDIR) | ||
HASH_LENGTH:=11 | ||
DOWNLOAD_CONNECT_TIMEOUT:=10 | ||
DOWNLOAD_RETRIES:=3 | ||
HOST_ID_SALT ?= salt | ||
BUILD_ID_SALT ?= salt | ||
|
||
host:=$(BUILD) | ||
ifneq ($(HOST),) | ||
host:=$(HOST) | ||
endif | ||
|
||
ifneq ($(DEBUG),) | ||
release_type=debug | ||
else | ||
release_type=release | ||
endif | ||
|
||
base_build_dir=$(BASEDIR)/work/build | ||
base_staging_dir=$(BASEDIR)/work/staging | ||
base_download_dir=$(BASEDIR)/work/download | ||
canonical_host:=$(shell ./config.sub $(HOST)) | ||
build:=$(shell ./config.sub $(BUILD)) | ||
|
||
build_arch =$(firstword $(subst -, ,$(build))) | ||
build_vendor=$(word 2,$(subst -, ,$(build))) | ||
full_build_os:=$(subst $(build_arch)-$(build_vendor)-,,$(build)) | ||
build_os:=$(findstring linux,$(full_build_os)) | ||
build_os+=$(findstring darwin,$(full_build_os)) | ||
build_os:=$(strip $(build_os)) | ||
ifeq ($(build_os),) | ||
build_os=$(full_build_os) | ||
endif | ||
|
||
host_arch=$(firstword $(subst -, ,$(canonical_host))) | ||
host_vendor=$(word 2,$(subst -, ,$(canonical_host))) | ||
full_host_os:=$(subst $(host_arch)-$(host_vendor)-,,$(canonical_host)) | ||
host_os:=$(findstring linux,$(full_host_os)) | ||
host_os+=$(findstring darwin,$(full_host_os)) | ||
host_os+=$(findstring mingw32,$(full_host_os)) | ||
host_os:=$(strip $(host_os)) | ||
ifeq ($(host_os),) | ||
host_os=$(full_host_os) | ||
endif | ||
|
||
$(host_arch)_$(host_os)_prefix=$(BASEDIR)/$(host) | ||
$(host_arch)_$(host_os)_host=$(host) | ||
host_prefix=$($(host_arch)_$(host_os)_prefix) | ||
build_prefix=$(host_prefix)/native | ||
build_host=$(build) | ||
|
||
AT_$(V):= | ||
AT_:=@ | ||
AT:=$(AT_$(V)) | ||
|
||
all: install | ||
|
||
include hosts/$(host_os).mk | ||
include hosts/default.mk | ||
include builders/$(build_os).mk | ||
include builders/default.mk | ||
include packages/packages.mk | ||
|
||
build_id_string:=$(BUILD_ID_SALT) | ||
build_id_string+=$(shell $(build_CC) --version 2>/dev/null) | ||
build_id_string+=$(shell $(build_AR) --version 2>/dev/null) | ||
build_id_string+=$(shell $(build_CXX) --version 2>/dev/null) | ||
build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null) | ||
build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null) | ||
|
||
$(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT) | ||
$(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) --version 2>/dev/null) | ||
$(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null) | ||
$(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null) | ||
$(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null) | ||
$(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null) | ||
|
||
qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) | ||
wallet_packages_$(NO_WALLET) = $(wallet_packages) | ||
upnp_packages_$(NO_UPNP) = $(upnp_packages) | ||
|
||
packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) | ||
native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages) | ||
|
||
ifneq ($(qt_packages_),) | ||
native_packages += $(qt_native_packages) | ||
endif | ||
|
||
all_packages = $(packages) $(native_packages) | ||
|
||
meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk | ||
|
||
$(host_arch)_$(host_os)_native_toolchain?=$($(host_os)_native_toolchain) | ||
|
||
include funcs.mk | ||
|
||
toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin) | ||
final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in) | ||
final_build_id+=$(shell echo -n "$(final_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)) | ||
$(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) | ||
$(AT)rm -rf $(@D) | ||
$(AT)mkdir -p $(@D) | ||
$(AT)echo copying packages: $^ | ||
$(AT)echo to: $(@D) | ||
$(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); ) | ||
$(AT)touch $@ | ||
|
||
$(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id) | ||
$(AT)@mkdir -p $(@D) | ||
$(AT)sed -e 's|@HOST@|$(host)|' \ | ||
-e 's|@CC@|$(toolchain_path)$(host_CC)|' \ | ||
-e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \ | ||
-e 's|@AR@|$(toolchain_path)$(host_AR)|' \ | ||
-e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \ | ||
-e 's|@NM@|$(toolchain_path)$(host_NM)|' \ | ||
-e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \ | ||
-e 's|@build_os@|$(build_os)|' \ | ||
-e 's|@host_os@|$(host_os)|' \ | ||
-e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \ | ||
-e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \ | ||
-e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \ | ||
-e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \ | ||
-e 's|@allow_host_packages@|$(ALLOW_HOST_PACKAGES)|' \ | ||
-e 's|@no_qt@|$(NO_QT)|' \ | ||
-e 's|@no_wallet@|$(NO_WALLET)|' \ | ||
-e 's|@no_upnp@|$(NO_UPNP)|' \ | ||
-e 's|@debug@|$(DEBUG)|' \ | ||
$< > $@ | ||
$(AT)touch $@ | ||
|
||
|
||
define check_or_remove_cached | ||
mkdir -p $(BASE_CACHE)/$(host)/$(package) && cd $(BASE_CACHE)/$(host)/$(package); \ | ||
$(build_SHA256SUM) -c $($(package)_cached_checksum) >/dev/null 2>/dev/null || \ | ||
( rm -f $($(package)_cached_checksum); \ | ||
if test -f "$($(package)_cached)"; then echo "Checksum mismatch for $(package). Forcing rebuild.."; rm -f $($(package)_cached_checksum) $($(package)_cached); fi ) | ||
endef | ||
|
||
define check_or_remove_sources | ||
mkdir -p $($(package)_source_dir); cd $($(package)_source_dir); \ | ||
test -f $($(package)_fetched) && ( $(build_SHA256SUM) -c $($(package)_fetched) >/dev/null 2>/dev/null || \ | ||
( echo "Checksum missing or mismatched for $(package) source. Forcing re-download."; \ | ||
rm -f $($(package)_all_sources) $($(1)_fetched))) || true | ||
endef | ||
|
||
check-packages: | ||
@$(foreach package,$(all_packages),$(call check_or_remove_cached,$(package));) | ||
check-sources: | ||
@$(foreach package,$(all_packages),$(call check_or_remove_sources,$(package));) | ||
|
||
$(host_prefix)/share/config.site: check-packages | ||
|
||
check-packages: check-sources | ||
|
||
install: check-packages $(host_prefix)/share/config.site | ||
|
||
|
||
download-one: check-sources $(all_sources) | ||
|
||
download-osx: | ||
@$(MAKE) -s HOST=x86_64-apple-darwin11 download-one | ||
download-linux: | ||
@$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one | ||
download-win: | ||
@$(MAKE) -s HOST=x86_64-w64-mingw32 download-one | ||
download: download-osx download-linux download-win | ||
|
||
.PHONY: install cached download-one download-osx download-linux download-win download check-packages check-sources |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
### Usage | ||
|
||
To build dependencies for the current arch+OS: | ||
|
||
make | ||
|
||
To build for another arch/OS: | ||
|
||
make HOST=host-platform-triplet | ||
|
||
For example: | ||
|
||
make HOST=x86_64-w64-mingw32 -j4 | ||
|
||
A prefix will be generated that's suitable for plugging into Bitcoin's | ||
configure. In the above example, a dir named x86_64-w64-mingw32 will be | ||
created. To use it for Bitcoin: | ||
|
||
./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 | ||
|
||
Common `host-platform-triplets` for cross compilation are: | ||
|
||
- `i686-w64-mingw32` for Win32 | ||
- `x86_64-w64-mingw32` for Win64 | ||
- `x86_64-apple-darwin11` for MacOSX | ||
- `arm-linux-gnueabihf` for Linux ARM 32 bit | ||
- `aarch64-linux-gnu` for Linux ARM 64 bit | ||
|
||
No other options are needed, the paths are automatically configured. | ||
|
||
Install the required dependencies: Ubuntu & Debian | ||
-------------------------------------------------- | ||
|
||
For macOS cross compilation: | ||
|
||
sudo apt-get install curl librsvg2-bin libtiff-tools bsdmainutils cmake imagemagick libcap-dev libz-dev libbz2-dev python-setuptools | ||
|
||
For Win32/Win64 cross compilation: | ||
|
||
- see [build-windows.md](../doc/build-windows.md#cross-compilation-for-ubuntu-and-windows-subsystem-for-linux) | ||
|
||
For linux (including i386, ARM) cross compilation: | ||
|
||
sudo apt-get install curl g++-aarch64-linux-gnu g++-4.8-aarch64-linux-gnu gcc-4.8-aarch64-linux-gnu binutils-aarch64-linux-gnu g++-arm-linux-gnueabihf g++-4.8-arm-linux-gnueabihf gcc-4.8-arm-linux-gnueabihf binutils-arm-linux-gnueabihf g++-4.8-multilib gcc-4.8-multilib binutils-gold bsdmainutils | ||
|
||
|
||
Dependency Options: | ||
The following can be set when running make: make FOO=bar | ||
|
||
SOURCES_PATH: downloaded sources will be placed here | ||
BASE_CACHE: built packages will be placed here | ||
SDK_PATH: Path where sdk's can be found (used by OSX) | ||
FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up | ||
NO_QT: Don't download/build/cache qt and its dependencies | ||
NO_WALLET: Don't download/build/cache libs needed to enable the wallet | ||
NO_UPNP: Don't download/build/cache packages needed for enabling upnp | ||
DEBUG: disable some optimizations and enable more runtime checking | ||
HOST_ID_SALT: Optional salt to use when generating host package ids | ||
BUILD_ID_SALT: Optional salt to use when generating build package ids | ||
|
||
If some packages are not built, for example `make NO_WALLET=1`, the appropriate | ||
options will be passed to bitcoin's configure. In this case, `--disable-wallet`. | ||
|
||
Additional targets: | ||
|
||
download: run 'make download' to fetch all sources without building them | ||
download-osx: run 'make download-osx' to fetch all sources needed for osx builds | ||
download-win: run 'make download-win' to fetch all sources needed for win builds | ||
download-linux: run 'make download-linux' to fetch all sources needed for linux builds | ||
|
||
### Other documentation | ||
|
||
- [description.md](description.md): General description of the depends system | ||
- [packages.md](packages.md): Steps for adding packages | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
build_darwin_CC: = $(shell xcrun -f clang) | ||
build_darwin_CXX: = $(shell xcrun -f clang++) | ||
build_darwin_AR: = $(shell xcrun -f ar) | ||
build_darwin_RANLIB: = $(shell xcrun -f ranlib) | ||
build_darwin_STRIP: = $(shell xcrun -f strip) | ||
build_darwin_OTOOL: = $(shell xcrun -f otool) | ||
build_darwin_NM: = $(shell xcrun -f nm) | ||
build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) | ||
build_darwin_SHA256SUM = shasum -a 256 | ||
build_darwin_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o | ||
|
||
#darwin host on darwin builder. overrides darwin host preferences. | ||
darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) | ||
darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ | ||
darwin_AR:=$(shell xcrun -f ar) | ||
darwin_RANLIB:=$(shell xcrun -f ranlib) | ||
darwin_STRIP:=$(shell xcrun -f strip) | ||
darwin_LIBTOOL:=$(shell xcrun -f libtool) | ||
darwin_OTOOL:=$(shell xcrun -f otool) | ||
darwin_NM:=$(shell xcrun -f nm) | ||
darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) | ||
darwin_native_toolchain= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
default_build_CC = gcc | ||
default_build_CXX = g++ | ||
default_build_AR = ar | ||
default_build_RANLIB = ranlib | ||
default_build_STRIP = strip | ||
default_build_NM = nm | ||
default_build_OTOOL = otool | ||
default_build_INSTALL_NAME_TOOL = install_name_tool | ||
|
||
define add_build_tool_func | ||
build_$(build_os)_$1 ?= $$(default_build_$1) | ||
build_$(build_arch)_$(build_os)_$1 ?= $$(build_$(build_os)_$1) | ||
build_$1=$$(build_$(build_arch)_$(build_os)_$1) | ||
endef | ||
$(foreach var,CC CXX AR RANLIB NM STRIP SHA256SUM DOWNLOAD OTOOL INSTALL_NAME_TOOL,$(eval $(call add_build_tool_func,$(var)))) | ||
define add_build_flags_func | ||
build_$(build_arch)_$(build_os)_$1 += $(build_$(build_os)_$1) | ||
build_$1=$$(build_$(build_arch)_$(build_os)_$1) | ||
endef | ||
$(foreach flags, CFLAGS CXXFLAGS LDFLAGS, $(eval $(call add_build_flags_func,$(flags)))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
build_linux_SHA256SUM = sha256sum | ||
build_linux_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o |
Oops, something went wrong.