Bug 44106 - прибитый гвоздями уровень оптимизации -O2
Summary: прибитый гвоздями уровень оптимизации -O2
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: cmake (show other bugs)
Version: unstable
Hardware: all Linux
: P4 minor
Assignee: Vitaly Lipatov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-10-21 12:57 MSK by Michael Shigorin
Modified: 2023-06-07 08:18 MSK (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Shigorin 2022-10-21 12:57:14 MSK
По состоянию на cmake 3.23.2-alt1.1 в /usr/share/cmake/Modules/Compiler/
наблюдаю прибитые гвоздями -O2 -- как если бы этого было мало, опции по умолчанию эти люди передают _после_ того, что указал собирающий, т.е. наши %optflags попросту перекрываются, если не предпринимать особых cmake-специфических мер.

На x86 это некритично, поскольку совпадает с типичным применением gcc; на e2k -- уже существенно, поскольку для lcc в rpm-build выставляем по умолчанию -O3.
Может оказаться важно и для других архитектур.

В 3.23.2-alt1.2 добавил под %ifarch %e2k:

sed -i 's/ -O2/ -O%_optlevel/g' Modules/Compiler/{LCC,GNU}*

Возможно, стоит вытащить из-под %ifarch (и заодно трогать Clang*).

Если вдруг у кого есть контакт с апстримом -- им бы как-то довести, что дефолты -- на то и дефолты, чтоб при необходимости _их_ можно было перекрыть, а не _они_ перекрывали указанное явно...

Спасибо Илье Курдюкову за обнаружение и доведение до моего сведения.
Comment 1 Ivan A. Melnikov 2022-10-21 13:31:24 MSK
На mipsel для некоторых пакетов приходится выставлять

%ifarch %mips32
%define optflags_debug -g1
%endif

так как с простым стандартным -g компилятор ест слишком много памяти и не помещается в 2Gb юзерспейсного виртуального адресного пространства 32-битного mips.

Так вот, для некотрых пакетов я добавлял к аргументам %cmake дополнительные флаги. Например, к libopencv так:

        -DPYTHON_DEFAULT_EXECUTABLE=%__python3 \
+       -DCMAKE_C_FLAGS_RELWITHDEBINFO="%optflags" \
+       -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="%optflags" \
        %nil

Я тогда начинал писать письмо, но не отправил, так как не доразобрался, это у libopencv такой странные CMakefile'ы или проблема более глобальна. Видимо, глобальна.

Выводы из этого:

1. sed'а не достаточно, хотелось бы полного применения %_optflags в том виде, как они в спеке.
2. Всё можно настроить.

Я подозреваю, что в приоритете применения настроек у cmake есть своя логика, но и с ней можно подружится. Для этого предлагаю добавить в %cmake дополнительную кучу настроек и посмотреть, поможет ли. Примерный список на добавление:

CMAKE_C_FLAGS_DEBUG=%_optflags \
CMAKE_C_FLAGS_MINSIZEREL=%_optflags \
CMAKE_C_FLAGS_RELEASE=%_optflags \
CMAKE_C_FLAGS_RELWITHDEBINFO=%_optflags \
CMAKE_CXX_FLAGS_DEBUG=%_optflags \
CMAKE_CXX_FLAGS_MINSIZEREL=%_optflags \
CMAKE_CXX_FLAGS_RELEASE=%_optflags \
CMAKE_CXX_FLAGS_RELWITHDEBINFO=%_optflags \
CMAKE_Fortran_FLAGS_DEBUG=%_optflags \
CMAKE_Fortran_FLAGS_MINSIZEREL=%_optflags \
CMAKE_Fortran_FLAGS_RELEASE=%_optflags \
CMAKE_Fortran_FLAGS_RELWITHDEBINFO=%_optflags
Comment 2 Vitaly Lipatov 2022-10-30 18:10:10 MSK
Чтобы провести эксперимент, хорошо бы иметь патч к cmake и проект, на котором проверять.
В идеале хотелось бы, чтобы эксперимент провёл кто-то более заинтересованный, чем я. Ну и общение с апстримом тоже. Они там мало воспринимают жалобы, но готовое исправление может их убедить.