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

Tom Honermann via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 10 14:57:56 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:

Hmm, I didn't realize that `MultiThreadedDebugDLL` was the only supported option when building in debug mode. It seems that should be asserted rather than result in the "d" suffix being silently dropped. Should we also ensure that a MT variant is used? How about this?
```
  if (CMAKE_MSVC_RUNTIME_LIBRARY
      AND (NOT CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "^MultiThreaded.*DLL$"))
    message(FATAL_ERROR "libsycl requires a multi-threaded DLL version of the MSVC CRT.")
  endif()
  if (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
    if (NOT CMAKE_MSVC_RUNTIME_LIBRARY STREQUAL "MultiThreadedDebugDLL")
      message(FATAL_ERROR "Debug builds of libsycl require a multi-threaded debug DLL version of the MSVC CRT.")
    endif()
    set(LIB_OUTPUT_NAME "${LIB_OUTPUT_NAME}d")
  endif()
```

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


More information about the llvm-commits mailing list