PrintConfigureSummary.cmake raw
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()
113