@@ -356,72 +356,55 @@ function(add_libclc_builtin_set)
356356
357357 set ( builtins_link_lib $<TARGET_PROPERTY:${builtins_link_lib_tgt} ,TARGET_FILE> )
358358
359- # For SPIR-V targets we diverage at this point and generate SPIR-V using the
360- # llvm-spirv tool.
361359 if ( ARG_ARCH STREQUAL spirv OR ARG_ARCH STREQUAL spirv64 )
362- 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}
360+ set ( spv_suffix ${ARG_ARCH_SUFFIX} .spv )
361+ add_custom_command ( OUTPUT ${spv_suffix }
362+ COMMAND ${llvm-spirv_exe} ${spvflags} -o ${spv_suffix } ${builtins_link_lib}
365363 DEPENDS ${llvm-spirv_target} ${builtins_link_lib} ${builtins_link_lib_tgt}
366364 )
367- else ()
368- # Non-SPIR-V targets add an extra step to optimize the bytecode
369- set ( builtins_opt_lib_tgt builtins.opt.${ARG_ARCH_SUFFIX} )
370-
371- add_custom_command ( OUTPUT ${builtins_opt_lib_tgt} .bc
372- COMMAND ${opt_exe} ${ARG_OPT_FLAGS} -o ${builtins_opt_lib_tgt} .bc
373- ${builtins_link_lib}
374- DEPENDS ${opt_target} ${builtins_link_lib} ${builtins_link_lib_tgt}
375- )
376- add_custom_target ( ${builtins_opt_lib_tgt}
377- ALL DEPENDS ${builtins_opt_lib_tgt} .bc
378- )
379- set_target_properties ( ${builtins_opt_lib_tgt} PROPERTIES
380- TARGET_FILE ${CMAKE_CURRENT_BINARY_DIR} /${builtins_opt_lib_tgt} .bc
381- FOLDER "libclc/Device IR/Opt"
382- )
365+ add_custom_target ( "prepare-${spv_suffix} " ALL DEPENDS "${spv_suffix} " )
366+ set_target_properties ( "prepare-${spv_suffix} " PROPERTIES FOLDER "libclc/Device IR/Prepare" )
367+ install ( FILES ${CMAKE_CURRENT_BINARY_DIR} /${spv_suffix}
368+ DESTINATION "${CMAKE_INSTALL_DATADIR} /clc" )
383369
384- set ( builtins_opt_lib $<TARGET_PROPERTY:${builtins_opt_lib_tgt} ,TARGET_FILE> )
385-
386- 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} )
370+ return ()
390371 endif ()
391372
392- # Add a 'prepare' target
393- add_custom_target ( prepare-${obj_suffix} ALL DEPENDS ${obj_suffix} )
394- set_target_properties ( "prepare-${obj_suffix} " PROPERTIES FOLDER "libclc/Device IR/Prepare" )
373+ set ( builtins_opt_lib_tgt builtins.opt.${ARG_ARCH_SUFFIX} )
395374
396- # Also add a 'prepare' target for the triple. Since a triple may have
397- # multiple devices, ensure we only try to create the triple target once. The
398- # triple's target will build all of the bytecode for its constituent devices.
399- if ( NOT TARGET prepare-${ARG_TRIPLE} )
400- add_custom_target ( prepare-${ARG_TRIPLE} ALL )
401- endif ()
402- add_dependencies ( prepare-${ARG_TRIPLE} prepare-${obj_suffix} )
403-
404- install (
405- FILES ${CMAKE_CURRENT_BINARY_DIR} /${obj_suffix}
406- DESTINATION "${CMAKE_INSTALL_DATADIR} /clc"
375+ # Add opt target
376+ add_custom_command ( OUTPUT ${builtins_opt_lib_tgt} .bc
377+ COMMAND ${opt_exe} ${ARG_OPT_FLAGS} -o ${builtins_opt_lib_tgt} .bc
378+ ${builtins_link_lib}
379+ DEPENDS ${opt_target} ${builtins_link_lib} ${builtins_link_lib_tgt}
380+ )
381+ add_custom_target ( ${builtins_opt_lib_tgt}
382+ ALL DEPENDS ${builtins_opt_lib_tgt} .bc
383+ )
384+ set_target_properties ( ${builtins_opt_lib_tgt} PROPERTIES
385+ TARGET_FILE ${CMAKE_CURRENT_BINARY_DIR} /${builtins_opt_lib_tgt} .bc
386+ FOLDER "libclc/Device IR/Opt"
407387 )
408388
409- # SPIR-V targets can exit early here
410- if ( ARG_ARCH STREQUAL spirv OR ARG_ARCH STREQUAL spirv64 )
411- return ()
412- endif ()
389+ set ( builtins_opt_lib $<TARGET_PROPERTY:${builtins_opt_lib_tgt} ,TARGET_FILE> )
390+
391+ # Add prepare target
392+ set ( obj_suffix ${ARG_ARCH_SUFFIX} .bc )
393+ add_custom_command ( OUTPUT ${obj_suffix}
394+ COMMAND ${prepare_builtins_exe} -o ${obj_suffix} ${builtins_opt_lib}
395+ DEPENDS ${builtins_opt_lib} ${builtins_opt_lib_tgt} ${prepare_builtins_target} )
396+ add_custom_target ( prepare-${obj_suffix} ALL DEPENDS ${obj_suffix} )
397+ set_target_properties ( "prepare-${obj_suffix} " PROPERTIES FOLDER "libclc/Device IR/Prepare" )
413398
414- # Add a test for whether or not the libraries contain unresolved calls which
415- # would usually indicate a build problem. Note that we don't perform this
416- # test for all libclc targets:
417- # * nvptx-- targets don't include workitem builtins
418- # * clspv targets don't include all OpenCL builtins
399+ # nvptx-- targets don't include workitem builtins, and clspv targets don't
400+ # include all OpenCL builtins
419401 if ( NOT ARG_ARCH MATCHES "^(nvptx|clspv)(64)?$" )
420402 add_test ( NAME external-calls-${obj_suffix}
421403 COMMAND ./check_external_calls.sh ${CMAKE_CURRENT_BINARY_DIR} /${obj_suffix} ${LLVM_TOOLS_BINARY_DIR}
422404 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
423405 endif ()
424406
407+ install ( FILES ${CMAKE_CURRENT_BINARY_DIR} /${obj_suffix} DESTINATION "${CMAKE_INSTALL_DATADIR} /clc" )
425408 foreach ( a ${ARG_ALIASES} )
426409 set ( alias_suffix "${a} -${ARG_TRIPLE} .bc" )
427410 add_custom_command (
0 commit comments