Caitlyn Cano | e4b9fec | 2021-07-01 20:41:51 | [diff] [blame] | 1 | # Building and Testing LLVM libc on Windows |
| 2 | |
| 3 | ## Setting Up Environment |
| 4 | |
| 5 | To build LLVM libc on Windows, first build Clang using the following steps. |
| 6 | |
| 7 | 1. Open Command Prompt in Windows |
| 8 | 2. Set TEMP and TMP to a directory. Creating this path is necessary for a |
| 9 | successful clang build. |
| 10 | 1. Create tmp under your preferred directory or under `C:\src`: |
| 11 | |
| 12 | ``` |
| 13 | cd C:\src |
| 14 | mkdir tmp |
| 15 | ``` |
| 16 | |
| 17 | 2. In the start menu, search for "environment variables for your account". |
| 18 | Set TEMP and TMP to `C:\src\tmp` or the corresponding path elsewhere. |
| 19 | 3. Download [Visual Studio Community](https://visualstudio.microsoft.com/downloads/). |
| 20 | 4. Install [CMake](https://cmake.org/download/) and |
| 21 | [Ninja](https://github.com/ninja-build/ninja/releases). (Optional, included |
| 22 | in Visual Studio). |
| 23 | 5. Load the Visual Studio environment variables using this command. This is |
| 24 | crucial as it allows you to use build tools like CMake and Ninja: |
| 25 | |
| 26 | ``` |
| 27 | "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64 |
| 28 | ``` |
| 29 | |
| 30 | Note: **Rerun this command every time you open a new Command Prompt |
| 31 | window.** |
| 32 | |
| 33 | 6. If you have not used Git before, install |
| 34 | [Git](https://git-scm.com/download/win) for Windows. Check out the LLVM |
| 35 | source tree from Github using: |
| 36 | |
| 37 | ``` |
| 38 | git clone https://github.com/llvm/llvm-project.git |
| 39 | ``` |
| 40 | |
| 41 | 7. Ensure you have access to Clang, either by downloading from |
| 42 | [LLVM Download](https://releases.llvm.org/download.html) or |
| 43 | [building it yourself](https://clang.llvm.org/get_started.html). |
| 44 | |
| 45 | ## Building LLVM libc |
| 46 | |
| 47 | In this section, Clang will be used to compile LLVM |
| 48 | libc, and finally, build and test the libc. |
| 49 | |
| 50 | 8. Create a empty build directory in `C:\src` or your preferred directory and |
| 51 | cd to it using: |
| 52 | |
| 53 | ``` |
| 54 | mkdir libc-build |
| 55 | cd libc-build |
| 56 | ``` |
| 57 | |
| 58 | 9. Run the following CMake command to generate build files. LLVM libc must be built |
| 59 | by Clang, so ensure Clang is specified as the C and C++ compiler. |
| 60 | |
| 61 | ``` |
| 62 | cmake -G Ninja ../llvm-project/llvm -DCMAKE_C_COMPILER=C:/src/clang-build/bin/clang-cl.exe -DCMAKE_CXX_COMPILER=C:/src/clang-build/bin/clang-cl.exe -DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_FORCE_BUILD_RUNTIME=libc -DLLVM_ENABLE_PROJECTS=libc -DLLVM_NATIVE_ARCH=x86_64 -DLLVM_HOST_TRIPLE=x86_64-window-x86-gnu |
| 63 | ``` |
| 64 | |
Hedin Garca | 8baa87d | 2021-07-27 17:14:18 | [diff] [blame] | 65 | Some LLVM libc math unittests test correctness/accuracy against results from |
| 66 | the [GNU MPFR library](https://www.mpfr.org/). If you want to run math tests |
| 67 | which use MPFR, and if MPFR on your machine is not installed in the default |
| 68 | include and linker lookup directories, then you can specify the MPFR install |
| 69 | directory by passing an additional CMake option as follows: |
| 70 | |
| 71 | -DLLVM_LIBC_MPFR_INSTALL_PATH=<path/mpfr/install/dir> |
| 72 | |
| 73 | If the above option is specified, then `${LLVM_LIBC_MPFR_INSTALL_PATH}/include` |
| 74 | will be added to the include directories, and |
| 75 | `${LLVM_LIBC_MPFR_INSTALL_PATH}/lib` will be added to the linker lookup |
| 76 | directories. |
| 77 | |
| 78 | NOTE: The GNU MPFR library depends on the |
| 79 | [GNU GMP library](https://gmplib.org/). If you specify the above option, then it |
| 80 | will be assumed that GMP is also installed in the same directory or availabe in |
| 81 | the default paths. |
| 82 | |
Caitlyn Cano | e4b9fec | 2021-07-01 20:41:51 | [diff] [blame] | 83 | 10. Build LLVM libc using: |
| 84 | |
| 85 | ``` |
Tue Ly | a48c4a4 | 2023-02-03 20:16:01 | [diff] [blame] | 86 | ninja libc |
Caitlyn Cano | e4b9fec | 2021-07-01 20:41:51 | [diff] [blame] | 87 | |
| 88 | ``` |
| 89 | |
| 90 | 11. Run tests using: |
| 91 | |
| 92 | ``` |
| 93 | ninja checklibc |
| 94 | ``` |