2013-02-07 15 views
13

Strona Online LLVM demo miała opcję generowania kodu API LLVM C++ jako zaplecza z kodu źródłowego. Ta strona demo jest teraz wyłączona. Zastanawiałem się, jak możemy to zrobić sami, korzystając z dostępnych narzędzi LLVM.Generowanie kodu LLVM C++ API jako backendu

Próbowałem następujące

clang++ -c -emit-llvm input.cpp -o input.ll 
llc -march=cpp -o input.ll.cpp input.ll 

co daje następujący błąd

llc: error: invalid target 'cpp'. 

Używam LLVM/Clang wersji 3.2.

+3

Czy 'llc -version' zawiera' cpp' jako poprawny cel backendu? – Necrolis

+0

llc -version nie pokazuje również cpp na liście. Czy wymaga jakiejkolwiek rejestracji lub czegoś, co obejmuje cpp, czy co? – MetallicPriest

+0

@MetallicPriest Wydaje mi się, że po prostu nie włączają go do demo online (tak naprawdę nie interesują mnie ludzie, jak sądzę). Dlaczego nie zainstalujesz LLVM na swoim komputerze lokalnie? – us2012

Odpowiedz

6

Backend LLVM C++ należy włączyć podczas konfiguracji podczas budowania LLVM. Jest on domyślnie włączony w kompilacji autotools configure, ale nie w kompilacji CMake podczas kompilacji w systemie Windows. Możesz go włączyć, ustawiając odpowiednie flagi podczas konfigurowania za pomocą CMake. Aby uzyskać więcej informacji, patrz this page.

Cytat:

LLVM_TARGETS_TO_BUILD: STRING rozdzieloną średnikami listę celów do budowy, lub wszystkie na budowę wszystkie cele. Rozróżnianie wielkości liter. Dla domyślnych ustawień Visual C++ na X86. Na inne przypadki są domyślnie ustawione na wszystkie. Przykład: -DLLVM_TARGETS_TO_BUILD = "X86; PowerPC".

UPDATE

Od version 3.9 CppBackend nie jest już ważny cel. Usunęli z kodu, ponieważ wygenerowany kod zawierał kilka problemów.

Check this commit

Remove bit-rotten CppBackend. 

This backend was supposed to generate C++ code which will re-construct 
the LLVM IR passed as input. This seems to me to have very marginal 
usefulness in the first place. 

However, the code has never been updated to use IRBuilder, which makes 
its current value negative -- people who look at the output may be 
steered to use the *wrong* C++ APIs to construct IR. 

Furthermore, it's generated code that doesn't compile since at least 
2013. 

Differential Revision: http://reviews.llvm.org/D19942 

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8 
1

Niestety, wydaje się nie być możliwe w nowszych wersjach LLVM. Powiązany komunikat zatwierdzenia wyjaśnia go całkiem dobrze.

Jak widać w następującym zatwierdzeniu, Remove bit-rotten CppBackend, wygenerowany kod wyświetliłby problemy.

commit 257fabb18605265a79397d35dd79a3973760ffaf 
Author: --- 
Date: Thu May 5 14:35:40 2016 +0000 

Remove bit-rotten CppBackend. 

This backend was supposed to generate C++ code which will re-construct 
the LLVM IR passed as input. This seems to me to have very marginal 
usefulness in the first place. 

However, the code has never been updated to use IRBuilder, which makes 
its current value negative -- people who look at the output may be 
steered to use the *wrong* C++ APIs to construct IR. 

Furthermore, it's generated code that doesn't compile since at least 
2013. 

Differential Revision: http://reviews.llvm.org/D19942 

git-svn-id: https://llvm.org/svn/llvm-project/llvm/[email protected] 91177308-0d34-0410-b5e6-96231b3b80d8