From 96f73139b63d38a92e9e35db49b1c0158a1f164f Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Fri, 10 Nov 2023 06:13:55 +0100 Subject: [PATCH] Check for large translation units --- CMakeLists.txt | 7 +++++++ programs/CMakeLists.txt | 5 +++++ utils/check-style/check-large-objects.sh | 10 ++++++++++ 3 files changed, 22 insertions(+) create mode 100755 utils/check-style/check-large-objects.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d1ef22b2aa..ef97c13fa1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -622,3 +622,10 @@ if (NATIVE_BUILD_TARGETS COMMAND ${CMAKE_COMMAND} --build "${NATIVE_BUILD_DIR}" --target ${NATIVE_BUILD_TARGETS} COMMAND_ECHO STDOUT) endif () + +if (CMAKE_BUILD_TYPE_UC STREQUAL "RELWITHDEBINFO") + set(CHECK_LARGE_OBJECT_SIZES_DEFAULT ON) +else () + set(CHECK_LARGE_OBJECT_SIZES_DEFAULT OFF) +endif () +option(CHECK_LARGE_OBJECT_SIZES "Check that there are no large object files after build." ${CHECK_LARGE_OBJECT_SIZES_DEFAULT}) diff --git a/programs/CMakeLists.txt b/programs/CMakeLists.txt index eb4a898d472..8496452e6ea 100644 --- a/programs/CMakeLists.txt +++ b/programs/CMakeLists.txt @@ -432,6 +432,11 @@ if (USE_BINARY_HASH) add_custom_command(TARGET clickhouse POST_BUILD COMMAND ./clickhouse hash-binary > hash && ${OBJCOPY_PATH} --add-section .clickhouse.hash=hash clickhouse COMMENT "Adding section '.clickhouse.hash' to clickhouse binary" VERBATIM) endif() +if (CHECK_LARGE_OBJECT_SIZES) + add_custom_command(TARGET clickhouse POST_BUILD + COMMAND "${CMAKE_SOURCE_DIR}/utils/check-style/check-large-objects.sh" "${CMAKE_BINARY_DIR}") +endif () + if (SPLIT_DEBUG_SYMBOLS) clickhouse_split_debug_symbols(TARGET clickhouse DESTINATION_DIR ${CMAKE_CURRENT_BINARY_DIR}/${SPLITTED_DEBUG_SYMBOLS_DIR} BINARY_PATH clickhouse) else() diff --git a/utils/check-style/check-large-objects.sh b/utils/check-style/check-large-objects.sh new file mode 100755 index 00000000000..c598ff0e99c --- /dev/null +++ b/utils/check-style/check-large-objects.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +# Check that there are no new translation units compiled to an object file larger than a certain size. + +if find $1 -name '*.o' | xargs wc -c | grep -v total | sort -rn | awk '{ if ($1 > 50000000) print }' \ + | grep -v -P 'CastOverloadResolver|AggregateFunctionMax|AggregateFunctionMin|RangeHashedDictionary|Aggregator|AggregateFunctionUniq' +then + echo "^ It's not allowed to have so large translation units." + exit 1 +fi