Как собрать набор инструментов pnacl

Моя цель — добавить новую функцию в цепочку инструментов pnacl. Прежде чем я это сделаю, я думаю, что я должен сначала успешно собрать набор инструментов pnacl.

[Обновление 04.11]

Наконец это работает. Некоторые пакеты (bison, byacc, flex), которые я не устанавливал, вызвали эту проблему.

[Обновление 3 ноября]

Я использую ubuntu-14.04.1-desktop-amd64 в качестве своей системы.

Кроме того, ubuntu-12.04.5-desktop-amd64 сейчас тестируется [обновлено 11/03]

Я следовал шагу документа во всех способ. Все идет нормально, пока я не запускаю скрипт toolchain_build_pnacl.

Поэтому я добавляю сюда новое сообщение об ошибке:

если я запускаю скрипт, используя gcc для компиляции

toolchain_build/toolchain_build_pnacl.py --gcc --verbose --sync --clobber --install toolchain/linux_x86/pnacl_newlib

то следующее сообщение об ошибке

gcc -DHAVE_CONFIG_H -I. -I../../../src/binutils/gold -I../../../src/binutils/gold -I../../../src/binutils/gold/. ./include - I../../../src/binutils/gold/../elfcpp -DLOCALEDIR="\"/share/locale\"" -DBINDIR="\"/bin\"" -DTOOLBINDIR ="\"/arm-pc-nacl/bin\"" -DTOOLLIBDIR="\"/arm-pc-nacl/lib\"" -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -frandom-seed=yyscript.o -Wno-extended-offsetof -Wno-absolute-value -Wno-unused-function -Wno-unused-const-variable -Wno-unneeded-internal-declaration -Wno-unused -private-field -Wno-format-security -MT yyscript.o -MD -MP -MF .deps/yyscript.Tpo -c -o yyscript.o yyscript.c yyscript.c:1:1: ошибка: возвращаемые значения по умолчанию в 'int' [-Werror=тип возврата] yyscript.c:1:1: ошибка: функция

объявление не является прототипом [-Werror=строгие-прототипы] cc1: ошибка: нераспознанный параметр командной строки "-Wno-unused-private-field" [-Werror] cc1: ошибка: нераспознанный параметр командной строки "-Wno-unneeded- внутреннее-декларация" [-Werror] cc1: ошибка: нераспознанный параметр командной строки "-Wno-unused-const-variable" [-Werror] cc1: ошибка: нераспознанный параметр командной строки "-Wno-absolute-value" [-Werror] cc1: error: нераспознанный параметр командной строки "-Wno-extended-offsetof" [-Werror] cc1: все предупреждения рассматриваются как ошибки make[4]: *** [yyscript.o] Error 1

если я запускаю его с clang по умолчанию для компиляции

toolchain_build/toolchain_build_pnacl.py --verbose --clobber --install toolchain/linux_x86/pnacl_newlib

затем генерируется следующее сообщение об ошибке

/home/albaforia/SVN/nativeclient/ Third_Party/llvm-build/Release+Asserts/bin/clang -DHAVE_CONFIG_H -I. -I../../../src/binutils/gold -I../../../src/binutils/gold -I../../../src/binutils/gold/. ./include -I../../../src/binutils/gold/../elfcpp -DLOCALEDIR="\"/share/locale\"" -DBINDIR="\"/bin\"" -DTOOLBINDIR ="\"/arm-pc-nacl/bin\"" -DTOOLLIBDIR="\"/arm-pc-nacl/lib\"" -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -frandom-seed=yyscript.o -Wno-extended-offsetof -Wno-absolute-value -Wno-unused-function -Wno-unused-const-variable -Wno-unneeded-internal-declaration -Wno-unused -private-field -Wno-format-security -MT yyscript.o -MD -MP -MF .deps/yyscript.Tpo -c -o yyscript.o yyscript.c yyscript.c:1:1: ошибка: отсутствует спецификатор типа , по умолчанию 'int' [-Werror,-Wimplicit-int] main() { return 0; } ^~~~ Возникла 1 ошибка. make[4]: *** [yyscript.o] Ошибка 1


person Albaforia    schedule 28.10.2014    source источник


Ответы (3)


По умолчанию цепочка инструментов PNaCl строится с загруженным двоичным файлом clang, потому что автоматические сборщики Google работают под управлением Ubuntu 12.04, а gcc в этих системах не может собирать последние версии LLVM. Таким образом, есть 2 варианта: Если вы использовали Chromium depot_tools для получения исходных кодов Native Client, вы можете легко получить копию того же компилятора, который используют сборщики: из родительского каталога native_client запустите tools/clang/scripts/update.sh, который загрузит и установит clang в каталог, где toolchain_build_pnacl.py ожидает этого. После установки он будет автоматически обновляться с помощью DEPS ловушек Native Clients, если вы используете gclient из depot_tools.

В противном случае вы можете использовать системный gcc для компиляции цепочки инструментов PNaCl, используя параметр --gcc. Это определенно должно работать на Ubuntu 14.04, на которой мы разрабатываем PNaCl.

Кроме того, я начал еще один document, в котором есть еще несколько подробностей о процессе сборки (даже если его внимание не совсем то, что вас интересует) и, конечно же, есть флаг -h для toolchain_build_pnacl.py и его исходники.

person Derek    schedule 30.10.2014
comment
Спасибо за помощь мне много. tools/clang/scripts/update.sh получает правильную версию clang! Но сборка по-прежнему не работает. Даже используйте с --gcc вместо clang. - person Albaforia; 31.10.2014
comment
Можете ли вы опубликовать сообщение об ошибке? На данный момент это совершенно другой вопрос, чем тот, который вы изначально задали; Я не знаю, следует ли вам просто пометить этот вопрос как отвеченный и начать новый, или просто отредактировать исходный вопрос или что... - person Derek; 03.11.2014
comment
Я обновил его на этот раз. И если эта проблема все же перейдет в другую, я сделаю для нее новый Вопрос и ссылку на это. Спасибо за совет. - person Albaforia; 03.11.2014

Не могли бы вы опубликовать больше информации о том, что это за ошибка? Вероятно, вам нужно немного прокрутить вверх (ошибки чередуются с другими частями сборки, потому что она строится параллельно). Чтобы помочь отладить это, вы также можете запустить toolchain_build/toolchain_build_pnacl.py для определенных целей и уменьшить количество выполняемых сборок, например. вы могли бы сделать:

toolchain_build/toolchain_build_pnacl.py llvm_x86_64_linux --verbose --install toolchain/linux_x86/pnacl_newlib

К вашему сведению, при повторном запуске скрипта toolchain_build/toolchain_build_pnacl.py вам не нужно повторно указывать --sync и --clobber.

Вы также можете запустить команду make вручную во время отладки проблемы. В любом случае мы хотели бы исправить проблему, с которой вы столкнулись!

person JF Bastien    schedule 28.10.2014
comment
Спасибо за вашу помощь. Я обнаружил, что это вызвано отсутствием компилятора llvm. Я отредактировал свой вопрос, добавив дополнительную информацию о сообщении об ошибке. - person Albaforia; 29.10.2014

Чтобы использовать системный компилятор вместо компилятора из third_party/llvm_build/..., вы можете передать параметр --gcc скрипту сборки. Тем не менее, маловероятно, что вам удастся собрать набор инструментов под Ubuntu 14.04.

Я использую Ubuntu 14.04, и для создания набора инструментов pnacl я настроил Ubuntu 12.04 chroot-окружение. Внутри него я могу успешно построить набор инструментов, используя следующие команды:

# get sources for NaCl itself
gclient config http://src.chromium.org/native_client/trunk/src/native_client@13992 --name native_client
gclient sync -j16

cd native_client
# sync sources for binutils, llvm, etc.
toolchain_build/toolchain_build_pnacl.py --verbose --sync-only
# build and install toolchain
toolchain_build/toolchain_build_pnacl.py --verbose --gcc --install install_dir

PS: я монтирую /proc, /dev, /dev/pts, /sys, /run, /run/shm, /tmp в свою среду chroot, и все работает гладко. Без монтирования некоторых из этих каталогов некоторые сценарии сборки могут завершиться ошибкой, хотя я в этом не уверен.

person Nikolai    schedule 30.10.2014
comment
Спасибо за вашу помощь :) И... да, при передаче --gcc, как вы сказали, все еще происходит неправильно. Я изменю попытку изменить свою систему на Ububtu 12.04 позже и собрать ее снова. - person Albaforia; 30.10.2014
comment
Я приложил некоторые усилия, чтобы изменить свою систему, чтобы она была похожа на ту, которую вы описали. Но это все еще не работает. Не могли бы вы рассказать мне более подробно о вашей системе? Включая аппаратное обеспечение, ОС, систему хоста и среду chroot или что-то еще, что может быть важно сказать. Заранее спасибо. - person Albaforia; 01.11.2014
comment
Моя хост-система — Ubuntu 14.04 (amd64). Система Chroot — это Ubuntu 12.04 (amd64). Процессор - i7-2600, хотя я не думаю, что hw здесь важен. Трудно догадаться, что пошло не так в вашем случае, без сообщений об ошибках. Возможно, вам не хватает некоторых пакетов, установленных в chroot. - person Nikolai; 06.11.2014