@ -38,7 +38,28 @@ store_path() {
--expression= 's|"[[:space:]]*$||'
}
# Set environment variables to point Guix's cross-toolchain to the right
# Set environment variables to point the NATIVE toolchain to the right
# includes/libs
NATIVE_GCC = " $( store_path gcc-toolchain) "
export LIBRARY_PATH = " ${ NATIVE_GCC } /lib: ${ NATIVE_GCC } /lib64 "
export CPATH = " ${ NATIVE_GCC } /include "
case " $HOST " in
*darwin*)
# When targeting darwin, some native tools built by depends require
# native packages not incorporated in depends
#
# libcap required by native_cdrkit/wodim
# zlib, bzip2 required by native_cdrkit/genisoimage
for native_pkg in libcap zlib bzip2; do
native_pkg_store_path = $( store_path " $native_pkg " )
export LIBRARY_PATH = " ${ native_pkg_store_path } /lib: ${ LIBRARY_PATH } "
export CPATH = " ${ native_pkg_store_path } /include: ${ CPATH } "
done
; ;
esac
# Set environment variables to point the CROSS toolchain to the right
# includes/libs for $HOST
case " $HOST " in
*mingw*)
@ -48,14 +69,18 @@ case "$HOST" in
CROSS_GCC_LIBS = ( " ${ CROSS_GCC } /lib/gcc/ ${ HOST } " /* ) # This expands to an array of directories...
CROSS_GCC_LIB = " ${ CROSS_GCC_LIBS [0] } " # ...we just want the first one (there should only be one)
NATIVE_GCC = " $( store_path gcc-glibc-2.27-toolchain) "
export LIBRARY_PATH = " ${ NATIVE_GCC } /lib: ${ NATIVE_GCC } /lib64 "
export CPATH = " ${ NATIVE_GCC } /include "
# The search path ordering is generally:
# 1. gcc-related search paths
# 2. libc-related search paths
# 2. kernel-header-related search paths (not applicable to mingw-w64 hosts)
export CROSS_C_INCLUDE_PATH = " ${ CROSS_GCC_LIB } /include: ${ CROSS_GCC_LIB } /include-fixed: ${ CROSS_GLIBC } /include "
export CROSS_CPLUS_INCLUDE_PATH = " ${ CROSS_GCC } /include/c++: ${ CROSS_GCC } /include/c++/ ${ HOST } : ${ CROSS_GCC } /include/c++/backward: ${ CROSS_C_INCLUDE_PATH } "
export CROSS_LIBRARY_PATH = " ${ CROSS_GCC } /lib: ${ CROSS_GCC } / ${ HOST } /lib: ${ CROSS_GCC_LIB } : ${ CROSS_GLIBC } /lib "
; ;
*darwin*)
# The CROSS toolchain for darwin uses the SDK and ignores environment variables.
# See depends/hosts/darwin.mk for more details.
; ;
*linux*)
CROSS_GLIBC = " $( store_path " glibc-cross- ${ HOST } " ) "
CROSS_GLIBC_STATIC = " $( store_path " glibc-cross- ${ HOST } " static) "
@ -64,9 +89,7 @@ case "$HOST" in
CROSS_GCC_LIBS = ( " ${ CROSS_GCC } /lib/gcc/ ${ HOST } " /* ) # This expands to an array of directories...
CROSS_GCC_LIB = " ${ CROSS_GCC_LIBS [0] } " # ...we just want the first one (there should only be one)
# NOTE: CROSS_C_INCLUDE_PATH is missing ${CROSS_GCC_LIB}/include-fixed, because
# the limits.h in it is missing a '#include_next <limits.h>'
export CROSS_C_INCLUDE_PATH = " ${ CROSS_GCC_LIB } /include: ${ CROSS_GLIBC } /include: ${ CROSS_KERNEL } /include "
export CROSS_C_INCLUDE_PATH = " ${ CROSS_GCC_LIB } /include: ${ CROSS_GCC_LIB } /include-fixed: ${ CROSS_GLIBC } /include: ${ CROSS_KERNEL } /include "
export CROSS_CPLUS_INCLUDE_PATH = " ${ CROSS_GCC } /include/c++: ${ CROSS_GCC } /include/c++/ ${ HOST } : ${ CROSS_GCC } /include/c++/backward: ${ CROSS_C_INCLUDE_PATH } "
export CROSS_LIBRARY_PATH = " ${ CROSS_GCC } /lib: ${ CROSS_GCC } / ${ HOST } /lib: ${ CROSS_GCC_LIB } : ${ CROSS_GLIBC } /lib: ${ CROSS_GLIBC_STATIC } /lib "
; ;
@ -77,14 +100,25 @@ esac
# Sanity check CROSS_*_PATH directories
IFS = ':' read -ra PATHS <<< " ${ CROSS_C_INCLUDE_PATH } : ${ CROSS_CPLUS_INCLUDE_PATH } : ${ CROSS_LIBRARY_PATH } "
for p in " ${ PATHS [@] } " ; do
if [ ! -d " $p " ] ; then
if [ -n " $p " ] && [ ! -d " $p " ] ; then
echo " ' $p ' doesn't exist or isn't a directory... Aborting... "
exit 1
fi
done
# Disable Guix ld auto-rpath behavior
export GUIX_LD_WRAPPER_DISABLE_RPATH = yes
case " $HOST " in
*darwin*)
# The auto-rpath behavior is necessary for darwin builds as some native
# tools built by depends refer to and depend on Guix-built native
# libraries
#
# After the native packages in depends are built, the ld wrapper should
# no longer affect our build, as clang would instead reach for
# x86_64-apple-darwin18-ld from cctools
; ;
*) export GUIX_LD_WRAPPER_DISABLE_RPATH = yes ; ;
esac
# Make /usr/bin if it doesn't exist
[ -e /usr/bin ] || mkdir -p /usr/bin
@ -114,6 +148,16 @@ export QT_RCC_TEST=1
export QT_RCC_SOURCE_DATE_OVERRIDE = 1
export TAR_OPTIONS = " --owner=0 --group=0 --numeric-owner --mtime='@ ${ SOURCE_DATE_EPOCH } ' --sort=name "
export TZ = "UTC"
case " $HOST " in
*darwin*)
# cctools AR, unlike GNU binutils AR, does not have a deterministic mode
# or a configure flag to enable determinism by default, it only
# understands if this env-var is set or not. See:
#
# https://github.com/tpoechtrager/cctools-port/blob/55562e4073dea0fbfd0b20e0bf69ffe6390c7f97/cctools/ar/archive.c#L334
export ZERO_AR_DATE = yes
; ;
esac
####################
# Depends Building #
@ -135,7 +179,8 @@ make -C depends --jobs="$MAX_JOBS" HOST="$HOST" \
x86_64_linux_RANLIB = x86_64-linux-gnu-ranlib \
x86_64_linux_NM = x86_64-linux-gnu-nm \
x86_64_linux_STRIP = x86_64-linux-gnu-strip \
qt_config_opts_i686_linux = '-platform linux-g++ -xplatform bitcoin-linux-g++'
qt_config_opts_i686_linux = '-platform linux-g++ -xplatform bitcoin-linux-g++' \
FORCE_USE_SYSTEM_CLANG = 1
###########################
@ -169,6 +214,7 @@ HOST_CFLAGS="-O2 -g"
case " $HOST " in
*linux*) HOST_CFLAGS += " -ffile-prefix-map= ${ PWD } =. " ; ;
*mingw*) HOST_CFLAGS += " -fno-ident" ; ;
*darwin*) unset HOST_CFLAGS ; ;
esac
# CXXFLAGS
@ -199,8 +245,8 @@ mkdir -p "$DISTSRC"
--disable-maintainer-mode \
--disable-dependency-tracking \
${ CONFIGFLAGS } \
CFLAGS =" ${ HOST_CFLAGS } " \
CXXFLAGS =" ${ HOST_CXXFLAGS } " \
${ HOST_CFLAGS : +CFLAGS =" ${ HOST_CFLAGS } " } \
${ HOST_CXXFLAGS : +CXXFLAGS =" ${ HOST_CXXFLAGS } " } \
${ HOST_LDFLAGS : +LDFLAGS= " ${ HOST_LDFLAGS } " }
sed -i.old 's/-lstdc++ //g' config.status libtool src/univalue/config.status src/univalue/libtool
@ -210,14 +256,9 @@ mkdir -p "$DISTSRC"
# Perform basic ELF security checks on a series of executables.
make -C src --jobs= 1 check-security ${ V : +V=1 }
case " $HOST " in
*linux*| *mingw*)
# Check that executables only contain allowed gcc, glibc and libstdc++
# version symbols for Linux distro back-compatibility.
make -C src --jobs= 1 check-symbols ${ V : +V=1 }
; ;
esac
# Make the os-specific installers
case " $HOST " in
@ -232,8 +273,39 @@ mkdir -p "$DISTSRC"
INSTALLPATH = " ${ PWD } /installed/ ${ DISTNAME } "
mkdir -p " ${ INSTALLPATH } "
# Install built Bitcoin Core to $INSTALLPATH
case " $HOST " in
*darwin*)
make install-strip DESTDIR = " ${ INSTALLPATH } " ${ V : +V=1 }
; ;
*)
make install DESTDIR = " ${ INSTALLPATH } " ${ V : +V=1 }
; ;
esac
case " $HOST " in
*darwin*)
make osx_volname ${ V : +V=1 }
make deploydir ${ V : +V=1 }
mkdir -p " unsigned-app- ${ HOST } "
cp --target-directory= " unsigned-app- ${ HOST } " \
osx_volname \
contrib/macdeploy/detached-sig-{ apply,create} .sh \
" ${ BASEPREFIX } / ${ HOST } " /native/bin/dmg
for util in codesign_allocate pagestuff; do
cp --no-target-directory { " ${ BASEPREFIX } / ${ HOST } /native/bin/ ${ HOST } - " ," unsigned-app- ${ HOST } / " } " $util "
done
mv --target-directory= " unsigned-app- ${ HOST } " dist
(
cd " unsigned-app- ${ HOST } "
find . -print0 \
| sort --zero-terminated \
| tar --create --no-recursion --mode= 'u+rw,go+r-w,a+X' --null --files-from= - \
| gzip -9n > " ${ OUTDIR } / ${ DISTNAME } -osx-unsigned.tar.gz " \
|| ( rm -f " ${ OUTDIR } / ${ DISTNAME } -osx-unsigned.tar.gz " && exit 1 )
)
make deploy ${ V : +V=1 } OSX_DMG = " ${ OUTDIR } / ${ DISTNAME } -osx-unsigned.dmg "
; ;
esac
(
cd installed
@ -248,13 +320,18 @@ mkdir -p "$DISTSRC"
find . -name "lib*.a" -delete
# Prune pkg-config files
rm -r " ${ DISTNAME } /lib/pkgconfig "
rm -rf " ${ DISTNAME } /lib/pkgconfig "
case " $HOST " in
*darwin*) ; ;
*)
# Split binaries and libraries from their debug symbols
{
find " ${ DISTNAME } /bin " -type f -executable -print0
find " ${ DISTNAME } /lib " -type f -print0
} | xargs -0 -n1 -P" $MAX_JOBS " -I{ } " ${ DISTSRC } /contrib/devtools/split-debug.sh " { } { } { } .dbg
; ;
esac
case " $HOST " in
*mingw*)
@ -294,6 +371,13 @@ mkdir -p "$DISTSRC"
| gzip -9n > " ${ OUTDIR } / ${ DISTNAME } - ${ HOST } -debug.tar.gz " \
|| ( rm -f " ${ OUTDIR } / ${ DISTNAME } - ${ HOST } -debug.tar.gz " && exit 1 )
; ;
*darwin*)
find " ${ DISTNAME } " -print0 \
| sort --zero-terminated \
| tar --create --no-recursion --mode= 'u+rw,go+r-w,a+X' --null --files-from= - \
| gzip -9n > " ${ OUTDIR } / ${ DISTNAME } - ${ HOST //x86_64-apple-darwin18/osx64 } .tar.gz " \
|| ( rm -f " ${ OUTDIR } / ${ DISTNAME } - ${ HOST //x86_64-apple-darwin18/osx64 } .tar.gz " && exit 1 )
; ;
esac
)
)