mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-08-27 12:37:57 +02:00
Merge commit 'dd68d0f40b614474f24469fbe1ba02f8f9146b31' into pr/subtree-3
This commit is contained in:
33
src/ipc/libmultiprocess/.github/workflows/ci.yml
vendored
33
src/ipc/libmultiprocess/.github/workflows/ci.yml
vendored
@@ -5,18 +5,47 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
build-openbsd:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: build • openbsd
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: openbsd {0}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
|
- name: Start OpenBSD VM
|
||||||
|
uses: vmactions/openbsd-vm@v1
|
||||||
|
with:
|
||||||
|
prepare: |
|
||||||
|
pkg_add -v cmake ninja git python bash
|
||||||
|
run: |
|
||||||
|
git clone --depth=1 https://codeberg.org/OpenBSD/ports.git /usr/ports
|
||||||
|
sync: 'rsync'
|
||||||
|
copyback: false
|
||||||
|
|
||||||
|
- name: Install capnproto
|
||||||
|
run: |
|
||||||
|
cd /usr/ports/devel/capnproto/
|
||||||
|
make install
|
||||||
|
|
||||||
|
- name: Run CI script
|
||||||
|
run: |
|
||||||
|
cd ${{ github.workspace }}
|
||||||
|
CI_CONFIG="ci/configs/openbsd.bash" bash ci/scripts/ci.sh
|
||||||
|
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
config: [default, llvm, gnu32, sanitize]
|
config: [default, llvm, gnu32, sanitize, olddeps]
|
||||||
|
|
||||||
name: build • ${{ matrix.config }}
|
name: build • ${{ matrix.config }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
|
|
||||||
- name: Install Nix
|
- name: Install Nix
|
||||||
uses: cachix/install-nix-action@v31 # 2025-05-27, from https://github.com/cachix/install-nix-action/tags
|
uses: cachix/install-nix-action@v31 # 2025-05-27, from https://github.com/cachix/install-nix-action/tags
|
||||||
|
@@ -12,8 +12,29 @@ endif()
|
|||||||
|
|
||||||
include("cmake/compat_find.cmake")
|
include("cmake/compat_find.cmake")
|
||||||
|
|
||||||
find_package(CapnProto REQUIRED)
|
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
find_package(CapnProto 0.7 REQUIRED)
|
||||||
|
|
||||||
|
# Check for list-of-pointers memory access bug from Nov 2022
|
||||||
|
# https://nvd.nist.gov/vuln/detail/CVE-2022-46149
|
||||||
|
# https://github.com/advisories/GHSA-qqff-4vw4-f6hx
|
||||||
|
# https://github.com/capnproto/capnproto/security/advisories/GHSA-qqff-4vw4-f6hx
|
||||||
|
# https://github.com/capnproto/capnproto/blob/master/security-advisories/2022-11-30-0-pointer-list-bounds.md
|
||||||
|
# https://capnproto.org/news/2022-11-30-CVE-2022-46149-security-advisory.html
|
||||||
|
# https://dwrensha.github.io/capnproto-rust/2022/11/30/out_of_bounds_memory_access_bug.html
|
||||||
|
if(CapnProto_VERSION STREQUAL "0.7.0"
|
||||||
|
OR CapnProto_VERSION STREQUAL "0.8.0"
|
||||||
|
OR CapnProto_VERSION STREQUAL "0.9.0"
|
||||||
|
OR CapnProto_VERSION STREQUAL "0.9.1"
|
||||||
|
OR CapnProto_VERSION STREQUAL "0.10.0"
|
||||||
|
OR CapnProto_VERSION STREQUAL "0.10.1"
|
||||||
|
OR CapnProto_VERSION STREQUAL "0.10.2")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Cap'n Proto ${CapnProto_VERSION} is affected by CVE-2022-46149.\n"
|
||||||
|
"Please install an updated package.\n"
|
||||||
|
"Details: https://github.com/advisories/GHSA-qqff-4vw4-f6hx
|
||||||
|
")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(MPGEN_EXECUTABLE "" CACHE FILEPATH "If specified, should be full path to an external mpgen binary to use rather than the one built internally.")
|
set(MPGEN_EXECUTABLE "" CACHE FILEPATH "If specified, should be full path to an external mpgen binary to use rather than the one built internally.")
|
||||||
|
|
||||||
|
@@ -20,6 +20,7 @@ CI_CONFIG=ci/configs/default.bash ci/scripts/run.sh
|
|||||||
CI_CONFIG=ci/configs/llvm.bash ci/scripts/run.sh
|
CI_CONFIG=ci/configs/llvm.bash ci/scripts/run.sh
|
||||||
CI_CONFIG=ci/configs/gnu32.bash ci/scripts/run.sh
|
CI_CONFIG=ci/configs/gnu32.bash ci/scripts/run.sh
|
||||||
CI_CONFIG=ci/configs/sanitize.bash ci/scripts/run.sh
|
CI_CONFIG=ci/configs/sanitize.bash ci/scripts/run.sh
|
||||||
|
CI_CONFIG=ci/configs/olddeps.bash ci/scripts/run.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
By default CI jobs will reuse their build directories. `CI_CLEAN=1` can be specified to delete them before running instead.
|
By default CI jobs will reuse their build directories. `CI_CLEAN=1` can be specified to delete them before running instead.
|
||||||
|
5
src/ipc/libmultiprocess/ci/configs/olddeps.bash
Normal file
5
src/ipc/libmultiprocess/ci/configs/olddeps.bash
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
CI_DESC="CI job using old Cap'n Proto version"
|
||||||
|
CI_DIR=build-olddeps
|
||||||
|
export CXXFLAGS="-Werror -Wall -Wextra -Wpedantic -Wno-unused-parameter -Wno-error=array-bounds"
|
||||||
|
NIX_ARGS=(--argstr capnprotoVersion "0.7.1")
|
||||||
|
BUILD_ARGS=(-k)
|
5
src/ipc/libmultiprocess/ci/configs/openbsd.bash
Normal file
5
src/ipc/libmultiprocess/ci/configs/openbsd.bash
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
CI_DESC="CI config for OpenBSD"
|
||||||
|
CI_DIR=build-openbsd
|
||||||
|
export CXXFLAGS="-Werror -Wall -Wextra -Wpedantic -Wno-unused-parameter"
|
||||||
|
CMAKE_ARGS=(-G Ninja)
|
||||||
|
BUILD_ARGS=(-k 0)
|
29
src/ipc/libmultiprocess/ci/patches/spaceship.patch
Normal file
29
src/ipc/libmultiprocess/ci/patches/spaceship.patch
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
commit e3da7da967b94f373c29a198ce45f30fb9f0e517
|
||||||
|
Author: Ed Catmur <ed@catmur.uk>
|
||||||
|
Date: Tue Jan 31 16:27:04 2023 +0000
|
||||||
|
|
||||||
|
Remove operator!= synthesized by spaceship
|
||||||
|
|
||||||
|
An operator!= suppresses the reversed equality comparison candidate generation.
|
||||||
|
|
||||||
|
This is visible in clang 16 (rc0 just released) and in gcc trunk (so probably gcc 13).
|
||||||
|
|
||||||
|
diff --git a/c++/src/kj/string.h b/c++/src/kj/string.h
|
||||||
|
index 193442aa..17835892 100644
|
||||||
|
--- a/c++/src/kj/string.h
|
||||||
|
+++ b/c++/src/kj/string.h
|
||||||
|
@@ -122,10 +122,14 @@ public:
|
||||||
|
inline constexpr const char* end() const { return content.end() - 1; }
|
||||||
|
|
||||||
|
inline constexpr bool operator==(decltype(nullptr)) const { return content.size() <= 1; }
|
||||||
|
+#if !__cpp_impl_three_way_comparison
|
||||||
|
inline constexpr bool operator!=(decltype(nullptr)) const { return content.size() > 1; }
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
inline bool operator==(const StringPtr& other) const;
|
||||||
|
+#if !__cpp_impl_three_way_comparison
|
||||||
|
inline bool operator!=(const StringPtr& other) const { return !(*this == other); }
|
||||||
|
+#endif
|
||||||
|
inline bool operator< (const StringPtr& other) const;
|
||||||
|
inline bool operator> (const StringPtr& other) const { return other < *this; }
|
||||||
|
inline bool operator<=(const StringPtr& other) const { return !(other < *this); }
|
@@ -1,6 +1,6 @@
|
|||||||
# libmultiprocess Installation
|
# libmultiprocess Installation
|
||||||
|
|
||||||
Installation currently requires Cap'n Proto:
|
Installation currently requires Cap'n Proto 0.7 or higher:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
apt install libcapnp-dev capnproto
|
apt install libcapnp-dev capnproto
|
||||||
|
@@ -24,6 +24,5 @@ add_executable(mpexample
|
|||||||
target_capnp_sources(mpexample ${CMAKE_CURRENT_SOURCE_DIR} init.capnp calculator.capnp printer.capnp)
|
target_capnp_sources(mpexample ${CMAKE_CURRENT_SOURCE_DIR} init.capnp calculator.capnp printer.capnp)
|
||||||
target_include_directories(mpexample PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
target_include_directories(mpexample PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
target_link_libraries(mpexample PRIVATE Threads::Threads)
|
target_link_libraries(mpexample PRIVATE Threads::Threads)
|
||||||
target_link_libraries(mpexample PRIVATE stdc++fs)
|
|
||||||
|
|
||||||
add_custom_target(mpexamples DEPENDS mpexample mpcalculator mpprinter)
|
add_custom_target(mpexamples DEPENDS mpexample mpcalculator mpprinter)
|
||||||
|
@@ -2,12 +2,39 @@
|
|||||||
, crossPkgs ? import <nixpkgs> {}
|
, crossPkgs ? import <nixpkgs> {}
|
||||||
, enableLibcxx ? false # Whether to use libc++ toolchain and libraries instead of libstdc++
|
, enableLibcxx ? false # Whether to use libc++ toolchain and libraries instead of libstdc++
|
||||||
, minimal ? false # Whether to create minimal shell without extra tools (faster when cross compiling)
|
, minimal ? false # Whether to create minimal shell without extra tools (faster when cross compiling)
|
||||||
|
, capnprotoVersion ? null
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
lib = pkgs.lib;
|
lib = pkgs.lib;
|
||||||
llvm = crossPkgs.llvmPackages_20;
|
llvm = crossPkgs.llvmPackages_20;
|
||||||
capnproto = crossPkgs.capnproto.override (lib.optionalAttrs enableLibcxx { clangStdenv = llvm.libcxxStdenv; });
|
capnprotoHashes = {
|
||||||
|
"0.7.0" = "sha256-Y/7dUOQPDHjniuKNRw3j8dG1NI9f/aRWpf8V0WzV9k8=";
|
||||||
|
"0.7.1" = "sha256-3cBpVmpvCXyqPUXDp12vCFCk32ZXWpkdOliNH37UwWE=";
|
||||||
|
"0.8.0" = "sha256-rfiqN83begjJ9eYjtr21/tk1GJBjmeVfa3C3dZBJ93w=";
|
||||||
|
"0.8.1" = "sha256-OZqNVYdyszro5rIe+w6YN00g6y8U/1b8dKYc214q/2o=";
|
||||||
|
"0.9.0" = "sha256-yhbDcWUe6jp5PbIXzn5EoKabXiWN8lnS08hyfxUgEQ0=";
|
||||||
|
"0.9.2" = "sha256-BspWOPZcP5nCTvmsDE62Zutox+aY5pw42d6hpH3v4cM=";
|
||||||
|
"0.10.0" = "sha256-++F4l54OMTDnJ+FO3kV/Y/VLobKVRk461dopanuU3IQ=";
|
||||||
|
"0.10.4" = "sha256-45sxnVyyYIw9i3sbFZ1naBMoUzkpP21WarzR5crg4X8=";
|
||||||
|
"1.0.0" = "sha256-NLTFJdeOzqhk4ATvkc17Sh6g/junzqYBBEoXYGH/czo=";
|
||||||
|
"1.0.2" = "sha256-LVdkqVBTeh8JZ1McdVNtRcnFVwEJRNjt0JV2l7RkuO8=";
|
||||||
|
"1.1.0" = "sha256-gxkko7LFyJNlxpTS+CWOd/p9x/778/kNIXfpDGiKM2A=";
|
||||||
|
"1.2.0" = "sha256-aDcn4bLZGq8915/NPPQsN5Jv8FRWd8cAspkG3078psc=";
|
||||||
|
};
|
||||||
|
capnprotoBase = if capnprotoVersion == null then crossPkgs.capnproto else crossPkgs.capnproto.overrideAttrs (old: {
|
||||||
|
version = capnprotoVersion;
|
||||||
|
src = crossPkgs.fetchFromGitHub {
|
||||||
|
owner = "capnproto";
|
||||||
|
repo = "capnproto";
|
||||||
|
rev = "v${capnprotoVersion}";
|
||||||
|
hash = lib.attrByPath [capnprotoVersion] "" capnprotoHashes;
|
||||||
|
};
|
||||||
|
patches = lib.optionals (lib.versionAtLeast capnprotoVersion "0.9.0" && lib.versionOlder capnprotoVersion "0.10.4") [ ./ci/patches/spaceship.patch ];
|
||||||
|
} // (lib.optionalAttrs (lib.versionOlder capnprotoVersion "0.10") {
|
||||||
|
env = { }; # Drop -std=c++20 flag forced by nixpkgs
|
||||||
|
}));
|
||||||
|
capnproto = capnprotoBase.override (lib.optionalAttrs enableLibcxx { clangStdenv = llvm.libcxxStdenv; });
|
||||||
clang = if enableLibcxx then llvm.libcxxClang else llvm.clang;
|
clang = if enableLibcxx then llvm.libcxxClang else llvm.clang;
|
||||||
clang-tools = llvm.clang-tools.override { inherit enableLibcxx; };
|
clang-tools = llvm.clang-tools.override { inherit enableLibcxx; };
|
||||||
in crossPkgs.mkShell {
|
in crossPkgs.mkShell {
|
||||||
|
@@ -146,7 +146,7 @@ static void Generate(kj::StringPtr src_prefix,
|
|||||||
const std::vector<kj::Own<const kj::ReadableDirectory>>& import_dirs)
|
const std::vector<kj::Own<const kj::ReadableDirectory>>& import_dirs)
|
||||||
{
|
{
|
||||||
std::string output_path;
|
std::string output_path;
|
||||||
if (src_prefix == ".") {
|
if (src_prefix == kj::StringPtr{"."}) {
|
||||||
output_path = src_file;
|
output_path = src_file;
|
||||||
} else if (!src_file.startsWith(src_prefix) || src_file.size() <= src_prefix.size() ||
|
} else if (!src_file.startsWith(src_prefix) || src_file.size() <= src_prefix.size() ||
|
||||||
src_file[src_prefix.size()] != '/') {
|
src_file[src_prefix.size()] != '/') {
|
||||||
@@ -156,7 +156,7 @@ static void Generate(kj::StringPtr src_prefix,
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string include_path;
|
std::string include_path;
|
||||||
if (include_prefix == ".") {
|
if (include_prefix == kj::StringPtr{"."}) {
|
||||||
include_path = src_file;
|
include_path = src_file;
|
||||||
} else if (!src_file.startsWith(include_prefix) || src_file.size() <= include_prefix.size() ||
|
} else if (!src_file.startsWith(include_prefix) || src_file.size() <= include_prefix.size() ||
|
||||||
src_file[include_prefix.size()] != '/') {
|
src_file[include_prefix.size()] != '/') {
|
||||||
@@ -425,8 +425,8 @@ static void Generate(kj::StringPtr src_prefix,
|
|||||||
|
|
||||||
const std::string method_prefix = Format() << message_namespace << "::" << method_interface.getShortDisplayName()
|
const std::string method_prefix = Format() << message_namespace << "::" << method_interface.getShortDisplayName()
|
||||||
<< "::" << Cap(method_name);
|
<< "::" << Cap(method_name);
|
||||||
const bool is_construct = method_name == "construct";
|
const bool is_construct = method_name == kj::StringPtr{"construct"};
|
||||||
const bool is_destroy = method_name == "destroy";
|
const bool is_destroy = method_name == kj::StringPtr{"destroy"};
|
||||||
|
|
||||||
struct Field
|
struct Field
|
||||||
{
|
{
|
||||||
@@ -465,7 +465,7 @@ static void Generate(kj::StringPtr src_prefix,
|
|||||||
field.result_is_set = true;
|
field.result_is_set = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!param && field_name == "result") {
|
if (!param && field_name == kj::StringPtr{"result"}) {
|
||||||
field.retval = true;
|
field.retval = true;
|
||||||
has_result = true;
|
has_result = true;
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <system_error>
|
#include <system_error>
|
||||||
|
#include <thread> // NOLINT(misc-include-cleaner) // IWYU pragma: keep
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
Reference in New Issue
Block a user