From 3a0b857e1dd0b957b53d2fc45195f5ad18a4bee2 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: Mon, 27 Jan 2025 21:20:54 +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?= 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 ff6dd616..ac2280aa 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()