From 8f6ccf6c74f3c495da7ce542c0275c3b101360e9 Mon Sep 17 00:00:00 2001 From: ejose19 <8233281-ejose19@users.noreply.gitlab.com> Date: Sat, 15 May 2021 08:12:17 +0000 Subject: [PATCH] Add more build options Closes #305 This MR provides the following options: - `CMAKE_TOOLCHAIN_PREFIX`: Allow to specify the value to use as `TOOLCHAIN_PREFIX`, this let consumers reuse the most of the platform file while building for another system (ie: using `Linux64.cmake` file to build for `x86_64-pc-linux-musl` - `ENABLE_STATIC_LIBGCC`: Allow statically linking `libgcc` (default `OFF`) - `BUILD_BITCOIN_DAEMON`: Allow controlling if `bitcoind` should be built (default `ON`) NOTE: As man pages have a hard dependency on `bitcoind`, if `BUILD_BITCOIN_DAEMON=OFF` no man pages will be generated. --- cmake/platforms/Linux32.cmake | 8 +++++++- cmake/platforms/Linux64.cmake | 8 +++++++- cmake/platforms/LinuxAArch64.cmake | 8 +++++++- cmake/platforms/LinuxARM.cmake | 8 +++++++- cmake/platforms/OSX.cmake | 8 +++++++- cmake/platforms/Win64.cmake | 8 +++++++- doc/CMakeLists.txt | 2 +- src/CMakeLists.txt | 26 ++++++++++++++++++-------- 8 files changed, 61 insertions(+), 15 deletions(-) diff --git a/cmake/platforms/Linux32.cmake b/cmake/platforms/Linux32.cmake index 5ae3d277a9..6aa518b872 100644 --- a/cmake/platforms/Linux32.cmake +++ b/cmake/platforms/Linux32.cmake @@ -2,7 +2,13 @@ set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR i686) -set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-pc-linux-gnu) + +# Use given TOOLCHAIN_PREFIX if specified +if(CMAKE_TOOLCHAIN_PREFIX) + set(TOOLCHAIN_PREFIX ${CMAKE_TOOLCHAIN_PREFIX}) +else() + set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-pc-linux-gnu) +endif() # Cross compilers to use for C and C++ set(CMAKE_C_COMPILER gcc) diff --git a/cmake/platforms/Linux64.cmake b/cmake/platforms/Linux64.cmake index d5e6d3c78f..25eb7f4a58 100644 --- a/cmake/platforms/Linux64.cmake +++ b/cmake/platforms/Linux64.cmake @@ -2,7 +2,13 @@ set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR x86_64) -set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) + +# Use given TOOLCHAIN_PREFIX if specified +if(CMAKE_TOOLCHAIN_PREFIX) + set(TOOLCHAIN_PREFIX ${CMAKE_TOOLCHAIN_PREFIX}) +else() + set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) +endif() # Cross compilers to use for C and C++ set(CMAKE_C_COMPILER gcc) diff --git a/cmake/platforms/LinuxAArch64.cmake b/cmake/platforms/LinuxAArch64.cmake index af267e3ec2..5ccd168ed9 100644 --- a/cmake/platforms/LinuxAArch64.cmake +++ b/cmake/platforms/LinuxAArch64.cmake @@ -2,7 +2,13 @@ set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) -set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) + +# Use given TOOLCHAIN_PREFIX if specified +if(CMAKE_TOOLCHAIN_PREFIX) + set(TOOLCHAIN_PREFIX ${CMAKE_TOOLCHAIN_PREFIX}) +else() + set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu) +endif() # Cross compilers to use for C and C++ set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) diff --git a/cmake/platforms/LinuxARM.cmake b/cmake/platforms/LinuxARM.cmake index e298bd14a5..f68a3dfaef 100644 --- a/cmake/platforms/LinuxARM.cmake +++ b/cmake/platforms/LinuxARM.cmake @@ -2,7 +2,13 @@ set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) -set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-linux-gnueabihf) + +# Use given TOOLCHAIN_PREFIX if specified +if(CMAKE_TOOLCHAIN_PREFIX) + set(TOOLCHAIN_PREFIX ${CMAKE_TOOLCHAIN_PREFIX}) +else() + set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-linux-gnueabihf) +endif() # Cross compilers to use for C and C++ set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) diff --git a/cmake/platforms/OSX.cmake b/cmake/platforms/OSX.cmake index 92878c9ac4..1562ccd4d3 100644 --- a/cmake/platforms/OSX.cmake +++ b/cmake/platforms/OSX.cmake @@ -2,7 +2,13 @@ set(CMAKE_SYSTEM_NAME Darwin) set(CMAKE_SYSTEM_PROCESSOR x86_64) -set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-apple-darwin16) + +# Use given TOOLCHAIN_PREFIX if specified +if(CMAKE_TOOLCHAIN_PREFIX) + set(TOOLCHAIN_PREFIX ${CMAKE_TOOLCHAIN_PREFIX}) +else() + set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-apple-darwin16) +endif() # On OSX, we use clang by default. set(CMAKE_C_COMPILER clang) diff --git a/cmake/platforms/Win64.cmake b/cmake/platforms/Win64.cmake index 2494e6f90f..3c3c19c18b 100644 --- a/cmake/platforms/Win64.cmake +++ b/cmake/platforms/Win64.cmake @@ -2,7 +2,13 @@ set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR x86_64) -set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32) + +# Use given TOOLCHAIN_PREFIX if specified +if(CMAKE_TOOLCHAIN_PREFIX) + set(TOOLCHAIN_PREFIX ${CMAKE_TOOLCHAIN_PREFIX}) +else() + set(TOOLCHAIN_PREFIX ${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32) +endif() # cross compilers to use for C and C++ set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 616e13a837..4f99aa16a8 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -28,7 +28,7 @@ add_custom_target(doc-html ) option(ENABLE_MAN "Enable manpages" ON) -if(ENABLE_MAN) +if(ENABLE_MAN AND BUILD_BITCOIN_DAEMON) configure_file( ../cmake/utils/gen-doc-man-footer.sh.in man/gen-doc-man-footer.sh diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 30af8a2b4e..51bc78bdb1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,6 +10,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_C_VISIBILITY_PRESET hidden) set(CMAKE_CXX_VISIBILITY_PRESET hidden) +option(BUILD_BITCOIN_DAEMON "Build bitcoind" ON) option(BUILD_BITCOIN_WALLET "Activate the wallet functionality" ON) option(BUILD_BITCOIN_ZMQ "Activate the ZeroMQ functionalities" ON) option(BUILD_BITCOIN_SEEDER "Build bitcoin-seeder" ON) @@ -20,6 +21,7 @@ option(BUILD_LIBBITCOINCONSENSUS "Build the bitcoinconsenus shared library" ON) option(ENABLE_BIP70 "Enable BIP70 (payment protocol) support in GUI" ON) option(ENABLE_HARDENING "Harden the executables" ON) option(ENABLE_REDUCE_EXPORTS "Reduce the amount of exported symbols" OFF) +option(ENABLE_STATIC_LIBGCC "Statically link libgcc" OFF) option(ENABLE_STATIC_LIBSTDCXX "Statically link libstdc++" OFF) option(ENABLE_GLIBC_BACK_COMPAT "Enable Glibc compatibility features" OFF) option(ENABLE_QRCODE "Enable QR code display" ON) @@ -118,6 +120,11 @@ if(ENABLE_REDUCE_EXPORTS) add_linker_flags(-Wl,--exclude-libs,ALL) endif() +# Enable statically linking libgcc +if(ENABLE_STATIC_LIBGCC) + add_linker_flags(-static-libgcc) +endif() + # Enable statically linking libstdc++ if(ENABLE_STATIC_LIBSTDCXX) add_linker_flags(-static-libstdc++) @@ -632,15 +639,18 @@ if(BUILD_BITCOIN_TX) endif() # bitcoind -add_executable(bitcoind bitcoind.cpp) -target_link_libraries(bitcoind server) -if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - target_sources(bitcoind PRIVATE bitcoind-res.rc) -endif() -add_to_symbols_check(bitcoind) -add_to_security_check(bitcoind) +if(BUILD_BITCOIN_DAEMON) + add_executable(bitcoind bitcoind.cpp) + target_link_libraries(bitcoind server) + if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + target_sources(bitcoind PRIVATE bitcoind-res.rc) + endif() -install_target(bitcoind) + add_to_symbols_check(bitcoind) + add_to_security_check(bitcoind) + + install_target(bitcoind) +endif() # Bitcoin-qt if(BUILD_BITCOIN_QT)