diff --git a/cmake/platforms/OSX.cmake b/cmake/platforms/OSX.cmake --- a/cmake/platforms/OSX.cmake +++ b/cmake/platforms/OSX.cmake @@ -38,7 +38,10 @@ # Ensure we use an OSX specific version the binary manipulation tools. find_program(CMAKE_AR ${TOOLCHAIN_PREFIX}-ar) find_program(CMAKE_INSTALL_NAME_TOOL ${TOOLCHAIN_PREFIX}-install_name_tool) +find_program(CMAKE_LINKER ${TOOLCHAIN_PREFIX}-ld) find_program(CMAKE_NM ${TOOLCHAIN_PREFIX}-nm) +find_program(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}-objcopy) +find_program(CMAKE_OBJDUMP ${TOOLCHAIN_PREFIX}-objdump) find_program(CMAKE_OTOOL ${TOOLCHAIN_PREFIX}-otool) find_program(CMAKE_RANLIB ${TOOLCHAIN_PREFIX}-ranlib) find_program(CMAKE_STRIP ${TOOLCHAIN_PREFIX}-strip) diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -18,9 +18,12 @@ - "g++" - "git" - "imagemagick" +- "libboost-all-dev" - "libbz2-dev" - "libcap-dev" +- "libevent-dev" - "librsvg2-bin" +- "libssl-dev" - "libtiff-tools" - "libtinfo5" - "libtool" @@ -36,9 +39,13 @@ files: - "MacOSX10.11.sdk.tar.gz" script: | - WRAP_DIR=$HOME/wrapped HOSTS="x86_64-apple-darwin14" - CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests GENISOIMAGE=$WRAP_DIR/genisoimage" + + # CMake toolchain file name differ from host name + declare -A CMAKE_TOOLCHAIN_FILE + CMAKE_TOOLCHAIN_FILE[x86_64-apple-darwin14]=OSX.cmake + + WRAP_DIR=$HOME/wrapped FAKETIME_HOST_PROGS="" FAKETIME_PROGS="ar ranlib date dmg genisoimage" @@ -88,6 +95,7 @@ export PATH=${WRAP_DIR}:${PATH} cd bitcoin + SOURCEDIR=`pwd` BASEPREFIX=`pwd`/depends mkdir -p ${BASEPREFIX}/SDKs @@ -104,11 +112,23 @@ create_per-host_faketime_wrappers "${REFERENCE_DATETIME}" export PATH=${WRAP_DIR}:${PATH} - # Create the release tarball using (arbitrarily) the first host - ./autogen.sh - CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/ - make dist + mkdir build + cd build + cmake -GNinja .. \ + -DBUILD_BITCOIN_WALLET=OFF \ + -DBUILD_BITCOIN_ZMQ=OFF \ + -DBUILD_BITCOIN_ZMQ=OFF \ + -DBUILD_BITCOIN_SEEDER=OFF \ + -DBUILD_BITCOIN_CLI=OFF \ + -DBUILD_BITCOIN_TX=OFF \ + -DBUILD_BITCOIN_QT=OFF \ + -DBUILD_LIBBITCOINCONSENSUS=OFF \ + -DENABLE_QRCODE=OFF \ + -DENABLE_UPNP=OFF + ninja package_source SOURCEDIST=`echo bitcoin-abc-*.tar.gz` + mv ${SOURCEDIST} .. + cd .. DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'` # Correct tar file order @@ -128,12 +148,21 @@ mkdir -p ${INSTALLPATH} tar --strip-components=1 -xf ../$SOURCEDIST - CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-ccache --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS} - make ${MAKEOPTS} - make install-strip DESTDIR=${INSTALLPATH} + cmake -GNinja .. \ + -DCMAKE_TOOLCHAIN_FILE=${SOURCEDIR}/cmake/platforms/${CMAKE_TOOLCHAIN_FILE[${i}]} \ + -DCLIENT_VERSION_IS_RELEASE=ON \ + -DENABLE_REDUCE_EXPORTS=ON \ + -DCMAKE_INSTALL_PREFIX=${INSTALLPATH} \ + -DCCACHE=OFF \ + -DGENISOIMAGE_EXECUTABLE="${WRAP_DIR}/genisoimage" \ + ${CMAKE_EXTRA_OPTIONS[${i}]} + + ninja + ninja install + + export PYTHONPATH="${BASEPREFIX}/${i}/native/lib/python3/dist-packages:${PYTHONPATH}" + ninja osx-deploydir - make osx_volname - make deploydir OSX_VOLNAME="$(cat osx_volname)" mkdir -p unsigned-app-${i} cp osx_volname unsigned-app-${i}/ @@ -147,14 +176,19 @@ find . | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-osx-unsigned.tar.gz popd - make deploy + ninja osx-dmg ${WRAP_DIR}/dmg dmg "${OSX_VOLNAME}.dmg" ${OUTDIR}/${DISTNAME}-osx-unsigned.dmg cd installed - find . -name "lib*.la" -delete - find . -name "lib*.a" -delete - rm -rf ${DISTNAME}/lib/pkgconfig - find ${DISTNAME} | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz + # The install/strip target should do exactly that. However there is a bug in + # in the Buster CMake version that causes strip to be called with the wrong + # parameters when an Apple strip tool is used. This is fixed starting with + # CMake versions >= 3.14, see: + # https://gitlab.kitware.com/cmake/cmake/merge_requests/2892 + find -path "*.app*" -type f -executable -exec mv {} ${DISTNAME}/bin/bitcoin-qt \; + find ${DISTNAME}/bin -type f -executable -exec ${i}-strip -u -r {} \; + find ${DISTNAME}/lib -type f -executable -exec ${i}-strip -x {} \; + find ${DISTNAME} -not -path "*.app*" | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz cd ../../ done mkdir -p $OUTDIR/src