Skip to content

Commit 81e6552

Browse files
authored
[libclc] Make library output directories explicit (#146833)
These changes were split off from #146503. This commit makes the output directories of libclc artefacts explicit. It creates a variable for the final output directory - LIBCLC_OUTPUT_LIBRARY_DIR - which has not changed. This allows future changes to alter the output directory more simply, such as by pointing it to somewhere inside clang's resource directory. This commit also changes the output directory of each target's intermediate builtins.*.bc files. They are now placed into each respective libclc target's object directory, rather than the top-level libclc binary directory. This should help keep the binary directory a bit tidier.
1 parent 1f8e2a4 commit 81e6552

File tree

2 files changed

+35
-22
lines changed

2 files changed

+35
-22
lines changed

libclc/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ else()
8484
endif()
8585
endif()
8686

87+
# Setup the paths where libclc runtimes should be stored.
88+
set( LIBCLC_OUTPUT_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR} )
89+
8790
if( EXISTS ${LIBCLC_CUSTOM_LLVM_TOOLS_BINARY_DIR} )
8891
message( WARNING "Using custom LLVM tools to build libclc: "
8992
"${LIBCLC_CUSTOM_LLVM_TOOLS_BINARY_DIR}, "

libclc/cmake/modules/AddLibclc.cmake

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,14 @@ function(link_bc)
120120
endif()
121121

122122
add_custom_command(
123-
OUTPUT ${ARG_TARGET}.bc
124-
COMMAND ${llvm-link_exe} ${link_flags} -o ${ARG_TARGET}.bc ${LINK_INPUT_ARG}
123+
OUTPUT ${LIBCLC_ARCH_OBJFILE_DIR}/${ARG_TARGET}.bc
124+
COMMAND ${llvm-link_exe} ${link_flags} -o ${LIBCLC_ARCH_OBJFILE_DIR}/${ARG_TARGET}.bc ${LINK_INPUT_ARG}
125125
DEPENDS ${llvm-link_target} ${ARG_DEPENDENCIES} ${ARG_INPUTS} ${RSP_FILE}
126126
)
127127

128-
add_custom_target( ${ARG_TARGET} ALL DEPENDS ${ARG_TARGET}.bc )
128+
add_custom_target( ${ARG_TARGET} ALL DEPENDS ${LIBCLC_ARCH_OBJFILE_DIR}/${ARG_TARGET}.bc )
129129
set_target_properties( ${ARG_TARGET} PROPERTIES
130-
TARGET_FILE ${CMAKE_CURRENT_BINARY_DIR}/${ARG_TARGET}.bc
130+
TARGET_FILE ${LIBCLC_ARCH_OBJFILE_DIR}/${ARG_TARGET}.bc
131131
FOLDER "libclc/Device IR/Linking"
132132
)
133133
endfunction()
@@ -360,33 +360,36 @@ function(add_libclc_builtin_set)
360360
# llvm-spirv tool.
361361
if( ARG_ARCH STREQUAL spirv OR ARG_ARCH STREQUAL spirv64 )
362362
set( obj_suffix ${ARG_ARCH_SUFFIX}.spv )
363-
add_custom_command( OUTPUT ${obj_suffix}
364-
COMMAND ${llvm-spirv_exe} ${spvflags} -o ${obj_suffix} ${builtins_link_lib}
363+
set( libclc_builtins_lib ${LIBCLC_OUTPUT_LIBRARY_DIR}/${obj_suffix} )
364+
add_custom_command( OUTPUT ${libclc_builtins_lib}
365+
COMMAND ${llvm-spirv_exe} ${spvflags} -o ${libclc_builtins_lib} ${builtins_link_lib}
365366
DEPENDS ${llvm-spirv_target} ${builtins_link_lib} ${builtins_link_lib_tgt}
366367
)
367368
else()
368369
# Non-SPIR-V targets add an extra step to optimize the bytecode
369370
set( builtins_opt_lib_tgt builtins.opt.${ARG_ARCH_SUFFIX} )
370371

371-
add_custom_command( OUTPUT ${builtins_opt_lib_tgt}.bc
372-
COMMAND ${opt_exe} ${ARG_OPT_FLAGS} -o ${builtins_opt_lib_tgt}.bc
372+
add_custom_command( OUTPUT ${LIBCLC_ARCH_OBJFILE_DIR}/${builtins_opt_lib_tgt}.bc
373+
COMMAND ${opt_exe} ${ARG_OPT_FLAGS} -o ${LIBCLC_ARCH_OBJFILE_DIR}/${builtins_opt_lib_tgt}.bc
373374
${builtins_link_lib}
374375
DEPENDS ${opt_target} ${builtins_link_lib} ${builtins_link_lib_tgt}
375376
)
376377
add_custom_target( ${builtins_opt_lib_tgt}
377-
ALL DEPENDS ${builtins_opt_lib_tgt}.bc
378+
ALL DEPENDS ${LIBCLC_ARCH_OBJFILE_DIR}/${builtins_opt_lib_tgt}.bc
378379
)
379380
set_target_properties( ${builtins_opt_lib_tgt} PROPERTIES
380-
TARGET_FILE ${CMAKE_CURRENT_BINARY_DIR}/${builtins_opt_lib_tgt}.bc
381+
TARGET_FILE ${LIBCLC_ARCH_OBJFILE_DIR}/${builtins_opt_lib_tgt}.bc
381382
FOLDER "libclc/Device IR/Opt"
382383
)
383384

384385
set( builtins_opt_lib $<TARGET_PROPERTY:${builtins_opt_lib_tgt},TARGET_FILE> )
385386

386387
set( obj_suffix ${ARG_ARCH_SUFFIX}.bc )
387-
add_custom_command( OUTPUT ${obj_suffix}
388-
COMMAND ${prepare_builtins_exe} -o ${obj_suffix} ${builtins_opt_lib}
389-
DEPENDS ${builtins_opt_lib} ${builtins_opt_lib_tgt} ${prepare_builtins_target} )
388+
set( libclc_builtins_lib ${LIBCLC_OUTPUT_LIBRARY_DIR}/${obj_suffix} )
389+
add_custom_command( OUTPUT ${libclc_builtins_lib}
390+
COMMAND ${prepare_builtins_exe} -o ${libclc_builtins_lib} ${builtins_opt_lib}
391+
DEPENDS ${builtins_opt_lib} ${builtins_opt_lib_tgt} ${prepare_builtins_target}
392+
)
390393
endif()
391394

392395
# Add a 'prepare' target
@@ -402,7 +405,7 @@ function(add_libclc_builtin_set)
402405
add_dependencies( prepare-${ARG_TRIPLE} prepare-${obj_suffix} )
403406

404407
install(
405-
FILES ${CMAKE_CURRENT_BINARY_DIR}/${obj_suffix}
408+
FILES ${libclc_builtins_lib}
406409
DESTINATION "${CMAKE_INSTALL_DATADIR}/clc"
407410
)
408411

@@ -418,20 +421,27 @@ function(add_libclc_builtin_set)
418421
# * clspv targets don't include all OpenCL builtins
419422
if( NOT ARG_ARCH MATCHES "^(nvptx|clspv)(64)?$" )
420423
add_test( NAME external-calls-${obj_suffix}
421-
COMMAND ./check_external_calls.sh ${CMAKE_CURRENT_BINARY_DIR}/${obj_suffix} ${LLVM_TOOLS_BINARY_DIR}
424+
COMMAND ./check_external_calls.sh ${libclc_builtins_lib} ${LLVM_TOOLS_BINARY_DIR}
422425
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
423426
endif()
424427

425428
foreach( a ${ARG_ALIASES} )
426429
set( alias_suffix "${a}-${ARG_TRIPLE}.bc" )
427430
add_custom_command(
428-
OUTPUT ${alias_suffix}
429-
COMMAND ${CMAKE_COMMAND} -E create_symlink ${obj_suffix} ${alias_suffix}
430-
DEPENDS prepare-${obj_suffix} )
431-
add_custom_target( alias-${alias_suffix} ALL DEPENDS ${alias_suffix} )
432-
set_target_properties( alias-${alias_suffix} PROPERTIES FOLDER "libclc/Device IR/Aliases" )
433-
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${alias_suffix}
434-
DESTINATION "${CMAKE_INSTALL_DATADIR}/clc" )
431+
OUTPUT ${LIBCLC_OUTPUT_LIBRARY_DIR}/${alias_suffix}
432+
COMMAND ${CMAKE_COMMAND} -E create_symlink ${libclc_builtins_lib} ${LIBCLC_OUTPUT_LIBRARY_DIR}/${alias_suffix}
433+
DEPENDS prepare-${obj_suffix}
434+
)
435+
add_custom_target( alias-${alias_suffix} ALL
436+
DEPENDS ${LIBCLC_OUTPUT_LIBRARY_DIR}/${alias_suffix}
437+
)
438+
set_target_properties( alias-${alias_suffix}
439+
PROPERTIES FOLDER "libclc/Device IR/Aliases"
440+
)
441+
install(
442+
FILES ${LIBCLC_OUTPUT_LIBRARY_DIR}/${alias_suffix}
443+
DESTINATION "${CMAKE_INSTALL_DATADIR}/clc"
444+
)
435445
endforeach( a )
436446
endfunction(add_libclc_builtin_set)
437447

0 commit comments

Comments
 (0)