Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmake: Revert CMake's way to handle definitions #269

Merged
merged 6 commits into from
Jul 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
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
Loading