Skip to content

Commit

Permalink
Merge #269: cmake: Revert CMake's way to handle definitions
Browse files Browse the repository at this point in the history
f440d33 [FIXUP] cmake, refactor: Rearrange `cmake/bitcoin-config.h.in` (Hennadii Stepanov)
cf58bb2 [FIXUP] cmake: Revert CMake's way to handle `USE_QRCODE` definition (Hennadii Stepanov)
f476787 [FIXUP] cmake: Revert CMake's way to handle `USE_DBUS` definition (Hennadii Stepanov)
456f5af [FIXUP] cmake: Revert CMake's way to handle `ENABLE_TRACING` definition (Hennadii Stepanov)
67a2e9a [FIXUp] cmake: Revert CMake's way to handle `HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR` (Hennadii Stepanov)
5af5e7f [FIXUP] cmake: Revert CMake's way to handle definitions for `bitcoin_crypto` (Hennadii Stepanov)

Pull request description:

  This PR adjusts CMake scripts in such a way that makes removing `#include <config/bitcoin-config.h>`  from sources is unnecessary.

  Effectively, this makes Autotools and CMake builds comparable.

  Addresses bitcoin#30454 (comment) and bitcoin#30454 (comment).

ACKs for top commit:
  theuni:
    utACK f440d33

Tree-SHA512: 06aead3fb6d49821a30d97bc3130bcfd044df47b8a3fdcc73805ade522c01035ac182a64c077f022aecd0e44fc8ddefa36ae17bcd846400c1f7370a8cd8cc6e9
  • Loading branch information
hebasto committed Jul 23, 2024
2 parents 52c997f + f440d33 commit d3a10e6
Show file tree
Hide file tree
Showing 14 changed files with 118 additions and 79 deletions.
5 changes: 2 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -145,9 +145,7 @@ cmake_dependent_option(WITH_QRENCODE "Enable QR code support." ON "BUILD_GUI" OF
if(WITH_QRENCODE)
find_package(PkgConfig REQUIRED)
pkg_check_modules(libqrencode REQUIRED IMPORTED_TARGET libqrencode)
target_compile_definitions(PkgConfig::libqrencode INTERFACE
USE_QRCODE
)
set(USE_QRCODE TRUE)
endif()

cmake_dependent_option(WITH_DBUS "Enable DBus support." ON "CMAKE_SYSTEM_NAME STREQUAL \"Linux\" AND BUILD_GUI" OFF)
Expand All @@ -166,6 +164,7 @@ if(BUILD_GUI)
endif()
if(WITH_DBUS)
list(APPEND qt_components DBus)
set(USE_DBUS TRUE)
endif()
if(BUILD_GUI_TESTS)
list(APPEND qt_components Test)
Expand Down
41 changes: 33 additions & 8 deletions cmake/bitcoin-config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,28 @@
/* Copyright year */
#define COPYRIGHT_YEAR @COPYRIGHT_YEAR@

/* Define this symbol to build code that uses ARMv8 SHA-NI intrinsics */
#cmakedefine ENABLE_ARM_SHANI 1

/* Define this symbol to build code that uses AVX2 intrinsics */
#cmakedefine ENABLE_AVX2 1

/* Define if external signer support is enabled */
#cmakedefine ENABLE_EXTERNAL_SIGNER 1

/* Define this symbol to build code that uses SSE4.1 intrinsics */
#cmakedefine ENABLE_SSE41 1

/* Define to 1 to enable tracepoints for Userspace, Statically Defined Tracing
*/
#cmakedefine ENABLE_TRACING 1

/* Define to 1 to enable wallet functions. */
#cmakedefine ENABLE_WALLET 1

/* Define this symbol to build code that uses x86 SHA-NI intrinsics */
#cmakedefine ENABLE_X86_SHANI 1

/* Define to 1 if you have the declaration of `fork', and to 0 if you don't.
*/
#cmakedefine01 HAVE_DECL_FORK
Expand All @@ -55,6 +77,9 @@
/* Define if the dllexport attribute is supported. */
#cmakedefine HAVE_DLLEXPORT_ATTRIBUTE 1

/* Define this symbol if evhttp_connection_get_peer expects const char** */
#cmakedefine HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR 1

/* Define to 1 if fdatasync is available. */
#cmakedefine HAVE_FDATASYNC 1

Expand Down Expand Up @@ -119,16 +144,16 @@
/* Define to 1 if strerror_r returns char *. */
#cmakedefine STRERROR_R_CHAR_P 1

/* Define to 1 to enable wallet functions. */
#cmakedefine ENABLE_WALLET 1
/* Define if BDB support should be compiled in */
#cmakedefine USE_BDB 1

/* Define if SQLite support should be compiled in. */
#cmakedefine USE_SQLITE
/* Define if dbus support should be compiled in */
#cmakedefine USE_DBUS 1

/* Define if Berkeley DB (BDB) support should be compiled in. */
#cmakedefine USE_BDB
/* Define if QR support should be compiled in */
#cmakedefine USE_QRCODE 1

/* Define if external signer support is enabled. */
#cmakedefine ENABLE_EXTERNAL_SIGNER
/* Define if sqlite support should be compiled in */
#cmakedefine USE_SQLITE 1

#endif //BITCOIN_CONFIG_H
67 changes: 67 additions & 0 deletions cmake/introspection.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,70 @@ check_cxx_source_compiles("
int main(){}
" HAVE_DLLEXPORT_ATTRIBUTE
)

if(NOT MSVC)
include(CheckSourceCompilesAndLinks)

# Check for SSE4.1 intrinsics.
set(SSE41_CXXFLAGS -msse4.1)
check_cxx_source_compiles_with_flags("${SSE41_CXXFLAGS}" "
#include <immintrin.h>
int main()
{
__m128i a = _mm_set1_epi32(0);
__m128i b = _mm_set1_epi32(1);
__m128i r = _mm_blend_epi16(a, b, 0xFF);
return _mm_extract_epi32(r, 3);
}
" HAVE_SSE41
)
set(ENABLE_SSE41 ${HAVE_SSE41})

# Check for AVX2 intrinsics.
set(AVX2_CXXFLAGS -mavx -mavx2)
check_cxx_source_compiles_with_flags("${AVX2_CXXFLAGS}" "
#include <immintrin.h>
int main()
{
__m256i l = _mm256_set1_epi32(0);
return _mm256_extract_epi32(l, 7);
}
" HAVE_AVX2
)
set(ENABLE_AVX2 ${HAVE_AVX2})

# Check for x86 SHA-NI intrinsics.
set(X86_SHANI_CXXFLAGS -msse4 -msha)
check_cxx_source_compiles_with_flags("${X86_SHANI_CXXFLAGS}" "
#include <immintrin.h>
int main()
{
__m128i i = _mm_set1_epi32(0);
__m128i j = _mm_set1_epi32(1);
__m128i k = _mm_set1_epi32(2);
return _mm_extract_epi32(_mm_sha256rnds2_epu32(i, j, k), 0);
}
" HAVE_X86_SHANI
)
set(ENABLE_X86_SHANI ${HAVE_X86_SHANI})

# Check for ARMv8 SHA-NI intrinsics.
set(ARM_SHANI_CXXFLAGS -march=armv8-a+crypto)
check_cxx_source_compiles_with_flags("${ARM_SHANI_CXXFLAGS}" "
#include <arm_neon.h>
int main()
{
uint32x4_t a, b, c;
vsha256h2q_u32(a, b, c);
vsha256hq_u32(a, b, c);
vsha256su0q_u32(a, b);
vsha256su1q_u32(a, b, c);
}
" HAVE_ARM_SHANI
)
set(ENABLE_ARM_SHANI ${HAVE_ARM_SHANI})
endif()
4 changes: 1 addition & 3 deletions cmake/module/FindLibevent.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,7 @@ function(check_evhttp_connection_get_peer target)
" HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR
)
cmake_pop_check_state()
target_compile_definitions(${target} INTERFACE
$<$<BOOL:${HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR}>:HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR>
)
set(HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR ${HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR} PARENT_SCOPE)
endfunction()


Expand Down
2 changes: 1 addition & 1 deletion cmake/module/FindUSDT.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,6 @@ if(USDT_FOUND AND NOT TARGET USDT::headers)
add_library(USDT::headers INTERFACE IMPORTED)
set_target_properties(USDT::headers PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${USDT_INCLUDE_DIR}"
INTERFACE_COMPILE_DEFINITIONS ENABLE_TRACING
)
set(ENABLE_TRACING TRUE)
endif()
63 changes: 0 additions & 63 deletions src/crypto/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,69 +2,6 @@
# Distributed under the MIT software license, see the accompanying
# file COPYING or http://www.opensource.org/licenses/mit-license.php.

if(NOT MSVC)
include(CheckSourceCompilesAndLinks)

# Check for SSE4.1 intrinsics.
set(SSE41_CXXFLAGS -msse4.1)
check_cxx_source_compiles_with_flags("${SSE41_CXXFLAGS}" "
#include <immintrin.h>
int main()
{
__m128i a = _mm_set1_epi32(0);
__m128i b = _mm_set1_epi32(1);
__m128i r = _mm_blend_epi16(a, b, 0xFF);
return _mm_extract_epi32(r, 3);
}
" HAVE_SSE41
)

# Check for AVX2 intrinsics.
set(AVX2_CXXFLAGS -mavx -mavx2)
check_cxx_source_compiles_with_flags("${AVX2_CXXFLAGS}" "
#include <immintrin.h>
int main()
{
__m256i l = _mm256_set1_epi32(0);
return _mm256_extract_epi32(l, 7);
}
" HAVE_AVX2
)

# Check for x86 SHA-NI intrinsics.
set(X86_SHANI_CXXFLAGS -msse4 -msha)
check_cxx_source_compiles_with_flags("${X86_SHANI_CXXFLAGS}" "
#include <immintrin.h>
int main()
{
__m128i i = _mm_set1_epi32(0);
__m128i j = _mm_set1_epi32(1);
__m128i k = _mm_set1_epi32(2);
return _mm_extract_epi32(_mm_sha256rnds2_epu32(i, j, k), 0);
}
" HAVE_X86_SHANI
)

# Check for ARMv8 SHA-NI intrinsics.
set(ARM_SHANI_CXXFLAGS -march=armv8-a+crypto)
check_cxx_source_compiles_with_flags("${ARM_SHANI_CXXFLAGS}" "
#include <arm_neon.h>
int main()
{
uint32x4_t a, b, c;
vsha256h2q_u32(a, b, c);
vsha256hq_u32(a, b, c);
vsha256su0q_u32(a, b);
vsha256su1q_u32(a, b, c);
}
" HAVE_ARM_SHANI
)
endif()

add_library(bitcoin_crypto STATIC EXCLUDE_FROM_ALL
aes.cpp
chacha20.cpp
Expand Down
2 changes: 2 additions & 0 deletions src/crypto/sha256.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

#include <config/bitcoin-config.h> // IWYU pragma: keep

#include <crypto/sha256.h>
#include <crypto/common.h>

Expand Down
2 changes: 2 additions & 0 deletions src/httpserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

#include <config/bitcoin-config.h> // IWYU pragma: keep

#include <httpserver.h>

#include <chainparamsbase.h>
Expand Down
1 change: 0 additions & 1 deletion src/qt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,6 @@ if(ENABLE_WALLET)
endif()

if(WITH_DBUS)
target_compile_definitions(bitcoinqt PRIVATE USE_DBUS)
target_link_libraries(bitcoinqt PRIVATE Qt5::DBus)
endif()

Expand Down
2 changes: 2 additions & 0 deletions src/qt/notificator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

#include <config/bitcoin-config.h> // IWYU pragma: keep

#include <qt/notificator.h>

#include <QApplication>
Expand Down
2 changes: 2 additions & 0 deletions src/qt/notificator.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
#ifndef BITCOIN_QT_NOTIFICATOR_H
#define BITCOIN_QT_NOTIFICATOR_H

#include <config/bitcoin-config.h> // IWYU pragma: keep

#include <QIcon>
#include <QObject>

Expand Down
2 changes: 2 additions & 0 deletions src/qt/qrimagewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <QMouseEvent>
#include <QPainter>

#include <config/bitcoin-config.h> // IWYU pragma: keep

#ifdef USE_QRCODE
#include <qrencode.h>
#endif
Expand Down
2 changes: 2 additions & 0 deletions src/qt/receiverequestdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
#include <QDialog>
#include <QString>

#include <config/bitcoin-config.h> // IWYU pragma: keep

ReceiveRequestDialog::ReceiveRequestDialog(QWidget* parent)
: QDialog(parent, GUIUtil::dialog_flags),
ui(new Ui::ReceiveRequestDialog)
Expand Down
2 changes: 2 additions & 0 deletions src/util/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
#ifndef BITCOIN_UTIL_TRACE_H
#define BITCOIN_UTIL_TRACE_H

#include <config/bitcoin-config.h> // IWYU pragma: keep

#ifdef ENABLE_TRACING

#include <sys/sdt.h>
Expand Down

0 comments on commit d3a10e6

Please sign in to comment.