This shows you the differences between two versions of the page.
cpl:labs:llvm-pass [2015/12/08 00:02] irina.presa [Hello World] |
cpl:labs:llvm-pass [2015/12/08 00:32] (current) irina.presa [Integrarea unui pas în LLVM] |
||
---|---|---|---|
Line 128: | Line 128: | ||
Pentru a nu mai fi nevoiți să specificăm biblioteca dinamică la runtime, aceasta trebuie să fie integrată în codul utilitarelor ''opt'' și ''bugpoint''. Pentru a realiza acest lucru, trebuie să modificăm [[http://llvm.org/docs/WritingAnLLVMPass.html#quickstart|exemplul]] dat în **sursele** de LLVM astfel: | Pentru a nu mai fi nevoiți să specificăm biblioteca dinamică la runtime, aceasta trebuie să fie integrată în codul utilitarelor ''opt'' și ''bugpoint''. Pentru a realiza acest lucru, trebuie să modificăm [[http://llvm.org/docs/WritingAnLLVMPass.html#quickstart|exemplul]] dat în **sursele** de LLVM astfel: | ||
- | * ''lib/Transforms/Hello/Makefile'' | + | * ''lib/Transforms/Hello/Makefile'' |
- | ** se şterge: **LOADABLE_MODULE = 1** | + | * se şterge: **LOADABLE_MODULE = 1** |
- | ** și se adaugă: **BUILD_ARCHIVE = 1** | + | * și se adaugă: **BUILD_ARCHIVE = 1** |
- | * ''tools/opt/CMakeLists.txt'' | + | * ''tools/opt/CMakeLists.txt'' |
- | ** se înlocuiește | + | * se adaugă noul pass în lista |
- | *** **set(LLVM_LINK_COMPONENTS bitreader asmparser bitwriter instrumentation scalaropts ipo vectorize)** cu | + | * **set(LLVM_LINK_COMPONENTS ${LLVM_TARGETS_TO_BUILD} Analysis CodeGen Hello)** |
- | *** **set(LLVM_LINK_COMPONENTS bitreader asmparser bitwriter instrumentation scalaropts ipo vectorize hello)** | + | * la fel și pentru ''tools/bugpoint/CMakeLists.txt'' |
- | * ''tools/bugpoint/CMakeLists.txt'' | + | * se crează fişierul ''include/llvm/Transforms/Hello.h'' cu conţinutul |
- | ** se înlocuiește | + | * <code c> |
- | *** **set(LLVM_LINK_COMPONENTS asmparser instrumentation scalaropts ipo linker bitreader bitwriter irreader vectorize objcarcopts)** cu | + | |
- | *** **set(LLVM_LINK_COMPONENTS asmparser instrumentation scalaropts ipo linker bitreader bitwriter irreader vectorize objcarcopts hello)** | + | |
- | * se crează fişierul ''include/llvm/Transforms/Hello.h'' cu conţinutul | + | |
- | ** <code c> | + | |
#ifndef LLVM_TRANSFORMS_HELLO_H | #ifndef LLVM_TRANSFORMS_HELLO_H | ||
#define LLVM_TRANSFORMS_HELLO_H | #define LLVM_TRANSFORMS_HELLO_H | ||
Line 149: | Line 145: | ||
#endif | #endif | ||
</code> | </code> | ||
- | * ''lib/Transforms/Hello/CMakeLists.txt'' | + | * se creeaza fișierul ''lib/Transforms/Hello/LLVMBuild.txt'' după formatul din [[http://llvm.org/docs/CommandGuide/llvm-build.html|sistemul de build]] llvm. |
- | ** se şterge **add_llvm_loadable_module( LLVMHello Hello.cpp )** | + | * ex: <code bash> |
- | ** și se adaugă | + | [component_0] |
- | *** **add_llvm_library( LLVMHello Hello.cpp )** | + | type = Library |
- | *** **target_link_libraries (LLVMHello LLVMSupport)** | + | name = Hello |
- | * ''lib/Transforms/Hello/Hello.cpp'' | + | parent = Transforms |
- | ** se include | + | library_name = hello |
- | *** **llvm/Transforms/Hello.h** | + | required_libraries = Analysis Support |
- | *** **llvm/Support/Debug.h** | + | </code> |
- | ** (opțional) se înlocuiește | + | * se updatează și fișierul LLVMBuild.txt din directorul părinte pentru a include sub-directorul ''Hello''. |
- | *** **errs()** cu | + | * ''lib/Transforms/Hello/CMakeLists.txt'' |
- | *** [[http://llvm.org/docs/ProgrammersManual.html#DEBUG_TYPE|dbgs()]] | + | * se şterge **add_llvm_loadable_module( LLVMHello Hello.cpp )** |
- | ** se adaugă | + | * și se adaugă |
- | ***<code c> | + | * **add_llvm_library( LLVMHello Hello.cpp )** |
+ | * ''lib/Transforms/Hello/Hello.cpp'' | ||
+ | * se include | ||
+ | * **llvm/Transforms/Hello.h** | ||
+ | * se adaugă | ||
+ | *<code c> | ||
FunctionPass* llvm::createHelloPass() | FunctionPass* llvm::createHelloPass() | ||
{ | { | ||
Line 168: | Line 169: | ||
} | } | ||
</code> | </code> | ||
- | * ''include/llvm/LinkAllPasses.h'' | + | * ''include/llvm/LinkAllPasses.h'' |
- | ** se include **llvm/Transforms/Hello.h** | + | * se include **llvm/Transforms/Hello.h** |
- | ** și se adaugă | + | * și se adaugă |
- | ***<code c> | + | *<code c> |
(void) llvm::createHelloPass(); | (void) llvm::createHelloPass(); | ||
</code> | </code> | ||
- | * se creeaza un director nou în care vor fi compilate sursele. De exemplu dacă sursele se află în directorul **llvm-3.3.src** și am creat pe același nivel directorul **llvm**, executăm din **interiorul directorului nou creat** comanda | + | * se creeaza un director nou în care vor fi compilate sursele. De exemplu dacă sursele se află în directorul **llvm-3.3.src** și am creat pe același nivel directorul **llvm**, executăm din **interiorul directorului nou creat** comanda |
- | **<code bash> | + | *<code bash> |
cmake -G "Unix Makefiles" ../llvm-3.3.src | cmake -G "Unix Makefiles" ../llvm-3.3.src | ||
</code> | </code> | ||
- | ** urmată de comanda <code bash> make </code> | + | * urmată de comanda <code bash> make </code> |