Author: Wenju He
Date: 2026-05-15T10:17:35+08:00
New Revision: 3d7c5e0bbdf5107ed5e18afcbc83a0d84d9685bb

URL: 
https://github.com/llvm/llvm-project/commit/3d7c5e0bbdf5107ed5e18afcbc83a0d84d9685bb
DIFF: 
https://github.com/llvm/llvm-project/commit/3d7c5e0bbdf5107ed5e18afcbc83a0d84d9685bb.diff

LOG: [libclc] Move sources collection into libclc_add_builtin_library, merge 
opencl library creation into libclc_add_library (#197654)

Merging opencl library creation into libclc_add_library undos part of
change in 14bf8e7.
This simplifies creating different libraries by invoking
libclc_add_library multiple times, without the need of splitting
intermediate library creation and its finalization.

add_subdirectory(clc) and add_subdirectory(opencl) only updates sources
list of existing library target, so it is safe to move inside
libclc_add_builtin_library.

Added: 
    

Modified: 
    libclc/CMakeLists.txt
    libclc/cmake/modules/AddLibclc.cmake

Removed: 
    


################################################################################
diff  --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt
index 5630c8c59cca4..2365e8a631060 100644
--- a/libclc/CMakeLists.txt
+++ b/libclc/CMakeLists.txt
@@ -201,30 +201,25 @@ libclc_add_builtin_library(${LIBCLC_CLC_TARGET}
   COMPILE_OPTIONS ${compile_flags}
   INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/clc/include
   COMPILE_DEFINITIONS ${common_defs}
+  SOURCE_SUB_DIR clc
   FOLDER "libclc/Device IR/CLC"
 )
 
+# Build, link, and install the final OpenCL builtins library.
 set(LIBCLC_OPENCL_TARGET opencl)
-libclc_add_builtin_library(${LIBCLC_OPENCL_TARGET}
+libclc_add_library(libclc-${LIBCLC_TARGET}
+  ARCH ${LIBCLC_TARGET_ARCH}
+  TRIPLE ${clang_triple}
+  TARGET_TRIPLE ${LIBCLC_TARGET}
   COMPILE_OPTIONS ${compile_flags} "SHELL:-Xclang -fdeclare-opencl-builtins"
   INCLUDE_DIRS
     ${CMAKE_CURRENT_SOURCE_DIR}/clc/include
     ${CMAKE_CURRENT_SOURCE_DIR}/opencl/include
   COMPILE_DEFINITIONS ${common_defs}
-  FOLDER "libclc/Device IR/Intermediate"
-)
-
-add_subdirectory(clc)
-add_subdirectory(opencl)
-
-# Link and install the final OpenCL builtins library.
-libclc_add_library(libclc-${LIBCLC_TARGET}
-  ARCH ${LIBCLC_TARGET_ARCH}
-  TRIPLE ${clang_triple}
-  TARGET_TRIPLE ${LIBCLC_TARGET}
-  LIBRARIES ${LIBCLC_OPENCL_TARGET}
   INTERNALIZE_LIBRARIES ${LIBCLC_CLC_TARGET}
   OPT_FLAGS ${opt_flags}
+  SOURCE_TARGET ${LIBCLC_OPENCL_TARGET}
+  SOURCE_SUB_DIR opencl
   OUTPUT_FILENAME libclc
   PARENT_TARGET libclc-opencl-builtins
 )

diff  --git a/libclc/cmake/modules/AddLibclc.cmake 
b/libclc/cmake/modules/AddLibclc.cmake
index 60900b7e4f8e7..d84101f71d2f9 100644
--- a/libclc/cmake/modules/AddLibclc.cmake
+++ b/libclc/cmake/modules/AddLibclc.cmake
@@ -58,37 +58,56 @@ endfunction()
 function(libclc_add_builtin_library target_name)
   cmake_parse_arguments(ARG
     ""
-    "FOLDER"
+    "FOLDER;SOURCE_SUB_DIR"
     "COMPILE_OPTIONS;INCLUDE_DIRS;COMPILE_DEFINITIONS"
     ${ARGN}
   )
 
+  if(NOT ARG_SOURCE_SUB_DIR)
+    message(FATAL_ERROR "SOURCE_SUB_DIR is required for 
libclc_add_builtin_library")
+  endif()
+
   add_library(${target_name} OBJECT)
   target_compile_options(${target_name} PRIVATE ${ARG_COMPILE_OPTIONS})
   target_include_directories(${target_name} PRIVATE ${ARG_INCLUDE_DIRS})
   target_compile_definitions(${target_name} PRIVATE ${ARG_COMPILE_DEFINITIONS})
   set_target_properties(${target_name} PROPERTIES FOLDER ${ARG_FOLDER})
+
+  # Populate sources.
+  add_subdirectory(
+    ${LIBCLC_SOURCE_DIR}/${ARG_SOURCE_SUB_DIR}
+    ${CMAKE_CURRENT_BINARY_DIR}/${target_name}
+  )
 endfunction()
 
-# Links builtin libclc object libraries together into a merged bitcode or 
SPIR-V
-# file and a static archive.
+# Builds a builtin library from sources, links it with any internalized
+# dependencies, produces the final output file, and registers it for
+# installation.
 function(libclc_add_library target_name)
   cmake_parse_arguments(ARG
     ""
-    "ARCH;TRIPLE;TARGET_TRIPLE;OUTPUT_FILENAME;PARENT_TARGET"
-    "LIBRARIES;INTERNALIZE_LIBRARIES;OPT_FLAGS"
+    
"ARCH;TRIPLE;TARGET_TRIPLE;SOURCE_TARGET;SOURCE_SUB_DIR;OUTPUT_FILENAME;PARENT_TARGET"
+    
"COMPILE_OPTIONS;INCLUDE_DIRS;COMPILE_DEFINITIONS;INTERNALIZE_LIBRARIES;OPT_FLAGS"
     ${ARGN}
   )
 
+  if(NOT ARG_SOURCE_TARGET)
+    message(FATAL_ERROR "SOURCE_TARGET is required for libclc_add_library")
+  endif()
   if(NOT ARG_OUTPUT_FILENAME)
     message(FATAL_ERROR "OUTPUT_FILENAME is required for libclc_add_library")
   endif()
   if(NOT ARG_PARENT_TARGET)
     message(FATAL_ERROR "PARENT_TARGET is required for libclc_add_library")
   endif()
-  if(NOT ARG_LIBRARIES)
-    message(FATAL_ERROR "LIBRARIES is required for libclc_add_library")
-  endif()
+
+  libclc_add_builtin_library(${ARG_SOURCE_TARGET}
+    COMPILE_OPTIONS ${ARG_COMPILE_OPTIONS}
+    INCLUDE_DIRS ${ARG_INCLUDE_DIRS}
+    COMPILE_DEFINITIONS ${ARG_COMPILE_DEFINITIONS}
+    SOURCE_SUB_DIR ${ARG_SOURCE_SUB_DIR}
+    FOLDER "libclc/Device IR/Intermediate"
+  )
 
   set(library_dir ${LIBCLC_OUTPUT_LIBRARY_DIR}/${ARG_TARGET_TRIPLE})
   file(MAKE_DIRECTORY ${library_dir})
@@ -97,7 +116,7 @@ function(libclc_add_library target_name)
   set(archive_target ${target_name}.a)
   add_library(${archive_target} STATIC)
   target_link_libraries(${archive_target} PRIVATE
-    ${ARG_LIBRARIES} ${ARG_INTERNALIZE_LIBRARIES}
+    ${ARG_SOURCE_TARGET} ${ARG_INTERNALIZE_LIBRARIES}
   )
   set_target_properties(${archive_target} PROPERTIES
     OUTPUT_NAME ${ARG_OUTPUT_FILENAME}
@@ -106,19 +125,19 @@ function(libclc_add_library target_name)
     FOLDER "libclc/Device IR/Library"
   )
 
-  # Link the object files, using a temporary library as for internalization.
+  # Link the object files, using a temporary library for internalization.
   set(linked_bc ${CMAKE_CURRENT_BINARY_DIR}/${target_name}.linked.bc)
   set(link_cmd ${llvm-link_exe})
   set(link_deps ${llvm-link_target})
-  foreach(lib ${ARG_LIBRARIES})
-    add_library(${target_name}-${lib} STATIC)
-    target_link_libraries(${target_name}-${lib} PRIVATE ${lib})
-    set_target_properties(${target_name}-${lib} PROPERTIES
-      FOLDER "libclc/Device IR/Library"
-    )
-    list(APPEND link_cmd $<TARGET_FILE:${target_name}-${lib}>)
-    list(APPEND link_deps ${target_name}-${lib})
-  endforeach()
+
+  add_library(${target_name}-src STATIC)
+  target_link_libraries(${target_name}-src PRIVATE ${ARG_SOURCE_TARGET})
+  set_target_properties(${target_name}-src PROPERTIES
+    FOLDER "libclc/Device IR/Library"
+  )
+  list(APPEND link_cmd $<TARGET_FILE:${target_name}-src>)
+  list(APPEND link_deps ${target_name}-src)
+
   if(ARG_INTERNALIZE_LIBRARIES)
     list(APPEND link_cmd --internalize --only-needed)
     foreach(lib ${ARG_INTERNALIZE_LIBRARIES})


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to