@@ -959,17 +959,117 @@ this extension.
959
959
The SYCL runtime compiler supports the following {dpcpp} options to be passed in
960
960
the `build_options` property.
961
961
962
- [%header,cols="1,3"]
963
- |===
964
- |Option
965
- |Notes
966
-
967
- |`-I<dir>` +
968
- `-I <dir>` +
969
- `--include-directory=<dir>` +
970
- `--include-directory <dir>`
971
- | Add `<dir>` to to the search list for include files (see section "Including
962
+ Some options have equivalent long (starting with `--`) and short (starting with
963
+ `-`) option names. When using the long option name, an argument can be either
964
+ separated by `=` in the same element of the `build_options` property, or given
965
+ as a separate element. When using the short option name, an argument is either
966
+ appended directly after the option name, or given as a separate element in the
967
+ `build_options` property. The following example shows how to construct the
968
+ `build_options` property with each of the forms.
969
+
970
+ [source,c++]
971
+ ----
972
+ build_options{{
973
+ {"--include-directory=dir1"},
974
+ {"--include-directory"}, {"dir2"},
975
+ {"-Idir3"},
976
+ {"-I"}, {"dir4"}
977
+ }};
978
+ ----
979
+
980
+ ==== Preprocessor options
981
+
982
+ ===== `--include-directory=<dir>` (`-I<dir>`)
983
+
984
+ Add `<dir>` to to the search list for include files (see section "Including
972
985
files when the language is ``sycl``"). This is useful, for example, to compile
973
- kernels using external libraries. Note that for the second and fourth form,
974
- `dir` is a separate element in the `build_options` list.
975
- |===
986
+ kernels using external libraries.
987
+
988
+ ===== `--define-macro=<name>[=<value>]` (`-D<name>[=<value>]`)
989
+
990
+ Define macro `<name>`, optionally to the given `<value>`.
991
+
992
+ ===== `--undefine-macro=<name>` (`-U<name>`)
993
+
994
+ Undefine macro `<name>`.
995
+
996
+ ==== Diagnostic options
997
+
998
+ The `build_options` property accepts warning (`-W`) and remark (`-R`) emission
999
+ options supported by the `clang` compiler. For an overview of these options, see
1000
+ https://clang.llvm.org/docs/DiagnosticsReference.html. The specific options
1001
+ available for SYCL runtime compilation depend on the version of the {dpcpp}
1002
+ compiler distributed with the SYCL runtime used by the application.
1003
+
1004
+ Note: Use the `save_log` property to obtain detailed output from the compilation
1005
+ process.
1006
+
1007
+ ==== SYCL-specific options
1008
+
1009
+ ===== `-Xs<arg>`
1010
+
1011
+ Pass `<arg>` to the backend of the device compiler. When using `-Xs<arg>`, a `-`
1012
+ is prepended to `<arg>` before handing it to the backend. Otherwise, `<arg>` is
1013
+ passed on unmodified.
1014
+
1015
+ For example, the following forms are equivalent:
1016
+
1017
+ [source,c++]
1018
+ ----
1019
+ build_options{{
1020
+ {"-XsDFOO=bar"},
1021
+ {"-Xs"}, {"-DFOO=bar"}
1022
+ }};
1023
+ ----
1024
+
1025
+ ===== `-fsycl-rtc-mode`
1026
+
1027
+ Relax the requirement that parameter types for free-function kernels must be
1028
+ forward-declarable.
1029
+
1030
+ === Known issues and limitations when the language is `sycl`
1031
+
1032
+ ==== Changing the compiler action or output
1033
+
1034
+ As the {dpcpp} frontend is integrated tightly in the runtime compilation
1035
+ pipeline, the application cannot change the runtime compiler's action (e.g.
1036
+ `-c`, `-S`) or output file (`-o`). Similarly, options related to linking (e.g.
1037
+ `-L`) are incompatible, including the SYCL-specific `-fsycl-link` action. The
1038
+ implementation throws an `exception` with the `errc::invalid` error code when it
1039
+ detects an option that conflicts with the runtime compilation pipeline.
1040
+
1041
+ ==== Ahead-of-time compilation
1042
+
1043
+ The kernels in a SYCL source string are compiled automatically to native code
1044
+ for all devices passed to the `build` function (see section "New free functions
1045
+ to create and build kernel bundles"). The implementation rejects the use of the
1046
+ `-fsycl-targets=` options to request ahead-of-time (AOT) compilation, and throws
1047
+ an `exception` with the `errc::invalid` error code when this option is detected.
1048
+ The application can use the `-Xs` option described above to pass options to the
1049
+ backend of the device compiler, but all other options to control AOT compilation
1050
+ are ignored.
1051
+
1052
+ ==== `invoke_simd`
1053
+
1054
+ The SYCL runtime compiler currently does not implement the logic required to
1055
+ support the `-fno-sycl-device-code-split-esimd` option, and throws an
1056
+ `exception` with the `errc::invalid` error code when this option is detected. As
1057
+ a consequence, the `invoke_simd` functionality is unavailable. However, the SYCL
1058
+ runtime compiler supports ESIMD kernels and source strings containing a mix of
1059
+ SYCL and ESIMD kernels.
1060
+
1061
+ ==== Sanitizers
1062
+
1063
+ The implementation currently lacks the necessary linking of device libraries to
1064
+ support device, memory and thread sanitizers for runtime-compiled code. If the
1065
+ `-fsanitize=` option is detected, an `exception` with the `errc::invalid` error
1066
+ code is thrown. Other means of activating the sanitizer (e.g. via
1067
+ `-Xsycl-device-frontend`) may cause the runtime compilation to fail.
1068
+
1069
+ === Caching
1070
+
1071
+ The `kernel_compiler` implementation in {dpcpp} supports persistent caching. To
1072
+ enable it, set the the environment variable `SYCL_CACHE_PERSISTENT=1`. The
1073
+ location of the cache can be changed by setting `SYCL_CACHE_DIR`. Refer to
1074
+ https://intel.github.io/llvm/design/KernelProgramCache.html#persistent-cache for
1075
+ more details on how to control the cache.
0 commit comments