[devel] I: LTO in %optflags by default

alexei на taf.ru alexei на taf.ru
Чт Авг 26 07:23:01 MSK 2021


Добрый день!

----- Исходное сообщение -----
> От: "ldv" <ldv на altlinux.org>
> Кому: "ALT Linux Team development discussions" <devel на lists.altlinux.org>
> Отправленные: Четверг, 26 Август 2021 г 7:19:29
> Тема: Re: [devel] I: LTO in %optflags by default

> On Thu, Aug 26, 2021 at 02:07:49AM +0300, Aleksey Novodvorsky wrote:
>> чт, 26 авг. 2021 г. в 00:24, Dmitry V. Levin <ldv на altlinux.org>:
>> >
>> > On Tue, Aug 24, 2021 at 09:20:50PM +0300, Dmitry V. Levin wrote:
>> > > Hi,
>> > >
>> > > Пришло время включить в Сизифе LTO (link-time optimization).
>> >
>> > Поскольку мы в теме, нам это казалось очевидным и не требующим
>> > дополнительных пояснений, но, поскольку это ещё не всем очевидно,
>> > поясню, из каких соображений мы исходили:
>> >
>> > - LTO - это безусловно полезная оптимизация, об этом много написано,
>> >   см. напр. [1] [2], поэтому ею хорошо было бы воспользоваться;
>> >
>> > - LTO - это уже широко распространённая оптимизация, её уже включили в
>> >   openSUSE, Fedora, Ubuntu, Clearlinux, скоро Debian, там уже вытоптали
>> >   основные грабли, большинство фиксов пакетов заапстримлено, поэтому ею
>> >   уже можно пользоваться;
>> >
>> > - LTO - это уже настолько распространённая оптимизация, что скоро без LTO
>> >   уже мало кто будет собирать, поэтому не пользоваться ею скоро будет себе
>> >   дороже;
>> >
>> > - После бранчевания мы в начале нового цикла разработки, самое время
>> >   включить LTO.
>> >
>> > - Исправление самой массовой сборочной ошибки "process-lto: ERROR:",
>> >   вызванной включением LTO, тривиально.
>> >
>> > - Выключить LTO в пакете в случае необходимости - тривиально.
>> >
>> > [1] https://documentation.suse.com/sbp/all/html/SBP-GCC-10/index.html
>> > [2] https://wiki.ubuntu.com/ToolChain/LTO
>> 
>> Это хорошо, но все ли наши архитектуры поддерживают LTO?
> 
> Конечно, LTO поддерживается на всех наших архитектурах.

Есть некоторые сомнения по этому поводу.

http://git.altlinux.org/tasks/283741/build/100/armh/log
======================================================
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h: In function 'pg_comp_crc32c_armv8':
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:739:10: error: this builtin is not supported for this target
[00:02:11]   739 |   return __builtin_arm_crc32cb (__a, __b);
[00:02:11]       |          ^
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:745:10: error: this builtin is not supported for this target
[00:02:11]   745 |   return __builtin_arm_crc32ch (__a, __b);
[00:02:11]       |          ^
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:751:10: error: this builtin is not supported for this target
[00:02:11]   751 |   return __builtin_arm_crc32cw (__a, __b);
[00:02:11]       |          ^
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:751:10: error: this builtin is not supported for this target
[00:02:11]   751 |   return __builtin_arm_crc32cw (__a, __b);
[00:02:11]       |          ^
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:751:10: error: this builtin is not supported for this target
[00:02:11]   751 |   return __builtin_arm_crc32cw (__a, __b);
[00:02:11]       |          ^
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:751:10: error: this builtin is not supported for this target
[00:02:11]   751 |   return __builtin_arm_crc32cw (__a, __b);
[00:02:11]       |          ^
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:745:10: error: this builtin is not supported for this target
[00:02:11]   745 |   return __builtin_arm_crc32ch (__a, __b);
[00:02:11]       |          ^
[00:02:11] /usr/lib/gcc/armh-alt-linux-gnueabi/10/include/arm_acle.h:739:10: error: this builtin is not supported for this target
[00:02:11]   739 |   return __builtin_arm_crc32cb (__a, __b);
[00:02:11]       |          ^
[00:02:11] make[3]: *** [/usr/src/tmp/ccaltlWW.mk:377: /usr/src/tmp/postgres.w4Po8V.ltrans125.ltrans.o] Error 1
[00:02:11] lto-wrapper: fatal error: make returned 2 exit status
[00:02:11] compilation terminated.
[00:02:11] ld: error: lto-wrapper failed
[00:02:11] collect2: error: ld returned 1 exit status
[00:02:11] make[2]: *** [Makefile:66: postgres] Error 1
[00:02:11] make[2]: Leaving directory '/usr/src/RPM/BUILD/postgresql13-13.4/src/backend'
[00:02:11] make[1]: *** [Makefile:42: all-backend-recurse] Error 2
[00:02:11] make: *** [GNUmakefile:11: all-src-recurse] Error 2
=======================================================

При этом задание с отключенным LTO для armh собирается успешно
( http://git.altlinux.org/tasks/283796/ )


Подробная информация о списке рассылки Devel