Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
ddcecd9
build(depends): add pinned Rust toolchain packages and crate vendoring
PastaPastaPasta Aug 20, 2026
104da7d
build(depends): build Dash Platform CXX bindings behind a PLATFORM_GU…
PastaPastaPasta Aug 20, 2026
fab4d10
ci: exercise the PLATFORM_GUI depends knob in a linux64_platform_gui …
PastaPastaPasta Aug 20, 2026
82c62a0
build(depends): redownload rust-std archives that fail hash verification
PastaPastaPasta Aug 31, 2026
978a0d2
build(depends): fail native_rust staging in Guix when a runtime libra…
PastaPastaPasta Aug 31, 2026
092453f
build(depends): make rustc-linker.sh executable
PastaPastaPasta Sep 8, 2026
6d001b3
build(depends): set LC_ALL=C in rustc-linker.sh
PastaPastaPasta Sep 9, 2026
758b315
build(depends): keep the vendor archive out of package rebuild decisions
PastaPastaPasta Sep 9, 2026
ad335ea
build(depends): resolve ls through symlinks when detecting Guix
PastaPastaPasta Sep 9, 2026
09b3dd5
build(depends): drop unused native_rust staging options
PastaPastaPasta Sep 9, 2026
7f9bd41
build(depends): find Rust runtime libraries through the Guix profile
PastaPastaPasta Sep 9, 2026
7661126
build(depends): write the vendor archive atomically
PastaPastaPasta Sep 9, 2026
299c5fb
build(depends): pin platform_cxx to the SDK-backed dash-platform-cxx …
PastaPastaPasta Sep 8, 2026
88df8bf
feat: Dash Platform client library over the Platform SDK behind --ena…
PastaPastaPasta Sep 8, 2026
d9e5347
feat(wallet): asset-lock creation and broadcast-error seams for DashPay
PastaPastaPasta Aug 20, 2026
d2c5ead
feat(qt): DashPay usernames, contacts and contact payments
PastaPastaPasta Sep 8, 2026
acc35b3
fix(qt): harden DashPay platform flows
PastaPastaPasta Sep 10, 2026
d0f4e5c
fix(qt): apply platform chain override to client
PastaPastaPasta Sep 10, 2026
46a3d37
fix(platform): honor contact request time filter
PastaPastaPasta Sep 10, 2026
052afd3
fix(platform): clear removed DAPI endpoints
PastaPastaPasta Sep 10, 2026
a48dc85
fix(platform): reject invalid SDK context
PastaPastaPasta Sep 10, 2026
0217c3f
fix(qt): avoid unused masternode tip
PastaPastaPasta Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/build-depends.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ on:
description: "Short hash of the CI base image manifest for cache busting"
required: true
type: string
rust-vendor-artifact:
description: "Artifact holding freshly generated Rust vendor archives"
required: false
type: string
default: ""
runs-on:
description: "Runner label to use (e.g., ubuntu-24.04 or ubuntu-24.04-arm)"
required: true
Expand Down Expand Up @@ -144,6 +149,28 @@ jobs:
key: depends-sources-${{ hashFiles('depends/packages/*') }}
restore-keys: depends-sources-

- name: Restore Rust vendor sources
id: rust-vendor-cache
if: inputs.build-target == 'linux64_platform_gui'
uses: actions/cache/restore@v5
with:
path: depends/sources/platform-cxx-*-vendored.tar.gz
key: depends-rust-vendor-sources-${{ hashFiles('depends/Makefile', 'depends/funcs.mk', 'depends/packages/native_rust.mk', 'depends/packages/platform_cxx.mk', 'depends/patches/platform_cxx/cargo-config.toml') }}

- name: Download Rust vendor sources
if: inputs.build-target == 'linux64_platform_gui' && steps.rust-vendor-cache.outputs.cache-hit != 'true' && inputs.rust-vendor-artifact != ''
uses: actions/download-artifact@v8
with:
name: ${{ inputs.rust-vendor-artifact }}
path: depends/sources

- name: Check Rust vendor sources are present
if: inputs.build-target == 'linux64_platform_gui' && steps.rust-vendor-cache.outputs.cache-hit != 'true' && inputs.rust-vendor-artifact == ''
run: |
echo "::error::Rust vendor source cache missed and no same-run artifact was provided"
exit 1
shell: bash

- name: Restore SDKs cache
id: sdk-cache
uses: actions/cache/restore@v5
Expand Down
37 changes: 37 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,18 @@ jobs:
base-image-digest: ${{ needs.check-skip.outputs.base-image-digest }}
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}

depends-linux64_platform_gui:
name: x86_64-pc-linux-gnu_platform_gui
uses: ./.github/workflows/build-depends.yml
needs: [check-skip, container, cache-sources]
if: ${{ vars.SKIP_LINUX64_PLATFORM_GUI == '' }}
with:
build-target: linux64_platform_gui
container-path: ${{ needs.container.outputs.path }}
base-image-digest: ${{ needs.check-skip.outputs.base-image-digest }}
rust-vendor-artifact: ${{ needs.cache-sources.outputs.rust-vendor-artifact }}
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}

depends-mac:
name: x86_64-apple-darwin
uses: ./.github/workflows/build-depends.yml
Expand Down Expand Up @@ -277,6 +289,20 @@ jobs:
depends-artifact: ${{ needs.depends-linux64_nowallet.outputs.built-artifact }}
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}

src-linux64_platform_gui:
name: linux64_platform_gui-build
uses: ./.github/workflows/build-src.yml
needs: [check-skip, container, depends-linux64_platform_gui]
if: ${{ vars.SKIP_LINUX64_PLATFORM_GUI == '' }}
with:
build-target: linux64_platform_gui
container-path: ${{ needs.container.outputs.path }}
depends-key: ${{ needs.depends-linux64_platform_gui.outputs.key }}
depends-host: ${{ needs.depends-linux64_platform_gui.outputs.host }}
depends-dep-opts: ${{ needs.depends-linux64_platform_gui.outputs.dep-opts }}
depends-artifact: ${{ needs.depends-linux64_platform_gui.outputs.built-artifact }}
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}

src-linux64_sqlite:
name: linux64_sqlite-build
uses: ./.github/workflows/build-src.yml
Expand Down Expand Up @@ -372,6 +398,17 @@ jobs:
container-path: ${{ needs.container-slim.outputs.path }}
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}

test-linux64_platform_gui:
name: linux64_platform_gui-test
uses: ./.github/workflows/test-src.yml
needs: [check-skip, container-slim, src-linux64_platform_gui, lint]
if: ${{ vars.SKIP_LINUX64_PLATFORM_GUI == '' }}
with:
bundle-key: ${{ needs.src-linux64_platform_gui.outputs.key }}
build-target: linux64_platform_gui
container-path: ${{ needs.container-slim.outputs.path }}
runs-on: ${{ needs.check-skip.outputs['runner-amd64'] }}

test-linux64_sqlite:
name: linux64_sqlite-test
uses: ./.github/workflows/test-src.yml
Expand Down
40 changes: 38 additions & 2 deletions .github/workflows/cache-depends-sources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ on:
required: false
type: string
default: ubuntu-24.04-arm
outputs:
rust-vendor-artifact:
description: "Artifact holding freshly generated Rust vendor archives"
value: ${{ jobs.cache-sources.outputs.rust-vendor-artifact }}
schedule:
# Run daily at 6 AM UTC on the default branch to keep cache warm
- cron: '0 6 * * *'
Expand All @@ -18,6 +22,8 @@ jobs:
# Intentionally keep scheduled cache warming on GitHub-hosted ARM runners.
# Blacksmith caches are expected to persist long enough without a warmup cron.
runs-on: ${{ inputs.runs-on || 'ubuntu-24.04-arm' }}
outputs:
rust-vendor-artifact: ${{ steps.vendor-artifact.outputs.name }}
steps:
- name: Checkout code
uses: actions/checkout@v6
Expand All @@ -35,6 +41,36 @@ jobs:
restore-keys: depends-sources-
lookup-only: true

- name: Cache Rust vendor sources
id: rust-vendor-cache
uses: actions/cache@v5
with:
path: depends/sources/platform-cxx-*-vendored.tar.gz
key: depends-rust-vendor-sources-${{ hashFiles('depends/Makefile', 'depends/funcs.mk', 'depends/packages/native_rust.mk', 'depends/packages/platform_cxx.mk', 'depends/patches/platform_cxx/cargo-config.toml') }}

- name: Download sources
if: steps.cache-check.outputs.cache-hit != 'true'
run: make -C depends download
if: |
steps.cache-check.outputs.cache-hit != 'true' ||
steps.rust-vendor-cache.outputs.cache-hit != 'true'
run: |
make -C depends PLATFORM_GUI=1 download
make -C depends PLATFORM_GUI=1 vendor-platform_cxx-crates
# The cache producer normally runs on ARM, while the platform_gui
# consumer runs on x86_64. Native Rust is selected from the build
# architecture, so fetch the x86_64 compiler archive explicitly too.
make -C depends BUILD=x86_64-pc-linux-gnu PLATFORM_GUI=1 download-one

- name: Select Rust vendor artifact
id: vendor-artifact
if: github.event_name != 'schedule' && steps.rust-vendor-cache.outputs.cache-hit != 'true'
run: echo "name=depends-rust-vendor-sources-${{ github.run_id }}" >> "$GITHUB_OUTPUT"

- name: Upload Rust vendor sources
if: steps.vendor-artifact.outputs.name != ''
uses: actions/upload-artifact@v6
with:
name: ${{ steps.vendor-artifact.outputs.name }}
path: depends/sources/platform-cxx-*-vendored.tar.gz
compression-level: 0
retention-days: 1
overwrite: true
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -181,3 +181,5 @@ compile_commands.json
# Linux perf profiling artifacts
perf.data
perf.data.old

src/qt/platform/moc_*.cpp
2 changes: 2 additions & 0 deletions ci/dash/matrix.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ elif [ "$BUILD_TARGET" = "linux64" ]; then
source ./ci/test/00_setup_env_native_qt5.sh
elif [ "$BUILD_TARGET" = "linux64_asan" ]; then
source ./ci/test/00_setup_env_native_asan.sh
elif [ "$BUILD_TARGET" = "linux64_msan" ]; then
source ./ci/test/00_setup_env_native_msan.sh
elif [ "$BUILD_TARGET" = "linux64_fuzz" ]; then
source ./ci/test/00_setup_env_native_fuzz.sh
elif [ "$BUILD_TARGET" = "linux64_multiprocess" ]; then
Expand Down
26 changes: 26 additions & 0 deletions ci/test/00_setup_env_native_fuzz_with_msan.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
#
# Copyright (c) 2020-present The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.

export LC_ALL=C.UTF-8

export CI_IMAGE_NAME_TAG="docker.io/ubuntu:24.04"
LIBCXX_DIR="/msan/cxx_build/"
export MSAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1 -fno-optimize-sibling-calls"
LIBCXX_FLAGS="-nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument"
export MSAN_AND_LIBCXX_FLAGS="${MSAN_FLAGS} ${LIBCXX_FLAGS}"

export CONTAINER_NAME="ci_native_fuzz_msan"
export PACKAGES="ninja-build"
# BDB generates false-positives and will be removed in future
export DEP_OPTS="DEBUG=1 NO_BDB=1 NO_QT=1 CC=clang CXX=clang++ CFLAGS='${MSAN_FLAGS}' CXXFLAGS='${MSAN_AND_LIBCXX_FLAGS}'"
export GOAL="install"
# _FORTIFY_SOURCE is not compatible with MSAN.
export BITCOIN_CONFIG="--enable-fuzz --with-sanitizers=fuzzer,memory CPPFLAGS='-DBOOST_MULTI_INDEX_ENABLE_SAFE_MODE -U_FORTIFY_SOURCE'"
export USE_MEMORY_SANITIZER="true"
export RUN_UNIT_TESTS="false"
export RUN_FUNCTIONAL_TESTS="false"
export RUN_FUZZ_TESTS=true
export CCACHE_MAXSIZE=250M
38 changes: 38 additions & 0 deletions ci/test/00_setup_env_native_msan.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
#
# Copyright (c) 2020-present The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.

export LC_ALL=C.UTF-8

export CONTAINER_NAME="ci_native_msan"
export HOST=x86_64-pc-linux-gnu
# Built into the CI image by contrib/containers/ci/ci-msan.Dockerfile so that it
# lands in a cached layer instead of being rebuilt on every run. Upstream does
# the equivalent in ci/test/01_base_install.sh, which Dash does not have.
LIBCXX_DIR="/cxx_build/"
export MSAN_FLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer -g -O1 -fno-optimize-sibling-calls"
LIBCXX_FLAGS="-nostdinc++ -nostdlib++ -isystem ${LIBCXX_DIR}include/c++/v1 -L${LIBCXX_DIR}lib -Wl,-rpath,${LIBCXX_DIR}lib -lc++ -lc++abi -lpthread -Wno-unused-command-line-argument"
export MSAN_AND_LIBCXX_FLAGS="${MSAN_FLAGS} ${LIBCXX_FLAGS}"

# BDB generates false-positives and will be removed in future
export DEP_OPTS="DEBUG=1 NO_BDB=1 NO_QT=1 NO_UPNP=1 NO_NATPMP=1 CC=clang-19 CXX=clang++-19 CFLAGS='${MSAN_FLAGS}' CXXFLAGS='${MSAN_AND_LIBCXX_FLAGS}'"
export GOAL="install"
# CC/CXX/CFLAGS/CXXFLAGS are repeated here rather than left to depends'
# config.site. Upstream dropped them in bitcoin#29800 because its
# ci/test/03_test_script.sh sets CONFIG_SITE explicitly (bitcoin#26683);
# ci/dash/build_src.sh still uses the older --prefix form, and this is the only
# target whose compiler differs from the system default, so nothing else in
# Dash's CI exercises that hand-off.
# _FORTIFY_SOURCE is not compatible with MSAN.
# --with-asm=no and --with-backend=easy keep secp256k1 and relic off
# hand-written assembly, which MSan cannot see through.
# --disable-mimalloc selects the plain malloc secure allocator; mimalloc seeds
# itself with a raw getrandom syscall before main(), which MSan cannot track.
export BITCOIN_CONFIG="--with-sanitizers=memory --with-gui=no --without-bdb --with-sqlite \
--with-asm=no --with-backend=easy --disable-mimalloc \
CC=clang-19 CXX=clang++-19 CFLAGS='${MSAN_FLAGS}' CXXFLAGS='${MSAN_AND_LIBCXX_FLAGS}' \
CPPFLAGS='-U_FORTIFY_SOURCE'"
export USE_MEMORY_SANITIZER="true"
export TEST_RUNNER_TIMEOUT_FACTOR=40
26 changes: 26 additions & 0 deletions ci/test/00_setup_env_native_platform_gui.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
#
# Copyright (c) 2026 The Dash Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.

export LC_ALL=C.UTF-8

# Builds depends with PLATFORM_GUI=1 so the Platform-owned CXX binding
# archive (libdash_platform_cxx.a, dash-sdk built offline from vendored
# crates) is produced, hash-verified and installed into the depends prefix,
# then builds dash-qt against that prefix. The --enable-platform-gui configure
# flag and the platform_* unit-test suites arrive with the Platform client
# library and are added to BITCOIN_CONFIG there; until then this lane proves
# the depends knob end to end and that the enriched prefix stays
# link-compatible. Functional tests are skipped: there is no dashd-only
# surface to drive.
export CONTAINER_NAME=ci_native_platform_gui
export HOST=x86_64-pc-linux-gnu
export PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools libdbus-1-dev libharfbuzz-dev"
export DEP_OPTS="PLATFORM_GUI=1"
export RUN_UNIT_TESTS="true"
export RUN_UNIT_TESTS_SEQUENTIAL="false"
export RUN_FUNCTIONAL_TESTS="false"
export GOAL="install"
export BITCOIN_CONFIG="--with-gui=qt5 --enable-zmq --with-libs=no --enable-reduce-exports LDFLAGS=-static-libstdc++"
56 changes: 56 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,16 @@ if test "$enable_miner" = "yes"; then
AC_DEFINE(ENABLE_MINER, 1, [Define this symbol if in-wallet miner should be enabled])
fi

dnl Enable Dash Platform support (usernames / DashPay contacts) in the GUI.
dnl This only affects dash-qt; dashd and the other binaries never link any of it.
AC_ARG_ENABLE([platform-gui],
[AS_HELP_STRING([--enable-platform-gui],
[enable Dash Platform (usernames/DashPay) support in the GUI (default is no)])],
[enable_platform_gui=$enableval],
[enable_platform_gui=no])
AC_ARG_VAR([PLATFORM_CXX_CFLAGS], [C++ compiler flags for the Dash Platform CXX bindings])
AC_ARG_VAR([PLATFORM_CXX_LIBS], [Linker flags for the Dash Platform CXX bindings])

dnl Enable different -fsanitize options
AC_ARG_WITH([sanitizers],
[AS_HELP_STRING([--with-sanitizers],
Expand Down Expand Up @@ -883,6 +893,7 @@ case $host in
export PKG_CONFIG_PATH="$($BREW --prefix qt@5 2>/dev/null)/lib/pkgconfig:$PKG_CONFIG_PATH"
fi


gmp_prefix=$($BREW --prefix gmp 2>/dev/null)
if test "$gmp_prefix" != ""; then
if test "$suppress_external_warnings" != "no"; then
Expand Down Expand Up @@ -1938,6 +1949,50 @@ if test "$build_bitcoin_wallet$build_bitcoin_cli$build_bitcoin_tx$build_bitcoin_
AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-fuzz(-binary) --enable-bench or --enable-tests])
fi

dnl Dash Platform GUI support needs the GUI and the wallet. The Platform-owned
dnl CXX archive (dash-sdk, networking included) is linked into dash-qt and the
dnl test binaries only; its TLS stack reads the system trust store, which is
dnl Security.framework on macOS and the crypt32/bcrypt/secur32 APIs on Windows.
if test "$enable_platform_gui" = "yes"; then
if test "$bitcoin_enable_qt" != "yes"; then
AC_MSG_ERROR([--enable-platform-gui requires the GUI (--with-gui)])
fi
if test "$enable_wallet" != "yes"; then
AC_MSG_ERROR([--enable-platform-gui requires wallet support (--enable-wallet)])
fi
if test -z "$PLATFORM_CXX_LIBS"; then
PLATFORM_CXX_LIBS="-ldash_platform_cxx"
fi
PLATFORM_CXX_LIBS="$PLATFORM_CXX_LIBS -lpthread -lm"
case $host in
*darwin*) PLATFORM_CXX_LIBS="$PLATFORM_CXX_LIBS -framework Security -framework CoreFoundation" ;;
*linux*) PLATFORM_CXX_LIBS="$PLATFORM_CXX_LIBS -ldl" ;;
*mingw*) PLATFORM_CXX_LIBS="$PLATFORM_CXX_LIBS -lws2_32 -lbcrypt -lcrypt32 -lsecur32 -lncrypt -luserenv -lntdll" ;;
esac
TEMP_CPPFLAGS="$CPPFLAGS"
TEMP_LIBS="$LIBS"
CPPFLAGS="$CPPFLAGS $PLATFORM_CXX_CFLAGS"
LIBS="$PLATFORM_CXX_LIBS $LIBS"
AC_LANG_PUSH([C++])
AC_MSG_CHECKING([for Dash Platform CXX bindings])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <dash/platform/ffi.h>
]], [[
rust::Box<platform_ffi::PlatformClient> client{platform_ffi::new_platform_client()};
client->shutdown();
]])], [AC_MSG_RESULT([yes])], [
AC_MSG_RESULT([no])
AC_MSG_ERROR([Dash Platform CXX bindings not found (required by --enable-platform-gui)])
])
AC_LANG_POP
CPPFLAGS="$TEMP_CPPFLAGS"
LIBS="$TEMP_LIBS"
AC_DEFINE([ENABLE_PLATFORM_GUI], [1], [Define this symbol to enable Dash Platform support in the GUI])
fi
AM_CONDITIONAL([ENABLE_PLATFORM_GUI], [test "$enable_platform_gui" = "yes"])
AC_SUBST(PLATFORM_CXX_CFLAGS)
AC_SUBST(PLATFORM_CXX_LIBS)

AM_CONDITIONAL([TARGET_DARWIN], [test "$TARGET_OS" = "darwin"])
AM_CONDITIONAL([BUILD_DARWIN], [test "$BUILD_OS" = "darwin"])
AM_CONDITIONAL([TARGET_LINUX], [test "$TARGET_OS" = "linux"])
Expand Down Expand Up @@ -2135,6 +2190,7 @@ echo " debug enabled = $enable_debug"
echo " stacktraces = $enable_stacktraces"
echo " crash hooks = $enable_crashhooks"
echo " miner enabled = $enable_miner"
echo " platform gui = $enable_platform_gui"
echo " werror = $enable_werror"
echo
echo " target os = $host_os"
Expand Down
37 changes: 37 additions & 0 deletions contrib/containers/ci/ci-msan.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# syntax = devthefuture/dockerfile-x

FROM ./ci.Dockerfile

# MemorySanitizer reports any read of memory it did not watch being written,
# so the C++ standard library has to be instrumented too. A stock libstdc++ or
# libc++ produces a flood of reports that cannot be told apart from real ones.
#
# Upstream builds this in ci/test/01_base_install.sh, which runs inside its
# docker build. Dash has no such script, so it lives here instead, which keeps
# the result in a cached image layer rather than rebuilding it on every run.

USER root

ARG LLVM_VERSION=19
ARG LLVM_TAG=llvmorg-19.1.7

RUN set -ex; \
apt-get update && apt-get install ${APT_ARGS} ninja-build; \
rm -rf /var/lib/apt/lists/*; \
git clone --depth=1 -b "${LLVM_TAG}" https://github.com/llvm/llvm-project /llvm-project; \
cmake -G Ninja -B /cxx_build/ \
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_USE_SANITIZER=MemoryWithOrigins \
-DCMAKE_C_COMPILER=clang-${LLVM_VERSION} \
-DCMAKE_CXX_COMPILER=clang++-${LLVM_VERSION} \
-DLLVM_TARGETS_TO_BUILD=Native \
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
-DLIBCXX_HARDENING_MODE=debug \
-S /llvm-project/runtimes; \
ninja -C /cxx_build/; \
du -sh /llvm-project; \
rm -rf /llvm-project;

USER dash
Loading
Loading