diff --git a/chronik/CMakeLists.txt b/chronik/CMakeLists.txt --- a/chronik/CMakeLists.txt +++ b/chronik/CMakeLists.txt @@ -94,6 +94,9 @@ ${CHRONIK_CARGO_FLAGS} ${CHRONIK_FEATURE_FLAGS} ) +corrosion_set_env_vars(chronik-lib + "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:$ENV{NATIVE_LIBRARY_PATH}" +) set(Rust_TRIPLE "${Rust_CARGO_TARGET_ARCH}" diff --git a/contrib/guix/guix-build b/contrib/guix/guix-build --- a/contrib/guix/guix-build +++ b/contrib/guix/guix-build @@ -426,6 +426,8 @@ time-machine shell --manifest="${PWD}/contrib/guix/manifest.scm" \ --container \ --pure \ + --network \ + --emulate-fhs \ --no-cwd \ --share="$PWD"=/bitcoin \ --share="$OUTDIR_BASE"=/outdir-base \ diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -62,6 +62,8 @@ # includes/libs NATIVE_GCC="$(store_path gcc-toolchain)" NATIVE_GCC_STATIC="$(store_path gcc-toolchain static)" +NATIVE_GCC_LIB="$(store_path gcc lib)" +NATIVE_CLANG="$(store_path clang)" unset LIBRARY_PATH unset CPATH @@ -70,7 +72,7 @@ unset OBJC_INCLUDE_PATH unset OBJCPLUS_INCLUDE_PATH -export LIBRARY_PATH="${NATIVE_GCC}/lib:${NATIVE_GCC_STATIC}/lib" +export LIBRARY_PATH="${NATIVE_GCC}/lib:${NATIVE_GCC_STATIC}/lib:${NATIVE_GCC_LIB}/lib:${NATIVE_CLANG}/lib" export C_INCLUDE_PATH="${NATIVE_GCC}/include" export CPLUS_INCLUDE_PATH="${NATIVE_GCC}/include/c++:${NATIVE_GCC}/include" export OBJC_INCLUDE_PATH="${NATIVE_GCC}/include" @@ -107,7 +109,8 @@ CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/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) - + # echo "CROSS_GCC_ROOT: ${CROSS_GCC_ROOT}" + # exit 0 export CROSS_CC="${CROSS_GCC_ROOT}/bin/${HOST}-gcc" export CROSS_CXX="${CROSS_GCC_ROOT}/bin/${HOST}-g++" export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include:${CROSS_KERNEL}/include" @@ -226,6 +229,12 @@ ;; esac +# TODO Pin a version and check the sha256sum +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain=1.76.0 +# shellcheck disable=SC1091 +source "$HOME/.cargo/env" +rustup target add "aarch64-unknown-linux-gnu" + mkdir -p source_package pushd source_package rm -f CMakeCache.txt @@ -301,7 +310,13 @@ # binary tarballs. INSTALLPATH=$(pwd)/installed/${DISTNAME} mkdir -p "${INSTALLPATH}" - + export NATIVE_LIBRARY_PATH="${LIBRARY_PATH}" + # rocksdb-sys uses libclang to parse rhe headers but it doesn't what the + # host arch is. As a consequence it fails to parse gnu/stubs.h if the + # multilib headers are not installed becauses it falls back to the 32 bits + # variant gnu/stubs-32.h that guix don't provide. + # Instead we can instruct clang to use the correct arch, x86_64. + export BINDGEN_EXTRA_CLANG_ARGS="-D__x86_64__" cmake -GNinja .. \ -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} \ -DCLIENT_VERSION_IS_RELEASE=ON \ @@ -312,6 +327,7 @@ -DCMAKE_C_FLAGS="${HOST_CFLAGS}" \ -DCMAKE_CXX_FLAGS="${HOST_CXXFLAGS}" \ -DCMAKE_EXE_LINKER_FLAGS="${HOST_LDFLAGS}" \ + -DBUILD_BITCOIN_CHRONIK=ON \ "${CMAKE_EXTRA_OPTIONS[@]}" # Build Bitcoin ABC diff --git a/contrib/guix/libexec/prelude.bash b/contrib/guix/libexec/prelude.bash --- a/contrib/guix/libexec/prelude.bash +++ b/contrib/guix/libexec/prelude.bash @@ -51,7 +51,7 @@ time-machine() { # shellcheck disable=SC2086 guix time-machine --url=https://git.savannah.gnu.org/git/guix.git \ - --commit=160f78a4d92205df986ed9efcce7d3aac188cb24 \ + --commit=77386bdbfe6b0c649c05ab37f08051d1ab3e5074 \ --cores="$JOBS" \ --keep-failed \ --fallback \ diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm --- a/contrib/guix/manifest.scm +++ b/contrib/guix/manifest.scm @@ -8,6 +8,7 @@ (gnu packages commencement) (gnu packages compression) (gnu packages cross-base) + (gnu packages curl) (gnu packages file) (gnu packages gawk) (gnu packages gcc) @@ -45,6 +46,7 @@ (define building-on (string-append "--build=" (list-ref (string-split (%current-system) #\-) 0) "-guix-linux-gnu")) + (define (make-cross-toolchain target base-gcc-for-libc base-kernel-headers @@ -581,6 +583,7 @@ bzip2 gzip xz + zlib ;; Build tools cmake-minimal ninja @@ -593,13 +596,17 @@ ;; Native GCC 10 toolchain gcc-toolchain-10 (list gcc-toolchain-10 "static") + (list gcc "lib") ;; Scripting python-minimal ;; (3.10) perl ;; Git git-minimal ;; Tests - python-lief) + python-lief + ;; Web + curl + nss-certs) (let ((target (getenv "HOST"))) (cond ((string-suffix? "-mingw32" target) ;; Windows @@ -609,7 +616,7 @@ nss-certs osslsigncode)) ((string-contains target "-linux-") - (list (make-bitcoin-cross-toolchain target))) + (list clang-10 (make-bitcoin-cross-toolchain target))) ((string-contains target "darwin") (list clang-toolchain-10 binutils xorriso python-signapple)) (else '())))))