[libclc] [libclc] Fix commands in compile_to_bc are executed sequentially (PR #130755)

Wenju He via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 11 04:25:59 PDT 2025


https://github.com/wenju-he created https://github.com/llvm/llvm-project/pull/130755

In libclc, we observe that compiling OpenCL source files to bitcode is executed sequentially on Windows, which increases debug build time by about an hour.
add_custom_command may introduce additional implicit dependencies, see https://gitlab.kitware.com/cmake/cmake/-/issues/17097
This PR adds a target for each command and enables parallel builds of OpenCL source files.

>From 1f8b5bfbfea6b562e9cae088256e8e5dddf0a335 Mon Sep 17 00:00:00 2001
From: Wenju He <wenju.he at intel.com>
Date: Tue, 11 Mar 2025 04:24:36 -0700
Subject: [PATCH] [libclc] Fix commands in compile_to_bc are executed
 sequentially

In libclc, we observe that compiling OpenCL source files to bitcode is
executed sequentially on Windows, which increases debug build time by
about an hour.
add_custom_command may introduce additional implicit dependencies, see
https://gitlab.kitware.com/cmake/cmake/-/issues/17097
This PR adds a target for each command and enables parallel builds of
OpenCL source files.
---
 libclc/cmake/modules/AddLibclc.cmake | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/libclc/cmake/modules/AddLibclc.cmake b/libclc/cmake/modules/AddLibclc.cmake
index 911559ff4bfa9..9dc328fcd489c 100644
--- a/libclc/cmake/modules/AddLibclc.cmake
+++ b/libclc/cmake/modules/AddLibclc.cmake
@@ -1,6 +1,8 @@
 # Compiles an OpenCL C - or assembles an LL file - to bytecode
 #
 # Arguments:
+# * TARGET <string>
+#     Custom target to create
 # * TRIPLE <string>
 #     Target triple for which to compile the bytecode file.
 # * INPUT <string>
@@ -17,7 +19,7 @@
 function(compile_to_bc)
   cmake_parse_arguments(ARG
     ""
-    "TRIPLE;INPUT;OUTPUT"
+    "TARGET;TRIPLE;INPUT;OUTPUT"
     "EXTRA_OPTS;DEPENDENCIES"
     ${ARGN}
   )
@@ -60,9 +62,11 @@ function(compile_to_bc)
     DEPENDS
       ${clang_target}
       ${ARG_INPUT}
-      ${ARG_DEPENDENCIES}
     DEPFILE ${ARG_OUTPUT}.d
   )
+  add_custom_target( ${ARG_TARGET}
+    DEPENDS ${ARG_OUTPUT}${TMP_SUFFIX} ${ARG_DEPENDENCIES}
+  )
 
   if( ${FILE_EXT} STREQUAL ".ll" )
     add_custom_command(
@@ -70,6 +74,7 @@ function(compile_to_bc)
       COMMAND ${llvm-as_exe} -o ${ARG_OUTPUT} ${ARG_OUTPUT}${TMP_SUFFIX}
       DEPENDS ${llvm-as_target} ${ARG_OUTPUT}${TMP_SUFFIX}
     )
+    add_custom_target( ${ARG_TARGET}-as DEPENDS ${ARG_OUTPUT} )
   endif()
 endfunction()
 
@@ -227,6 +232,7 @@ function(add_libclc_builtin_set)
 
   set( bytecode_files )
   set( bytecode_ir_files )
+  set( compile_tgts )
   foreach( file IN LISTS ARG_GEN_FILES ARG_LIB_FILES )
     # We need to take each file and produce an absolute input file, as well
     # as a unique architecture-specific output file. We deal with a mix of
@@ -256,7 +262,11 @@ function(add_libclc_builtin_set)
 
     get_filename_component( file_dir ${file} DIRECTORY )
 
+    string( REPLACE "/" "-" replaced ${file} )
+    set( tgt compile_tgt-${ARG_ARCH_SUFFIX}${replaced})
+
     compile_to_bc(
+      TARGET ${tgt}
       TRIPLE ${ARG_TRIPLE}
       INPUT ${input_file}
       OUTPUT ${output_file}
@@ -264,11 +274,13 @@ function(add_libclc_builtin_set)
         "${ARG_COMPILE_FLAGS}" -I${CMAKE_CURRENT_SOURCE_DIR}/${file_dir}
       DEPENDENCIES ${input_file_dep}
     )
+    list( APPEND compile_tgts ${tgt} )
 
     # Collect all files originating in LLVM IR separately
     get_filename_component( file_ext ${file} EXT )
     if( ${file_ext} STREQUAL ".ll" )
       list( APPEND bytecode_ir_files ${output_file} )
+      list( APPEND compile_tgts ${tgt}-as )
     else()
       list( APPEND bytecode_files ${output_file} )
     endif()
@@ -283,7 +295,7 @@ function(add_libclc_builtin_set)
 
   set( builtins_comp_lib_tgt builtins.comp.${ARG_ARCH_SUFFIX} )
   add_custom_target( ${builtins_comp_lib_tgt}
-    DEPENDS ${bytecode_files}
+    DEPENDS ${compile_tgts}
   )
   set_target_properties( ${builtins_comp_lib_tgt} PROPERTIES FOLDER "libclc/Device IR/Comp" )
 



More information about the cfe-commits mailing list