2017-08-17 3 views
1

Je veux utiliser distcc pour compiler le code de mon Mac vers un tas d'hôtes Linux, mais je ne peux pas comprendre comment pour tout faire "aligner". J'ai utilisé avec succès distcc de Mac à Mac, donc j'ai une idée générale de la façon de configurer les choses. J'utilise clang 4.0 et je l'ai installé et je travaille sur Mac et Linux. La commande suivante compile très bien sans le distcc au début, mais après avoir ajouté distcc, je reçois les questions suivantes:Comment utiliser clang et distcc pour compiler sur un esclave d'une architecture différente (par exemple mac/linux)

distcc /Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin/clang++ -I/usr/local/include -I/Users/xaxxon/v8toolkit/./include -I/Users/xaxxon/v8/include -stdlib=libc++ -g -Werror=return-type -g -std=gnu++1z -o CMakeFiles/v8toolkit_static.dir/src/v8toolkit.cpp.o -c /Users/xaxxon/v8toolkit/src/v8toolkit.cpp 

Je ne suis pas sûr de ce que le compilateur est en cours ramassé sur Linux, et je ne sais comment trouver. Il est possible qu'il prenne GCC au lieu de clang.

Ma première préoccupation est la suivante:

clang: warning: argument unused during compilation: '-stdlib=libc++' 

Ma première erreur est:

In file included from /Users/xaxxon/v8toolkit/src/v8toolkit.cpp:5: 
In file included from /usr/include/assert.h:44: 
In file included from /Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin/../include/c++/v1/stdlib.h:94: 
/usr/include/stdlib.h:250:20: error: blocks support disabled - compile with -fblocks or pick a deployment target that supports them 
int atexit_b(void (^)(void)) __attribute__((availability(macosx,introduced=10.6))); 

La prochaine erreur que je reçois (qui devient la première erreur si j'ajouter manuellement -fblocks à la commande de compilation (qui est pas nécessaire sur une version native Mac) est:

/Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin/../include/c++/v1/__tuple:289:13: error: unknown type name '__type_pack_element' 
    typedef __type_pack_element<_Ip, _Types...> type; 
      ^
/Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin/../include/c++/v1/__tuple:289:32: error: expected member name or ';' after declaration specifiers 
    typedef __type_pack_element<_Ip, _Types...> type; 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 
/Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin/../include/c++/v1/__tuple:356:43: error: use of undeclared identifier '__type_pack_element' 
     typename _ApplyFn::template __apply<__type_pack_element<_Idx, _Types...>>... 
             ^
/Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin/../include/c++/v1/__tuple:357:6: error: expected a type 
    >; 

Je ne comprends pas si je fais de Quelque chose de fondamentalement faux ou s'il y a quelque chose de petit qui me manque, ce qui fait que le compilateur Linux agit différemment.

Nous vous remercions de vos conseils et astuces.

edit: Je me suis juste assuré d'avoir clang sur Linux dans le même répertoire nommé et maintenant je n'ai que les problèmes -fblocks et unused during compilation -stdlib=libc++.

Edit2: Je peux tout compiler (mais avec des avertissements), mais quand il se lie, je reçois:

ld: warning: ignoring file CMakeFiles/v8toolkit_shared.dir/src/debugger.cpp.o, file was built for 
unsupported file format (0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00 0x00 0x00 
0x00 0x00 0x00 0x00 0x00 0x00) which is not the architecture being linked 
(x86_64): CMakeFiles/v8toolkit_shared.dir/src/debugger.cpp.o 

Répondre

1

Ajout du drapeau -target fixe tout! Dans mon cas, pour el capitan, la cible est triple:

-target x86_64-apple-darwin15.6.0 

pour une commande de construction de:

distcc /Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin/clang++ -Dv8toolkit_shared_EXPORTS -I/usr/local/include -I/Users/xaxxon/v8toolkit/./include -isystem /Users/xaxxon/v8/include -stdlib=libc++ -g -Werror=return-type -target x86_64-apple-darwin15.6.0 -g -fPIC -std=gnu++1z -o CMakeFiles/v8toolkit_shared.dir/src/v8toolkit.cpp.o -c /Users/xaxxon/v8toolkit/src/v8toolkit.cpp 

Vous pouvez obtenir la cible hôte actuel en tapant clang -v:

$ clang -v 
clang version 4.0.0 (tags/RELEASE_400/final) 
Target: x86_64-apple-darwin15.6.0 <<==== THIS LINE HERE 
Thread model: posix 
InstalledDir: /Users/xaxxon/Downloads/clang+llvm-4.0.0-x86_64-apple-darwin/bin 

Les lignes CMake suivantes saisiront (et imprimeront) le triple de la machine actuelle:

# Get the target triple for the current host by calling clang -v and then stripping out the Target: value from its output. CMake regex syntax is quite limited. 
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -v ERROR_VARIABLE CLANG_VERSION_INFO) 
string(REGEX REPLACE ".*Target:[\r\n\t ]*([^\r\n\t]*).*Thread model.*" "\\1" TARGET_TRIPLE ${CLANG_VERSION_INFO}) 
message(STATUS "TARGET TRIPLE: '${TARGET_TRIPLE}' END") 

Merci beaucoup à @duskwuff et oftc.net #llvm pour vous aider à comprendre cela!