mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-16 10:30:41 +01:00
Merge bitcoin/bitcoin#33842: build: Bump g++ minimum supported version to 12
fa9f29a4a7doc: Recommend latest Debian stable or Ubuntu LTS (MarcoFalke)fa1711ee0ddoc: Add GCC-12 min release notes (MarcoFalke)faa8be75c9ci: Enable experimental kernel stuff in G++-12 task (previous releases) (MarcoFalke)fabce97b30test: Remove gccbug_90348 test case (MarcoFalke)fa3854e432test: Remove unused fs::create_directories test (MarcoFalke)fa9dacdbdeutil: [refactor] Remove unused create_directories workaround (MarcoFalke)fa807f78aebuild: Bump g++ minimum supported version to 12 (MarcoFalke) Pull request description: All supported operating systems that previously came with at least g++-11, also come with at least g++-12, so bumping the minimum should be fine. For reference: * https://packages.ubuntu.com/jammy/g++-12 * https://packages.ubuntu.com/noble/g++ (g++-13) * https://packages.debian.org/bookworm/g++ (g++-12) * FreeBSD Ports ship a recent GCC * RHEL-based 8, and 9 ship with g++-14 via appstream (`dnf install gcc-toolset-14` -> `/opt/rh/gcc-toolset-14/`) * RHEL-based 10 ships with g++ (14 by default) * OpenSuse Leap and Tumbleweed ship with g++ 15 https://software.opensuse.org/package/gcc15-c++ Obviously, downloading pre-compiled releases or compiling previous release branches is unaffected by this change. ACKs for top commit: janb84: re-ACKfa9f29a4a7TheCharlatan: Re-ACKfa9f29a4a7hebasto: ACKfa9f29a4a7. Tree-SHA512: ce14ecf78ccfe4f221dcbc9147dcfc00c0512b23a6fcda5ba71b62b4f5d39a5139f083d035113f189bfbd396d485e1ebc626a9a16b6fa0b74fd95aed2041c841
This commit is contained in:
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -510,7 +510,7 @@ jobs:
|
||||
timeout-minutes: 240
|
||||
file-env: './ci/test/00_setup_env_native_fuzz_with_valgrind.sh'
|
||||
|
||||
- name: 'previous releases, depends DEBUG'
|
||||
- name: 'previous releases'
|
||||
cirrus-runner: 'ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04-md'
|
||||
fallback-runner: 'ubuntu-24.04'
|
||||
timeout-minutes: 120
|
||||
|
||||
@@ -493,8 +493,8 @@ try_append_cxx_flags("-fmacro-prefix-map=A=B" TARGET core_interface SKIP_LINK
|
||||
IF_CHECK_PASSED "-fmacro-prefix-map=${PROJECT_SOURCE_DIR}/src=."
|
||||
)
|
||||
|
||||
# Currently all versions of gcc are subject to a class of bugs, see the
|
||||
# gccbug_90348 test case (only reproduces on GCC 11 and earlier) and
|
||||
# GCC versions 13.2 (and earlier) are subject to a class of bugs, see
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348 and the meta bug
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111843. To work around that, set
|
||||
# -fstack-reuse=none for all gcc builds. (Only gcc understands this flag).
|
||||
try_append_cxx_flags("-fstack-reuse=none" TARGET core_interface)
|
||||
|
||||
@@ -8,15 +8,16 @@ export LC_ALL=C.UTF-8
|
||||
|
||||
export CONTAINER_NAME=ci_native_previous_releases
|
||||
export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:22.04"
|
||||
# Use minimum supported python3.10 and gcc-11, see doc/dependencies.md
|
||||
export PACKAGES="gcc-11 g++-11 python3-zmq"
|
||||
export DEP_OPTS="CC=gcc-11 CXX=g++-11"
|
||||
# Use minimum supported python3.10 and gcc-12, see doc/dependencies.md
|
||||
export PACKAGES="gcc-12 g++-12 python3-zmq"
|
||||
export DEP_OPTS="CC=gcc-12 CXX=g++-12"
|
||||
export TEST_RUNNER_EXTRA="--previous-releases --coverage --extended --exclude feature_dbcrash" # Run extended tests so that coverage does not fail, but exclude the very slow dbcrash
|
||||
export GOAL="install"
|
||||
export CI_LIMIT_STACK_SIZE=1
|
||||
export DOWNLOAD_PREVIOUS_RELEASES="true"
|
||||
export BITCOIN_CONFIG="\
|
||||
-DWITH_ZMQ=ON -DBUILD_GUI=ON -DREDUCE_EXPORTS=ON \
|
||||
--preset=dev-mode \
|
||||
-DREDUCE_EXPORTS=ON \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
-DCMAKE_C_FLAGS='-funsigned-char' \
|
||||
-DCMAKE_C_FLAGS_DEBUG='-g2 -O2' \
|
||||
|
||||
@@ -46,10 +46,14 @@ Finally, clang (often less resource hungry) can be used instead of gcc, which is
|
||||
|
||||
#### Dependency Build Instructions
|
||||
|
||||
Build requirements:
|
||||
Build requirements for the latest Debian "stable" release, or the latest Ubuntu LTS release:
|
||||
|
||||
sudo apt-get install build-essential cmake pkgconf python3
|
||||
|
||||
For Debian "oldstable", or earlier Ubuntu LTS releases, you may need to pick a
|
||||
later compiler version, according to the [dependencies](/doc/dependencies.md)
|
||||
documentation.
|
||||
|
||||
Now, you can either build from self-compiled [depends](#dependencies) or install the required dependencies:
|
||||
|
||||
sudo apt-get install libevent-dev libboost-dev
|
||||
|
||||
@@ -11,7 +11,7 @@ Bitcoin Core requires one of the following compilers.
|
||||
| Dependency | Minimum required |
|
||||
| --- | --- |
|
||||
| [Clang](https://clang.llvm.org) | [17.0](https://github.com/bitcoin/bitcoin/pull/33555) |
|
||||
| [GCC](https://gcc.gnu.org) | [11.1](https://github.com/bitcoin/bitcoin/pull/29091) |
|
||||
| [GCC](https://gcc.gnu.org) | [12.1](https://github.com/bitcoin/bitcoin/pull/33842) |
|
||||
|
||||
## Required
|
||||
|
||||
|
||||
4
doc/release-notes-33842.md
Normal file
4
doc/release-notes-33842.md
Normal file
@@ -0,0 +1,4 @@
|
||||
Build System
|
||||
------------
|
||||
|
||||
- The minimum supported GCC compiler version has been raised to 12.1 (#33842).
|
||||
@@ -34,7 +34,6 @@ add_executable(test_bitcoin
|
||||
coinscachepair_tests.cpp
|
||||
coinstatsindex_tests.cpp
|
||||
common_url_tests.cpp
|
||||
compilerbug_tests.cpp
|
||||
compress_tests.cpp
|
||||
crypto_tests.cpp
|
||||
cuckoocache_tests.cpp
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
// Copyright (c) 2019-2021 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(compilerbug_tests)
|
||||
|
||||
#if defined(__GNUC__)
|
||||
// This block will also be built under clang, which is fine (as it supports noinline)
|
||||
void __attribute__ ((noinline)) set_one(unsigned char* ptr)
|
||||
{
|
||||
*ptr = 1;
|
||||
}
|
||||
|
||||
int __attribute__ ((noinline)) check_zero(unsigned char const* in, unsigned int len)
|
||||
{
|
||||
for (unsigned int i = 0; i < len; ++i) {
|
||||
if (in[i] != 0) return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
void set_one_on_stack() {
|
||||
unsigned char buf[1];
|
||||
set_one(buf);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(gccbug_90348) {
|
||||
// Test for GCC bug 90348. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90348
|
||||
for (int i = 0; i <= 4; ++i) {
|
||||
unsigned char in[4];
|
||||
for (int j = 0; j < i; ++j) {
|
||||
in[j] = 0;
|
||||
set_one_on_stack(); // Apparently modifies in[0]
|
||||
}
|
||||
BOOST_CHECK(check_zero(in, i));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
@@ -139,28 +139,4 @@ BOOST_AUTO_TEST_CASE(rename)
|
||||
fs::remove(path2);
|
||||
}
|
||||
|
||||
#ifndef __MINGW64__ // no symlinks on mingw
|
||||
BOOST_AUTO_TEST_CASE(create_directories)
|
||||
{
|
||||
// Test fs::create_directories workaround.
|
||||
const fs::path tmpfolder{m_args.GetDataDirBase()};
|
||||
|
||||
const fs::path dir{tmpfolder / "a"};
|
||||
fs::create_directory(dir);
|
||||
BOOST_CHECK(fs::exists(dir));
|
||||
BOOST_CHECK(fs::is_directory(dir));
|
||||
BOOST_CHECK(!fs::create_directories(dir));
|
||||
|
||||
const fs::path symlink{tmpfolder / "b"};
|
||||
fs::create_directory_symlink(dir, symlink);
|
||||
BOOST_CHECK(fs::exists(symlink));
|
||||
BOOST_CHECK(fs::is_symlink(symlink));
|
||||
BOOST_CHECK(fs::is_directory(symlink));
|
||||
BOOST_CHECK(!fs::create_directories(symlink));
|
||||
|
||||
fs::remove(symlink);
|
||||
fs::remove(dir);
|
||||
}
|
||||
#endif // __MINGW64__
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
@@ -185,29 +185,6 @@ static inline path PathFromString(const std::string& string)
|
||||
return std::filesystem::path(string);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Create directory (and if necessary its parents), unless the leaf directory
|
||||
* already exists or is a symlink to an existing directory.
|
||||
* This is a temporary workaround for an issue in libstdc++ that has been fixed
|
||||
* upstream [PR101510].
|
||||
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101510
|
||||
*/
|
||||
static inline bool create_directories(const std::filesystem::path& p)
|
||||
{
|
||||
if (std::filesystem::is_symlink(p) && std::filesystem::is_directory(p)) {
|
||||
return false;
|
||||
}
|
||||
return std::filesystem::create_directories(p);
|
||||
}
|
||||
|
||||
/**
|
||||
* This variant is not used. Delete it to prevent it from accidentally working
|
||||
* around the workaround. If it is needed, add a workaround in the same pattern
|
||||
* as above.
|
||||
*/
|
||||
bool create_directories(const std::filesystem::path& p, std::error_code& ec) = delete;
|
||||
|
||||
} // namespace fs
|
||||
|
||||
/** Bridge operations to C stdio */
|
||||
|
||||
Reference in New Issue
Block a user