45 lines
1.8 KiB
ReStructuredText
45 lines
1.8 KiB
ReStructuredText
|
=========================
|
||
|
LLVM OpenMP CMake Modules
|
||
|
=========================
|
||
|
|
||
|
This directory contains CMake modules for OpenMP. These can be included into a
|
||
|
project to include different OpenMP features.
|
||
|
|
||
|
.. contents::
|
||
|
:local:
|
||
|
|
||
|
Find OpenMP Target Support
|
||
|
==========================
|
||
|
|
||
|
This module will attempt to find OpenMP target offloading support for a given
|
||
|
device. The module will attempt to compile a test program using known compiler
|
||
|
flags for each requested architecture. If successful, the flags required for
|
||
|
offloading will be loaded into the ``OpenMPTarget::OpenMPTarget_<device>``
|
||
|
target or the ``OpenMPTarget_<device>_FLAGS`` variable. Currently supported target
|
||
|
devices are ``NVPTX`` and ``AMDGPU``. This module is still under development so
|
||
|
some features may be missing.
|
||
|
|
||
|
To use this module, simply add the path to CMake's current module path and call
|
||
|
``find_package``. The module will be installed with your OpenMP installation by
|
||
|
default. Including OpenMP offloading support in an application should now only
|
||
|
require a few additions.
|
||
|
|
||
|
.. code-block:: cmake
|
||
|
|
||
|
cmake_minimum_required(VERSION 3.20.0)
|
||
|
project(offloadTest VERSION 1.0 LANGUAGES CXX)
|
||
|
|
||
|
list(APPEND CMAKE_MODULE_PATH "${PATH_TO_OPENMP_INSTALL}/lib/cmake/openmp")
|
||
|
|
||
|
find_package(OpenMPTarget REQUIRED NVPTX)
|
||
|
|
||
|
add_executable(offload)
|
||
|
target_link_libraries(offload PRIVATE OpenMPTarget::OpenMPTarget_NVPTX)
|
||
|
target_sources(offload PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/Main.cpp)
|
||
|
|
||
|
Using this module requires at least CMake version 3.20.0. Supported languages
|
||
|
are C and C++ with Fortran support planned in the future. If your application
|
||
|
requires building for a specific device architecture you can set the
|
||
|
``OpenMPTarget_<device>_ARCH=<flag>`` variable. Compiler support is best for
|
||
|
Clang but this module should work for other compiler vendors such as IBM or GNU.
|