[libclc] 15c2d1b - [libclc] Fix dependencies on generated convert builtins (#127515)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 17 09:36:06 PST 2025
Author: Fraser Cormack
Date: 2025-02-17T17:36:02Z
New Revision: 15c2d1b328433d2c26327e072059c8960469d378
URL: https://github.com/llvm/llvm-project/commit/15c2d1b328433d2c26327e072059c8960469d378
DIFF: https://github.com/llvm/llvm-project/commit/15c2d1b328433d2c26327e072059c8960469d378.diff
LOG: [libclc] Fix dependencies on generated convert builtins (#127515)
In #127378 it was reported that builds without clspv targets enabled
were failing after #124727, as all targets had a dependency on a file
that only clspv targets generated.
A quick fix was merged in #127315 which wasn't correct. It moved the
dependency on those generated files to the spirv targets, instead of
onto the clspv targets. This means a build with spirv targets and
without clspv targets would see the same problems as #127378 reported.
I tried simply removing the requirement to explicitly add dependencies
to the custom command, relying instead on the file-level dependencies.
This didn't seem reliable enough; in some cases on a Makefiles build,
the clang command compiling (e.g.,) convert.cl would begin before the
file was fully written.
Instead, we keep the target-level dependency but automatically infer it
based on the generated file name, to avoid manual book-keeping of pairs
of files and targets.
This commit also fixes what looks like an unintended bug where, when
ENABLE_RUNTIME_SUBNORMAL was enabled, the OpenCL conversions weren't
being compiled.
Added:
Modified:
libclc/CMakeLists.txt
libclc/cmake/modules/AddLibclc.cmake
Removed:
################################################################################
diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt
index c88ea9700d100..5cefa8a264310 100644
--- a/libclc/CMakeLists.txt
+++ b/libclc/CMakeLists.txt
@@ -243,30 +243,30 @@ add_custom_command(
OUTPUT convert.cl
COMMAND ${Python3_EXECUTABLE} ${script_loc} > convert.cl
DEPENDS ${script_loc} )
-add_custom_target( "generate_convert.cl" DEPENDS convert.cl )
-set_target_properties( "generate_convert.cl" PROPERTIES FOLDER "libclc/Sourcegenning" )
+add_custom_target( generate-convert.cl DEPENDS convert.cl )
+set_target_properties( generate-convert.cl PROPERTIES FOLDER "libclc/Sourcegenning" )
add_custom_command(
OUTPUT clc-convert.cl
COMMAND ${Python3_EXECUTABLE} ${script_loc} --clc > clc-convert.cl
DEPENDS ${script_loc} )
-add_custom_target( "clc-generate_convert.cl" DEPENDS clc-convert.cl )
-set_target_properties( "clc-generate_convert.cl" PROPERTIES FOLDER "libclc/Sourcegenning" )
+add_custom_target( generate-clc-convert.cl DEPENDS clc-convert.cl )
+set_target_properties( generate-clc-convert.cl PROPERTIES FOLDER "libclc/Sourcegenning" )
if ( clspv-- IN_LIST LIBCLC_TARGETS_TO_BUILD OR clspv64-- IN_LIST LIBCLC_TARGETS_TO_BUILD )
add_custom_command(
OUTPUT clspv-convert.cl
COMMAND ${Python3_EXECUTABLE} ${script_loc} --clspv > clspv-convert.cl
DEPENDS ${script_loc} )
- add_custom_target( "clspv-generate_convert.cl" DEPENDS clspv-convert.cl )
- set_target_properties( "clspv-generate_convert.cl" PROPERTIES FOLDER "libclc/Sourcegenning" )
+ add_custom_target( generate-clspv-convert.cl DEPENDS clspv-convert.cl )
+ set_target_properties( generate-clspv-convert.cl PROPERTIES FOLDER "libclc/Sourcegenning" )
add_custom_command(
OUTPUT clc-clspv-convert.cl
COMMAND ${Python3_EXECUTABLE} ${script_loc} --clc --clspv > clc-clspv-convert.cl
DEPENDS ${script_loc} )
- add_custom_target( "clc-clspv-generate_convert.cl" DEPENDS clc-clspv-convert.cl )
- set_target_properties( "clc-clspv-generate_convert.cl" PROPERTIES FOLDER "libclc/Sourcegenning" )
+ add_custom_target( generate-clc-clspv-convert.cl DEPENDS clc-clspv-convert.cl )
+ set_target_properties( generate-clc-clspv-convert.cl PROPERTIES FOLDER "libclc/Sourcegenning" )
endif()
enable_testing()
@@ -324,9 +324,11 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
if( NOT ARCH STREQUAL spirv AND NOT ARCH STREQUAL spirv64 )
if( ARCH STREQUAL clspv OR ARCH STREQUAL clspv64 )
list( APPEND opencl_gen_files clspv-convert.cl )
- elseif ( NOT ENABLE_RUNTIME_SUBNORMAL )
+ else()
list( APPEND opencl_gen_files convert.cl )
- list( APPEND opencl_lib_files generic/lib/subnormal_use_default.ll )
+ if ( NOT ENABLE_RUNTIME_SUBNORMAL )
+ list( APPEND opencl_lib_files generic/lib/subnormal_use_default.ll )
+ endif()
endif()
endif()
diff --git a/libclc/cmake/modules/AddLibclc.cmake b/libclc/cmake/modules/AddLibclc.cmake
index a3b311f12a1e3..5347b0822477b 100644
--- a/libclc/cmake/modules/AddLibclc.cmake
+++ b/libclc/cmake/modules/AddLibclc.cmake
@@ -230,11 +230,17 @@ function(add_libclc_builtin_set)
# 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
#
diff erent input files, which makes this trickier.
+ set( input_file_dep )
if( ${file} IN_LIST ARG_GEN_FILES )
# Generated files are given just as file names, which we must make
# absolute to the binary directory.
set( input_file ${CMAKE_CURRENT_BINARY_DIR}/${file} )
set( output_file "${LIBCLC_ARCH_OBJFILE_DIR}/${file}.bc" )
+ # If a target exists that generates this file, add that as a dependency
+ # of the custom command.
+ if( TARGET generate-${file} )
+ set( input_file_dep generate-${file} )
+ endif()
else()
# Other files are originally relative to each SOURCE file, which are
# then make relative to the libclc root directory. We must normalize
@@ -249,19 +255,13 @@ function(add_libclc_builtin_set)
get_filename_component( file_dir ${file} DIRECTORY )
- if( ARG_ARCH STREQUAL spirv OR ARG_ARCH STREQUAL spirv64 )
- set(CONVERT_DEP clspv-generate_convert.cl)
- else()
- set(CONVERT_DEP generate_convert.cl)
- endif()
-
compile_to_bc(
TRIPLE ${ARG_TRIPLE}
INPUT ${input_file}
OUTPUT ${output_file}
EXTRA_OPTS -fno-builtin -nostdlib
"${ARG_COMPILE_FLAGS}" -I${CMAKE_CURRENT_SOURCE_DIR}/${file_dir}
- DEPENDENCIES ${CONVERT_DEP}
+ DEPENDENCIES ${input_file_dep}
)
list( APPEND bytecode_files ${output_file} )
endforeach()
More information about the cfe-commits
mailing list