Skip to content

Commit

Permalink
Add more build options
Browse files Browse the repository at this point in the history
Closes Bitcoin-ABC#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.
  • Loading branch information
ejose19 authored and cculianu committed May 15, 2021
1 parent 58aac28 commit 8f6ccf6
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 15 deletions.
8 changes: 7 additions & 1 deletion cmake/platforms/Linux32.cmake
Expand Up @@ -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)
Expand Down
8 changes: 7 additions & 1 deletion cmake/platforms/Linux64.cmake
Expand Up @@ -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)
Expand Down
8 changes: 7 additions & 1 deletion cmake/platforms/LinuxAArch64.cmake
Expand Up @@ -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)
Expand Down
8 changes: 7 additions & 1 deletion cmake/platforms/LinuxARM.cmake
Expand Up @@ -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)
Expand Down
8 changes: 7 additions & 1 deletion cmake/platforms/OSX.cmake
Expand Up @@ -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)
Expand Down
8 changes: 7 additions & 1 deletion cmake/platforms/Win64.cmake
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion doc/CMakeLists.txt
Expand Up @@ -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
Expand Down
26 changes: 18 additions & 8 deletions src/CMakeLists.txt
Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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++)
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 8f6ccf6

Please sign in to comment.