如何构建pnacl工具链

时间:2014-10-28 13:11:31

标签: build google-nativeclient toolchain

我的目标是为pnacl工具链创建一些新功能。在我这样做之前,我想我应该首先成功构建pnacl工具链。

[11/04 Update]

最后它有效。我做的一些包(bison,byacc,flex)没有安装并导致了这个问题。

[11/03 Update]

我使用ubuntu-14.04.1-desktop-amd64作为我的系统

另外,ubuntu-12.04.5-desktop-amd64正在测试[11/03更新]

我一直遵循the document的步骤。在我运行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的/金   -I ../../../ src / binutils / gold -I ../../../ src / binutils / gold /../ include - I ../../../ src / binutils / gold /../ elfcpp -DLOCALEDIR =" \" / share / locale \""   -DBINDIR =" \" / bin中\"" -DTOOLBINDIR =" \" /臂-PC-的NaCl / BIN \"" -DTOOLLIBDIR =" \" /臂-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 = return-type] yyscript.c:1:1:错误:函数

     

声明不是原型[-Werror = strict-prototypes] cc1:错误:   无法识别的命令行选项" -Wno-unused-private-field" [-Werror]   cc1:错误:无法识别的命令行选项   " -Wno-不需要的内部声明" [-Werror] cc1:错误:   无法识别的命令行选项" -Wno-unused-const-variable"   [-Werror] cc1:错误:无法识别的命令行选项   " -Wno-绝对值" [-Werror] cc1:错误:无法识别的命令行   选项" -Wno-extended-offsetof" [-Werror] cc1:所有警告都是   作为错误处理[4]:*** [yyscript.o]错误1

如果我用默认的clang运行它来编译

  

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

然后生成以下错误消息

  

/家庭/ albaforia / SVN / nativeclient / THIRD_PARTY / LLVM-构建/推出+断言/ bin中/铛   -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 =" \" /臂-PC-的NaCl / BIN \"" -DTOOLLIBDIR =" \" /臂-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

3 个答案:

答案 0 :(得分:2)

默认情况下,PNaCl工具链使用已下载的clang二进制文件构建,因为Google的自动构建器运行Ubuntu 12.04,并且这些系统上的gcc无法构建最新版本的LLVM。所以有两个选择: 如果您使用Chromium的depot_tools来获取Native Client源,您可以轻松获取构建器使用的同一编译器的副本:从native_client运行的父目录 tools/clang/scripts/update.sh将在toolchain_build_pnacl.py期望的目录中下载并安装clang。安装完成后,如果您使用DEPS中的gclient,则由原生客户depot_tools挂钩会自动更新。

否则,您可以使用系统gcc使用--gcc选项编译PNaCl工具链。这肯定适用于Ubuntu 14.04,就像我们开发PNaCl的系统一样。

顺便说一句,我已经启动了另一个document,其中有一些关于构建过程的详细信息(即使它的重点不是您感兴趣的内容),当然还有-h的{​​{1}}标志及其来源。

答案 1 :(得分:1)

您可以发布有关错误的更多信息吗?您可能需要向上滚动一点(错误与构建的其他部分交错,因为它并行构建)。为了帮助调试,您还可以在特定目标上运行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命令。在任何情况下,我们都想解决您遇到的问题!

答案 2 :(得分:1)

要使用系统编译器而不是third_party/llvm_build/...中的编译器,您可能希望将--gcc选项传递给构建脚本。但是,你仍然不可能在Ubuntu 14.04下成功构建工具链。

我正在使用Ubuntu 14.04并且为了构建pnacl工具链,我已经设置了Ubuntu 12.04 chroot environment。在其中我可以使用以下命令成功构建工具链:

# 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环境,一切顺利进行。如果不安装其中一些目录,一些构建脚本可能会失败,但我不确定。