| Summary: | прибитый гвоздями уровень оптимизации -O2 | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Michael Shigorin <mike> |
| Component: | cmake | Assignee: | Vitaly Lipatov <lav> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | minor | ||
| Priority: | P4 | CC: | arbars, ilyakurdyukov, iv, lav, ximper, zerg |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
На 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
Чтобы провести эксперимент, хорошо бы иметь патч к cmake и проект, на котором проверять. В идеале хотелось бы, чтобы эксперимент провёл кто-то более заинтересованный, чем я. Ну и общение с апстримом тоже. Они там мало воспринимают жалобы, но готовое исправление может их убедить. |
По состоянию на 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*). Если вдруг у кого есть контакт с апстримом -- им бы как-то довести, что дефолты -- на то и дефолты, чтоб при необходимости _их_ можно было перекрыть, а не _они_ перекрывали указанное явно... Спасибо Илье Курдюкову за обнаружение и доведение до моего сведения.