[llvm] [SYCL] Add libsycl, a SYCL RT library implementation project (PR #144372)

Tom Honermann via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 9 21:20:31 PDT 2025


================
@@ -0,0 +1,94 @@
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes/cmake/Modules")
+include(WarningFlags)
+
+function(add_sycl_rt_library LIB_TARGET_NAME LIB_OBJ_NAME LIB_OUTPUT_NAME)
+  if (NOT LLVM_ENABLE_PIC)
+    message( FATAL_ERROR "Position-Independent Code generation is required for libsycl shared library" )
+  endif()
+
+  cmake_parse_arguments(ARG "" "" "COMPILE_OPTIONS;SOURCES" ${ARGN})
+
+  add_library(${LIB_OBJ_NAME} OBJECT ${ARG_SOURCES})
+
+  # Common compilation step setup
+  target_compile_definitions(${LIB_OBJ_NAME} PRIVATE
+              $<$<STREQUAL:${CMAKE_SYSTEM_NAME},Windows>:_LIBSYCL_BUILDING_LIBRARY>)
+  cxx_add_warning_flags(${LIB_OBJ_NAME} ${LIBSYCL_ENABLE_WERROR} ${LIBSYCL_ENABLE_PEDANTIC})
+
+  target_include_directories(
+    ${LIB_OBJ_NAME}
+    PRIVATE
+      ${CMAKE_CURRENT_SOURCE_DIR}
+      ${LIBSYCL_BUILD_INCLUDE_DIR}
+  )
+
+  add_library(${LIB_TARGET_NAME} SHARED
+              $<TARGET_OBJECTS:${LIB_OBJ_NAME}>)
+
+  add_dependencies(${LIB_OBJ_NAME}
+    sycl-headers
+  )
+
+  set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)
+
+  if (CMAKE_SYSTEM_NAME STREQUAL Windows)
+    # Install stripped PDB
+    set(PDB_FILENAME "${LIB_TARGET_NAME}$<$<CONFIG:Debug>:d>")
+    check_linker_flag(CXX "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb"
+                          LINKER_SUPPORTS_PDBSTRIPPED)
+    if(LINKER_SUPPORTS_PDBSTRIPPED)
+      target_link_options(${LIB_TARGET_NAME}
+                          PRIVATE "LINKER:/PDBSTRIPPED:${PDB_FILENAME}.stripped.pdb")
+      install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PDB_FILENAME}.stripped.pdb"
+              DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
+              RENAME "${PDB_FILENAME}.pdb"
+              COMPONENT ${LIB_TARGET_NAME}
+              OPTIONAL)
+    endif()
+
+    target_compile_options(${LIB_OBJ_NAME} PUBLIC /EHsc)
+  else()
+    target_compile_options(${LIB_OBJ_NAME} PUBLIC
+                           -fvisibility=hidden -fvisibility-inlines-hidden)
+
+    if (UNIX AND NOT APPLE)
+      set(linker_script "${CMAKE_CURRENT_SOURCE_DIR}/ld-version-script.txt")
+      target_link_libraries(
+          ${LIB_TARGET_NAME} PRIVATE "-Wl,--version-script=${linker_script}")
+      set_target_properties(${LIB_TARGET_NAME} PROPERTIES LINK_DEPENDS ${linker_script})
+    endif()
+  endif()
+
+  find_package(Threads REQUIRED)
+
+  target_link_libraries(${LIB_TARGET_NAME}
+    PRIVATE
+      ${CMAKE_DL_LIBS}
+      ${CMAKE_THREAD_LIBS_INIT}
+  )
+
+  set_target_properties(${LIB_TARGET_NAME} PROPERTIES
+                        VERSION ${LIBSYCL_VERSION_STRING}
+                        SOVERSION ${LIBSYCL_VERSION_STRING})
+  set_target_properties(${LIB_TARGET_NAME} PROPERTIES OUTPUT_NAME ${LIB_OUTPUT_NAME})
+endfunction(add_sycl_rt_library)
+
+set(LIBSYCL_SOURCES
+    "platform.cpp"
+)
+
+set(LIB_NAME "sycl")
+set(LIB_OUTPUT_NAME "${LIB_NAME}")
+if (CMAKE_SYSTEM_NAME STREQUAL Windows)
+  if (CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL MultiThreadedDebugDLL)
----------------
tahonermann wrote:

Do we need to check for "MultiThreadedDebugDLL" specifically? I think the libc++ logic looks appropriate to use here. See https://github.com/llvm/llvm-project/blob/617af3cc50c48ec71889b893dd2658764f19abce/libcxx/CMakeLists.txt#L677-L679.
```suggestion
  if ((NOT CMAKE_MSVC_RUNTIME_LIBRARY AND uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
      OR (CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "Debug"))
```
I know we expect `CMAKE_MSVC_RUNTIME_LIBRARY` to always be set currently, but this logic will still work as expected if we relax that restriction later.

https://github.com/llvm/llvm-project/pull/144372


More information about the llvm-commits mailing list