From 8f695379f3149ef51c4797b95dd58627fc2527ed Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Thu, 9 Oct 2025 10:40:34 +0200 Subject: [PATCH 1/3] cmake: Unconditionally set WIN32_EXECUTABLE target property The property only has an effect when building for WIN32. Checking for WIN32 before setting the property is redundant. --- src/qt/CMakeLists.txt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 3a6ee2d1289..ae557d86e3d 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -255,7 +255,7 @@ endif() add_subdirectory(locale) -add_executable(bitcoin-qt +add_executable(bitcoin-qt WIN32 main.cpp ../init/bitcoin-qt.cpp ) @@ -271,12 +271,9 @@ target_link_libraries(bitcoin-qt import_plugins(bitcoin-qt) install_binary_component(bitcoin-qt HAS_MANPAGE) -if(WIN32) - set_target_properties(bitcoin-qt PROPERTIES WIN32_EXECUTABLE TRUE) -endif() if(ENABLE_IPC) - add_executable(bitcoin-gui + add_executable(bitcoin-gui WIN32 main.cpp ../init/bitcoin-gui.cpp ) @@ -288,9 +285,6 @@ if(ENABLE_IPC) ) import_plugins(bitcoin-gui) install_binary_component(bitcoin-gui INTERNAL) - if(WIN32) - set_target_properties(bitcoin-gui PROPERTIES WIN32_EXECUTABLE TRUE) - endif() endif() if(BUILD_GUI_TESTS) From 654a4cf5e69c96c3244bc3727b8fdb054a1eff01 Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Thu, 9 Oct 2025 10:45:22 +0200 Subject: [PATCH 2/3] cmake: Use builtin support for .manifest files CMake ignores .rc and .manifest files when not building for WIN32. --- CMakeLists.txt | 4 ---- cmake/module/AddWindowsResources.cmake | 10 +++++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fec2b1a3fa0..f36c4cd4b6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -330,10 +330,6 @@ if(WIN32) /Zc:__cplusplus /sdl ) - target_link_options(core_interface INTERFACE - # We embed our own manifests. - /MANIFEST:NO - ) # Improve parallelism in MSBuild. # See: https://devblogs.microsoft.com/cppblog/improved-parallelism-in-msbuild/. list(APPEND CMAKE_VS_GLOBALS "UseMultiToolTask=true") diff --git a/cmake/module/AddWindowsResources.cmake b/cmake/module/AddWindowsResources.cmake index 84c1ba8565b..1cdcb6dfb27 100644 --- a/cmake/module/AddWindowsResources.cmake +++ b/cmake/module/AddWindowsResources.cmake @@ -13,12 +13,16 @@ endfunction() # Add a fusion manifest to Windows executables. # See: https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests function(add_windows_application_manifest target) - if(WIN32) - configure_file(${PROJECT_SOURCE_DIR}/cmake/windows-app.manifest.in ${target}.manifest USE_SOURCE_PERMISSIONS) + configure_file(${PROJECT_SOURCE_DIR}/cmake/windows-app.manifest.in ${target}.manifest USE_SOURCE_PERMISSIONS) + if(MSVC) + target_sources(${target} PRIVATE ${target}.manifest) + else() + # TODO: Remove when upstream issue is fixed: + # https://gitlab.kitware.com/cmake/cmake/-/issues/23244 file(CONFIGURE OUTPUT ${target}-manifest.rc CONTENT "1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ \"${target}.manifest\"" ) - add_windows_resources(${target} ${CMAKE_CURRENT_BINARY_DIR}/${target}-manifest.rc) + target_sources(${target} PRIVATE ${target}-manifest.rc) endif() endfunction() From 99497b38f6c66462beaf1663b86029885e800834 Mon Sep 17 00:00:00 2001 From: Daniel Pfeifer Date: Thu, 9 Oct 2025 17:28:47 +0200 Subject: [PATCH 3/3] cmake: Unconditionally add .rc files to sources CMake ignores .rc files when compiling for non-Windows platform. Checking for WIN32 before adding an .rc file to sources is redundant. --- cmake/module/AddWindowsResources.cmake | 6 ------ src/CMakeLists.txt | 29 +++++++++++++++++--------- src/qt/CMakeLists.txt | 2 +- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/cmake/module/AddWindowsResources.cmake b/cmake/module/AddWindowsResources.cmake index 1cdcb6dfb27..8fad425a3e6 100644 --- a/cmake/module/AddWindowsResources.cmake +++ b/cmake/module/AddWindowsResources.cmake @@ -4,12 +4,6 @@ include_guard(GLOBAL) -function(add_windows_resources target rc_file) - if(WIN32) - target_sources(${target} PRIVATE ${rc_file}) - endif() -endfunction() - # Add a fusion manifest to Windows executables. # See: https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests function(add_windows_application_manifest target) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2b6840bbc39..15f5dd276b4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -164,10 +164,10 @@ if(ENABLE_WALLET) if(BUILD_WALLET_TOOL) add_executable(bitcoin-wallet bitcoin-wallet.cpp + bitcoin-wallet-res.rc init/bitcoin-wallet.cpp wallet/wallettool.cpp ) - add_windows_resources(bitcoin-wallet bitcoin-wallet-res.rc) add_windows_application_manifest(bitcoin-wallet) target_link_libraries(bitcoin-wallet core_interface @@ -302,8 +302,10 @@ endif() # Bitcoin wrapper executable that can call other executables. if(BUILD_BITCOIN_BIN) - add_executable(bitcoin bitcoin.cpp) - add_windows_resources(bitcoin bitcoin-res.rc) + add_executable(bitcoin + bitcoin.cpp + bitcoin-res.rc + ) add_windows_application_manifest(bitcoin) target_link_libraries(bitcoin core_interface bitcoin_common bitcoin_util) install_binary_component(bitcoin HAS_MANPAGE) @@ -313,9 +315,9 @@ endif() if(BUILD_DAEMON) add_executable(bitcoind bitcoind.cpp + bitcoind-res.rc init/bitcoind.cpp ) - add_windows_resources(bitcoind bitcoind-res.rc) add_windows_application_manifest(bitcoind) target_link_libraries(bitcoind core_interface @@ -352,8 +354,11 @@ target_link_libraries(bitcoin_cli # Bitcoin Core RPC client if(BUILD_CLI) - add_executable(bitcoin-cli bitcoin-cli.cpp init/basic.cpp) - add_windows_resources(bitcoin-cli bitcoin-cli-res.rc) + add_executable(bitcoin-cli + bitcoin-cli.cpp + bitcoin-cli-res.rc + init/basic.cpp + ) add_windows_application_manifest(bitcoin-cli) target_link_libraries(bitcoin-cli core_interface @@ -367,8 +372,10 @@ endif() if(BUILD_TX) - add_executable(bitcoin-tx bitcoin-tx.cpp) - add_windows_resources(bitcoin-tx bitcoin-tx-res.rc) + add_executable(bitcoin-tx + bitcoin-tx.cpp + bitcoin-tx-res.rc + ) add_windows_application_manifest(bitcoin-tx) target_link_libraries(bitcoin-tx core_interface @@ -381,8 +388,10 @@ endif() if(BUILD_UTIL) - add_executable(bitcoin-util bitcoin-util.cpp) - add_windows_resources(bitcoin-util bitcoin-util-res.rc) + add_executable(bitcoin-util + bitcoin-util.cpp + bitcoin-util-res.rc + ) add_windows_application_manifest(bitcoin-util) target_link_libraries(bitcoin-util core_interface diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index ae557d86e3d..5ed3ddbc8df 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -257,10 +257,10 @@ add_subdirectory(locale) add_executable(bitcoin-qt WIN32 main.cpp + res/bitcoin-qt-res.rc ../init/bitcoin-qt.cpp ) -add_windows_resources(bitcoin-qt res/bitcoin-qt-res.rc) add_windows_application_manifest(bitcoin-qt) target_link_libraries(bitcoin-qt