Bug 40153 - %cmake_build стал игнорировать переменную окружения NPROCS
Summary: %cmake_build стал игнорировать переменную окружения NPROCS
Status: VERIFIED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-macros-cmake (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Arseny Maslennikov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-06-04 13:32 MSK by Aleksei Nikiforov
Modified: 2021-06-09 11:45 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Aleksei Nikiforov 2021-06-04 13:32:10 MSK
При этом %make_build, и %cmake_build до версии rpm-macros-cmake-3.19.7-alt3, эту переменную окружения используют, если она определена.

Воспроизведение:
1) Убедиться, что используется много потоков для сборки пакета. Например, на сборочнице сейчас выдаётся 32 потока по-умолчанию
2) Пересобрать embree.

Результат:
Сборка идёт в 32 потока вместо указанных 4, и падает из-за недостатка ресурсов. Релевантный отрывок лога:
+ cmake --build x86_64-alt-linux --verbose -j32

Ожидаемый результат:
Успешная сборка embree в 4 потока.
Comment 1 Arseny Maslennikov 2021-06-04 14:57:30 MSK
(In reply to Aleksei Nikiforov from comment #0)
> При этом %make_build, и %cmake_build до версии rpm-macros-cmake-3.19.7-alt3,
> эту переменную окружения используют, если она определена.

Странно.
Usage: cmake --build <dir> [options] [-- [native-options]]
Options:
  <dir>          = Project binary directory to be built.
  --parallel [<jobs>], -j [<jobs>]
                 = Build in parallel using the given number of jobs. 
                   If <jobs> is omitted the native build tool's 
                   default number is used.
                   The CMAKE_BUILD_PARALLEL_LEVEL environment variable
                   specifies a default parallel level when this option
                   is not given.
  --target <tgt>..., -t <tgt>... 
                 = Build <tgt> instead of default targets.
  --config <cfg> = For multi-configuration tools, choose <cfg>.
  --clean-first  = Build target 'clean' first, then build.
                   (To clean only, use --target 'clean'.)
  --verbose, -v  = Enable verbose output - if supported - including
                   the build commands to be executed. 
  --             = Pass remaining options to the native tool.

Передача количества потоков сборки программе make(1) при помощи переменной окружения NPROCS не является задокументированным свойством CMake.

> Воспроизведение:
> 1) Убедиться, что используется много потоков для сборки пакета. Например, на
> сборочнице сейчас выдаётся 32 потока по умолчанию
> 2) Пересобрать embree.
> 
> Результат:
> Сборка идёт в 32 потока вместо указанных 4, и падает из-за недостатка
> ресурсов. Релевантный отрывок лога:
> + cmake --build x86_64-alt-linux --verbose -j32
> 
> Ожидаемый результат:
> Успешная сборка embree в 4 потока.
Comment 2 Arseny Maslennikov 2021-06-04 14:59:10 MSK
Смотрю в хешерницу из-под embree:
[builder@localhost embree-3.13.0]$ rpmbuild --showrc | grep %__nprocs
-14: _smp_mflags	-j${NPROCS:-%__nprocs}
-14: cmake_build	%__cmake --build "%_cmake__builddir" --verbose -j%__nprocs

Т. е. эту переменную NPROCS не cmake придумал, а пакет, в котором _smp_mflags.
Тогда надо её поддерживать.
Comment 3 Aleksei Nikiforov 2021-06-04 15:02:57 MSK
(Ответ для Arseny Maslennikov на комментарий #1)
> (In reply to Aleksei Nikiforov from comment #0)
> > При этом %make_build, и %cmake_build до версии rpm-macros-cmake-3.19.7-alt3,
> > эту переменную окружения используют, если она определена.
> 
> Странно.
> Usage: cmake --build <dir> [options] [-- [native-options]]

...

> Передача количества потоков сборки программе make(1) при помощи переменной
> окружения NPROCS не является задокументированным свойством CMake.
> 

Я и не утверждал этого. Я утверждаю, что раньше, когда макрос %cmake_build вызывал %make_build, эта переменная окружения подхватывалась макросом %make_build, и соответственно макросом %cmake_build тоже, а теперь она не подхватывается макросом %cmake_build.
Comment 4 Arseny Maslennikov 2021-06-09 10:58:34 MSK
Fixed by task 273814.
Comment 5 Aleksei Nikiforov 2021-06-09 11:45:32 MSK
Спасибо!