gentoo - отключить параллельную сборку для llvm

430
jiwopene

У меня установлен Gentoo на компьютере с относительно небольшим объемом оперативной памяти (1 ГБ). Когда я устанавливаю llvm( emerge -a llvm), компьютер всегда выходит из памяти. Все 4 cc1plusпроцесса используют около 25% оперативной памяти, когда система не работает. Я думаю, что использование только одного процесса за раз может помочь.

Как я могу запустить llvmсборку (использует cmakeи ninja) только с одним процессом компилятора?


Обновить

У меня была опечатка в make.conf:

#MAKEFAGS="-j3" MAKEFAGS="-j1" 

Я пробовал много других вариантов, но напишу через несколько дней. (Поскольку компиляция занимает несколько часов, и если нет доступной оперативной памяти, я должен перезагрузить ее, отключив питание, даже если я использую swap.)

1

1 ответ на вопрос

0
binki

Даже если ninjaэто не так make, его ebuild должен распознавать и уважать любой -jпараметр, указанный в MAKEOPTSпеременной окружения. Это означает, что вы должны быть в состоянии форсировать максимум одну работу через MAKEOPTS=-j1. Вы можете сделать это на разовой основе:

MAKEOPTS=-j1 emerge -a llvm 

Вы также можете установить это изменение глобально / постоянно для всех пакетов в вашей системе, отредактировав MAKEOPTS=строку в /etc/portage/make.conf.

Однако, если вы установите MAKEOPTS=-j1через свою оболочку или make.conf, параметры распараллеливания будут применены ко всем пакетам, которые emergeустанавливаются. Если вы хотите применить его только к этому одному пакету, вы можете создать файл с именем /etc/portage/env/sys-devel/llvm(создайте все недостающие каталоги, если необходимо) и поместить в него следующее содержимое:

MAKEOPTS=-j1 

Это будет применять переменную только к самому пакету llvm.

Как это сделать в оболочке:

mkdir -p /etc/portage/env/sys-devel echo MAKEOPTS=-j1>>/etc/portage/env/sys-devel/llvm 

Ниндзя и MAKEOPTS

В Gentoo, поскольку люди полагаются на MAKEOPTS=-j«n»управление количеством заданий, различные eclasses и ebuild будут отображать параметр этой переменной -jв эквивалент для используемой системы сборок acutal. Вы можете увидеть это в eclass/ninja-utils.eclass(который используется, cmake-utils.eclassкоторый используется llvm). Этот фрагмент извлекает только -jпараметр и передает его, ninjaпотому что ninjaподдерживает этот параметр, в то время как он может не поддерживать другие вещи, в которые люди помещают MAKEOPTS.

Отказ от ответственности: я на самом деле не проверял это с последним llvmebuild. Пожалуйста, прокомментируйте, если есть проблемы с этим ответом!

Смотрите обновление ответа. :-( jiwopene 6 лет назад 0
@jiwopene Ах, понятно. Похоже, вы пытались использовать `MAKEFLAGS`, в итоге случайно назвали его` MAKEFAGS`, и все же ни один из них не поддерживается envvars. Это `MAKEOPTS` ;-) binki 6 лет назад 0
Я снова компилировал, поэтому я собираюсь остановить его и повторить попытку. jiwopene 6 лет назад 0
Похоже, теперь все в порядке. jiwopene 6 лет назад 0

Похожие вопросы