# CMake 4.5 adds native SYCL language support for AdaptiveCpp, DPC++, and Clang

> **Key takeaway:** CMake 4.5 introduces experimental native SYCL language support, eliminating per-project custom build logic for the four major SYCL toolchains while SYCL 2020 Revision 13 adds split headers to reduce compilation overhead.

**Published:** 2026-11-12T18:11:00+00:00 
**Source:** Khronos Group (Vulkan, OpenGL, OpenCL) 
**Category:** open-hardware 
**Canonical URL:** https://fosswire.org/news/cmake-45-adds-native-sycl-language-support-for-adaptivecpp-d.html 

## Summary
The Khronos Group has announced that SYCL is now a native language in CMake, with experimental opt-in support debuting in CMake 4.5 release candidates. The integration handles compiler discovery, compilation, and linking for AdaptiveCpp, both open-source and Intel oneAPI DPC++ distributions, and upstream Clang with libsycl. Developers enable SYCL via standard CMake commands like `project(LANGUAGES CXX SYCL)` or `enable_language(SYCL)`, and identify SYCL source files through `.sycl` extensions or CMake's `FILE_SET SYCL` mechanism. The SYCLCXX environment variable selects the toolchain at configure time, decoupling project build logic from compiler-specific implementation details.

Alongside the CMake integration, SYCL 2020 Revision 13 introduces split headers as a lighter alternative to the full SYCL header, aimed at reducing compile times. The Khronos SYCL Working Group credits Intel for funding the CMake project and Kitware for implementation. A new SYCLAcademy lesson is planned to demonstrate the workflow with practical examples.

## CMake SYCL integration and Revision 13 header changes
- **Native language mechanism:** SYCL is declared via `LANGUAGES SYCL` in `project()` or `enable_language(SYCL)`, with experimental activation requiring `set(CMAKE_EXPERIMENTAL_SYCL c0d1fb10-2ece-420e-9d29-7d7f2b300f25)` in CMake 4.5.
- **File identification:** CMake auto-recognizes `.sycl` files; for standard extensions like `.cpp`, developers use `FILE_SET SYCL` or `FILE_SET SYCL_HEADERS`, with the latter propagating SYCL compilation requirements to dependent targets through linked dependencies.
- **Toolchain abstraction:** Four compiler drivers are supported—AdaptiveCpp (`acpp`), open-source DPC++/DPClang (`dpclang`, `dpclang++`, `dpclang-cl`), Intel oneAPI DPC++ (`icx`, `icpx`, `icx-cl`), and Clang with libsycl (`clang`, `clang++`, `clang-cl`)—selected via the `SYCLCXX` environment variable at configure time.
- **Header granularity:** SYCL 2020 Revision 13 adds split headers as an optional lighter alternative to the monolithic SYCL header, intended to reduce compilation time by allowing projects to include only needed SYCL components.
- **Dependency propagation:** When a target uses a `SYCL_HEADERS` file set, CMake automatically compiles that target's C++ sources as SYCL, enabling libraries to pass SYCL requirements transitively to consuming projects.

## Why it matters
Native CMake support removes a significant barrier to SYCL adoption by eliminating the bespoke build configuration that previously fragmented the ecosystem across Intel, AdaptiveCpp, and Clang implementations. For Linux distribution packagers and HPC/AI software maintainers, this standardization simplifies building SYCL-dependent packages and reduces maintenance burden as toolchains evolve. The split headers in Revision 13 address a practical pain point for C++ developers working with SYCL in large codebases, potentially improving build iteration times for projects targeting heterogeneous CPU-GPU acceleration on open-source stacks.