linux-packaging-mono/external/corert/Documentation/how-to-build-ObjectWriter.md
Xamarin Public Jenkins (auto-signing) 0510252385 Imported Upstream version 5.20.0.180
Former-commit-id: ff953ca879339fe1e1211f7220f563e1342e66cb
2019-02-04 20:11:37 +00:00

53 lines
1.8 KiB
Markdown

# Build ObjectWriter library #
ObjWriter is based on LLVM, so it requires recent CMake and GCC/Clang to build LLVM.
See [LLVM requirements](http://llvm.org/docs/GettingStarted.html#requirements) for more details.
`build.cmd`/`build.sh` script downloads a pre-built ObjWriter NuGet package. ObjWriter library is not built by default because
it takes a long time and changes rarely.
To build a fresh ObjWriter, pass additional `objwriter` argument to the `build.cmd`/`build.sh` script. It will cause the build to clone
a matching copy of LLVM and use it to build ObjWriter library.
The following manual steps are useful for troubleshooting ObjWriter build issues.
1. Clone LLVM from official LLVM mirror github git repository:
```
git clone -b release_50 https://github.com/llvm-mirror/llvm.git
```
2. Copy ObjWriter directory from CoreRT into LLVM tree
```
cp -r corert/src/Native/ObjWriter llvm/tools/
```
3. Apply the patch to LLVM:
```
cd llvm
git apply tools/ObjWriter/llvm.patch
```
4. Configure and build LLVM with ObjWriter:
```
mkdir build
cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release -DLLVM_OPTIMIZED_TABLEGEN=1 -DHAVE_POSIX_SPAWN=0 -DLLVM_ENABLE_PIC=1 -DLLVM_BUILD_TESTS=0 -DLLVM_ENABLE_DOXYGEN=0 -DLLVM_INCLUDE_DOCS=0 -DLLVM_INCLUDE_TESTS=0
make -j10 objwriter
cd ..
```
* For ARM(cross/non-cross) please specify Triple for LLVM as Cmake configuration option:
```
-DLLVM_DEFAULT_TARGET_TRIPLE=thumbv7-linux-gnueabi
```
* You can change the building type(CMAKE_BUILD_TYPE) to the debugging type(Debug), if necessary to debug ObjWriter.
* Also, you can do this under chroot to building ObjWriter for other platforms.
5. Get ObjWriter:
If all goes well, the build will complete in the previous step and you will get ObjWriter library as llvm/build/lib/libobjwriter.so