From 4f59864ef51345c455345aef70d63bc4c7b7f01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=BE=D0=BD=D0=B8=D0=B4=20=D0=AE=D1=80=D1=8C?= =?UTF-8?q?=D0=B5=D0=B2=20=28Leonid=20Yuriev=29?= Date: Thu, 20 Mar 2025 00:41:13 +0300 Subject: [PATCH] =?UTF-8?q?mdbx-cmake:=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=20`-flto=3Dauto`=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20GCC=20>=3D=2011.4=20(backport).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При сборке посредством GCC >= 11.4 больше не возникает предупреждений: lto-wrapper: warning: using serial compilation of # LTRANS jobs lto-wrapper: note: see the ‘-flto’ option documentation for more information Однако, использование auto-режима не является оптимальным решением, так как при параллельной сборке посредством make или ninja, каждая уже запущенная ветвь компиляции породит потоки ещё для каждого ядра ЦПУ. Таким образом реальная нагрузка может расти квадратично, т.е. чем больше у вас ядер -- тем хуже и при 96 ядрах может работать 9216 потоков сборки. Тем не менее, использование `job-server` в CMake пока не возможно, а при сборке libmdbx не так много работы чтобы чтобы обрушить систему нагрузкой. --- cmake/compiler.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake index 8cee26d4..a3d789ce 100644 --- a/cmake/compiler.cmake +++ b/cmake/compiler.cmake @@ -502,7 +502,11 @@ if(CMAKE_COMPILER_IS_GNU${CMAKE_PRIMARY_LANG} AND CMAKE_GCC_RANLIB AND gcc_lto_wrapper) message(STATUS "Found GCC's LTO toolset: ${gcc_lto_wrapper}, ${CMAKE_GCC_AR}, ${CMAKE_GCC_RANLIB}") - set(GCC_LTO_CFLAGS "-flto -fno-fat-lto-objects -fuse-linker-plugin") + if(CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_VERSION VERSION_LESS 11.4) + set(GCC_LTO_CFLAGS "-flto -fno-fat-lto-objects -fuse-linker-plugin") + else() + set(GCC_LTO_CFLAGS "-flto=auto -fno-fat-lto-objects -fuse-linker-plugin") + endif() set(GCC_LTO_AVAILABLE TRUE) message(STATUS "Link-Time Optimization by GCC is available") else()