Kseniya Tikhomirova 3e2fb2e7cb
[libsycl] Fix for static vars deinit order (libsycl vs liboffload) (#181366)
both libsycl & liboffload uses static variables. 
on Linux static variable destructor is called earlier than the method
with `__attribute__((destructor(...)))`.
this fix helps to avoid crash due to liboffload static variable early
destruction.

the approach utilizes the following rule
"For each local object obj with static storage duration, obj is
destroyed as if a function calling the destructor of obj were registered
with
[std::atexit](https://en.cppreference.com/w/cpp/utility/program/atexit.html)
at the completion of the constructor of obj."
from `std::exit`.
in the first call of get_platforms we call liboffload's iterateDevices
that leads to liboffload static storage initialization. Then we
initialize our own local static var after this to be able to call our
shutdown methods earlier and before the liboffload objects are
destructed at the end of program.

Important note:
SYCL RT follows SYCL 2020 specification that doesn't declare any
init/shutdown methods that can help to avoid usage of static variables.

---------

Signed-off-by: Tikhomirova, Kseniya <kseniya.tikhomirova@intel.com>
2026-02-24 15:20:07 +00:00
..

SYCL runtime library

The libsycl subproject is an implementation of the SYCL runtime library as defined by the SYCL 2020 specification.

Subproject documentation is available at: Libsycl documentation.

libsycl runtime library and headers require C++17 support or higher.

How to use libsycl with Clang

TODO

How to build

TODO

License

See LICENSE for details.