2017-07-14 7 views
0

J'ai un problème lors de la construction de chrome pour plate-forme ARM. Voici quelques détails sur mon serveur hôte:Chromium version 53 pour ARM gn build issue

version Linux 4.2.0-42 générique (buildd @ lgw01-55) (version gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.3))

Et j'utilise Chromium version 53.0.2785.143. J'ai essayé d'utiliser gn pour construire le chrome, et voici mes arguments dans le fichier args.gn:

target_cpu = "arm" 
arm_tune = "generic-armv7-a" 
arm_float_abi = "softfp" 

Fondamentalement, j'ai utilisé ces arguments spécifiques ci-dessus à cause de ma plate-forme ARM. Et la commande gn a couru sans erreurs. Cependant, lors de la construction projet avec ninja, les erreurs suivantes sauté hors:

ninja: Entering directory `out/Default_arm64' [1/1] Regenerating ninja files [296/46119] LINK ./minidump-2-core FAILED: minidump-2-core ../../third_party/llvm-build/Release+Asserts/bin/clang++ -Wl,--fatal-warnings -fPIC -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro -Wl,-z,defs -fuse-ld=gold -B../../third_party/binutils/Linux_x64/Release/bin -Wl,--icf=all -pthread --target=arm-linux-gnueabihf --sysroot=../../build/linux/debian_wheezy_arm-sysroot -L/home/miaozixiong/workspace/chromium/src/build/linux/debian_wheezy_arm-sysroot/lib/arm-linux-gnueabihf -Wl,-rpath-link=/home/miaozixiong/workspace/chromium/src/build/linux/debian_wheezy_arm-sysroot/lib/arm-linux-gnueabihf -L/home/miaozixiong/workspace/chromium/src/build/linux/debian_wheezy_arm-sysroot/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link=/home/miaozixiong/workspace/chromium/src/build/linux/debian_wheezy_arm-sysroot/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link=../Default_arm64 -Wl,--disable-new-dtags -o "./minidump-2-core" -Wl,--start-group @"./minidump-2-core.rsp" -Wl,--end-group -ldl -lrt ld.gold: error: obj/breakpad/minidump-2-core/minidump-2-core.o uses VFP register arguments, output does not

...

Je suis nouveau au chrome et ne pas avoir la moindre idée de ce que font ces erreurs signifient. Donc, n'importe qui sait comment contourner? Tu es apprécié.

Note: J'ai besoin que mon attribut arm_float_abi soit "softfp" selon ma plateforme ARM. Donc s'il vous plaît noter que je ne peux pas le changer en "dur". De plus, quand float abi = "hard", il n'y a pas d'erreur de construction.

Répondre

0

J'ai posté cette question et enfin résolu le problème. J'ai utilisé ma chaîne d'outils locale sur la plateforme ARM et l'ai compilé avec succès avec g ++.

0

ld.gold: error: obj/breakpad/minidump-2-core/minidump-2-core.o uses VFP register arguments, output does not

Cette erreur de liaison pour indiquer que minidump-2-core ne peut pas être liée, en raison d'un décalage dans le virgule flottante ABI: l'objet minidump-2-core.o est compilé pour les flotteurs durs (le code généré profite de la ARM VFP unit - « utilise VFP register arguments "), mais l'exécutable cible est invité à utiliser des flottants doux (dans lesquels le support de virgule flottante est émulé, plutôt que d'utiliser des instructions matérielles FP spécialisées). Selon ce bug report, le chrome devrait être fin avec le flotteur doux.

Ma meilleure estimation est, essayez de remplacer softfp par juste soft: arm_float_abi = "soft". Selon gcc documentation, softfp maintient l'ABI souple, mais «autorise la génération de code en utilisant des instructions matérielles à virgule flottante», ce qui peut entraîner l'erreur constatée.

Si cela ne fonctionne pas, vous pouvez consulter ce tutoriel sur la construction croix chrome pour ARM:
https://unix.stackexchange.com/questions/176794/how-do-i-cross-compile-chromium-for-arm

+0

Bonjour @valiano. Merci pour votre réponse. J'ai essayé arm_float_abi = "soft" option et a obtenu la même erreur. Aussi, j'ai lu le tutoriel que vous avez mentionné auparavant. Malheureusement, je suppose que ce tutoriel est principalement axé sur la manière «dure» du flotteur. Je suis tout à fait nouveau à linux arm cross toolchains, et si j'avais tort, corrigez-moi s'il vous plaît. – tonymiao

+0

@tonymiao Je vois ... En termes de chaîne d'outils, vous voulez probablement installer: 'sudo apt-get installer gcc-bras-linux-gnueabi g ++ - 4.7-multilib-bras-linux-gnueabi', et pour supprimer le Les homologues HF 'gcc-arm-linux-gnueabihf' et' g ++ - 4.8-multilib-bras-linux-gnueabihf' dans le cas où ils ont été précédemment installés par le tutoriel mentionné. – valiano

+0

Merci frère, @ valiano. J'ai essayé comme tu l'as mentionné dans le commentaire. Je ne peux toujours pas le faire. Je suppose que google a changé le compilateur de bras en 2015. J'ai tracé un patch ici https://bugs.chromium.org/p/chromium/issues/list qui changeait gnueabi en gnueabihf. Il y avait trop de changements pertinents que je ne pouvais pas tous les trouver. – tonymiao