| # |
| #//===----------------------------------------------------------------------===// |
| #// |
| #// The LLVM Compiler Infrastructure |
| #// |
| #// This file is dual licensed under the MIT and the University of Illinois Open |
| #// Source Licenses. See LICENSE.txt for details. |
| #// |
| #//===----------------------------------------------------------------------===// |
| # |
| |
| ===================================================================== |
| How to Build the LLVM* OpenMP* Offloading Runtime Library using CMake |
| ===================================================================== |
| |
| ==== Version of CMake required: v2.8.0 or above ==== |
| |
| ============================================ |
| How to call cmake initially, then repeatedly |
| ============================================ |
| - When calling cmake for the first time, all needed compiler options |
| must be specified on the command line. After this initial call to |
| cmake, the compiler definitions must not be included for further calls |
| to cmake. Other options can be specified on the command line multiple |
| times including all definitions in the Build options section below. |
| - Example of configuring, building, reconfiguring, rebuilding: |
| $ mkdir build |
| $ cd build |
| $ cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. # Initial configuration |
| $ make |
| ... |
| $ make clean |
| $ cmake -DCMAKE_BUILD_TYPE=Debug .. # Second configuration |
| $ make |
| ... |
| $ rm -rf * |
| $ cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. # Third configuration |
| $ make |
| - Notice in the example how the compiler definitions are only specified |
| for an empty build directory, but other Build options are used at any time. |
| - The file CMakeCache.txt which is created after the first call to cmake |
| is a configuration file which holds all the values for the Build options. |
| These configuration values can be changed using a text editor to modify |
| CMakeCache.txt as opposed to using definitions on the command line. |
| - To have cmake create a particular type of build generator file simply |
| inlude the -G <Generator name> option: |
| $ cmake -G "Unix Makefiles" ... |
| You can see a list of generators cmake supports by executing cmake with |
| no arguments and a list will be printed. |
| |
| ===================== |
| Instructions to Build |
| ===================== |
| $ cd libomptarget_top_level/ [ directory with plugins/ , deviceRTLs/ , etc. ] |
| $ mkdir build |
| $ cd build |
| |
| [ Unix* Libraries ] |
| $ cmake -DCMAKE_C_COMPILER=<C Compiler> -DCMAKE_CXX_COMPILER=<C++ Compiler> .. |
| |
| $ make |
| $ make install |
| |
| =========== |
| Tests |
| =========== |
| After the library has been built, there are optional tests that can be |
| performed. Some will be skipped based upon the platform. |
| To run the tests, |
| $ make check-libomptarget |
| |
| ============= |
| CMake options |
| ============= |
| -DCMAKE_C_COMPILER=<C compiler name> |
| Specify the C compiler |
| |
| -DCMAKE_CXX_COMPILER=<C++ compiler name> |
| Specify the C++ compiler |
| |
| ==== First values listed are the default value ==== |
| -DCMAKE_BUILD_TYPE=Release|Debug|RelWithDebInfo |
| Build type can be Release, Debug, or RelWithDebInfo. |
| |
| -DLIBOMPTARGET_ENABLE_WERROR=true|false |
| Should consider warnings as errors. |
| |
| -DLIBOMPTARGET_LLVM_LIT_EXECUTABLE="" |
| Full path to the llvm-lit tool. Required for testing in out-of-tree builds. |
| |
| -DLIBOMPTARGET_FILECHECK_EXECUTABLE="" |
| Full path to the FileCheck tool. Required for testing in out-of-tree builds. |
| |
| -DLIBOMPTARGET_OPENMP_HEADER_FOLDER="" |
| Path of the folder that contains omp.h. This is required for testing |
| out-of-tree builds. |
| |
| -DLIBOMPTARGET_OPENMP_HOST_RTL_FOLDER="" |
| Path of the folder that contains libomp.so. This is required for testing |
| out-of-tree builds. |
| |
| ==== NVPTX device RTL specific ==== |
| -DLIBOMPTARGET_NVPTX_ENABLE_BCLIB=false|true |
| Enable CUDA LLVM bitcode offloading device RTL. This is used for |
| link time optimization of the omp runtime and application code. |
| |
| -DLIBOMPTARGET_NVPTX_CUDA_COMPILER=<CUDA compiler name> |
| Location of a CUDA compiler capable of emitting LLVM bitcode. |
| Currently only the Clang compiler is supported. This is only used |
| when building the CUDA LLVM bitcode offloading device RTL. If |
| unspecified, the default paths are inspected. |
| |
| -DLIBOMPTARGET_NVPTX_BC_LINKER=<LLVM bitcode linker> |
| Location of a linker capable of linking LLVM bitcode objects. |
| This is only used when building the CUDA LLVM bitcode offloading |
| device RTL. If unspecified, the default paths are inspected. |
| |
| -DLIBOMPTARGET_NVPTX_ALTERNATE_HOST_COMPILER="" |
| Host compiler to use with NVCC. This compiler is not going to be used to produce |
| any binary. Instead, this is used to overcome the input compiler checks done by |
| NVCC. E.g. if using a default host compiler that is not compatible with NVCC, |
| this option can be use to pass to NVCC a valid compiler to avoid the error. |
| |
| -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITY="35" |
| Comma-separated list of CUDA compute capabilities that should be supported by |
| the NVPTX device RTL. E.g. for compute capabilities 3.0 and 3.5, the option |
| "30,35" should be used. |
| |
| ======================= |
| Example usages of CMake |
| ======================= |
| ---- Typical usage ---- |
| cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. |
| cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ .. |
| |
| ---- Request an NVPTX runtime library that supports compute capability 5.0 ---- |
| cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITY="50" |
| |
| ========= |
| Footnotes |
| ========= |
| [*] Other names and brands may be claimed as the property of others. |