Minor fixes to cleanup Windows para-virtualization changes
[platform/upstream/OpenCL-ICD-Loader.git] / README.md
1 # OpenCL ICD Loader
2
3 This repo contains the source code and tests for the Khronos official OpenCL ICD Loader.
4
5 ## CI Build Status
6
7 [![Windows Build Status](https://ci.appveyor.com/api/projects/status/47uhjgp5h4de2f63/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/opencl-icd-loader/branch/master) [![Linux OSX Build Status](https://travis-ci.com/KhronosGroup/opencl-icd-loader.svg?branch=master)](https://travis-ci.com/KhronosGroup/opencl-icd-loader)
8
9 ## Introduction
10
11 OpenCL defines an *Installable Client Driver* (ICD) mechanism to allow developers to build applications against an *Installable Client Driver* loader (ICD loader) rather than linking their applications against a specific OpenCL implementation.
12 The ICD Loader is responsible for:
13
14 * Exporting OpenCL API entry points
15 * Enumerating OpenCL implementations
16 * Forwarding OpenCL API calls to the correct implementation
17
18 This repo contains the source code and tests for the Khronos official OpenCL ICD Loader.
19
20 Note that this repo does not contain an OpenCL implementation (ICD).
21 You will need to obtain and install an OpenCL implementation for your OpenCL device that supports the OpenCL ICD extension `cl_khr_icd` to run an application using the OpenCL ICD Loader.
22
23 The OpenCL *Installable Client Driver* extension (`cl_khr_icd`) is described in the OpenCL extensions specification, which may be found on the [Khronos OpenCL Registry](https://www.khronos.org/registry/OpenCL/).
24
25 ## Build Instructions
26
27 ### Dependencies
28
29 The OpenCL ICD Loader requires OpenCL Headers.
30 To use system OpenCL Headers, please specify the OpenCL Header location using the CMake variable `OPENCL_ICD_LOADER_HEADERS_DIR`.
31 By default, the OpenCL ICD Loader will look for OpenCL Headers in the `inc` directory.
32
33 By default, the OpenCL ICD Loader on Windows requires the Windows Driver Kit (WDK).
34 To build OpenCL ICD Loader with WDK support -
35 * Install recent Windows WDK currently at https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
36
37 * Establish environment variable WDK to include directory. Ex: set WDK=C:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0
38
39 An OpenCL ICD Loader may be built without the Windows Driver Kit using the CMake variable `OPENCL_ICD_LOADER_REQUIRE_WDK`, however this option should be used with caution since it may prevent the OpenCL ICD Loader from enumerating some OpenCL implementations.
40 This dependency may be removed in the future.
41
42 The OpenCL ICD Loader uses CMake for its build system.
43 If CMake is not provided by your build system or OS package manager, please consult the [CMake website](https://cmake.org).
44
45 ### Build and Install Directories
46
47 A common convention is to place the `build` directory in the top directory of the repository and to place the `install` directory as a child of the `build` directory.
48 The remainder of these instructions follow this convention, although you may place these directories in any location.
49
50 ### Example Usage
51
52 For most Windows and Linux usages, the following steps are sufficient to build the OpenCL ICD Loader:
53
54 1. Clone this repo:
55
56         git clone https://github.com/KhronosGroup/OpenCL-ICD-Loader
57
58 1. Obtain the OpenCL Headers, if you are not planning to use system OpenCL headers.
59 Headers may be obtained from the [Khronos OpenCL Headers](https://github.com/KhronosGroup/OpenCL-Headers) repository.
60
61 1. Create a `build` directory:
62
63         cd OpenCL-ICD-Loader
64         mkdir build
65         cd build
66
67 1. Invoke `cmake` to generate solution files, Makefiles, or files for other build systems.
68
69         cmake ..
70
71 1. Build using the CMake-generated files.
72
73 Notes:
74
75 * For 64-bit Windows builds, you may need to specify a 64-bit generator manually, for example:
76
77         cmake.exe -G "Visual Studio 14 2015 Win64" ..
78
79 * Some users may prefer to use a CMake GUI frontend, such as `cmake-gui` or `ccmake`, vs. the command-line CMake.
80
81 ## OpenCL ICD Loader Tests
82
83 OpenCL ICD Loader Tests can be run using `ctest`, which is a companion to CMake.
84 The OpenCL ICD Loader Tests can also be run directly by executing icd_loader_test(.exe) executable from the bin folder.
85
86 ### Test Setup
87
88 The OpenCL ICD Loader Tests use a "stub" ICD, which must be set up manually.
89 The OpenCL ICD Loader Tests will "fail" if the "stub" ICD is not set up correctly.
90 The method to install the "stub" ICD is operating system dependent.
91
92 On Linux, install the "stub" ICD by creating a file with the full path to the "stub" ICD in `/etc/OpenCL/vendors`:
93
94     echo full/path/to/libOpenCLDriverStub.so > /etc/OpenCL/vendors/test.icd
95
96 On Windows, add the "stub" ICD by adding a `REG_DWORD` value to the registry keys:
97
98     // For 32-bit operating systems, or 64-bit tests on a 64-bit operating system:
99     HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors
100     
101     // For 32-bit tests on a 64-bit operating system:
102     HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Khronos\OpenCL\Vendors
103
104     // The name of the REG_DWORD value should be the full path to the "stub" ICD
105     // OpenCLDriverStub.dll, and the data for this value should be 0.
106
107 ### Running Tests
108
109 To run the tests, invoke `ctest` from the `build` directory.
110 The CMake-generated build files may be able to invoke the OpenCL ICD Loader tests as well.
111
112 ### Test Cleanup
113
114 Manually remove the file or registry keys added during Test Setup.
115
116 ## Support
117
118 Please create a GitHub issue to report an issue or ask questions.
119
120 ## Contributing
121
122 Contributions to the OpenCL ICD Loader are welcomed and encouraged.
123 You will be prompted with a one-time "click-through" CLA dialog as part of submitting your pull request or other contribution to GitHub.
124
125 ## Table of Debug Environment Variables
126
127 The following debug environment variables are available for use with the OpenCL ICD loader:
128
129 | Environment Variable              | Behavior            |  Example Format      |
130 |:---------------------------------:|---------------------|----------------------|
131 | OCL_ICD_FILENAMES                 | Specifies a list of additional ICDs to load.  The ICDs will be enumerated first, before any ICDs discovered via default mechanisms. | `export OCL_ICD_FILENAMES=libVendorA.so:libVendorB.so`<br/><br/>`set OCL_ICD_FILENAMES=vendor_a.dll;vendor_b.dll` |
132 | OCL_ICD_VENDORS                   | On Linux and Android, specifies a directory to scan for ICDs to enumerate in place of the default `/etc/OpenCL/vendors'. |  `export OCL_ICD_VENDORS=/my/local/icd/search/path` |