@@ -25,6 +25,7 @@ and a wide range of compute accelerators such as GPU and FPGA.
25
25
- [ Run DPC++ E2E test suite] ( #run-dpc-e2e-test-suite )
26
26
- [ Run Khronos\* SYCL\* conformance test suite (optional)] ( #run-khronos-sycl-conformance-test-suite-optional )
27
27
- [ Run simple DPC++ application] ( #run-simple-dpc-application )
28
+ - [ Build DPC++ application with CMake] ( #build-dpc-application-with-cmake )
28
29
- [ Code the program for a specific GPU] ( #code-the-program-for-a-specific-gpu )
29
30
- [ Using the DPC++ toolchain on CUDA platforms] ( #using-the-dpc-toolchain-on-cuda-platforms )
30
31
- [ C++ standard] ( #c-standard )
@@ -709,6 +710,34 @@ device selectors (e.g. `sycl::cpu_selector`, `sycl::gpu_selector`,
709
710
explained in following section [Code the program for a specific
710
711
GPU](#code-the-program-for-a-specific-gpu).
711
712
713
+ ### Build DPC++ application with CMake
714
+
715
+ DPC++ applications can be built with CMake by simply using DPC++ as the C++
716
+ compiler and by adding the SYCL specific flags. For example assuming `clang++`
717
+ is on the `PATH`, a minimal `CMakeLists.txt` file for the sample above would be:
718
+
719
+ ```cmake
720
+ cmake_minimum_required(VERSION 3.14)
721
+
722
+ # Modifying the compiler should be done before the project line
723
+ set(CMAKE_CXX_COMPILER "clang++")
724
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl")
725
+
726
+ project(simple-sycl-app)
727
+
728
+ add_executable(simple-sycl-app simple-sycl-app.cpp)
729
+ ```
730
+
731
+ NOTE: compiling SYCL programs requires passing the SYCL flags to `clang++` for
732
+ both the compilation and linking stages, so using `add_compile_options` to pass
733
+ the SYCL flags is not enough on its own, they should also be passed to
734
+ `add_link_options`, or more simply the SYCL flags can just be added to
735
+ `CMAKE_CXX_FLAGS`.
736
+
737
+ NOTE: When linking a SYCL application, `clang++` will implicitly link it against
738
+ `libsycl.so`, so there is no need to add `-lsycl` to `target_link_libraries` in
739
+ the CMake.
740
+
712
741
### Code the program for a specific GPU
713
742
714
743
To specify OpenCL device SYCL provides the abstract `sycl::device_selector`
0 commit comments