From 5bbfeca3e2d9df8b3c962dbc588616c76eaeefeb Mon Sep 17 00:00:00 2001 From: Kseniya Tikhomirova Date: Mon, 16 Jun 2025 17:24:45 +0200 Subject: [PATCH 01/12] [SYCL] Add libsycl, a SYCL RT library implementation project (#3) This patch introduces libsycl, a SYCL runtime library implementation, as a top-level LLVM runtime project. It contains the basic folder layout and CMake infrastructure to build a dummy SYCL library. --- libsycl/.clang-format | 1 + libsycl/.clang-tidy | 17 ++ libsycl/CMakeLists.txt | 128 ++++++++++++ libsycl/LICENSE.txt | 278 +++++++++++++++++++++++++ libsycl/README.md | 20 ++ libsycl/docs/index.rst | 69 ++++++ libsycl/include/sycl/detail/config.hpp | 64 ++++++ libsycl/include/sycl/platform.hpp | 31 +++ libsycl/include/sycl/sycl.hpp | 14 ++ libsycl/src/CMakeLists.txt | 109 ++++++++++ libsycl/src/ld-version-script.txt | 19 ++ libsycl/src/platform.cpp | 17 ++ libsycl/src/version.hpp.in | 16 ++ llvm/CMakeLists.txt | 2 +- runtimes/CMakeLists.txt | 2 +- 15 files changed, 785 insertions(+), 2 deletions(-) create mode 100644 libsycl/.clang-format create mode 100644 libsycl/.clang-tidy create mode 100644 libsycl/CMakeLists.txt create mode 100644 libsycl/LICENSE.txt create mode 100644 libsycl/README.md create mode 100644 libsycl/docs/index.rst create mode 100644 libsycl/include/sycl/detail/config.hpp create mode 100644 libsycl/include/sycl/platform.hpp create mode 100644 libsycl/include/sycl/sycl.hpp create mode 100644 libsycl/src/CMakeLists.txt create mode 100644 libsycl/src/ld-version-script.txt create mode 100644 libsycl/src/platform.cpp create mode 100644 libsycl/src/version.hpp.in diff --git a/libsycl/.clang-format b/libsycl/.clang-format new file mode 100644 index 0000000000000..9b3aa8b7213b2 --- /dev/null +++ b/libsycl/.clang-format @@ -0,0 +1 @@ +BasedOnStyle: LLVM diff --git a/libsycl/.clang-tidy b/libsycl/.clang-tidy new file mode 100644 index 0000000000000..cdc7a2981a41d --- /dev/null +++ b/libsycl/.clang-tidy @@ -0,0 +1,17 @@ +Checks: > + -*, + clang-analyzer-*, + clang-diagnostic-*, + cppcoreguidelines-*, + -cppcoreguidelines-pro-bounds-array-to-pointer-decay, + -cppcoreguidelines-pro-bounds-constant-array-index, + -cppcoreguidelines-pro-bounds-pointer-arithmetic, + -cppcoreguidelines-pro-type-member-init, + -cppcoreguidelines-pro-type-union-access, + google-*, + -google-build-using-namespace, + -google-explicit-constructor, + -google-runtime-references, + misc-*, + -misc-macro-parentheses, + -misc-unused-parameters diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt new file mode 100644 index 0000000000000..a20ad3a598616 --- /dev/null +++ b/libsycl/CMakeLists.txt @@ -0,0 +1,128 @@ +#=============================================================================== +# Setup Project +#=============================================================================== +cmake_minimum_required(VERSION 3.20.0) + +set(LLVM_SUBPROJECT_TITLE "libsycl") + +set(LIBSYCL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(LIBSYCL_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) + +set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") +set(CMAKE_CXX_STANDARD_REQUIRED YES) +set(CMAKE_CXX_EXTENSIONS OFF) + +#=============================================================================== +# Setup CMake Options +#=============================================================================== + +option(LIBSYCL_ENABLE_WERROR "Treat all warnings as errors in the libsycl project" OFF) + +#=============================================================================== +# Configure System +#=============================================================================== + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +set(LIBSYCL_SHARED_OUTPUT_NAME "sycl" CACHE STRING "Output name for the shared libsycl runtime library.") + +if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE) + set(LIBSYCL_TARGET_SUBDIR ${LLVM_DEFAULT_TARGET_TRIPLE}) + if(LIBSYCL_LIBDIR_SUBDIR) + string(APPEND LIBSYCL_TARGET_SUBDIR /${LIBSYCL_LIBDIR_SUBDIR}) + endif() + cmake_path(NORMAL_PATH LIBSYCL_TARGET_SUBDIR) + set(LIBSYCL_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LIBSYCL_TARGET_SUBDIR}) + set(LIBSYCL_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LIBSYCL_TARGET_SUBDIR} CACHE STRING + "Path where built libsycl libraries should be installed.") + unset(LIBSYCL_TARGET_SUBDIR) +else() + if(LLVM_LIBRARY_OUTPUT_INTDIR) + set(LIBSYCL_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) + else() + set(LIBSYCL_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBSYCL_LIBDIR_SUFFIX}) + endif() + set(LIBSYCL_INSTALL_LIBRARY_DIR lib${LIBSYCL_LIBDIR_SUFFIX} CACHE STRING + "Path where built libsycl libraries should be installed.") +endif() + +set(LIBSYCL_INCLUDE_DIR include) +set(LIBSYCL_BUILD_INCLUDE_DIR ${LLVM_BINARY_DIR}/${LIBSYCL_INCLUDE_DIR}) +set(LIBSYCL_SOURCE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) + +set(LIBSYCL_MAJOR_VERSION 0) +set(LIBSYCL_MINOR_VERSION 1) +set(LIBSYCL_PATCH_VERSION 0) +set(LIBSYCL_VERSION_STRING "${LIBSYCL_MAJOR_VERSION}.${LIBSYCL_MINOR_VERSION}.${LIBSYCL_PATCH_VERSION}") +set(LIBSYCL_ABI_NAMESPACE "V${LIBSYCL_MAJOR_VERSION}" CACHE STRING + "The inline ABI namespace used by libsycl. It defaults to Vn where `n` is the current ABI version.") + +#=============================================================================== +# Setup Compiler Flags +#=============================================================================== + +# Enable all warnings by default +if(MSVC) + append("/W4" CMAKE_CXX_FLAGS) +else() + append("-Wall -Wextra" CMAKE_CXX_FLAGS) +endif() + +if(LIBSYCL_ENABLE_WERROR) + if(MSVC) + append("/WX" CMAKE_CXX_FLAGS) + else() + append("-Werror" CMAKE_CXX_FLAGS) + endif() +endif() + +#=============================================================================== +# Setup build & install rules +#=============================================================================== + +# Generate headers +configure_file("${LIBSYCL_SOURCE_DIR}/src/version.hpp.in" "${LIBSYCL_BUILD_INCLUDE_DIR}/sycl/version.hpp") + +# Install generated headers. +install(FILES + "${LIBSYCL_BUILD_INCLUDE_DIR}/sycl/version.hpp" + DESTINATION "${LIBSYCL_INCLUDE_DIR}/sycl" + COMPONENT sycl-headers) + +# This is a workaround to detect changes (add or modify) in subtree which +# are not detected by copy_directory command. +file(GLOB_RECURSE HEADERS_IN_SYCL_DIR CONFIGURE_DEPENDS "${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl/*") + +string(REPLACE "${LIBSYCL_SOURCE_INCLUDE_DIR}" "${LIBSYCL_BUILD_INCLUDE_DIR}" + OUT_HEADERS_IN_SYCL_DIR "${HEADERS_IN_SYCL_DIR}") + +# Copy SYCL headers from sources to build directory +add_custom_target(sycl-headers + DEPENDS ${OUT_HEADERS_IN_SYCL_DIR}) + +add_custom_command( + OUTPUT ${OUT_HEADERS_IN_SYCL_DIR} + DEPENDS ${HEADERS_IN_SYCL_DIR} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl ${LIBSYCL_BUILD_INCLUDE_DIR}/sycl + COMMENT "Copying SYCL headers...") + +install(DIRECTORY "${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INCLUDE_DIR} COMPONENT sycl-headers) + +if (WIN32) + set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}) + if (MSVC) + list(APPEND LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}d) + endif() +else() + set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}) +endif() + +add_subdirectory(src) + +add_custom_target(libsycl-runtime-libraries + DEPENDS ${LIBSYCL_RT_LIBS} +) diff --git a/libsycl/LICENSE.txt b/libsycl/LICENSE.txt new file mode 100644 index 0000000000000..5715176572a46 --- /dev/null +++ b/libsycl/LICENSE.txt @@ -0,0 +1,278 @@ +============================================================================== +The LLVM Project is under the Apache License v2.0 with LLVM Exceptions: +============================================================================== + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +---- LLVM Exceptions to the Apache 2.0 License ---- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. + +============================================================================== +Software from third parties included in the LLVM Project: +============================================================================== +The LLVM Project contains third party software which is under different license +terms. All such code will be identified clearly using at least one of two +mechanisms: +1) It will be in a separate directory tree with its own `LICENSE.txt` or + `LICENSE` file at the top containing the specific license and restrictions + which apply to that software, or +2) It will contain specific license and restriction terms at the top of every + file. + +============================================================================== +Legacy LLVM License (https://llvm.org/docs/DeveloperPolicy.html#legacy): +============================================================================== +University of Illinois/NCSA +Open Source License + +Copyright (c) 2003-2019 University of Illinois at Urbana-Champaign. +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + + * Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. diff --git a/libsycl/README.md b/libsycl/README.md new file mode 100644 index 0000000000000..c551e40dd821b --- /dev/null +++ b/libsycl/README.md @@ -0,0 +1,20 @@ +## SYCL runtime library + +The libsycl subproject is an implementation of the SYCL runtime library as defined by the +[SYCL 2020 specification](https://registry.khronos.org/SYCL/specs/sycl-2020/html/sycl-2020.html). + +Subproject documentation is available at: [SYCL RT documentation](./docs). + +libsycl runtime library and headers require C++17 support or higher. + +### How to use libsycl with Clang + +TBD + +#### How to build + +TBD + +# License + +See [LICENSE](./LICENSE.TXT) for details. diff --git a/libsycl/docs/index.rst b/libsycl/docs/index.rst new file mode 100644 index 0000000000000..cd33f0f03428d --- /dev/null +++ b/libsycl/docs/index.rst @@ -0,0 +1,69 @@ +.. _index: + +Current Status +============== + +The implementation is in the very early stages of upstreaming. The first milestone is to get +support for a simple SYCL application with device code using Unified Shared Memory: + +.. code-block:: c++ + + #include + + class TestKernel; + + int main() { + sycl::queue q; + + const size_t dataSize = 32; + int *dataPtr = sycl::malloc_shared(32, q); + for (int i = 0; i < dataSize; ++i) + dataPtr[i] = 0; + + q.submit([&](sycl::handler &cgh) { + cgh.parallel_for( + sycl::range<1>(dataSize), + [=](sycl::id<1> idx) { dataPtr[idx] = idx[0]; }); + }); + q.wait(); + + bool error = false; + for (int i = 0; i < dataSize; ++i) + if (dataPtr[i] != i) error = true; + + free(dataPtr, q); + + return error; + } + +This requires at least partial support of the following functionality on the libsycl side: + * ``sycl::platform`` class + * ``sycl::device`` class + * ``sycl::context`` class + * ``sycl::queue`` class + * ``sycl::handler`` class + * ``sycl::id`` and ``sycl::range`` classes + * Unified shared memory allocation/deallocation + * Program manager, an internal component for retrieving and using device images from the multi-architectural binaries + +To build LLVM with libsycl runtime enabled the following script can be used. + +.. code-block:: console + + #!/bin/sh + + build_llvm=`pwd`/build-llvm + installprefix=`pwd`/install + llvm=`pwd` + mkdir -p $build_llvm + mkdir -p $installprefix + + cmake -G Ninja -S $llvm/llvm -B $build_llvm \ + -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" \ + -DLLVM_INSTALL_UTILS=ON \ + -DCMAKE_INSTALL_PREFIX=$installprefix \ + -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libsycl;libunwind" \ + -DCMAKE_BUILD_TYPE=Release + + ninja -C $build_llvm install + \ No newline at end of file diff --git a/libsycl/include/sycl/detail/config.hpp b/libsycl/include/sycl/detail/config.hpp new file mode 100644 index 0000000000000..f7f7b93ee6f51 --- /dev/null +++ b/libsycl/include/sycl/detail/config.hpp @@ -0,0 +1,64 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file contains the declaration of the macros defining attributes for +/// exported methods and defining API namespaces. +/// +//===----------------------------------------------------------------------===// + +#ifndef __LIBSYCL_DETAIL_CONFIG_HPP +#define __LIBSYCL_DETAIL_CONFIG_HPP + +#include + +#define __LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE namespace sycl { +#define __LIBSYCL_END_UNVERSIONED_NAMESPACE } + +#define __LIBSYCL_BEGIN_VERSIONED_NAMESPACE \ + __LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE inline namespace __LIBSYCL_ABI_NAMESPACE { +#define __LIBSYCL_END_VERSIONED_NAMESPACE \ + } \ + __LIBSYCL_END_UNVERSIONED_NAMESPACE + +#ifndef __SYCL_DEVICE_ONLY__ +#ifndef __LIBSYCL_EXPORT +#ifdef _WIN32 + +#define __LIBSYCL_DLL_LOCAL + +#if __LIBSYCL_BUILD_SYCL_DLL +#define __LIBSYCL_EXPORT __declspec(dllexport) +#define __LIBSYCL_EXPORT_DEPRECATED(x) __declspec(dllexport, deprecated(x)) +#else +#define __LIBSYCL_EXPORT __declspec(dllimport) +#define __LIBSYCL_EXPORT_DEPRECATED(x) __declspec(dllimport, deprecated(x)) +#endif //__LIBSYCL_BUILD_SYCL_DLL + +#else // _WIN32 + +#define __LIBSYCL_DLL_LOCAL __attribute__((visibility("hidden"))) + +#define __LIBSYCL_EXPORT __attribute__((visibility("default"))) +#define __LIBSYCL_EXPORT_DEPRECATED(x) \ + __attribute__((visibility("default"), deprecated(x))) + +#endif // _WIN32 +#endif // __LIBSYCL_EXPORT + +#else // __SYCL_DEVICE_ONLY__ + +#ifndef __LIBSYCL_EXPORT +#define __LIBSYCL_EXPORT +#define __LIBSYCL_EXPORT_DEPRECATED(x) +#define __LIBSYCL_DLL_LOCAL +#endif + +#endif // __SYCL_DEVICE_ONLY__ + +#endif // __LIBSYCL_DETAIL_CONFIG_HPP diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp new file mode 100644 index 0000000000000..bbfbaf7d343f5 --- /dev/null +++ b/libsycl/include/sycl/platform.hpp @@ -0,0 +1,31 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file contains the declaration of the Platform class, which encapsulates +/// a single SYCL platform on which kernel functions may be executed. +/// +//===----------------------------------------------------------------------===// + +#ifndef __LIBSYCL_PLATFORM_HPP +#define __LIBSYCL_PLATFORM_HPP + +#include + +__LIBSYCL_BEGIN_VERSIONED_NAMESPACE + +class __LIBSYCL_EXPORT platform { +public: + /// Constructs a SYCL platform using the default device. + platform(); + +}; // class platform + +__LIBSYCL_END_VERSIONED_NAMESPACE + +#endif // __LIBSYCL_PLATFORM_HPP diff --git a/libsycl/include/sycl/sycl.hpp b/libsycl/include/sycl/sycl.hpp new file mode 100644 index 0000000000000..136d97805b0cf --- /dev/null +++ b/libsycl/include/sycl/sycl.hpp @@ -0,0 +1,14 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef __LIBSYCL_SYCL_HPP +#define __LIBSYCL_SYCL_HPP + +#include + +#endif // __LIBSYCL_SYCL_HPP diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt new file mode 100644 index 0000000000000..baec5a685e67d --- /dev/null +++ b/libsycl/src/CMakeLists.txt @@ -0,0 +1,109 @@ +function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) + # Add an optional argument so we can get the library name to + # link with for Windows Debug version + cmake_parse_arguments(ARG "" "IMPLIB_NAME" "COMPILE_OPTIONS;SOURCES" ${ARGN}) + + add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES}) + + # Common compilation step setup + target_compile_definitions(${LIB_OBJ_NAME} PRIVATE $<$:__LIBSYCL_BUILD_SYCL_DLL>) + target_include_directories( + ${LIB_OBJ_NAME} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + ${LIBSYCL_BUILD_INCLUDE_DIR} + ) + + add_library(${LIB_NAME} SHARED + $) + + if (ARG_COMPILE_OPTIONS) + target_compile_options(${LIB_OBJ_NAME} PRIVATE ${ARG_COMPILE_OPTIONS}) + endif() + + add_dependencies(${LIB_OBJ_NAME} + sycl-headers + ) + + set_target_properties(${LIB_NAME} PROPERTIES LINKER_LANGUAGE CXX) + + if (WIN32) + target_link_libraries(${LIB_NAME} PRIVATE shlwapi) + if (ARG_IMPLIB_NAME) + add_custom_command( + TARGET ${LIB_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_NAME}.lib ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}.lib + COMMENT "Creating version-agnostic copy of the import library.") + install( + FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}.lib + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl) + endif() + endif() + + if (MSVC) + # Install stripped PDB + check_linker_flag(CXX "LINKER:/PDBSTRIPPED:${LIB_NAME}.stripped.pdb" + LINKER_SUPPORTS_PDBSTRIPPED) + if(LINKER_SUPPORTS_PDBSTRIPPED) + target_link_options(${LIB_NAME} + PRIVATE "LINKER:/PDBSTRIPPED:${LIB_NAME}.stripped.pdb") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}.stripped.pdb" + DESTINATION ${CMAKE_INSTALL_PREFIX}/bin + RENAME "${LIB_NAME}.pdb" + COMPONENT ${LIB_NAME} + OPTIONAL) + endif() + else() + target_compile_options(${LIB_OBJ_NAME} PUBLIC + -fvisibility=hidden -fvisibility-inlines-hidden) + + if (UNIX AND NOT APPLE) + set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt") + target_link_libraries( + ${LIB_NAME} PRIVATE "-Wl,--version-script=${linker_script}") + set_target_properties(${LIB_NAME} PROPERTIES LINK_DEPENDS ${linker_script}) + endif() + endif() + + find_package(Threads REQUIRED) + + target_link_libraries(${LIB_NAME} + PRIVATE + ${CMAKE_DL_LIBS} + ${CMAKE_THREAD_LIBS_INIT} + ) + + set_target_properties(${LIB_NAME} PROPERTIES + VERSION ${LIBSYCL_VERSION_STRING} + SOVERSION ${LIBSYCL_VERSION_STRING}) +endfunction(add_sycl_rt_library) + +set(LIBSYCL_SOURCES + "platform.cpp" +) + +if (WIN32) +set(LIB_NAME "sycl${LIBSYCL_MAJOR_VERSION}") +else() +set(LIB_NAME "sycl") +endif() + +# Version-agnostic name of the import library, has effect on Windows only. +set(IMPLIB_NAME "sycl") + +add_sycl_rt_library(${LIB_NAME} sycl_object COMPILE_OPTIONS ${LIBSYCL_EXTRA_OPTS} + SOURCES ${LIBSYCL_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}) + +if (WIN32) + add_library(sycl ALIAS ${LIB_NAME}) +endif() + +if (CMAKE_SYSTEM_NAME STREQUAL Windows) + set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX d) +endif() + +install(TARGETS ${LIBSYCL_RT_LIBS} + ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl + LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl + RUNTIME DESTINATION "bin" COMPONENT libsycl) diff --git a/libsycl/src/ld-version-script.txt b/libsycl/src/ld-version-script.txt new file mode 100644 index 0000000000000..90bfe2ac7309f --- /dev/null +++ b/libsycl/src/ld-version-script.txt @@ -0,0 +1,19 @@ +{ + /* Do not use extern "C++" matcher for C++ functions, */ + /* because vtable and typeinfo symbols make extern "C++" patterns more */ + /* complicated than patterns against mangled names. */ + /* */ + /* With extern "C++" we have to match for "vtable for sycl::foo", but */ + /* not match for "vtable for std::__internal". */ + + global: + /* Export everything from sycl namespace */ + _ZNK4sycl*; /* function */ + _ZN4sycl*; /* function */ + _ZTIN4sycl*; /* typeinfo */ + _ZTSN4sycl*; /* typeinfo name */ + _ZTVN4sycl*; /* vtable */ + + local: + *; +}; diff --git a/libsycl/src/platform.cpp b/libsycl/src/platform.cpp new file mode 100644 index 0000000000000..d2c0a47ceba82 --- /dev/null +++ b/libsycl/src/platform.cpp @@ -0,0 +1,17 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include + +#include + +__LIBSYCL_BEGIN_VERSIONED_NAMESPACE + +platform::platform() { throw std::runtime_error("Unimplemented"); } + +__LIBSYCL_END_VERSIONED_NAMESPACE diff --git a/libsycl/src/version.hpp.in b/libsycl/src/version.hpp.in new file mode 100644 index 0000000000000..2468a077ce13a --- /dev/null +++ b/libsycl/src/version.hpp.in @@ -0,0 +1,16 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// This file contains the declaration of SYCL RT version macro. +/// +//===----------------------------------------------------------------------===// +#define __LIBSYCL_MAJOR_VERSION ${LIBSYCL_MAJOR_VERSION} +#define __LIBSYCL_MINOR_VERSION ${LIBSYCL_MINOR_VERSION} +#define __LIBSYCL_PATCH_VERSION ${LIBSYCL_PATCH_VERSION} +#define __LIBSYCL_ABI_NAMESPACE ${LIBSYCL_ABI_NAMESPACE} diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index 0849bec26d56a..f1beea79883d8 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -141,7 +141,7 @@ endforeach() # As we migrate runtimes to using the bootstrapping build, the set of default runtimes # should grow as we remove those runtimes from LLVM_ENABLE_PROJECTS above. set(LLVM_DEFAULT_RUNTIMES "libcxx;libcxxabi;libunwind") -set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload;flang-rt;libclc") +set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload;flang-rt;libclc;libsycl") set(LLVM_ENABLE_RUNTIMES "" CACHE STRING "Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.") if(LLVM_ENABLE_RUNTIMES STREQUAL "all") diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 878b2eee38618..2e498a92318d9 100644 --- a/runtimes/CMakeLists.txt +++ b/runtimes/CMakeLists.txt @@ -36,7 +36,7 @@ list(INSERT CMAKE_MODULE_PATH 0 # We order libraries to mirror roughly how they are layered, except that compiler-rt can depend # on libc++, so we put it after. set(LLVM_DEFAULT_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;libclc;openmp;offload") -set(LLVM_SUPPORTED_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc;flang-rt") +set(LLVM_SUPPORTED_RUNTIMES "${LLVM_DEFAULT_RUNTIMES};llvm-libgcc;flang-rt;libsycl") set(LLVM_ENABLE_RUNTIMES "" CACHE STRING "Semicolon-separated list of runtimes to build, or \"all\" (${LLVM_DEFAULT_RUNTIMES}). Supported runtimes are ${LLVM_SUPPORTED_RUNTIMES}.") if(LLVM_ENABLE_RUNTIMES STREQUAL "all" ) From fdf4ddb4eefcd54c7b56db9b100dc491e4cea128 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 18 Jun 2025 05:45:21 -0700 Subject: [PATCH 02/12] address comments Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 22 ++---------- libsycl/include/sycl/detail/config.hpp | 49 ++++++++++++-------------- libsycl/include/sycl/platform.hpp | 12 +++---- libsycl/include/sycl/sycl.hpp | 6 ++-- libsycl/src/CMakeLists.txt | 8 ++++- libsycl/src/platform.cpp | 4 +-- libsycl/src/version.hpp.in | 8 ++--- 7 files changed, 46 insertions(+), 63 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index a20ad3a598616..22663324de39a 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -8,7 +8,7 @@ set(LLVM_SUBPROJECT_TITLE "libsycl") set(LIBSYCL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(LIBSYCL_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) -set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS OFF) @@ -17,6 +17,7 @@ set(CMAKE_CXX_EXTENSIONS OFF) #=============================================================================== option(LIBSYCL_ENABLE_WERROR "Treat all warnings as errors in the libsycl project" OFF) +option(LIBSYCL_ENABLE_PEDANTIC "Compile with pedantic enabled." OFF) #=============================================================================== # Configure System @@ -61,25 +62,6 @@ set(LIBSYCL_VERSION_STRING "${LIBSYCL_MAJOR_VERSION}.${LIBSYCL_MINOR_VERSION}.${ set(LIBSYCL_ABI_NAMESPACE "V${LIBSYCL_MAJOR_VERSION}" CACHE STRING "The inline ABI namespace used by libsycl. It defaults to Vn where `n` is the current ABI version.") -#=============================================================================== -# Setup Compiler Flags -#=============================================================================== - -# Enable all warnings by default -if(MSVC) - append("/W4" CMAKE_CXX_FLAGS) -else() - append("-Wall -Wextra" CMAKE_CXX_FLAGS) -endif() - -if(LIBSYCL_ENABLE_WERROR) - if(MSVC) - append("/WX" CMAKE_CXX_FLAGS) - else() - append("-Werror" CMAKE_CXX_FLAGS) - endif() -endif() - #=============================================================================== # Setup build & install rules #=============================================================================== diff --git a/libsycl/include/sycl/detail/config.hpp b/libsycl/include/sycl/detail/config.hpp index f7f7b93ee6f51..52858943563ed 100644 --- a/libsycl/include/sycl/detail/config.hpp +++ b/libsycl/include/sycl/detail/config.hpp @@ -12,53 +12,48 @@ /// //===----------------------------------------------------------------------===// -#ifndef __LIBSYCL_DETAIL_CONFIG_HPP -#define __LIBSYCL_DETAIL_CONFIG_HPP +#ifndef _LIBSYCL_DETAIL_CONFIG_HPP +#define _LIBSYCL_DETAIL_CONFIG_HPP #include -#define __LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE namespace sycl { -#define __LIBSYCL_END_UNVERSIONED_NAMESPACE } +#define _LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE_SYCL namespace sycl { +#define _LIBSYCL_END_UNVERSIONED_NAMESPACE_SYCL } -#define __LIBSYCL_BEGIN_VERSIONED_NAMESPACE \ - __LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE inline namespace __LIBSYCL_ABI_NAMESPACE { -#define __LIBSYCL_END_VERSIONED_NAMESPACE \ +#define _LIBSYCL_BEGIN_NAMESPACE_SYCL \ + _LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE_SYCL inline namespace _LIBSYCL_ABI_NAMESPACE { +#define _LIBSYCL_END_NAMESPACE_SYCL \ } \ - __LIBSYCL_END_UNVERSIONED_NAMESPACE + _LIBSYCL_END_UNVERSIONED_NAMESPACE_SYCL #ifndef __SYCL_DEVICE_ONLY__ -#ifndef __LIBSYCL_EXPORT + +#ifndef _LIBSYCL_EXPORT #ifdef _WIN32 -#define __LIBSYCL_DLL_LOCAL +#define _LIBSYCL_DLL_LOCAL -#if __LIBSYCL_BUILD_SYCL_DLL -#define __LIBSYCL_EXPORT __declspec(dllexport) -#define __LIBSYCL_EXPORT_DEPRECATED(x) __declspec(dllexport, deprecated(x)) +#if _LIBSYCL_BUILD_SYCL_DLL +#define _LIBSYCL_EXPORT __declspec(dllexport) #else -#define __LIBSYCL_EXPORT __declspec(dllimport) -#define __LIBSYCL_EXPORT_DEPRECATED(x) __declspec(dllimport, deprecated(x)) -#endif //__LIBSYCL_BUILD_SYCL_DLL +#define _LIBSYCL_EXPORT __declspec(dllimport) +#endif //_LIBSYCL_BUILD_SYCL_DLL #else // _WIN32 -#define __LIBSYCL_DLL_LOCAL __attribute__((visibility("hidden"))) - -#define __LIBSYCL_EXPORT __attribute__((visibility("default"))) -#define __LIBSYCL_EXPORT_DEPRECATED(x) \ - __attribute__((visibility("default"), deprecated(x))) +#define _LIBSYCL_DLL_LOCAL __attribute__((visibility("hidden"))) +#define _LIBSYCL_EXPORT __attribute__((visibility("default"))) #endif // _WIN32 -#endif // __LIBSYCL_EXPORT +#endif // _LIBSYCL_EXPORT #else // __SYCL_DEVICE_ONLY__ -#ifndef __LIBSYCL_EXPORT -#define __LIBSYCL_EXPORT -#define __LIBSYCL_EXPORT_DEPRECATED(x) -#define __LIBSYCL_DLL_LOCAL +#ifndef _LIBSYCL_EXPORT +#define _LIBSYCL_EXPORT +#define _LIBSYCL_DLL_LOCAL #endif #endif // __SYCL_DEVICE_ONLY__ -#endif // __LIBSYCL_DETAIL_CONFIG_HPP +#endif // _LIBSYCL_DETAIL_CONFIG_HPP diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp index bbfbaf7d343f5..07e39219ed276 100644 --- a/libsycl/include/sycl/platform.hpp +++ b/libsycl/include/sycl/platform.hpp @@ -12,20 +12,20 @@ /// //===----------------------------------------------------------------------===// -#ifndef __LIBSYCL_PLATFORM_HPP -#define __LIBSYCL_PLATFORM_HPP +#ifndef _LIBSYCL_PLATFORM_HPP +#define _LIBSYCL_PLATFORM_HPP #include -__LIBSYCL_BEGIN_VERSIONED_NAMESPACE +_LIBSYCL_BEGIN_NAMESPACE_SYCL -class __LIBSYCL_EXPORT platform { +class _LIBSYCL_EXPORT platform { public: /// Constructs a SYCL platform using the default device. platform(); }; // class platform -__LIBSYCL_END_VERSIONED_NAMESPACE +_LIBSYCL_END_NAMESPACE_SYCL -#endif // __LIBSYCL_PLATFORM_HPP +#endif // _LIBSYCL_PLATFORM_HPP diff --git a/libsycl/include/sycl/sycl.hpp b/libsycl/include/sycl/sycl.hpp index 136d97805b0cf..f24a7fe1f6993 100644 --- a/libsycl/include/sycl/sycl.hpp +++ b/libsycl/include/sycl/sycl.hpp @@ -6,9 +6,9 @@ // //===----------------------------------------------------------------------===// -#ifndef __LIBSYCL_SYCL_HPP -#define __LIBSYCL_SYCL_HPP +#ifndef _LIBSYCL_SYCL_HPP +#define _LIBSYCL_SYCL_HPP #include -#endif // __LIBSYCL_SYCL_HPP +#endif // _LIBSYCL_SYCL_HPP diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index baec5a685e67d..49477faac377a 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -1,3 +1,6 @@ +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes/cmake/Modules") +include(WarningFlags) + function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) # Add an optional argument so we can get the library name to # link with for Windows Debug version @@ -6,7 +9,8 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES}) # Common compilation step setup - target_compile_definitions(${LIB_OBJ_NAME} PRIVATE $<$:__LIBSYCL_BUILD_SYCL_DLL>) + target_compile_definitions(${LIB_OBJ_NAME} PRIVATE $<$:_LIBSYCL_BUILD_SYCL_DLL>) + target_include_directories( ${LIB_OBJ_NAME} PRIVATE @@ -21,6 +25,8 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) target_compile_options(${LIB_OBJ_NAME} PRIVATE ${ARG_COMPILE_OPTIONS}) endif() + cxx_add_warning_flags(${LIB_OBJ_NAME} ${LIBSYCL_ENABLE_WERROR} ${LIBSYCL_ENABLE_PEDANTIC}) + add_dependencies(${LIB_OBJ_NAME} sycl-headers ) diff --git a/libsycl/src/platform.cpp b/libsycl/src/platform.cpp index d2c0a47ceba82..75336e701cc9b 100644 --- a/libsycl/src/platform.cpp +++ b/libsycl/src/platform.cpp @@ -10,8 +10,8 @@ #include -__LIBSYCL_BEGIN_VERSIONED_NAMESPACE +_LIBSYCL_BEGIN_NAMESPACE_SYCL platform::platform() { throw std::runtime_error("Unimplemented"); } -__LIBSYCL_END_VERSIONED_NAMESPACE +_LIBSYCL_END_NAMESPACE_SYCL diff --git a/libsycl/src/version.hpp.in b/libsycl/src/version.hpp.in index 2468a077ce13a..a7215761e9d4c 100644 --- a/libsycl/src/version.hpp.in +++ b/libsycl/src/version.hpp.in @@ -10,7 +10,7 @@ /// This file contains the declaration of SYCL RT version macro. /// //===----------------------------------------------------------------------===// -#define __LIBSYCL_MAJOR_VERSION ${LIBSYCL_MAJOR_VERSION} -#define __LIBSYCL_MINOR_VERSION ${LIBSYCL_MINOR_VERSION} -#define __LIBSYCL_PATCH_VERSION ${LIBSYCL_PATCH_VERSION} -#define __LIBSYCL_ABI_NAMESPACE ${LIBSYCL_ABI_NAMESPACE} +#define _LIBSYCL_MAJOR_VERSION ${LIBSYCL_MAJOR_VERSION} +#define _LIBSYCL_MINOR_VERSION ${LIBSYCL_MINOR_VERSION} +#define _LIBSYCL_PATCH_VERSION ${LIBSYCL_PATCH_VERSION} +#define _LIBSYCL_ABI_NAMESPACE ${LIBSYCL_ABI_NAMESPACE} From fb11e6880ce9b585d713c21bd7de2e0a6ba1c5c1 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 18 Jun 2025 07:23:05 -0700 Subject: [PATCH 03/12] rename detail folder Signed-off-by: Tikhomirova, Kseniya --- libsycl/include/sycl/{detail => __detail}/config.hpp | 0 libsycl/include/sycl/platform.hpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename libsycl/include/sycl/{detail => __detail}/config.hpp (100%) diff --git a/libsycl/include/sycl/detail/config.hpp b/libsycl/include/sycl/__detail/config.hpp similarity index 100% rename from libsycl/include/sycl/detail/config.hpp rename to libsycl/include/sycl/__detail/config.hpp diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp index 07e39219ed276..6916d3ac20304 100644 --- a/libsycl/include/sycl/platform.hpp +++ b/libsycl/include/sycl/platform.hpp @@ -15,7 +15,7 @@ #ifndef _LIBSYCL_PLATFORM_HPP #define _LIBSYCL_PLATFORM_HPP -#include +#include _LIBSYCL_BEGIN_NAMESPACE_SYCL From e901d3015eeb76e7216dba6f7383590b469af315 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Mon, 23 Jun 2025 03:34:59 -0700 Subject: [PATCH 04/12] fix clang format, update docs Signed-off-by: Tikhomirova, Kseniya --- libsycl/.clang-format | 3 +++ libsycl/README.md | 4 +-- libsycl/docs/index.rst | 12 ++++++++- libsycl/include/sycl/__detail/config.hpp | 34 ++++++++++++------------ libsycl/include/sycl/sycl.hpp | 5 ++++ 5 files changed, 38 insertions(+), 20 deletions(-) diff --git a/libsycl/.clang-format b/libsycl/.clang-format index 9b3aa8b7213b2..24550f8b339e1 100644 --- a/libsycl/.clang-format +++ b/libsycl/.clang-format @@ -1 +1,4 @@ BasedOnStyle: LLVM + +# Preferred indentions of preprocessor statements. +IndentPPDirectives: AfterHash diff --git a/libsycl/README.md b/libsycl/README.md index c551e40dd821b..9fed3fdc4efa1 100644 --- a/libsycl/README.md +++ b/libsycl/README.md @@ -9,11 +9,11 @@ libsycl runtime library and headers require C++17 support or higher. ### How to use libsycl with Clang -TBD +TODO #### How to build -TBD +TODO # License diff --git a/libsycl/docs/index.rst b/libsycl/docs/index.rst index cd33f0f03428d..3a257b4097bc1 100644 --- a/libsycl/docs/index.rst +++ b/libsycl/docs/index.rst @@ -1,7 +1,14 @@ +===================== +SYCL runtime implementation +===================== + +.. contents:: + :local: + .. _index: Current Status -============== +======== The implementation is in the very early stages of upstreaming. The first milestone is to get support for a simple SYCL application with device code using Unified Shared Memory: @@ -46,6 +53,9 @@ This requires at least partial support of the following functionality on the lib * Unified shared memory allocation/deallocation * Program manager, an internal component for retrieving and using device images from the multi-architectural binaries +Builds steps +======== + To build LLVM with libsycl runtime enabled the following script can be used. .. code-block:: console diff --git a/libsycl/include/sycl/__detail/config.hpp b/libsycl/include/sycl/__detail/config.hpp index 52858943563ed..70e4bf1e7af11 100644 --- a/libsycl/include/sycl/__detail/config.hpp +++ b/libsycl/include/sycl/__detail/config.hpp @@ -28,31 +28,31 @@ #ifndef __SYCL_DEVICE_ONLY__ -#ifndef _LIBSYCL_EXPORT -#ifdef _WIN32 +# ifndef _LIBSYCL_EXPORT +# ifdef _WIN32 -#define _LIBSYCL_DLL_LOCAL +# define _LIBSYCL_DLL_LOCAL -#if _LIBSYCL_BUILD_SYCL_DLL -#define _LIBSYCL_EXPORT __declspec(dllexport) -#else -#define _LIBSYCL_EXPORT __declspec(dllimport) -#endif //_LIBSYCL_BUILD_SYCL_DLL +# if _LIBSYCL_BUILD_SYCL_DLL +# define _LIBSYCL_EXPORT __declspec(dllexport) +# else +# define _LIBSYCL_EXPORT __declspec(dllimport) +# endif //_LIBSYCL_BUILD_SYCL_DLL -#else // _WIN32 +# else // _WIN32 -#define _LIBSYCL_DLL_LOCAL __attribute__((visibility("hidden"))) -#define _LIBSYCL_EXPORT __attribute__((visibility("default"))) +# define _LIBSYCL_DLL_LOCAL [[gnu::visibility("hidden")]] +# define _LIBSYCL_EXPORT [[gnu::visibility("default")]] -#endif // _WIN32 -#endif // _LIBSYCL_EXPORT +# endif // _WIN32 +# endif // _LIBSYCL_EXPORT #else // __SYCL_DEVICE_ONLY__ -#ifndef _LIBSYCL_EXPORT -#define _LIBSYCL_EXPORT -#define _LIBSYCL_DLL_LOCAL -#endif +# ifndef _LIBSYCL_EXPORT +# define _LIBSYCL_EXPORT +# define _LIBSYCL_DLL_LOCAL +# endif #endif // __SYCL_DEVICE_ONLY__ diff --git a/libsycl/include/sycl/sycl.hpp b/libsycl/include/sycl/sycl.hpp index f24a7fe1f6993..a420044f72fe4 100644 --- a/libsycl/include/sycl/sycl.hpp +++ b/libsycl/include/sycl/sycl.hpp @@ -5,6 +5,11 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// +/// +/// \file +/// This file is a SYCL2020 standard header file. +/// +//===----------------------------------------------------------------------===// #ifndef _LIBSYCL_SYCL_HPP #define _LIBSYCL_SYCL_HPP From 2caf523093e0c16b22a0af8c680ca2835504557e Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Mon, 23 Jun 2025 09:09:13 -0700 Subject: [PATCH 05/12] fix more comments Signed-off-by: Tikhomirova, Kseniya --- libsycl/docs/index.rst | 2 +- libsycl/include/sycl/__detail/config.hpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libsycl/docs/index.rst b/libsycl/docs/index.rst index 3a257b4097bc1..78e76e73284d3 100644 --- a/libsycl/docs/index.rst +++ b/libsycl/docs/index.rst @@ -53,7 +53,7 @@ This requires at least partial support of the following functionality on the lib * Unified shared memory allocation/deallocation * Program manager, an internal component for retrieving and using device images from the multi-architectural binaries -Builds steps +Build steps ======== To build LLVM with libsycl runtime enabled the following script can be used. diff --git a/libsycl/include/sycl/__detail/config.hpp b/libsycl/include/sycl/__detail/config.hpp index 70e4bf1e7af11..2f22f904a6a1f 100644 --- a/libsycl/include/sycl/__detail/config.hpp +++ b/libsycl/include/sycl/__detail/config.hpp @@ -41,8 +41,8 @@ # else // _WIN32 -# define _LIBSYCL_DLL_LOCAL [[gnu::visibility("hidden")]] -# define _LIBSYCL_EXPORT [[gnu::visibility("default")]] +# define _LIBSYCL_DLL_LOCAL [[__gnu__::__visibility__("hidden")]] +# define _LIBSYCL_EXPORT [[__gnu__::__visibility__("default")]] # endif // _WIN32 # endif // _LIBSYCL_EXPORT From 83458d1a3783ac1dc26a8e21dae24f158dadd78a Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Tue, 24 Jun 2025 07:36:40 -0700 Subject: [PATCH 06/12] cmake files update Signed-off-by: Tikhomirova, Kseniya --- libsycl/src/CMakeLists.txt | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index 49477faac377a..670291b0e2ba4 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -2,6 +2,9 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes/cmake/ include(WarningFlags) function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) + if (NOT LLVM_ENABLE_PIC) + message( FATAL_ERROR "Position-Independent Code generation is required for libsycl shared library" ) + endif() # Add an optional argument so we can get the library name to # link with for Windows Debug version cmake_parse_arguments(ARG "" "IMPLIB_NAME" "COMPILE_OPTIONS;SOURCES" ${ARGN}) @@ -10,6 +13,7 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) # Common compilation step setup target_compile_definitions(${LIB_OBJ_NAME} PRIVATE $<$:_LIBSYCL_BUILD_SYCL_DLL>) + cxx_add_warning_flags(${LIB_OBJ_NAME} ${LIBSYCL_ENABLE_WERROR} ${LIBSYCL_ENABLE_PEDANTIC}) target_include_directories( ${LIB_OBJ_NAME} @@ -21,12 +25,6 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) add_library(${LIB_NAME} SHARED $) - if (ARG_COMPILE_OPTIONS) - target_compile_options(${LIB_OBJ_NAME} PRIVATE ${ARG_COMPILE_OPTIONS}) - endif() - - cxx_add_warning_flags(${LIB_OBJ_NAME} ${LIBSYCL_ENABLE_WERROR} ${LIBSYCL_ENABLE_PEDANTIC}) - add_dependencies(${LIB_OBJ_NAME} sycl-headers ) @@ -98,14 +96,12 @@ endif() # Version-agnostic name of the import library, has effect on Windows only. set(IMPLIB_NAME "sycl") -add_sycl_rt_library(${LIB_NAME} sycl_object COMPILE_OPTIONS ${LIBSYCL_EXTRA_OPTS} +add_sycl_rt_library(${LIB_NAME} sycl_object SOURCES ${LIBSYCL_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}) if (WIN32) add_library(sycl ALIAS ${LIB_NAME}) -endif() -if (CMAKE_SYSTEM_NAME STREQUAL Windows) set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX d) endif() From 6e473009602cdf0ce5cb2fb2f4fe27acc60125d2 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 2 Jul 2025 04:42:44 -0700 Subject: [PATCH 07/12] fix cmake related comments Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 17 +++-- libsycl/include/sycl/__detail/config.hpp | 4 +- libsycl/src/CMakeLists.txt | 80 +++++++++++++----------- libsycl/src/ld-version-script.txt | 13 ++-- 4 files changed, 64 insertions(+), 50 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 22663324de39a..dc61ccf54c4d2 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -12,6 +12,18 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS OFF) +#=============================================================================== +# Limitations +#=============================================================================== + +if (CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT MSVC) +# Build with other compilers is not configured, not guaranteed and not tested. + message( FATAL_ERROR + "On Windows libsycl supports compiler which is some version of Microsoft" + " Visual C++ or another compiler simulating the Visual C++ cl" + " command-line syntax" ) +endif() + #=============================================================================== # Setup CMake Options #=============================================================================== @@ -94,11 +106,8 @@ add_custom_command( install(DIRECTORY "${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INCLUDE_DIR} COMPONENT sycl-headers) -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}) - if (MSVC) - list(APPEND LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}d) - endif() else() set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}) endif() diff --git a/libsycl/include/sycl/__detail/config.hpp b/libsycl/include/sycl/__detail/config.hpp index 2f22f904a6a1f..5186c1abb60a9 100644 --- a/libsycl/include/sycl/__detail/config.hpp +++ b/libsycl/include/sycl/__detail/config.hpp @@ -33,11 +33,11 @@ # define _LIBSYCL_DLL_LOCAL -# if _LIBSYCL_BUILD_SYCL_DLL +# ifdef _LIBSYCL_BUILDING_LIBRARY # define _LIBSYCL_EXPORT __declspec(dllexport) # else # define _LIBSYCL_EXPORT __declspec(dllimport) -# endif //_LIBSYCL_BUILD_SYCL_DLL +# endif //_LIBSYCL_BUILDING_LIBRARY # else // _WIN32 diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index 670291b0e2ba4..8d21b49c4ab73 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -1,18 +1,19 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes/cmake/Modules") include(WarningFlags) -function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) +function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME) if (NOT LLVM_ENABLE_PIC) message( FATAL_ERROR "Position-Independent Code generation is required for libsycl shared library" ) endif() # Add an optional argument so we can get the library name to # link with for Windows Debug version - cmake_parse_arguments(ARG "" "IMPLIB_NAME" "COMPILE_OPTIONS;SOURCES" ${ARGN}) + cmake_parse_arguments(ARG "" "IMPLIB_OUTPUT_NAME" "COMPILE_OPTIONS;SOURCES" ${ARGN}) add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES}) # Common compilation step setup - target_compile_definitions(${LIB_OBJ_NAME} PRIVATE $<$:_LIBSYCL_BUILD_SYCL_DLL>) + target_compile_definitions(${LIB_OBJ_NAME} PRIVATE + $<$:_LIBSYCL_BUILDING_LIBRARY>) cxx_add_warning_flags(${LIB_OBJ_NAME} ${LIBSYCL_ENABLE_WERROR} ${LIBSYCL_ENABLE_PEDANTIC}) target_include_directories( @@ -22,40 +23,39 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) ${LIBSYCL_BUILD_INCLUDE_DIR} ) - add_library(${LIB_NAME} SHARED + add_library(${LIB_TARGET_NAME} SHARED $) add_dependencies(${LIB_OBJ_NAME} sycl-headers ) - set_target_properties(${LIB_NAME} PROPERTIES LINKER_LANGUAGE CXX) - - if (WIN32) - target_link_libraries(${LIB_NAME} PRIVATE shlwapi) - if (ARG_IMPLIB_NAME) - add_custom_command( - TARGET ${LIB_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_NAME}.lib ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}.lib - COMMENT "Creating version-agnostic copy of the import library.") - install( - FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_NAME}.lib - DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl) - endif() + set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) + + if (CMAKE_SYSTEM_NAME STREQUAL Windows) + add_custom_command( + TARGET ${LIB_TARGET_NAME} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_OUTPUT_NAME}.lib + ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_OUTPUT_NAME}.lib + COMMENT "Creating version-agnostic copy of the import library.") + install( + FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_OUTPUT_NAME}.lib + DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl) endif() - if (MSVC) + if (CMAKE_SYSTEM_NAME STREQUAL Windows) # Install stripped PDB - check_linker_flag(CXX "LINKER:/PDBSTRIPPED:${LIB_NAME}.stripped.pdb" + set(PDB_FILENAME "${LIB_TARGET_NAME}$<$:d>") + check_linker_flag(CXX "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb" LINKER_SUPPORTS_PDBSTRIPPED) if(LINKER_SUPPORTS_PDBSTRIPPED) - target_link_options(${LIB_NAME} - PRIVATE "LINKER:/PDBSTRIPPED:${LIB_NAME}.stripped.pdb") - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}.stripped.pdb" + target_link_options(${LIB_TARGET_NAME} + PRIVATE "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PDB_FILENAME}.stripped.pdb" DESTINATION ${CMAKE_INSTALL_PREFIX}/bin - RENAME "${LIB_NAME}.pdb" - COMPONENT ${LIB_NAME} + RENAME "${PDB_FILENAME}.pdb" + COMPONENT ${LIB_TARGET_NAME} OPTIONAL) endif() else() @@ -65,20 +65,20 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) if (UNIX AND NOT APPLE) set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt") target_link_libraries( - ${LIB_NAME} PRIVATE "-Wl,--version-script=${linker_script}") - set_target_properties(${LIB_NAME} PROPERTIES LINK_DEPENDS ${linker_script}) + ${LIB_TARGET_NAME} PRIVATE "-Wl,--version-script=${linker_script}") + set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINK_DEPENDS ${linker_script}) endif() endif() find_package(Threads REQUIRED) - target_link_libraries(${LIB_NAME} + target_link_libraries(${LIB_TARGET_NAME} PRIVATE ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ) - set_target_properties(${LIB_NAME} PROPERTIES + set_target_properties(${LIB_TARGET_NAME} PROPERTIES VERSION ${LIBSYCL_VERSION_STRING} SOVERSION ${LIBSYCL_VERSION_STRING}) endfunction(add_sycl_rt_library) @@ -87,22 +87,26 @@ set(LIBSYCL_SOURCES "platform.cpp" ) -if (WIN32) +# Version-agnostic name of the import library, has effect on Windows only. +set(IMPLIB_NAME "libsycl") + +if (CMAKE_SYSTEM_NAME STREQUAL Windows) set(LIB_NAME "sycl${LIBSYCL_MAJOR_VERSION}") +set(LIB_OUTPUT_NAME "${LIB_NAME}") else() set(LIB_NAME "sycl") +set(LIB_OUTPUT_NAME "${LIB_NAME}") + if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL MultiThreadedDebugDLL) + set(LIB_OUTPUT_NAME "${LIB_OUTPUT_NAME}d") + set(IMPLIB_NAME "${IMPLIB_NAME}d") + endif() endif() -# Version-agnostic name of the import library, has effect on Windows only. -set(IMPLIB_NAME "sycl") - -add_sycl_rt_library(${LIB_NAME} sycl_object - SOURCES ${LIBSYCL_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}) +add_sycl_rt_library(${LIB_NAME} sycl_object ${LIB_OUTPUT_NAME} + SOURCES ${LIBSYCL_SOURCES} IMPLIB_OUTPUT_NAME ${IMPLIB_NAME}) -if (WIN32) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) add_library(sycl ALIAS ${LIB_NAME}) - - set_target_properties(${LIB_NAME} PROPERTIES DEBUG_POSTFIX d) endif() install(TARGETS ${LIBSYCL_RT_LIBS} diff --git a/libsycl/src/ld-version-script.txt b/libsycl/src/ld-version-script.txt index 90bfe2ac7309f..a347d202a367f 100644 --- a/libsycl/src/ld-version-script.txt +++ b/libsycl/src/ld-version-script.txt @@ -1,10 +1,11 @@ { - /* Do not use extern "C++" matcher for C++ functions, */ - /* because vtable and typeinfo symbols make extern "C++" patterns more */ - /* complicated than patterns against mangled names. */ - /* */ - /* With extern "C++" we have to match for "vtable for sycl::foo", but */ - /* not match for "vtable for std::__internal". */ + /* Symbols to be exported are selected based on mangled names rather than */ + /* the demangled names provided by the `extern "C++"` matcher because it is */ + /* easy to express "export everything defined in the sycl namespace" using */ + /* the former. Matching demangled names is more complicated in the presence */ + /* of examples like: */ + /* "vtable for sycl::foo" (should be exported) */ + /* "vtable for std::__internal" (should not be exported) */ global: /* Export everything from sycl namespace */ From 25737338d914d5a4f06c1ae04a6ddc3565fd71aa Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 2 Jul 2025 06:14:02 -0700 Subject: [PATCH 08/12] fix win build Signed-off-by: Tikhomirova, Kseniya --- libsycl/src/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index 8d21b49c4ab73..f7324e2d2a1fd 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -58,6 +58,8 @@ function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME) COMPONENT ${LIB_TARGET_NAME} OPTIONAL) endif() + + target_compile_options(${LIB_OBJ_NAME} PUBLIC /EHsc) else() target_compile_options(${LIB_OBJ_NAME} PUBLIC -fvisibility=hidden -fvisibility-inlines-hidden) From 554decddc6e3341d18cb7a391278d8b6ecfde05c Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Fri, 4 Jul 2025 03:13:50 -0700 Subject: [PATCH 09/12] remove version from win library name Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index dc61ccf54c4d2..bdf34c6936073 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -106,11 +106,7 @@ add_custom_command( install(DIRECTORY "${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INCLUDE_DIR} COMPONENT sycl-headers) -if (CMAKE_SYSTEM_NAME STREQUAL Windows) - set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}) -else() - set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}) -endif() +set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}) add_subdirectory(src) From b824da038d50c13753cd2d1467fcc1af2a237550 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Fri, 4 Jul 2025 08:49:12 -0700 Subject: [PATCH 10/12] rest of the changes for version removal Signed-off-by: Tikhomirova, Kseniya --- libsycl/src/CMakeLists.txt | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index f7324e2d2a1fd..34903db2df5ea 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -83,6 +83,7 @@ function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME) set_target_properties(${LIB_TARGET_NAME} PROPERTIES VERSION ${LIBSYCL_VERSION_STRING} SOVERSION ${LIBSYCL_VERSION_STRING}) + set_target_properties(${LIB_TARGET_NAME} PROPERTIES OUTPUT_NAME ${LIB_OUTPUT_NAME}) endfunction(add_sycl_rt_library) set(LIBSYCL_SOURCES @@ -91,13 +92,9 @@ set(LIBSYCL_SOURCES # Version-agnostic name of the import library, has effect on Windows only. set(IMPLIB_NAME "libsycl") - -if (CMAKE_SYSTEM_NAME STREQUAL Windows) -set(LIB_NAME "sycl${LIBSYCL_MAJOR_VERSION}") -set(LIB_OUTPUT_NAME "${LIB_NAME}") -else() set(LIB_NAME "sycl") set(LIB_OUTPUT_NAME "${LIB_NAME}") +if (CMAKE_SYSTEM_NAME STREQUAL Windows) if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL MultiThreadedDebugDLL) set(LIB_OUTPUT_NAME "${LIB_OUTPUT_NAME}d") set(IMPLIB_NAME "${IMPLIB_NAME}d") @@ -107,10 +104,6 @@ endif() add_sycl_rt_library(${LIB_NAME} sycl_object ${LIB_OUTPUT_NAME} SOURCES ${LIBSYCL_SOURCES} IMPLIB_OUTPUT_NAME ${IMPLIB_NAME}) -if (CMAKE_SYSTEM_NAME STREQUAL Windows) - add_library(sycl ALIAS ${LIB_NAME}) -endif() - install(TARGETS ${LIBSYCL_RT_LIBS} ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl LIBRARY DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl From 81c9efd8dd7220cb4cc1d641e09c6fab37a162d9 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Tue, 8 Jul 2025 04:35:19 -0700 Subject: [PATCH 11/12] remove extra code for implib name Signed-off-by: Tikhomirova, Kseniya --- libsycl/src/CMakeLists.txt | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index 34903db2df5ea..fa0b42161233e 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -5,9 +5,8 @@ function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME) if (NOT LLVM_ENABLE_PIC) message( FATAL_ERROR "Position-Independent Code generation is required for libsycl shared library" ) endif() - # Add an optional argument so we can get the library name to - # link with for Windows Debug version - cmake_parse_arguments(ARG "" "IMPLIB_OUTPUT_NAME" "COMPILE_OPTIONS;SOURCES" ${ARGN}) + + cmake_parse_arguments(ARG "" "" "COMPILE_OPTIONS;SOURCES" ${ARGN}) add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES}) @@ -32,18 +31,6 @@ function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME) set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX) - if (CMAKE_SYSTEM_NAME STREQUAL Windows) - add_custom_command( - TARGET ${LIB_TARGET_NAME} POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${LIB_OUTPUT_NAME}.lib - ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_OUTPUT_NAME}.lib - COMMENT "Creating version-agnostic copy of the import library.") - install( - FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${ARG_IMPLIB_OUTPUT_NAME}.lib - DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl) - endif() - if (CMAKE_SYSTEM_NAME STREQUAL Windows) # Install stripped PDB set(PDB_FILENAME "${LIB_TARGET_NAME}$<$:d>") @@ -90,19 +77,16 @@ set(LIBSYCL_SOURCES "platform.cpp" ) -# Version-agnostic name of the import library, has effect on Windows only. -set(IMPLIB_NAME "libsycl") set(LIB_NAME "sycl") set(LIB_OUTPUT_NAME "${LIB_NAME}") if (CMAKE_SYSTEM_NAME STREQUAL Windows) if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL MultiThreadedDebugDLL) set(LIB_OUTPUT_NAME "${LIB_OUTPUT_NAME}d") - set(IMPLIB_NAME "${IMPLIB_NAME}d") endif() endif() add_sycl_rt_library(${LIB_NAME} sycl_object ${LIB_OUTPUT_NAME} - SOURCES ${LIBSYCL_SOURCES} IMPLIB_OUTPUT_NAME ${IMPLIB_NAME}) + SOURCES ${LIBSYCL_SOURCES}) install(TARGETS ${LIBSYCL_RT_LIBS} ARCHIVE DESTINATION "lib${LLVM_LIBDIR_SUFFIX}" COMPONENT libsycl From e502190b210d7fc1738a7fec623694792dd3a64c Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Thu, 10 Jul 2025 03:55:33 -0700 Subject: [PATCH 12/12] fix comments Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 15 +++++++++------ libsycl/src/CMakeLists.txt | 6 +++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index bdf34c6936073..42c29217a9b3c 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -18,10 +18,10 @@ set(CMAKE_CXX_EXTENSIONS OFF) if (CMAKE_SYSTEM_NAME STREQUAL Windows AND NOT MSVC) # Build with other compilers is not configured, not guaranteed and not tested. - message( FATAL_ERROR - "On Windows libsycl supports compiler which is some version of Microsoft" - " Visual C++ or another compiler simulating the Visual C++ cl" - " command-line syntax" ) + message(FATAL_ERROR + "When compiling for Windows, libsycl requires a" + " version of Microsoft Visual C++ or another compiler" + " that uses the Visual C++ cl command-line syntax.") endif() #=============================================================================== @@ -71,8 +71,11 @@ set(LIBSYCL_MAJOR_VERSION 0) set(LIBSYCL_MINOR_VERSION 1) set(LIBSYCL_PATCH_VERSION 0) set(LIBSYCL_VERSION_STRING "${LIBSYCL_MAJOR_VERSION}.${LIBSYCL_MINOR_VERSION}.${LIBSYCL_PATCH_VERSION}") -set(LIBSYCL_ABI_NAMESPACE "V${LIBSYCL_MAJOR_VERSION}" CACHE STRING - "The inline ABI namespace used by libsycl. It defaults to Vn where `n` is the current ABI version.") +set(LIBSYCL_ABI_NAMESPACE "__V${LIBSYCL_MAJOR_VERSION}" CACHE STRING + "The inline ABI namespace used by libsycl. It defaults to __Vn where `n` is the current ABI version.") +if (NOT LIBSYCL_ABI_NAMESPACE MATCHES "__V.*") + message(FATAL_ERROR "LIBSYCL_ABI_NAMESPACE must be a reserved identifier, got '${LIBSYCL_ABI_NAMESPACE}'.") +endif() #=============================================================================== # Setup build & install rules diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index fa0b42161233e..206b85681cb84 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -80,7 +80,11 @@ set(LIBSYCL_SOURCES set(LIB_NAME "sycl") set(LIB_OUTPUT_NAME "${LIB_NAME}") if (CMAKE_SYSTEM_NAME STREQUAL Windows) - if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL MultiThreadedDebugDLL) + if (CMAKE_MSVC_RUNTIME_LIBRARY AND (NOT CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL$")) + message(FATAL_ERROR "libsycl requires a DLL version of the MSVC CRT.") + endif() + if ((NOT CMAKE_MSVC_RUNTIME_LIBRARY AND uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") + OR (CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL "MultiThreadedDebugDLL")) set(LIB_OUTPUT_NAME "${LIB_OUTPUT_NAME}d") endif() endif()