# #//===----------------------------------------------------------------------===// #// #// 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 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= -DCMAKE_CXX_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= Specify the C compiler -DCMAKE_CXX_COMPILER= 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= 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= 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.