From 60239fbe14271c9616355c10934b1927df53adb0 Mon Sep 17 00:00:00 2001 From: Sergey Semenov Date: Fri, 14 Mar 2025 13:12:28 -0700 Subject: [PATCH 01/21] [SYCL] Add libsycl, a SYCL RT library implementation project --- libsycl/.clang-format | 1 + libsycl/.clang-tidy | 1 + libsycl/CMakeLists.txt | 169 +++++++++++++++ libsycl/LICENSE.txt | 278 +++++++++++++++++++++++++ libsycl/README.md | 5 + libsycl/docs/index.rst | 59 ++++++ libsycl/include/sycl/detail/export.hpp | 44 ++++ libsycl/include/sycl/platform.hpp | 24 +++ libsycl/include/sycl/sycl.hpp | 9 + libsycl/src/CMakeLists.txt | 160 ++++++++++++++ libsycl/src/ld-version-script.txt | 22 ++ libsycl/src/platform.cpp | 17 ++ llvm/CMakeLists.txt | 2 +- runtimes/CMakeLists.txt | 2 +- 14 files changed, 791 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/export.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 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..0af3553a0cad3 --- /dev/null +++ b/libsycl/.clang-tidy @@ -0,0 +1 @@ +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,google-*,-cppcoreguidelines-pro-type-union-access,-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..80ff063bf8c21 --- /dev/null +++ b/libsycl/CMakeLists.txt @@ -0,0 +1,169 @@ +#=============================================================================== +# 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) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +#=============================================================================== +# Setup CMake Options +#=============================================================================== + +option(LIBSYCL_ENABLE_WERROR "Treat all warnings as errors in the libsycl project" OFF) +option(LIBSYCL_DISABLE_STL_ASSERTIONS "Disable assertions in STL containers when building libsycl" ON) +option(LIBSYCL_ENABLE_STACK_PRINTING "Enables stack printing on crashes of SYCL applications" OFF) +option(LIBSYCL_DEBUG_SYMBOLS "Builds SYCL runtime libraries with debug symbols" OFF) + +#=============================================================================== +# Configure System +#=============================================================================== + +set(LIBSYCL_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE STRING + "Path where libsycl headers should be installed.") +set(LIBSYCL_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING + "Path where built libsycl runtime libraries should be installed.") + +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() + 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 ${LIBSYCL_SOURCE_DIR}/include) +set(LIBSYCL_BUILD_INCLUDE_DIR ${LLVM_BINARY_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}) + +# The change in LIBSYCL_MAJOR_VERSION must be accompanied with the same update in +# llvm/clang/lib/Driver/CMakeLists.txt. +# +# See doc/developer/ABIPolicyGuide.md for the meaning when in the middle of +# development cycle. +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}") + +#=============================================================================== +# Setup Compiler Flags +#=============================================================================== + +if(MSVC) + set_property(GLOBAL PROPERTY USE_FOLDERS ON) + # Skip asynchronous C++ exceptions catching and assume "extern C" functions + # never throw C++ exceptions. + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") + + # Add PDB debug information + list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") + include(CheckLinkerFlag) + check_linker_flag(CXX "LINKER:/DEBUG" LINKER_SUPPORTS_DEBUG) + if(LINKER_SUPPORTS_DEBUG) + # sccache is not compatible with /Zi flag + if (CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "sccache") + # CMake may put /Zi by default + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") + string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") + elseif(CMAKE_BUILD_TYPE STREQUAL "Release") + string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") + elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + endif() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Z7") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi") + endif() + add_link_options("LINKER:/DEBUG") + + # Enable unreferenced removal and ICF in Release mode. + check_linker_flag(CXX "LINKER:/OPT:REF,/OPT:ICF" LINKER_SUPPORTS_OPTS) + if (LINKER_SUPPORTS_OPTS AND uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE") + add_link_options("LINKER:/OPT:REF" "LINKER:/OPT:ICF") + endif() + endif() +endif() + +# Enable all warnings by default +if (MSVC) + set(CMAKE_CXX_FLAGS "/W4 ${CMAKE_CXX_FLAGS}") +else () + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-deprecated-declarations") +endif() + +if(LIBSYCL_ENABLE_WERROR) + if(MSVC) + set(CMAKE_CXX_FLAGS "/WX ${CMAKE_CXX_FLAGS}") + add_definitions( + -wd4996 # Suppress 'function': was declared deprecated' + ) + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") + endif() +endif() + +# This is a workaround to detect changes (add or modify) in subtree which +# are not detected by copy_directory command. +# TODO: detect and process remove header/directory case +file(GLOB_RECURSE HEADERS_IN_SYCL_DIR CONFIGURE_DEPENDS "${LIBSYCL_INCLUDE_DIR}/sycl/*") + +string(REPLACE "${LIBSYCL_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_INCLUDE_DIR}/sycl ${LIBSYCL_BUILD_INCLUDE_DIR}/sycl + COMMENT "Copying SYCL headers...") + +message(WARNING "${LIBSYCL_INCLUDE_DIR}/sycl ${LIBSYCL_BUILD_INCLUDE_DIR}/sycl") +install(DIRECTORY "${LIBSYCL_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INSTALL_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() + +if (LLVM_ENABLE_ASSERTIONS AND NOT LIBSYCL_DISABLE_STL_ASSERTIONS AND NOT WIN32) + add_definitions(-D_GLIBCXX_ASSERTIONS=1) +endif() + +add_subdirectory(src) + +add_custom_target(libsycl-runtime-libraries + DEPENDS ${LIBSYCL_RT_LIBS} +) \ No newline at end of file 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..853eeef42c4d5 --- /dev/null +++ b/libsycl/README.md @@ -0,0 +1,5 @@ +This directory and its subdirectories contain source code for llvm-libsycl, +an implementation of the SYCL runtime library. + +LLVM is open source software. You may freely distribute it under the terms of +the license agreement found in LICENSE.txt. \ No newline at end of file diff --git a/libsycl/docs/index.rst b/libsycl/docs/index.rst new file mode 100644 index 0000000000000..ddab108816f22 --- /dev/null +++ b/libsycl/docs/index.rst @@ -0,0 +1,59 @@ +.. _index: + +============================== +"libsycl" SYCL runtime library +============================== + +Overview +======== + +libsycl is an implementation of the SYCL runtime library as defined by the +`SYCL 2020 specification `_. + +libsycl runtime library and headers require C++17 support or higher. + +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(); + + for (int i = 0; i < dataSize; ++i) + if (dataPtr[i] != i) return 1; + + free(dataPtr, q); + + return 0; + } + +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 fat binary + \ No newline at end of file diff --git a/libsycl/include/sycl/detail/export.hpp b/libsycl/include/sycl/detail/export.hpp new file mode 100644 index 0000000000000..5c89013b60e67 --- /dev/null +++ b/libsycl/include/sycl/detail/export.hpp @@ -0,0 +1,44 @@ +//==---------------- export.hpp - SYCL standard header file ----------------==// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#pragma once + +#ifndef __SYCL_DEVICE_ONLY__ +#ifndef __SYCL_EXPORT +#ifdef _WIN32 + +// MSVC discourages export of classes, that use STL class in API. This +// results in a warning, treated as compile error. Silence C4251 to workaround. +#pragma warning(disable : 4251) +#pragma warning(disable : 4275) + +#define __SYCL_DLL_LOCAL + +#if __SYCL_BUILD_SYCL_DLL +#define __SYCL_EXPORT __declspec(dllexport) +#define __SYCL_EXPORT_DEPRECATED(x) __declspec(dllexport, deprecated(x)) +#else +#define __SYCL_EXPORT __declspec(dllimport) +#define __SYCL_EXPORT_DEPRECATED(x) __declspec(dllimport, deprecated(x)) +#endif //__SYCL_BUILD_SYCL_DLL +#else // _WIN32 + +#define __SYCL_DLL_LOCAL __attribute__((visibility("hidden"))) + +#define __SYCL_EXPORT __attribute__((visibility("default"))) +#define __SYCL_EXPORT_DEPRECATED(x) \ + __attribute__((visibility("default"), deprecated(x))) +#endif // _WIN32 +#endif // __SYCL_EXPORT +#else +#ifndef __SYCL_EXPORT +#define __SYCL_EXPORT +#define __SYCL_EXPORT_DEPRECATED(x) +#define __SYCL_DLL_LOCAL +#endif +#endif // __SYCL_DEVICE_ONLY__ diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp new file mode 100644 index 0000000000000..8b69168f0dabd --- /dev/null +++ b/libsycl/include/sycl/platform.hpp @@ -0,0 +1,24 @@ +//==---------------- platform.hpp - SYCL platform --------------------------==// +// +// 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 +// +//===----------------------------------------------------------------------===// +#pragma once + +#include + +namespace sycl { +inline namespace _V1 { +/// Encapsulates a SYCL platform on which kernels may be executed. +/// +/// \ingroup sycl_api +class __SYCL_EXPORT platform { +public: + /// Constructs a SYCL platform using the default device. + platform(); + +}; // class platform +} // namespace _V1 +} // namespace sycl diff --git a/libsycl/include/sycl/sycl.hpp b/libsycl/include/sycl/sycl.hpp new file mode 100644 index 0000000000000..ecfb20849292b --- /dev/null +++ b/libsycl/include/sycl/sycl.hpp @@ -0,0 +1,9 @@ +//==------------ sycl.hpp - SYCL2020 standard header file ------------------==// +// +// 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 diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt new file mode 100644 index 0000000000000..a79b08450d479 --- /dev/null +++ b/libsycl/src/CMakeLists.txt @@ -0,0 +1,160 @@ +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 $<$:__SYCL_BUILD_SYCL_DLL>) + target_include_directories( + ${LIB_OBJ_NAME} + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} + "${libsycl_inc_dir}" + ) + + add_library(${LIB_NAME} SHARED + $) + + # Unlike for libsycl, for LLVMSupport we have only one version for a given build, + # so, we link LLVMSupport lib to matching libsycl version only. + if (LIBSYCL_ENABLE_STACK_PRINTING) + if(NOT MSVC OR (CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARG_COMPILE_OPTIONS MATCHES ".*MDd.*") OR + (NOT CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT ARG_COMPILE_OPTIONS MATCHES ".*MDd.*")) + add_dependencies(${LIB_NAME} LLVMSupport) + target_compile_definitions(${LIB_OBJ_NAME} PUBLIC ENABLE_STACK_TRACE) + target_link_libraries(${LIB_NAME} PRIVATE LLVMSupport) + endif() + endif() + + # TODO: Enabled for MSVC + if (NOT MSVC AND LIBSYCL_DEBUG_SYMBOLS) + separate_arguments(CMAKE_CXX_FLAGS_DEBUG_SEPARATED UNIX_COMMAND "${CMAKE_CXX_FLAGS_DEBUG}") + target_compile_options(${LIB_NAME} PRIVATE ${CMAKE_CXX_FLAGS_DEBUG_SEPARATED}) + endif() + + 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) + + # Sycl math built-in macros cause a GCC 4.6 'note' to be output repeatedly. + # => note: the ABI for passing parameters with 32-byte alignment has changed in GCC 4.6 + # Seems to be no way to suppress it except use -Wno-psabi + target_compile_options(${LIB_OBJ_NAME} PUBLIC -Wno-psabi) + + 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} + ) + + # Workaround for a bug in GCC version 5 and higher. + # More information https://bugs.launchpad.net/ubuntu/+source/gcc-5/+bug/1568899 + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND + CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0) + target_link_libraries(${ARGV0} PRIVATE gcc_s gcc) + endif() + + set_target_properties(${LIB_NAME} PROPERTIES + VERSION ${LIBSYCL_VERSION_STRING} + SOVERSION ${LIBSYCL_VERSION_STRING}) + + check_cxx_compiler_flag(-Winstantiation-after-specialization + HAS_INST_AFTER_SPEC) + if (HAS_INST_AFTER_SPEC) + target_compile_options(${LIB_OBJ_NAME} PRIVATE + -Winstantiation-after-specialization) + endif() +endfunction(add_sycl_rt_library) + +set(LIBSYCL_SOURCES + "platform.cpp" +) + +if (MSVC) + # MSVC provides two incompatible build variants for its CRT: release and debug + # To avoid potential issues in user code we also need to provide two kinds + # of SYCL Runtime Library for release and debug configurations. + foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + string(REGEX REPLACE "/MDd" "" ${flag_var} "${${flag_var}}") + string(REGEX REPLACE "/MTd" "" ${flag_var} "${${flag_var}}") + string(REGEX REPLACE "/MD" "" ${flag_var} "${${flag_var}}") + string(REGEX REPLACE "/MT" "" ${flag_var} "${${flag_var}}") + endforeach() + + set(WIN_DUPE "1") + add_sycl_rt_library(sycl${LIBSYCL_MAJOR_VERSION}d sycld_object COMPILE_OPTIONS "/MDd" SOURCES ${LIBSYCL_SOURCES} IMPLIB_NAME sycld) + unset(WIN_DUPE) + add_library(sycld ALIAS sycl${LIBSYCL_MAJOR_VERSION}d) + + set(LIBSYCL_EXTRA_OPTS "/MD") +endif() + +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() + +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..87354ca96b77b --- /dev/null +++ b/libsycl/src/ld-version-script.txt @@ -0,0 +1,22 @@ +{ + /* 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 */ + + /* Some functions are also in __host_std, export them as well */ + _ZN10__host_std*; + + local: + *; +}; diff --git a/libsycl/src/platform.cpp b/libsycl/src/platform.cpp new file mode 100644 index 0000000000000..0b0d2f1fa005a --- /dev/null +++ b/libsycl/src/platform.cpp @@ -0,0 +1,17 @@ +//==---------------- platform.cpp - SYCL platform --------------------------==// +// +// 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 + +namespace sycl { +inline namespace _V1 { +platform::platform() { throw std::runtime_error("Unimplemented"); } +} // namespace _V1 +} // namespace sycl diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index e76bc9b9ab778..8eeb9eda71138 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -175,7 +175,7 @@ endif () # 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") +set(LLVM_SUPPORTED_RUNTIMES "libc;libunwind;libcxxabi;pstl;libcxx;compiler-rt;openmp;llvm-libgcc;offload;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") diff --git a/runtimes/CMakeLists.txt b/runtimes/CMakeLists.txt index 437dcb1365b18..605c908f71e99 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;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 6a8fba675ce7f0ead0c725661ca8a5ca3b2d59e3 Mon Sep 17 00:00:00 2001 From: Sergey Semenov Date: Thu, 10 Apr 2025 07:33:38 -0700 Subject: [PATCH 02/21] Apply some comments --- libsycl/.clang-tidy | 18 +++++++++++++++++- libsycl/CMakeLists.txt | 8 ++------ libsycl/docs/index.rst | 7 ++++--- libsycl/include/sycl/detail/export.hpp | 17 ++++++++++------- libsycl/include/sycl/platform.hpp | 6 +++++- libsycl/include/sycl/sycl.hpp | 5 +++++ libsycl/src/CMakeLists.txt | 7 ------- libsycl/src/ld-version-script.txt | 3 --- 8 files changed, 43 insertions(+), 28 deletions(-) diff --git a/libsycl/.clang-tidy b/libsycl/.clang-tidy index 0af3553a0cad3..cdc7a2981a41d 100644 --- a/libsycl/.clang-tidy +++ b/libsycl/.clang-tidy @@ -1 +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,google-*,-cppcoreguidelines-pro-type-union-access,-google-build-using-namespace,-google-explicit-constructor,-google-runtime-references,misc-*,-misc-macro-parentheses,-misc-unused-parameters' +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 index 80ff063bf8c21..69d8d3e934634 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -120,9 +120,6 @@ endif() if(LIBSYCL_ENABLE_WERROR) if(MSVC) set(CMAKE_CXX_FLAGS "/WX ${CMAKE_CXX_FLAGS}") - add_definitions( - -wd4996 # Suppress 'function': was declared deprecated' - ) else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") endif() @@ -130,7 +127,7 @@ endif() # This is a workaround to detect changes (add or modify) in subtree which # are not detected by copy_directory command. -# TODO: detect and process remove header/directory case +# TODO: Detect removal in the source tree and reflect in the install directory. file(GLOB_RECURSE HEADERS_IN_SYCL_DIR CONFIGURE_DEPENDS "${LIBSYCL_INCLUDE_DIR}/sycl/*") string(REPLACE "${LIBSYCL_INCLUDE_DIR}" "${LIBSYCL_BUILD_INCLUDE_DIR}" @@ -138,7 +135,7 @@ string(REPLACE "${LIBSYCL_INCLUDE_DIR}" "${LIBSYCL_BUILD_INCLUDE_DIR}" # Copy SYCL headers from sources to build directory add_custom_target(sycl-headers -DEPENDS ${OUT_HEADERS_IN_SYCL_DIR}) + DEPENDS ${OUT_HEADERS_IN_SYCL_DIR}) add_custom_command( OUTPUT ${OUT_HEADERS_IN_SYCL_DIR} @@ -146,7 +143,6 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBSYCL_INCLUDE_DIR}/sycl ${LIBSYCL_BUILD_INCLUDE_DIR}/sycl COMMENT "Copying SYCL headers...") -message(WARNING "${LIBSYCL_INCLUDE_DIR}/sycl ${LIBSYCL_BUILD_INCLUDE_DIR}/sycl") install(DIRECTORY "${LIBSYCL_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INSTALL_INCLUDE_DIR} COMPONENT sycl-headers) if (WIN32) diff --git a/libsycl/docs/index.rst b/libsycl/docs/index.rst index ddab108816f22..9348e92c4b7c8 100644 --- a/libsycl/docs/index.rst +++ b/libsycl/docs/index.rst @@ -39,12 +39,13 @@ support for a simple SYCL application with device code using Unified Shared Memo }); q.wait(); + bool error = false; for (int i = 0; i < dataSize; ++i) - if (dataPtr[i] != i) return 1; + if (dataPtr[i] != i) error = true; free(dataPtr, q); - return 0; + return error; } This requires at least partial support of the following functionality on the libsycl side: @@ -55,5 +56,5 @@ This requires at least partial support of the following functionality on the lib * 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 fat binary + * Program manager, an internal component for retrieving and using device images from the multi-architectural binaries \ No newline at end of file diff --git a/libsycl/include/sycl/detail/export.hpp b/libsycl/include/sycl/detail/export.hpp index 5c89013b60e67..00137cbc91a31 100644 --- a/libsycl/include/sycl/detail/export.hpp +++ b/libsycl/include/sycl/detail/export.hpp @@ -6,17 +6,13 @@ // //===----------------------------------------------------------------------===// -#pragma once +#ifndef __LIBSYCL_DETAIL_EXPORT_HPP +#define __LIBSYCL_DETAIL_EXPORT_HPP #ifndef __SYCL_DEVICE_ONLY__ #ifndef __SYCL_EXPORT #ifdef _WIN32 -// MSVC discourages export of classes, that use STL class in API. This -// results in a warning, treated as compile error. Silence C4251 to workaround. -#pragma warning(disable : 4251) -#pragma warning(disable : 4275) - #define __SYCL_DLL_LOCAL #if __SYCL_BUILD_SYCL_DLL @@ -26,6 +22,7 @@ #define __SYCL_EXPORT __declspec(dllimport) #define __SYCL_EXPORT_DEPRECATED(x) __declspec(dllimport, deprecated(x)) #endif //__SYCL_BUILD_SYCL_DLL + #else // _WIN32 #define __SYCL_DLL_LOCAL __attribute__((visibility("hidden"))) @@ -33,12 +30,18 @@ #define __SYCL_EXPORT __attribute__((visibility("default"))) #define __SYCL_EXPORT_DEPRECATED(x) \ __attribute__((visibility("default"), deprecated(x))) + #endif // _WIN32 #endif // __SYCL_EXPORT -#else + +#else // __SYCL_DEVICE_ONLY__ + #ifndef __SYCL_EXPORT #define __SYCL_EXPORT #define __SYCL_EXPORT_DEPRECATED(x) #define __SYCL_DLL_LOCAL #endif + #endif // __SYCL_DEVICE_ONLY__ + +#endif // __LIBSYCL_DETAIL_EXPORT_HPP \ No newline at end of file diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp index 8b69168f0dabd..a4ca97ddfa524 100644 --- a/libsycl/include/sycl/platform.hpp +++ b/libsycl/include/sycl/platform.hpp @@ -5,7 +5,9 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -#pragma once + +#ifndef __LIBSYCL_PLATFORM_HPP +#define __LIBSYCL_PLATFORM_HPP #include @@ -22,3 +24,5 @@ class __SYCL_EXPORT platform { }; // class platform } // namespace _V1 } // namespace sycl + +#endif // __LIBSYCL_PLATFORM_HPP \ No newline at end of file diff --git a/libsycl/include/sycl/sycl.hpp b/libsycl/include/sycl/sycl.hpp index ecfb20849292b..7e7e494109212 100644 --- a/libsycl/include/sycl/sycl.hpp +++ b/libsycl/include/sycl/sycl.hpp @@ -6,4 +6,9 @@ // //===----------------------------------------------------------------------===// +#ifndef __LIBSYCL_SYCL_HPP +#define __LIBSYCL_SYCL_HPP + #include + +#endif // __LIBSYCL_SYCL_HPP \ No newline at end of file diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index a79b08450d479..1523561d3e0c3 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -96,13 +96,6 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) ${CMAKE_THREAD_LIBS_INIT} ) - # Workaround for a bug in GCC version 5 and higher. - # More information https://bugs.launchpad.net/ubuntu/+source/gcc-5/+bug/1568899 - if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND - CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.0) - target_link_libraries(${ARGV0} PRIVATE gcc_s gcc) - endif() - set_target_properties(${LIB_NAME} PROPERTIES VERSION ${LIBSYCL_VERSION_STRING} SOVERSION ${LIBSYCL_VERSION_STRING}) diff --git a/libsycl/src/ld-version-script.txt b/libsycl/src/ld-version-script.txt index 87354ca96b77b..90bfe2ac7309f 100644 --- a/libsycl/src/ld-version-script.txt +++ b/libsycl/src/ld-version-script.txt @@ -14,9 +14,6 @@ _ZTSN4sycl*; /* typeinfo name */ _ZTVN4sycl*; /* vtable */ - /* Some functions are also in __host_std, export them as well */ - _ZN10__host_std*; - local: *; }; From 8a6463fe4fd1015636910f7e0dcdd0f949d58887 Mon Sep 17 00:00:00 2001 From: Sergey Semenov Date: Mon, 14 Apr 2025 07:52:16 -0700 Subject: [PATCH 03/21] A few missed changes --- libsycl/CMakeLists.txt | 2 +- libsycl/src/CMakeLists.txt | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 69d8d3e934634..970423029d912 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -114,7 +114,7 @@ endif() if (MSVC) set(CMAKE_CXX_FLAGS "/W4 ${CMAKE_CXX_FLAGS}") else () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-deprecated-declarations") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") endif() if(LIBSYCL_ENABLE_WERROR) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index 1523561d3e0c3..d8f6303789a7d 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -75,11 +75,6 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) target_compile_options(${LIB_OBJ_NAME} PUBLIC -fvisibility=hidden -fvisibility-inlines-hidden) - # Sycl math built-in macros cause a GCC 4.6 'note' to be output repeatedly. - # => note: the ABI for passing parameters with 32-byte alignment has changed in GCC 4.6 - # Seems to be no way to suppress it except use -Wno-psabi - target_compile_options(${LIB_OBJ_NAME} PUBLIC -Wno-psabi) - if (UNIX AND NOT APPLE) set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt") target_link_libraries( From 998fb9b945352eeced18ab85c08f27686b8295e7 Mon Sep 17 00:00:00 2001 From: Sergey Semenov Date: Mon, 14 Apr 2025 08:00:47 -0700 Subject: [PATCH 04/21] Fix path --- libsycl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 970423029d912..883fe46d85c9c 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -59,7 +59,7 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) # The change in LIBSYCL_MAJOR_VERSION must be accompanied with the same update in -# llvm/clang/lib/Driver/CMakeLists.txt. +# clang/lib/Driver/CMakeLists.txt. # # See doc/developer/ABIPolicyGuide.md for the meaning when in the middle of # development cycle. From ca41e908f14df03cf8e46e5c441ee41ce1ff1cc9 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Tue, 20 May 2025 04:02:59 -0700 Subject: [PATCH 05/21] code-review comments fix 1 Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 9 +-------- libsycl/src/CMakeLists.txt | 17 ----------------- 2 files changed, 1 insertion(+), 25 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 883fe46d85c9c..1866f437821a0 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -17,9 +17,6 @@ set(CMAKE_CXX_EXTENSIONS OFF) #=============================================================================== option(LIBSYCL_ENABLE_WERROR "Treat all warnings as errors in the libsycl project" OFF) -option(LIBSYCL_DISABLE_STL_ASSERTIONS "Disable assertions in STL containers when building libsycl" ON) -option(LIBSYCL_ENABLE_STACK_PRINTING "Enables stack printing on crashes of SYCL applications" OFF) -option(LIBSYCL_DEBUG_SYMBOLS "Builds SYCL runtime libraries with debug symbols" OFF) #=============================================================================== # Configure System @@ -27,7 +24,7 @@ option(LIBSYCL_DEBUG_SYMBOLS "Builds SYCL runtime libraries with debug symbols" set(LIBSYCL_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE STRING "Path where libsycl headers should be installed.") -set(LIBSYCL_INSTALL_RUNTIME_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING +set(LIBSYCL_INSTALL_LIBRARY_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING "Path where built libsycl runtime libraries should be installed.") set(LIBSYCL_SHARED_OUTPUT_NAME "sycl" CACHE STRING "Output name for the shared libsycl runtime library.") @@ -154,10 +151,6 @@ else() set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}) endif() -if (LLVM_ENABLE_ASSERTIONS AND NOT LIBSYCL_DISABLE_STL_ASSERTIONS AND NOT WIN32) - add_definitions(-D_GLIBCXX_ASSERTIONS=1) -endif() - add_subdirectory(src) add_custom_target(libsycl-runtime-libraries diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index d8f6303789a7d..22a688799f5d7 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -17,23 +17,6 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) add_library(${LIB_NAME} SHARED $) - # Unlike for libsycl, for LLVMSupport we have only one version for a given build, - # so, we link LLVMSupport lib to matching libsycl version only. - if (LIBSYCL_ENABLE_STACK_PRINTING) - if(NOT MSVC OR (CMAKE_BUILD_TYPE STREQUAL "Debug" AND ARG_COMPILE_OPTIONS MATCHES ".*MDd.*") OR - (NOT CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT ARG_COMPILE_OPTIONS MATCHES ".*MDd.*")) - add_dependencies(${LIB_NAME} LLVMSupport) - target_compile_definitions(${LIB_OBJ_NAME} PUBLIC ENABLE_STACK_TRACE) - target_link_libraries(${LIB_NAME} PRIVATE LLVMSupport) - endif() - endif() - - # TODO: Enabled for MSVC - if (NOT MSVC AND LIBSYCL_DEBUG_SYMBOLS) - separate_arguments(CMAKE_CXX_FLAGS_DEBUG_SEPARATED UNIX_COMMAND "${CMAKE_CXX_FLAGS_DEBUG}") - target_compile_options(${LIB_NAME} PRIVATE ${CMAKE_CXX_FLAGS_DEBUG_SEPARATED}) - endif() - if (ARG_COMPILE_OPTIONS) target_compile_options(${LIB_OBJ_NAME} PRIVATE ${ARG_COMPILE_OPTIONS}) endif() From 6ba565abab34441daa720d9e4078bd6f183bf222 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Tue, 20 May 2025 04:11:43 -0700 Subject: [PATCH 06/21] update header to llvm standards Signed-off-by: Tikhomirova, Kseniya --- libsycl/include/sycl/detail/export.hpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/libsycl/include/sycl/detail/export.hpp b/libsycl/include/sycl/detail/export.hpp index 00137cbc91a31..dbabdb5d5b0b2 100644 --- a/libsycl/include/sycl/detail/export.hpp +++ b/libsycl/include/sycl/detail/export.hpp @@ -1,10 +1,16 @@ -//==---------------- export.hpp - SYCL standard header file ----------------==// +//===----------------------------------------------------------------------===// // // 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 macroses defining attributes for +/// exported methods. +/// +//===----------------------------------------------------------------------===// #ifndef __LIBSYCL_DETAIL_EXPORT_HPP #define __LIBSYCL_DETAIL_EXPORT_HPP @@ -23,7 +29,7 @@ #define __SYCL_EXPORT_DEPRECATED(x) __declspec(dllimport, deprecated(x)) #endif //__SYCL_BUILD_SYCL_DLL -#else // _WIN32 +#else // _WIN32 #define __SYCL_DLL_LOCAL __attribute__((visibility("hidden"))) From 7610d784a6317df7a8c534532c984b6e34ce0af3 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 21 May 2025 03:36:44 -0700 Subject: [PATCH 07/21] fix comments part 2 Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 2 -- libsycl/README.md | 23 +++++++++++++++++++---- libsycl/docs/index.rst | 23 ++++++----------------- libsycl/src/CMakeLists.txt | 7 ------- 4 files changed, 25 insertions(+), 30 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 1866f437821a0..1474ad5c73ded 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -24,8 +24,6 @@ option(LIBSYCL_ENABLE_WERROR "Treat all warnings as errors in the libsycl projec set(LIBSYCL_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE STRING "Path where libsycl headers should be installed.") -set(LIBSYCL_INSTALL_LIBRARY_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING - "Path where built libsycl runtime libraries should be installed.") set(LIBSYCL_SHARED_OUTPUT_NAME "sycl" CACHE STRING "Output name for the shared libsycl runtime library.") diff --git a/libsycl/README.md b/libsycl/README.md index 853eeef42c4d5..c62ea249c57ed 100644 --- a/libsycl/README.md +++ b/libsycl/README.md @@ -1,5 +1,20 @@ -This directory and its subdirectories contain source code for llvm-libsycl, -an implementation of the SYCL runtime library. +## SYCL runtime library -LLVM is open source software. You may freely distribute it under the terms of -the license agreement found in LICENSE.txt. \ No newline at end of file +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 DPC++ + +TBD + +#### Build from sources + +TBD + +# License + +See [LICENSE](./LICENSE.TXT) for details. diff --git a/libsycl/docs/index.rst b/libsycl/docs/index.rst index 9348e92c4b7c8..b2c27841e09ee 100644 --- a/libsycl/docs/index.rst +++ b/libsycl/docs/index.rst @@ -1,16 +1,5 @@ .. _index: -============================== -"libsycl" SYCL runtime library -============================== - -Overview -======== - -libsycl is an implementation of the SYCL runtime library as defined by the -`SYCL 2020 specification `_. - -libsycl runtime library and headers require C++17 support or higher. Current Status ============== @@ -49,12 +38,12 @@ support for a simple SYCL application with device code using Unified Shared Memo } 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 + * ``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 \ No newline at end of file diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index 22a688799f5d7..c449101868328 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -77,13 +77,6 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) set_target_properties(${LIB_NAME} PROPERTIES VERSION ${LIBSYCL_VERSION_STRING} SOVERSION ${LIBSYCL_VERSION_STRING}) - - check_cxx_compiler_flag(-Winstantiation-after-specialization - HAS_INST_AFTER_SPEC) - if (HAS_INST_AFTER_SPEC) - target_compile_options(${LIB_OBJ_NAME} PRIVATE - -Winstantiation-after-specialization) - endif() endfunction(add_sycl_rt_library) set(LIBSYCL_SOURCES From 6b688ad0d7661b2d4a7bb90b10a2834ab283c929 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 21 May 2025 03:48:40 -0700 Subject: [PATCH 08/21] fix comments part 3 Signed-off-by: Tikhomirova, Kseniya --- libsycl/src/CMakeLists.txt | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index c449101868328..d4f13930b8572 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -83,6 +83,15 @@ 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") + if (MSVC) # MSVC provides two incompatible build variants for its CRT: release and debug # To avoid potential issues in user code we also need to provide two kinds @@ -96,22 +105,12 @@ if (MSVC) string(REGEX REPLACE "/MT" "" ${flag_var} "${${flag_var}}") endforeach() - set(WIN_DUPE "1") - add_sycl_rt_library(sycl${LIBSYCL_MAJOR_VERSION}d sycld_object COMPILE_OPTIONS "/MDd" SOURCES ${LIBSYCL_SOURCES} IMPLIB_NAME sycld) - unset(WIN_DUPE) - add_library(sycld ALIAS sycl${LIBSYCL_MAJOR_VERSION}d) + add_sycl_rt_library(${LIB_NAME}d sycld_object COMPILE_OPTIONS "/MDd" SOURCES ${LIBSYCL_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}d) + add_library(sycld ALIAS ${LIB_NAME}d) set(LIBSYCL_EXTRA_OPTS "/MD") endif() -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) From 0d930efc63f86fe3627a096c851a18328fb784a9 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Thu, 22 May 2025 05:55:53 -0700 Subject: [PATCH 09/21] modify versioning Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 9 ++++++--- .../sycl/detail/{export.hpp => config.hpp} | 19 +++++++++++++++---- libsycl/include/sycl/platform.hpp | 8 +++++++- libsycl/include/sycl/sycl.hpp | 2 +- libsycl/src/version.hpp.in | 12 ++++++++++++ 5 files changed, 41 insertions(+), 9 deletions(-) rename libsycl/include/sycl/detail/{export.hpp => config.hpp} (68%) create mode 100644 libsycl/src/version.hpp.in diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 1474ad5c73ded..e0af10bccb65b 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -55,9 +55,6 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) # The change in LIBSYCL_MAJOR_VERSION must be accompanied with the same update in # clang/lib/Driver/CMakeLists.txt. -# -# See doc/developer/ABIPolicyGuide.md for the meaning when in the middle of -# development cycle. set(LIBSYCL_MAJOR_VERSION 0) set(LIBSYCL_MINOR_VERSION 1) set(LIBSYCL_PATCH_VERSION 0) @@ -140,6 +137,12 @@ add_custom_command( install(DIRECTORY "${LIBSYCL_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INSTALL_INCLUDE_DIR} COMPONENT sycl-headers) +configure_file("src/version.hpp.in" "${LIBSYCL_INSTALL_INCLUDE_DIR}/sycl/version.hpp") +install(FILES + "${LIBSYCL_INSTALL_INCLUDE_DIR}/sycl/version.hpp" + DESTINATION "${LIBSYCL_INCLUDE_DIR}/sycl" + COMPONENT sycl-headers) + if (WIN32) set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}) if (MSVC) diff --git a/libsycl/include/sycl/detail/export.hpp b/libsycl/include/sycl/detail/config.hpp similarity index 68% rename from libsycl/include/sycl/detail/export.hpp rename to libsycl/include/sycl/detail/config.hpp index dbabdb5d5b0b2..83e67ab9ffb85 100644 --- a/libsycl/include/sycl/detail/export.hpp +++ b/libsycl/include/sycl/detail/config.hpp @@ -8,12 +8,23 @@ /// /// \file /// This file contains the declaration of the macroses defining attributes for -/// exported methods. +/// exported methods and defining API namespaces. /// //===----------------------------------------------------------------------===// -#ifndef __LIBSYCL_DETAIL_EXPORT_HPP -#define __LIBSYCL_DETAIL_EXPORT_HPP +#ifndef __LIBSYCL_DETAIL_CONFIG_HPP +#define __LIBSYCL_DETAIL_CONFIG_HPP + +#include + +#define __SYCL_BEGIN_UNVERSIONED_NAMESPACE namespace sycl { +#define __SYCL_END_UNVERSIONED_NAMESPACE } + +#define __SYCL_BEGIN_VERSIONED_NAMESPACE \ + __SYCL_BEGIN_UNVERSIONED_NAMESPACE inline namespace V__LIBSYCL_MAJOR_VERSION { +#define __SYCL_END_VERSIONED_NAMESPACE \ + } \ + __SYCL_END_UNVERSIONED_NAMESPACE #ifndef __SYCL_DEVICE_ONLY__ #ifndef __SYCL_EXPORT @@ -50,4 +61,4 @@ #endif // __SYCL_DEVICE_ONLY__ -#endif // __LIBSYCL_DETAIL_EXPORT_HPP \ No newline at end of file +#endif // __LIBSYCL_DETAIL_CONFIG_HPP \ No newline at end of file diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp index a4ca97ddfa524..1b8b8a50ced1c 100644 --- a/libsycl/include/sycl/platform.hpp +++ b/libsycl/include/sycl/platform.hpp @@ -1,10 +1,16 @@ -//==---------------- platform.hpp - SYCL platform --------------------------==// +//===----------------------------------------------------------------------===// // // 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 diff --git a/libsycl/include/sycl/sycl.hpp b/libsycl/include/sycl/sycl.hpp index 7e7e494109212..529ed8c3476eb 100644 --- a/libsycl/include/sycl/sycl.hpp +++ b/libsycl/include/sycl/sycl.hpp @@ -1,4 +1,4 @@ -//==------------ sycl.hpp - SYCL2020 standard header file ------------------==// +//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. diff --git a/libsycl/src/version.hpp.in b/libsycl/src/version.hpp.in new file mode 100644 index 0000000000000..c23df94a920a2 --- /dev/null +++ b/libsycl/src/version.hpp.in @@ -0,0 +1,12 @@ +//==------ version.hpp --- SYCL compiler version macro ---------*- C++ -*---==// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#cmakedefine __SYCL_COMPILER_VERSION ${__SYCL_COMPILER_VERSION} +#define __LIBSYCL_MAJOR_VERSION ${SYCL_MAJOR_VERSION} +#define __LIBSYCL_MINOR_VERSION ${SYCL_MINOR_VERSION} +#define __LIBSYCL_PATCH_VERSION ${SYCL_PATCH_VERSION} From 2acca6158661a1ff5c6d6f462ebb8e109eb9a77b Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Thu, 22 May 2025 08:06:06 -0700 Subject: [PATCH 10/21] fix build Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 9 +++------ libsycl/include/sycl/detail/config.hpp | 2 +- libsycl/include/sycl/platform.hpp | 13 +++++-------- libsycl/src/CMakeLists.txt | 2 +- libsycl/src/platform.cpp | 10 +++++----- libsycl/src/version.hpp.in | 16 ++++++++++------ 6 files changed, 25 insertions(+), 27 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index e0af10bccb65b..58d46217998ab 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -59,6 +59,7 @@ 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 @@ -129,6 +130,8 @@ string(REPLACE "${LIBSYCL_INCLUDE_DIR}" "${LIBSYCL_BUILD_INCLUDE_DIR}" add_custom_target(sycl-headers DEPENDS ${OUT_HEADERS_IN_SYCL_DIR}) +configure_file("${LIBSYCL_SOURCE_DIR}/src/version.hpp.in" "${LIBSYCL_INCLUDE_DIR}/sycl/version.hpp") + add_custom_command( OUTPUT ${OUT_HEADERS_IN_SYCL_DIR} DEPENDS ${HEADERS_IN_SYCL_DIR} @@ -137,12 +140,6 @@ add_custom_command( install(DIRECTORY "${LIBSYCL_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INSTALL_INCLUDE_DIR} COMPONENT sycl-headers) -configure_file("src/version.hpp.in" "${LIBSYCL_INSTALL_INCLUDE_DIR}/sycl/version.hpp") -install(FILES - "${LIBSYCL_INSTALL_INCLUDE_DIR}/sycl/version.hpp" - DESTINATION "${LIBSYCL_INCLUDE_DIR}/sycl" - COMPONENT sycl-headers) - if (WIN32) set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}) if (MSVC) diff --git a/libsycl/include/sycl/detail/config.hpp b/libsycl/include/sycl/detail/config.hpp index 83e67ab9ffb85..ba203c524a734 100644 --- a/libsycl/include/sycl/detail/config.hpp +++ b/libsycl/include/sycl/detail/config.hpp @@ -21,7 +21,7 @@ #define __SYCL_END_UNVERSIONED_NAMESPACE } #define __SYCL_BEGIN_VERSIONED_NAMESPACE \ - __SYCL_BEGIN_UNVERSIONED_NAMESPACE inline namespace V__LIBSYCL_MAJOR_VERSION { + __SYCL_BEGIN_UNVERSIONED_NAMESPACE inline namespace __LIBSYCL_ABI_NAMESPACE { #define __SYCL_END_VERSIONED_NAMESPACE \ } \ __SYCL_END_UNVERSIONED_NAMESPACE diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp index 1b8b8a50ced1c..26cbd67b15128 100644 --- a/libsycl/include/sycl/platform.hpp +++ b/libsycl/include/sycl/platform.hpp @@ -15,20 +15,17 @@ #ifndef __LIBSYCL_PLATFORM_HPP #define __LIBSYCL_PLATFORM_HPP -#include +#include + +__SYCL_BEGIN_VERSIONED_NAMESPACE -namespace sycl { -inline namespace _V1 { -/// Encapsulates a SYCL platform on which kernels may be executed. -/// -/// \ingroup sycl_api class __SYCL_EXPORT platform { public: /// Constructs a SYCL platform using the default device. platform(); }; // class platform -} // namespace _V1 -} // namespace sycl + +__SYCL_END_VERSIONED_NAMESPACE #endif // __LIBSYCL_PLATFORM_HPP \ No newline at end of file diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index d4f13930b8572..b580ab494ab90 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -11,7 +11,7 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) ${LIB_OBJ_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - "${libsycl_inc_dir}" + "${LIBSYCL_INCLUDE_DIR}" ) add_library(${LIB_NAME} SHARED diff --git a/libsycl/src/platform.cpp b/libsycl/src/platform.cpp index 0b0d2f1fa005a..821e6366920d5 100644 --- a/libsycl/src/platform.cpp +++ b/libsycl/src/platform.cpp @@ -1,4 +1,4 @@ -//==---------------- platform.cpp - SYCL platform --------------------------==// +//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -10,8 +10,8 @@ #include -namespace sycl { -inline namespace _V1 { +__SYCL_BEGIN_VERSIONED_NAMESPACE + platform::platform() { throw std::runtime_error("Unimplemented"); } -} // namespace _V1 -} // namespace sycl + +__SYCL_END_VERSIONED_NAMESPACE diff --git a/libsycl/src/version.hpp.in b/libsycl/src/version.hpp.in index c23df94a920a2..4a4b0942db1d2 100644 --- a/libsycl/src/version.hpp.in +++ b/libsycl/src/version.hpp.in @@ -1,12 +1,16 @@ -//==------ version.hpp --- SYCL compiler version macro ---------*- C++ -*---==// +//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// - -#cmakedefine __SYCL_COMPILER_VERSION ${__SYCL_COMPILER_VERSION} -#define __LIBSYCL_MAJOR_VERSION ${SYCL_MAJOR_VERSION} -#define __LIBSYCL_MINOR_VERSION ${SYCL_MINOR_VERSION} -#define __LIBSYCL_PATCH_VERSION ${SYCL_PATCH_VERSION} +/// +/// \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} \ No newline at end of file From 737a405544db3dc1d93760f9db3c587f2d9038c4 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Mon, 26 May 2025 05:50:05 -0700 Subject: [PATCH 11/21] tiny text updates Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 2 +- libsycl/docs/index.rst | 22 +++++++++++++++++++++- libsycl/include/sycl/detail/config.hpp | 2 +- libsycl/include/sycl/platform.hpp | 2 +- libsycl/include/sycl/sycl.hpp | 2 +- libsycl/src/version.hpp.in | 2 +- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 58d46217998ab..39e2c81ebc5b4 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -153,4 +153,4 @@ add_subdirectory(src) add_custom_target(libsycl-runtime-libraries DEPENDS ${LIBSYCL_RT_LIBS} -) \ No newline at end of file +) diff --git a/libsycl/docs/index.rst b/libsycl/docs/index.rst index b2c27841e09ee..cd33f0f03428d 100644 --- a/libsycl/docs/index.rst +++ b/libsycl/docs/index.rst @@ -1,6 +1,5 @@ .. _index: - Current Status ============== @@ -46,4 +45,25 @@ This requires at least partial support of the following functionality on the lib * ``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 index ba203c524a734..12d9663d5cb27 100644 --- a/libsycl/include/sycl/detail/config.hpp +++ b/libsycl/include/sycl/detail/config.hpp @@ -61,4 +61,4 @@ #endif // __SYCL_DEVICE_ONLY__ -#endif // __LIBSYCL_DETAIL_CONFIG_HPP \ No newline at end of file +#endif // __LIBSYCL_DETAIL_CONFIG_HPP diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp index 26cbd67b15128..e23205a7a66ba 100644 --- a/libsycl/include/sycl/platform.hpp +++ b/libsycl/include/sycl/platform.hpp @@ -28,4 +28,4 @@ class __SYCL_EXPORT platform { __SYCL_END_VERSIONED_NAMESPACE -#endif // __LIBSYCL_PLATFORM_HPP \ No newline at end of file +#endif // __LIBSYCL_PLATFORM_HPP diff --git a/libsycl/include/sycl/sycl.hpp b/libsycl/include/sycl/sycl.hpp index 529ed8c3476eb..136d97805b0cf 100644 --- a/libsycl/include/sycl/sycl.hpp +++ b/libsycl/include/sycl/sycl.hpp @@ -11,4 +11,4 @@ #include -#endif // __LIBSYCL_SYCL_HPP \ No newline at end of file +#endif // __LIBSYCL_SYCL_HPP diff --git a/libsycl/src/version.hpp.in b/libsycl/src/version.hpp.in index 4a4b0942db1d2..2468a077ce13a 100644 --- a/libsycl/src/version.hpp.in +++ b/libsycl/src/version.hpp.in @@ -13,4 +13,4 @@ #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} \ No newline at end of file +#define __LIBSYCL_ABI_NAMESPACE ${LIBSYCL_ABI_NAMESPACE} From abda61122215f256ecc15ee8d8ba2b687e09250f Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 28 May 2025 08:11:14 -0700 Subject: [PATCH 12/21] fix comment Signed-off-by: Tikhomirova, Kseniya --- libsycl/include/sycl/detail/config.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsycl/include/sycl/detail/config.hpp b/libsycl/include/sycl/detail/config.hpp index 12d9663d5cb27..60fa8cfaed04c 100644 --- a/libsycl/include/sycl/detail/config.hpp +++ b/libsycl/include/sycl/detail/config.hpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// This file contains the declaration of the macroses defining attributes for +/// This file contains the declaration of the macros defining attributes for /// exported methods and defining API namespaces. /// //===----------------------------------------------------------------------===// From 9f3093c96f9a9fa4ea533f599ed367b53939ded9 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 28 May 2025 09:04:33 -0700 Subject: [PATCH 13/21] remove 2nd build for Win Signed-off-by: Tikhomirova, Kseniya --- libsycl/src/CMakeLists.txt | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index b580ab494ab90..4051bea2edbb5 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -92,31 +92,16 @@ endif() # Version-agnostic name of the import library, has effect on Windows only. set(IMPLIB_NAME "sycl") -if (MSVC) - # MSVC provides two incompatible build variants for its CRT: release and debug - # To avoid potential issues in user code we also need to provide two kinds - # of SYCL Runtime Library for release and debug configurations. - foreach(flag_var - CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE - CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) - string(REGEX REPLACE "/MDd" "" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MTd" "" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MD" "" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MT" "" ${flag_var} "${${flag_var}}") - endforeach() - - add_sycl_rt_library(${LIB_NAME}d sycld_object COMPILE_OPTIONS "/MDd" SOURCES ${LIBSYCL_SOURCES} IMPLIB_NAME ${IMPLIB_NAME}d) - add_library(sycld ALIAS ${LIB_NAME}d) - - set(LIBSYCL_EXTRA_OPTS "/MD") -endif() - 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 From 5157163407be9199c03437b345f38b1830110923 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Fri, 30 May 2025 05:18:27 -0700 Subject: [PATCH 14/21] fix comments, formating Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 23 ++++++++++++----------- libsycl/README.md | 4 ++-- libsycl/src/CMakeLists.txt | 3 ++- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 39e2c81ebc5b4..d5283d2c19c6f 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -8,8 +8,8 @@ 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) -set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_STANDARD 17 CACHE STRING "C++ standard to conform to") +set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS OFF) #=============================================================================== @@ -59,7 +59,8 @@ 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.") #=============================================================================== # Setup Compiler Flags @@ -69,7 +70,7 @@ if(MSVC) set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Skip asynchronous C++ exceptions catching and assume "extern C" functions # never throw C++ exceptions. - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") + append("/EHsc" CMAKE_CXX_FLAGS) # Add PDB debug information list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") @@ -77,6 +78,7 @@ if(MSVC) check_linker_flag(CXX "LINKER:/DEBUG" LINKER_SUPPORTS_DEBUG) if(LINKER_SUPPORTS_DEBUG) # sccache is not compatible with /Zi flag + # https://github.com/mozilla/sccache?tab=readme-ov-file#usage if (CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "sccache") # CMake may put /Zi by default if(CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -89,9 +91,9 @@ if(MSVC) string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Z7") + append("/Z7" CMAKE_CXX_FLAGS) else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zi") + append("/Zi" CMAKE_CXX_FLAGS) endif() add_link_options("LINKER:/DEBUG") @@ -105,22 +107,21 @@ endif() # Enable all warnings by default if (MSVC) - set(CMAKE_CXX_FLAGS "/W4 ${CMAKE_CXX_FLAGS}") + append("/W4" CMAKE_CXX_FLAGS) else () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") + append("-Wall -Wextra" CMAKE_CXX_FLAGS) endif() if(LIBSYCL_ENABLE_WERROR) if(MSVC) - set(CMAKE_CXX_FLAGS "/WX ${CMAKE_CXX_FLAGS}") + append("/WX" CMAKE_CXX_FLAGS) else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") + append("-Werror" CMAKE_CXX_FLAGS) endif() endif() # This is a workaround to detect changes (add or modify) in subtree which # are not detected by copy_directory command. -# TODO: Detect removal in the source tree and reflect in the install directory. file(GLOB_RECURSE HEADERS_IN_SYCL_DIR CONFIGURE_DEPENDS "${LIBSYCL_INCLUDE_DIR}/sycl/*") string(REPLACE "${LIBSYCL_INCLUDE_DIR}" "${LIBSYCL_BUILD_INCLUDE_DIR}" diff --git a/libsycl/README.md b/libsycl/README.md index c62ea249c57ed..c551e40dd821b 100644 --- a/libsycl/README.md +++ b/libsycl/README.md @@ -7,11 +7,11 @@ Subproject documentation is available at: [SYCL RT documentation](./docs). libsycl runtime library and headers require C++17 support or higher. -### How to use DPC++ +### How to use libsycl with Clang TBD -#### Build from sources +#### How to build TBD diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index 4051bea2edbb5..afcf713d645ad 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -92,7 +92,8 @@ 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}) +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}) From d7f006cb5b12e15211be4f3f27e7f606c210a8fe Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Mon, 2 Jun 2025 09:04:53 -0700 Subject: [PATCH 15/21] remove extra PDB handling Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 36 +----------------------------------- 1 file changed, 1 insertion(+), 35 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index d5283d2c19c6f..2689d8c34b598 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -66,43 +66,9 @@ set(LIBSYCL_ABI_NAMESPACE "V${LIBSYCL_MAJOR_VERSION}" CACHE STRING # Setup Compiler Flags #=============================================================================== +# Starting CMake 3.26 this property as ON by default. With 3.20+ we still need to set it. if(MSVC) set_property(GLOBAL PROPERTY USE_FOLDERS ON) - # Skip asynchronous C++ exceptions catching and assume "extern C" functions - # never throw C++ exceptions. - append("/EHsc" CMAKE_CXX_FLAGS) - - # Add PDB debug information - list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}") - include(CheckLinkerFlag) - check_linker_flag(CXX "LINKER:/DEBUG" LINKER_SUPPORTS_DEBUG) - if(LINKER_SUPPORTS_DEBUG) - # sccache is not compatible with /Zi flag - # https://github.com/mozilla/sccache?tab=readme-ov-file#usage - if (CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "sccache") - # CMake may put /Zi by default - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") - string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") - elseif(CMAKE_BUILD_TYPE STREQUAL "Release") - string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") - string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") - elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") - string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") - string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") - endif() - append("/Z7" CMAKE_CXX_FLAGS) - else() - append("/Zi" CMAKE_CXX_FLAGS) - endif() - add_link_options("LINKER:/DEBUG") - - # Enable unreferenced removal and ICF in Release mode. - check_linker_flag(CXX "LINKER:/OPT:REF,/OPT:ICF" LINKER_SUPPORTS_OPTS) - if (LINKER_SUPPORTS_OPTS AND uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE") - add_link_options("LINKER:/OPT:REF" "LINKER:/OPT:ICF") - endif() - endif() endif() # Enable all warnings by default From 56848acfff4d6bc9bb5dab1e55721e8792354cad Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Tue, 3 Jun 2025 03:53:05 -0700 Subject: [PATCH 16/21] fix names of macro Signed-off-by: Tikhomirova, Kseniya --- libsycl/include/sycl/detail/config.hpp | 44 +++++++++++++------------- libsycl/include/sycl/platform.hpp | 6 ++-- libsycl/src/CMakeLists.txt | 2 +- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/libsycl/include/sycl/detail/config.hpp b/libsycl/include/sycl/detail/config.hpp index 60fa8cfaed04c..f7f7b93ee6f51 100644 --- a/libsycl/include/sycl/detail/config.hpp +++ b/libsycl/include/sycl/detail/config.hpp @@ -17,46 +17,46 @@ #include -#define __SYCL_BEGIN_UNVERSIONED_NAMESPACE namespace sycl { -#define __SYCL_END_UNVERSIONED_NAMESPACE } +#define __LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE namespace sycl { +#define __LIBSYCL_END_UNVERSIONED_NAMESPACE } -#define __SYCL_BEGIN_VERSIONED_NAMESPACE \ - __SYCL_BEGIN_UNVERSIONED_NAMESPACE inline namespace __LIBSYCL_ABI_NAMESPACE { -#define __SYCL_END_VERSIONED_NAMESPACE \ +#define __LIBSYCL_BEGIN_VERSIONED_NAMESPACE \ + __LIBSYCL_BEGIN_UNVERSIONED_NAMESPACE inline namespace __LIBSYCL_ABI_NAMESPACE { +#define __LIBSYCL_END_VERSIONED_NAMESPACE \ } \ - __SYCL_END_UNVERSIONED_NAMESPACE + __LIBSYCL_END_UNVERSIONED_NAMESPACE #ifndef __SYCL_DEVICE_ONLY__ -#ifndef __SYCL_EXPORT +#ifndef __LIBSYCL_EXPORT #ifdef _WIN32 -#define __SYCL_DLL_LOCAL +#define __LIBSYCL_DLL_LOCAL -#if __SYCL_BUILD_SYCL_DLL -#define __SYCL_EXPORT __declspec(dllexport) -#define __SYCL_EXPORT_DEPRECATED(x) __declspec(dllexport, deprecated(x)) +#if __LIBSYCL_BUILD_SYCL_DLL +#define __LIBSYCL_EXPORT __declspec(dllexport) +#define __LIBSYCL_EXPORT_DEPRECATED(x) __declspec(dllexport, deprecated(x)) #else -#define __SYCL_EXPORT __declspec(dllimport) -#define __SYCL_EXPORT_DEPRECATED(x) __declspec(dllimport, deprecated(x)) -#endif //__SYCL_BUILD_SYCL_DLL +#define __LIBSYCL_EXPORT __declspec(dllimport) +#define __LIBSYCL_EXPORT_DEPRECATED(x) __declspec(dllimport, deprecated(x)) +#endif //__LIBSYCL_BUILD_SYCL_DLL #else // _WIN32 -#define __SYCL_DLL_LOCAL __attribute__((visibility("hidden"))) +#define __LIBSYCL_DLL_LOCAL __attribute__((visibility("hidden"))) -#define __SYCL_EXPORT __attribute__((visibility("default"))) -#define __SYCL_EXPORT_DEPRECATED(x) \ +#define __LIBSYCL_EXPORT __attribute__((visibility("default"))) +#define __LIBSYCL_EXPORT_DEPRECATED(x) \ __attribute__((visibility("default"), deprecated(x))) #endif // _WIN32 -#endif // __SYCL_EXPORT +#endif // __LIBSYCL_EXPORT #else // __SYCL_DEVICE_ONLY__ -#ifndef __SYCL_EXPORT -#define __SYCL_EXPORT -#define __SYCL_EXPORT_DEPRECATED(x) -#define __SYCL_DLL_LOCAL +#ifndef __LIBSYCL_EXPORT +#define __LIBSYCL_EXPORT +#define __LIBSYCL_EXPORT_DEPRECATED(x) +#define __LIBSYCL_DLL_LOCAL #endif #endif // __SYCL_DEVICE_ONLY__ diff --git a/libsycl/include/sycl/platform.hpp b/libsycl/include/sycl/platform.hpp index e23205a7a66ba..bbfbaf7d343f5 100644 --- a/libsycl/include/sycl/platform.hpp +++ b/libsycl/include/sycl/platform.hpp @@ -17,15 +17,15 @@ #include -__SYCL_BEGIN_VERSIONED_NAMESPACE +__LIBSYCL_BEGIN_VERSIONED_NAMESPACE -class __SYCL_EXPORT platform { +class __LIBSYCL_EXPORT platform { public: /// Constructs a SYCL platform using the default device. platform(); }; // class platform -__SYCL_END_VERSIONED_NAMESPACE +__LIBSYCL_END_VERSIONED_NAMESPACE #endif // __LIBSYCL_PLATFORM_HPP diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index afcf713d645ad..d64e5dcbd623e 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -6,7 +6,7 @@ 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 $<$:__SYCL_BUILD_SYCL_DLL>) + target_compile_definitions(${LIB_OBJ_NAME} PRIVATE $<$:__LIBSYCL_BUILD_SYCL_DLL>) target_include_directories( ${LIB_OBJ_NAME} PRIVATE From 0414f6d524000d5ffa53a222d72a00a98fde78bb Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Tue, 3 Jun 2025 04:41:50 -0700 Subject: [PATCH 17/21] fix src files Signed-off-by: Tikhomirova, Kseniya --- libsycl/src/platform.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsycl/src/platform.cpp b/libsycl/src/platform.cpp index 821e6366920d5..d2c0a47ceba82 100644 --- a/libsycl/src/platform.cpp +++ b/libsycl/src/platform.cpp @@ -10,8 +10,8 @@ #include -__SYCL_BEGIN_VERSIONED_NAMESPACE +__LIBSYCL_BEGIN_VERSIONED_NAMESPACE platform::platform() { throw std::runtime_error("Unimplemented"); } -__SYCL_END_VERSIONED_NAMESPACE +__LIBSYCL_END_VERSIONED_NAMESPACE From 59f8e2524051e5041314cfc6aba73d8bff1fa3da Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 4 Jun 2025 04:39:40 -0700 Subject: [PATCH 18/21] fix generated files location Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 24 ++++++++++++++++-------- libsycl/src/CMakeLists.txt | 2 +- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 2689d8c34b598..00c1229073dd8 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -46,8 +46,9 @@ else() "Path where built libsycl libraries should be installed.") endif() -set(LIBSYCL_INCLUDE_DIR ${LIBSYCL_SOURCE_DIR}/include) -set(LIBSYCL_BUILD_INCLUDE_DIR ${LLVM_BINARY_DIR}/include) +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}) @@ -62,6 +63,15 @@ 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.") +# 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) + #=============================================================================== # Setup Compiler Flags #=============================================================================== @@ -88,24 +98,22 @@ endif() # 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_INCLUDE_DIR}/sycl/*") +file(GLOB_RECURSE HEADERS_IN_SYCL_DIR CONFIGURE_DEPENDS "${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl/*") -string(REPLACE "${LIBSYCL_INCLUDE_DIR}" "${LIBSYCL_BUILD_INCLUDE_DIR}" +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}) -configure_file("${LIBSYCL_SOURCE_DIR}/src/version.hpp.in" "${LIBSYCL_INCLUDE_DIR}/sycl/version.hpp") - add_custom_command( OUTPUT ${OUT_HEADERS_IN_SYCL_DIR} DEPENDS ${HEADERS_IN_SYCL_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBSYCL_INCLUDE_DIR}/sycl ${LIBSYCL_BUILD_INCLUDE_DIR}/sycl + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl ${LIBSYCL_BUILD_INCLUDE_DIR}/sycl COMMENT "Copying SYCL headers...") -install(DIRECTORY "${LIBSYCL_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INSTALL_INCLUDE_DIR} COMPONENT sycl-headers) +install(DIRECTORY "${LIBSYCL_SOURCE_INCLUDE_DIR}/sycl" DESTINATION ${LIBSYCL_INCLUDE_DIR}/sycl COMPONENT sycl-headers) if (WIN32) set(LIBSYCL_RT_LIBS ${LIBSYCL_SHARED_OUTPUT_NAME}${LIBSYCL_MAJOR_VERSION}) diff --git a/libsycl/src/CMakeLists.txt b/libsycl/src/CMakeLists.txt index d64e5dcbd623e..baec5a685e67d 100644 --- a/libsycl/src/CMakeLists.txt +++ b/libsycl/src/CMakeLists.txt @@ -11,7 +11,7 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) ${LIB_OBJ_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - "${LIBSYCL_INCLUDE_DIR}" + ${LIBSYCL_BUILD_INCLUDE_DIR} ) add_library(${LIB_NAME} SHARED From 05723f7703d46b1118a08500fca769a6533c825b Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Wed, 4 Jun 2025 05:56:21 -0700 Subject: [PATCH 19/21] fix more comments Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 00c1229073dd8..6d49899f72fe4 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -22,8 +22,7 @@ option(LIBSYCL_ENABLE_WERROR "Treat all warnings as errors in the libsycl projec # Configure System #=============================================================================== -set(LIBSYCL_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE STRING - "Path where libsycl headers should be installed.") +set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(LIBSYCL_SHARED_OUTPUT_NAME "sycl" CACHE STRING "Output name for the shared libsycl runtime library.") @@ -32,6 +31,7 @@ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE) 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.") @@ -76,15 +76,10 @@ install(FILES # Setup Compiler Flags #=============================================================================== -# Starting CMake 3.26 this property as ON by default. With 3.20+ we still need to set it. -if(MSVC) - set_property(GLOBAL PROPERTY USE_FOLDERS ON) -endif() - # Enable all warnings by default -if (MSVC) +if(MSVC) append("/W4" CMAKE_CXX_FLAGS) -else () +else() append("-Wall -Wextra" CMAKE_CXX_FLAGS) endif() From d60c7a00663ddc3cbafa1181f4d7ce664516365f Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Thu, 5 Jun 2025 04:15:48 -0700 Subject: [PATCH 20/21] fix last comments Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 6d49899f72fe4..0fc2a382cc0c5 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -54,8 +54,6 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBSYCL_LIBRARY_DIR}) -# The change in LIBSYCL_MAJOR_VERSION must be accompanied with the same update in -# clang/lib/Driver/CMakeLists.txt. set(LIBSYCL_MAJOR_VERSION 0) set(LIBSYCL_MINOR_VERSION 1) set(LIBSYCL_PATCH_VERSION 0) @@ -63,15 +61,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.") -# 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) - #=============================================================================== # Setup Compiler Flags #=============================================================================== @@ -91,6 +80,19 @@ if(LIBSYCL_ENABLE_WERROR) 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/*") From 813cfc379d5312c2fe3a5817d5b3bb0d5ebc3f34 Mon Sep 17 00:00:00 2001 From: "Tikhomirova, Kseniya" Date: Thu, 5 Jun 2025 04:39:02 -0700 Subject: [PATCH 21/21] fix install dir Signed-off-by: Tikhomirova, Kseniya --- libsycl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsycl/CMakeLists.txt b/libsycl/CMakeLists.txt index 0fc2a382cc0c5..a20ad3a598616 100644 --- a/libsycl/CMakeLists.txt +++ b/libsycl/CMakeLists.txt @@ -110,7 +110,7 @@ add_custom_command( 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}/sycl COMPONENT 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})