Skip to content

Commit

Permalink
[FIXUP] cmake: Rework compile/link flags summary
Browse files Browse the repository at this point in the history
  • Loading branch information
hebasto committed Feb 6, 2024
1 parent 4a7b9fc commit aafd8d3
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 54 deletions.
28 changes: 2 additions & 26 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -387,9 +387,6 @@ include(Maintenance)
setup_split_debug_script()
add_maintenance_targets()

get_target_property(definitions core_interface INTERFACE_COMPILE_DEFINITIONS)
separate_by_configs(definitions)

message("\n")
message("Configure summary")
message("=================")
Expand All @@ -413,29 +410,8 @@ message(" test_bitcoin ........................ ${BUILD_TESTS}")
message(" bench_bitcoin ....................... ${BUILD_BENCH}")
message(" fuzz binary ......................... ${BUILD_FUZZ_BINARY}")
message("")
if(CMAKE_CROSSCOMPILING)
set(cross_status "TRUE, for ${CMAKE_SYSTEM_NAME}, ${CMAKE_SYSTEM_PROCESSOR}")
else()
set(cross_status "FALSE")
endif()
message("Cross compiling ....................... ${cross_status}")
message("Preprocessor defined macros ........... ${definitions_ALL}")
message("C compiler ............................ ${CMAKE_C_COMPILER}")
list(JOIN DEPENDS_C_COMPILER_FLAGS " " depends_c_flags)
string(STRIP "${CMAKE_C_FLAGS} ${depends_c_flags}" combined_c_flags)
message("CFLAGS ................................ ${combined_c_flags}")
message("C++ compiler .......................... ${CMAKE_CXX_COMPILER}")
list(JOIN DEPENDS_CXX_COMPILER_FLAGS " " depends_cxx_flags)
string(STRIP "${CMAKE_CXX_FLAGS} ${depends_cxx_flags}" combined_cxx_flags)
message("CXXFLAGS .............................. ${combined_cxx_flags}")
include(GetTargetInterface)
get_target_interface(common_compile_options core_interface COMPILE_OPTIONS)
message("Common compile options ................ ${common_compile_options}")
get_target_interface(common_link_options core_interface LINK_OPTIONS)
message("Common link options ................... ${common_link_options}")
message("Linker flags for executables .......... ${CMAKE_EXE_LINKER_FLAGS}")
message("Linker flags for shared libraries ..... ${CMAKE_SHARED_LINKER_FLAGS}")
print_config_flags()
include(FlagsSummary)
flags_summary()
message("Use assembly routines ................. ${ASM}")
message("Attempt to harden executables ......... ${HARDENING}")
message("Treat compiler warnings as errors ..... ${WERROR}")
Expand Down
75 changes: 75 additions & 0 deletions cmake/module/FlagsSummary.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Copyright (c) 2024-present The Bitcoin Core developers
# Distributed under the MIT software license, see the accompanying
# file COPYING or https://opensource.org/license/mit/.

include_guard(GLOBAL)

function(normalize_preprocessor_definitions definitions)
if(MSVC)
set(flag "/D")
else()
set(flag "-D")
endif()
separate_arguments(${definitions})
set(result "")
foreach(d IN LISTS ${definitions})
if(NOT d MATCHES "${flag}.*")
string(PREPEND d "${flag}")
endif()
string(STRIP "${result} ${d}" result)
endforeach()
set(${definitions} "${result}" PARENT_SCOPE)
endfunction()

function(flags_summary)
include(GetTargetInterface)
get_target_interface(definitions core_interface COMPILE_DEFINITIONS)
include(ProcessConfigurations)
separate_by_configs(definitions)

if(CMAKE_CROSSCOMPILING)
set(cross_status "TRUE, for ${CMAKE_SYSTEM_NAME}, ${CMAKE_SYSTEM_PROCESSOR}")
else()
set(cross_status "FALSE")
endif()
message("Cross compiling ....................... ${cross_status}")

get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(is_multi_config)
list(JOIN CMAKE_CONFIGURATION_TYPES ", " configs)
message("Available build configurations ........ ${configs}")
if(CMAKE_GENERATOR MATCHES "Visual Studio")
set(default_config "Debug")
else()
list(GET CMAKE_CONFIGURATION_TYPES 0 default_config)
endif()
message("Default build configuration ........... ${default_config}")
string(TOUPPER "${default_config}" config_uppercase)
else()
message("Build configuration ................... ${CMAKE_BUILD_TYPE}")
string(TOUPPER "${CMAKE_BUILD_TYPE}" config_uppercase)
endif()

string(STRIP "${definitions_ALL} ${definitions_${config_uppercase}}" combined_cpp_flags)
normalize_preprocessor_definitions(combined_cpp_flags)
message("Preprocessor defined macros ........... ${combined_cpp_flags}")

message("C compiler ............................ ${CMAKE_C_COMPILER}")
string(STRIP "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${config_uppercase}}" combined_c_flags)
list(JOIN DEPENDS_C_COMPILER_FLAGS " " depends_c_flags)
string(STRIP "${combined_c_flags} ${depends_c_flags}" combined_c_flags)
get_target_interface(common_compile_options core_interface COMPILE_OPTIONS)
string(STRIP "${combined_c_flags} ${common_compile_options}" combined_c_flags)
message("C compiler flags ...................... ${combined_c_flags}")

message("C++ compiler .......................... ${CMAKE_CXX_COMPILER}")
string(STRIP "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${config_uppercase}}" combined_cxx_flags)
list(JOIN DEPENDS_CXX_COMPILER_FLAGS " " depends_cxx_flags)
string(STRIP "${combined_cxx_flags} ${depends_cxx_flags}" combined_cxx_flags)
string(STRIP "${combined_cxx_flags} ${common_compile_options}" combined_cxx_flags)
message("C++ compiler flags .................... ${combined_cxx_flags}")

get_target_interface(common_link_options core_interface LINK_OPTIONS)
string(STRIP "${CMAKE_EXE_LINKER_FLAGS} ${common_link_options}" combined_linker_flags)
message("Linker flags .......................... ${combined_linker_flags}")
endfunction()
4 changes: 3 additions & 1 deletion cmake/module/GetTargetInterface.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ include_guard(GLOBAL)
function(get_target_interface var target property)
get_target_property(result ${target} INTERFACE_${property})
if(result)
string(GENEX_STRIP "${result}" result)
if(NOT ${property} STREQUAL "COMPILE_DEFINITIONS")
string(GENEX_STRIP "${result}" result)
endif()
list(JOIN result " " result)
else()
set(result)
Expand Down
25 changes: 0 additions & 25 deletions cmake/module/ProcessConfigurations.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -106,28 +106,3 @@ function(separate_by_configs options)
set(${options}_${conf_upper} "${match}" PARENT_SCOPE)
endforeach()
endfunction()

function(print_config_flags)
macro(print_flags config)
string(TOUPPER "${config}" config_uppercase)
message(" - Preprocessor defined macros ........ ${definitions_${config_uppercase}}")
message(" - CFLAGS ............................. ${CMAKE_C_FLAGS_${config_uppercase}}")
message(" - CXXFLAGS ........................... ${CMAKE_CXX_FLAGS_${config_uppercase}}")
message(" - LDFLAGS for executables ............ ${CMAKE_EXE_LINKER_FLAGS_${config_uppercase}}")
message(" - LDFLAGS for shared libraries ....... ${CMAKE_SHARED_LINKER_FLAGS_${config_uppercase}}")
endmacro()

get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(is_multi_config)
list(JOIN CMAKE_CONFIGURATION_TYPES " " configs)
message("Available build types (configurations) ${configs}")
foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES)
message("'${config}' build type (configuration):")
print_flags(${config})
endforeach()
else()
message("Build type (configuration):")
message(" - CMAKE_BUILD_TYPE ................... ${CMAKE_BUILD_TYPE}")
print_flags(${CMAKE_BUILD_TYPE})
endif()
endfunction()
9 changes: 7 additions & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,13 @@
include(GNUInstallDirs)

configure_file(${CMAKE_SOURCE_DIR}/cmake/bitcoin-config.h.in config/bitcoin-config.h @ONLY)
add_compile_definitions(HAVE_CONFIG_H)
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_definitions(core_interface INTERFACE
HAVE_CONFIG_H
)
target_include_directories(core_interface INTERFACE
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)

# After the transition from Autotools to CMake, the obj/ subdirectory
# could be dropped as its only purpose was to separate a generated header
Expand Down

0 comments on commit aafd8d3

Please sign in to comment.