СМаке

Ответить
alexey_r
Сообщения: 153
Зарегистрирован: 08 авг 2014, 13:38
Operating system: Rosa Fresh R12 Gnome

СМаке

Сообщение alexey_r » 01 фев 2015, 11:44

Зачем для CMake применяеться патч:

Код: Выделить всё

diff -urN cmake-3.0.0/Modules/Compiler/GNU.cmake cmake-3.0.0-patched/Modules/Compiler/GNU.cmake
--- cmake-3.0.0/Modules/Compiler/GNU.cmake	2014-06-10 02:46:52.000000000 +1100
+++ cmake-3.0.0-patched/Modules/Compiler/GNU.cmake	2014-07-09 17:32:43.038610840 +1100
@@ -46,10 +46,10 @@
 
   # Initial configuration flags.
   set(CMAKE_${lang}_FLAGS_INIT "")
-  set(CMAKE_${lang}_FLAGS_DEBUG_INIT "-g")
+  set(CMAKE_${lang}_FLAGS_DEBUG_INIT "")
   set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
-  set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O3 -DNDEBUG")
-  set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -DNDEBUG")
+  set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-DNDEBUG")
+  set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "-DNDEBUG")
   set(CMAKE_${lang}_CREATE_PREPROCESSED_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
   set(CMAKE_${lang}_CREATE_ASSEMBLY_SOURCE "<CMAKE_${lang}_COMPILER> <DEFINES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
   if(NOT APPLE)
diff -urN cmake-3.0.0/Modules/Compiler/GNU-Fortran.cmake cmake-3.0.0-patched/Modules/Compiler/GNU-Fortran.cmake
--- cmake-3.0.0/Modules/Compiler/GNU-Fortran.cmake	2014-06-10 02:46:52.000000000 +1100
+++ cmake-3.0.0-patched/Modules/Compiler/GNU-Fortran.cmake	2014-07-09 17:31:50.772804497 +1100
@@ -6,7 +6,7 @@
 
 # No -DNDEBUG for Fortran.
 set(CMAKE_Fortran_FLAGS_MINSIZEREL_INIT "-Os")
-set(CMAKE_Fortran_FLAGS_RELEASE_INIT "-O3")
+set(CMAKE_Fortran_FLAGS_RELEASE_INIT "")
 
 # We require updates to CMake C++ code to support preprocessing rules
 # for Fortran.
Получаеться в релизе опции оптимизации по умолчанию вырубаються, а в отладке не генерируеться отладочная информация. На мой взгляд он не нужен.
И к стати CMake 3.1.1 вышел. Текущая версия в репозиториях (3.0.1) содержит ошибку, ее исправили.

Аватара пользователя
Pulfer
Сообщения: 3358
Зарегистрирован: 15 фев 2012, 01:57
Operating system: ROSA Desktop Fresh 2016.1 i586
Откуда: Vladivostok, Russia

Re: СМаке

Сообщение Pulfer » 01 фев 2015, 12:09

alexey_r писал(а):Получаеться в релизе опции оптимизации по умолчанию вырубаються, а в отладке не генерируеться отладочная информация. На мой взгляд он не нужен.
Убирается хардкод ключей сборки, чтобы использовались системные (в частности, -gdwarf-4 вместо -g для отладочной информации).
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586

alexey_r
Сообщения: 153
Зарегистрирован: 08 авг 2014, 13:38
Operating system: Rosa Fresh R12 Gnome

Re: СМаке

Сообщение alexey_r » 01 фев 2015, 12:22

Я пол дня выяснял почему не работает отладка... Оказалось дело в CMake.
Вообще мне кажеться не хорошо так делать. Это опции по умолчанию и они в документации описаны. А тут получается как бы их нет. Ключ -DCMAKE_BUILD_TYPE теперь не корректно работает, собирает без оптимизации и без отладочной инфы.
Тем более ключи можно переопределить в проекте
И вообще я подозреваю что из-за этого патча половина пакетов в репозитории без оптимизации остались

Аватара пользователя
Pulfer
Сообщения: 3358
Зарегистрирован: 15 фев 2012, 01:57
Operating system: ROSA Desktop Fresh 2016.1 i586
Откуда: Vladivostok, Russia

Re: СМаке

Сообщение Pulfer » 01 фев 2015, 20:08

alexey_r писал(а):Я пол дня выяснял почему не работает отладка... Оказалось дело в CMake.
Вообще мне кажеться не хорошо так делать. Это опции по умолчанию и они в документации описаны. А тут получается как бы их нет. Ключ -DCMAKE_BUILD_TYPE теперь не корректно работает, собирает без оптимизации и без отладочной инфы.
Какой толк от хардкода -g, если отладчик заточен на работу с форматом -gdwarf-4? rpmlint не пропускает пакеты, собранные с кривой отладочной информацией.

Вот стандартные ключи сборки (вариант для i586), используемые при сборке пакетов с помощью cmake (макрос %cmake):

Код: Выделить всё

CXXFLAGS='-O2 -Wa,--compress-debug-sections -gdwarf-4 -fvar-tracking-assignments -frecord-gcc-switches -Wstrict-aliasing=2 -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -ffat-lto-objects -fno-delete-null-pointer-checks -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -mtune=generic -march=i586 -fasynchronous-unwind-tables'
+ export CXXFLAGS
При желании при сборке пакетов можно модифицировать их через, скажем:

%global optflags %optflags -O3

Тогда после -fasynchronous-unwind-tables добавится -O3 и перекроет дефолтное значение -O2.

А при компиляции вне сборки пакетов вообще какие угодно ключи задавать, т.к. по умолчанию никаких нет.
alexey_r писал(а):Тем более ключи можно переопределить в проекте. И вообще я подозреваю что из-за этого патча половина пакетов в репозитории без оптимизации остались
Это неверное предположение. Те пакеты, которые собираются без системных флагов сборки, в большинстве случаев не пройдут контроль rpmlint, т.к. будут собраны без отладочной информации в формате -gdwarf-4.
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586

alexey_r
Сообщения: 153
Зарегистрирован: 08 авг 2014, 13:38
Operating system: Rosa Fresh R12 Gnome

Re: СМаке

Сообщение alexey_r » 02 фев 2015, 00:57

Во как... Спасибо за информацию, учту на будущее.
К стати лучше обновить в репозитории хотя бы до 3.0.2. В 3.0.1 есть ошибки. О них даже разработчики говорили.
Я во общем для себя собрал CMake 3.1.1.
Вот стандартные ключи сборки (вариант для i586), используемые при сборке пакетов с помощью cmake (макрос %cmake)
А где можно найти информацию?

Аватара пользователя
Pulfer
Сообщения: 3358
Зарегистрирован: 15 фев 2012, 01:57
Operating system: ROSA Desktop Fresh 2016.1 i586
Откуда: Vladivostok, Russia

Re: СМаке

Сообщение Pulfer » 02 фев 2015, 02:18

alexey_r писал(а):К стати лучше обновить в репозитории хотя бы до 3.0.2. В 3.0.1 есть ошибки. О них даже разработчики говорили.
Я во общем для себя собрал CMake 3.1.1.
Обновить можно, конечно, почему бы и нет.
А где можно найти информацию?
Вот команда, выводящая информацию о флагах оптимизации для текущей системы: rpm --eval %optflags
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586

Аватара пользователя
Pulfer
Сообщения: 3358
Зарегистрирован: 15 фев 2012, 01:57
Operating system: ROSA Desktop Fresh 2016.1 i586
Откуда: Vladivostok, Russia

Re: СМаке

Сообщение Pulfer » 02 фев 2015, 12:08

Обновил cmake в репозиториях пока что до 3.0.2.
Intel Core i7-6700 / 8 Gb RAM / GeForce GTX 750 Ti / Rosa 2016.1 i586

alexey_r
Сообщения: 153
Зарегистрирован: 08 авг 2014, 13:38
Operating system: Rosa Fresh R12 Gnome

Re: СМаке

Сообщение alexey_r » 02 фев 2015, 12:31

Спасибо! Буду изучать вопрос.

Ответить

Вернуться в «Программы РОСА десктоп»