PrintConfigureSummary.cmake
1 include_guard(GLOBAL) 2 3 function(indent_message header content indent_num) 4 if(indent_num GREATER 0) 5 string(REPEAT " " ${indent_num} indentation) 6 string(REPEAT "." ${indent_num} tail) 7 string(REGEX REPLACE "${tail}$" "" header "${header}") 8 endif() 9 message("${indentation}${header} ${content}") 10 endfunction() 11 12 # Print compiler's flags on best-effort. Include the abstracted 13 # CMake flags that we touch ourselves. 14 function(print_flags_per_config config indent_num) 15 string(STRIP "${CMAKE_CXX_COMPILER_ARG1} ${CMAKE_CXX_FLAGS}" combined_cxx_flags) 16 string(TOUPPER "${config}" config_uppercase) 17 string(STRIP "${combined_cxx_flags} ${CMAKE_CXX_FLAGS_${config_uppercase}}" combined_cxx_flags) 18 string(STRIP "${combined_cxx_flags} ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION}" combined_cxx_flags) 19 if(CMAKE_POSITION_INDEPENDENT_CODE) 20 string(JOIN " " combined_cxx_flags ${combined_cxx_flags} ${CMAKE_CXX_COMPILE_OPTIONS_PIC}) 21 endif() 22 if(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY AND CMAKE_CXX_VISIBILITY_PRESET) 23 string(JOIN " " combined_cxx_flags ${combined_cxx_flags} ${CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY}${CMAKE_CXX_VISIBILITY_PRESET}) 24 endif() 25 get_directory_property(compile_options COMPILE_OPTIONS) 26 string(JOIN " " combined_cxx_flags ${combined_cxx_flags} ${compile_options}) 27 indent_message("CXXFLAGS .............................." "${combined_cxx_flags}" ${indent_num}) 28 endfunction() 29 30 function(print_configure_summary) 31 message("") 32 if(PROJECT_IS_TOP_LEVEL) 33 message("Configure summary") 34 message("=================") 35 else() 36 message("minisketch configure summary") 37 message("============================") 38 endif() 39 if(BUILD_SHARED_LIBS) 40 set(library_type "Shared") 41 else() 42 set(library_type "Static") 43 endif() 44 message("Library type .......................... ${library_type}") 45 message("Build options:") 46 if(have_disabled_fields) 47 set(filed_sizes "${MINISKETCH_FIELDS}") 48 else() 49 set(filed_sizes "All") 50 endif() 51 message(" field sizes ........................ ${filed_sizes}") 52 if(HAVE_CLMUL) 53 set(clmul_status "Enabled") 54 else() 55 set(clmul_status "Disabled") 56 endif() 57 message(" clmul fields ........................ ${clmul_status}") 58 if(CMAKE_CXX_STANDARD GREATER_EQUAL 20) 59 set(clz_status "C++20") 60 elseif(HAVE_CLZ) 61 set(clz_status "Compiler builtin") 62 else() 63 set(clz_status "Default") 64 endif() 65 message(" clz implementation .................. ${clz_status}") 66 message("Optional binaries:") 67 message(" benchmark ........................... ${MINISKETCH_BUILD_BENCHMARK}") 68 message(" tests ............................... ${MINISKETCH_BUILD_TESTS}") 69 message("") 70 if(CMAKE_CROSSCOMPILING) 71 set(cross_status "TRUE, for ${CMAKE_SYSTEM_NAME}, ${CMAKE_SYSTEM_PROCESSOR}") 72 else() 73 set(cross_status "FALSE") 74 endif() 75 message("Cross compiling ....................... ${cross_status}") 76 message("C++ compiler .......................... ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}, ${CMAKE_CXX_COMPILER}") 77 get_property(_is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) 78 if(_is_multi_config) 79 list(JOIN CMAKE_CONFIGURATION_TYPES ", " configs) 80 message("Available build configurations ........ ${configs}") 81 if(CMAKE_GENERATOR MATCHES "Visual Studio") 82 set(default_config "Debug") 83 else() 84 list(GET CMAKE_CONFIGURATION_TYPES 0 default_config) 85 endif() 86 message("Default build configuration ........... ${default_config}") 87 foreach(config IN LISTS CMAKE_CONFIGURATION_TYPES) 88 message("'${config}' build configuration:") 89 print_flags_per_config("${config}" 2) 90 endforeach() 91 else() 92 message("CMAKE_BUILD_TYPE ...................... ${CMAKE_BUILD_TYPE}") 93 print_flags_per_config("${CMAKE_BUILD_TYPE}" 0) 94 endif() 95 unset(_is_multi_config) 96 97 message([=[ 98 99 NOTE: The summary above may not exactly match the final applied build flags 100 if any additional CMAKE_* or environment variables have been modified. 101 To see the exact flags applied, build with the --verbose option.]=] 102 ) 103 104 if(have_disabled_fields AND PROJECT_IS_TOP_LEVEL) 105 message("") 106 message(WARNING 107 "Only compiling in support for field sizes: ${MINISKETCH_FIELDS}\n" 108 "This means the library will lack support for other field sizes entirely.\n" 109 ) 110 endif() 111 message("") 112 endfunction()