diff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt index b9f37969d37..211b8d84cc2 100644 --- a/src/kernel/CMakeLists.txt +++ b/src/kernel/CMakeLists.txt @@ -80,9 +80,25 @@ add_library(bitcoinkernel ../validationinterface.cpp ../versionbits.cpp ) + +# Compiler warnings that apply only to the kernel and its dependencies. +# These can be more strict and/or warnings that only apply to shared +# libs. +add_library(kernel_warn_interface INTERFACE) +if(MSVC) +else() + try_append_cxx_flags("-Wunique-object-duplication" TARGET kernel_warn_interface SKIP_LINK) +endif() + +# Also manually apply the warnings to the kernel's internal dependencies +target_link_libraries(bitcoin_clientversion PRIVATE kernel_warn_interface) +target_link_libraries(bitcoin_crypto PRIVATE kernel_warn_interface) +target_link_libraries(leveldb PRIVATE kernel_warn_interface) + target_link_libraries(bitcoinkernel PRIVATE core_interface + kernel_warn_interface bitcoin_clientversion bitcoin_crypto leveldb diff --git a/src/support/lockedpool.cpp b/src/support/lockedpool.cpp index 01eef2b93d3..c27f900d021 100644 --- a/src/support/lockedpool.cpp +++ b/src/support/lockedpool.cpp @@ -400,3 +400,10 @@ void LockedPoolManager::CreateInstance() static LockedPoolManager instance(std::move(allocator)); LockedPoolManager::_instance = &instance; } + +LockedPoolManager& LockedPoolManager::Instance() +{ + static std::once_flag init_flag; + std::call_once(init_flag, LockedPoolManager::CreateInstance); + return *LockedPoolManager::_instance; +} diff --git a/src/support/lockedpool.h b/src/support/lockedpool.h index 2363b1e4ef0..a7d80df8766 100644 --- a/src/support/lockedpool.h +++ b/src/support/lockedpool.h @@ -219,12 +219,7 @@ class LockedPoolManager : public LockedPool { public: /** Return the current instance, or create it once */ - static LockedPoolManager& Instance() - { - static std::once_flag init_flag; - std::call_once(init_flag, LockedPoolManager::CreateInstance); - return *LockedPoolManager::_instance; - } + static LockedPoolManager& Instance(); private: explicit LockedPoolManager(std::unique_ptr allocator);