# Copyright (c) 2016 Google Inc. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set(SPIRV_TOOLS_OPT_SOURCES aggressive_dead_code_elim_pass.h amd_ext_to_khr.h basic_block.h block_merge_pass.h block_merge_util.h build_module.h ccp_pass.h cfg_cleanup_pass.h cfg.h code_sink.h combine_access_chains.h compact_ids_pass.h composite.h const_folding_rules.h constants.h copy_prop_arrays.h dead_branch_elim_pass.h dead_insert_elim_pass.h dead_variable_elimination.h decompose_initialized_variables_pass.h decoration_manager.h def_use_manager.h desc_sroa.h dominator_analysis.h dominator_tree.h eliminate_dead_constant_pass.h eliminate_dead_functions_pass.h eliminate_dead_functions_util.h eliminate_dead_members_pass.h feature_manager.h fix_storage_class.h flatten_decoration_pass.h fold.h folding_rules.h fold_spec_constant_op_and_composite_pass.h freeze_spec_constant_value_pass.h function.h generate_webgpu_initializers_pass.h graphics_robust_access_pass.h if_conversion.h inline_exhaustive_pass.h inline_opaque_pass.h inline_pass.h inst_bindless_check_pass.h inst_buff_addr_check_pass.h instruction.h instruction_list.h instrument_pass.h ir_builder.h ir_context.h ir_loader.h licm_pass.h local_access_chain_convert_pass.h local_redundancy_elimination.h local_single_block_elim_pass.h local_single_store_elim_pass.h local_ssa_elim_pass.h log.h loop_dependence.h loop_descriptor.h loop_fission.h loop_fusion.h loop_fusion_pass.h loop_peeling.h loop_unroller.h loop_utils.h loop_unswitch_pass.h mem_pass.h merge_return_pass.h module.h null_pass.h passes.h pass.h pass_manager.h private_to_local_pass.h process_lines_pass.h propagator.h reduce_load_size.h redundancy_elimination.h reflect.h register_pressure.h remove_duplicates_pass.h replace_invalid_opc.h scalar_analysis.h scalar_analysis_nodes.h scalar_replacement_pass.h set_spec_constant_default_value_pass.h simplification_pass.h split_invalid_unreachable_pass.h ssa_rewrite_pass.h strength_reduction_pass.h strip_atomic_counter_memory_pass.h strip_debug_info_pass.h strip_reflect_info_pass.h struct_cfg_analysis.h tree_iterator.h type_manager.h types.h unify_const_pass.h upgrade_memory_model.h value_number_table.h vector_dce.h workaround1209.h wrap_opkill.h aggressive_dead_code_elim_pass.cpp amd_ext_to_khr.cpp basic_block.cpp block_merge_pass.cpp block_merge_util.cpp build_module.cpp ccp_pass.cpp cfg_cleanup_pass.cpp cfg.cpp code_sink.cpp combine_access_chains.cpp compact_ids_pass.cpp composite.cpp const_folding_rules.cpp constants.cpp copy_prop_arrays.cpp dead_branch_elim_pass.cpp dead_insert_elim_pass.cpp dead_variable_elimination.cpp decompose_initialized_variables_pass.cpp decoration_manager.cpp def_use_manager.cpp desc_sroa.cpp dominator_analysis.cpp dominator_tree.cpp eliminate_dead_constant_pass.cpp eliminate_dead_functions_pass.cpp eliminate_dead_functions_util.cpp eliminate_dead_members_pass.cpp feature_manager.cpp fix_storage_class.cpp flatten_decoration_pass.cpp fold.cpp folding_rules.cpp fold_spec_constant_op_and_composite_pass.cpp freeze_spec_constant_value_pass.cpp function.cpp graphics_robust_access_pass.cpp generate_webgpu_initializers_pass.cpp if_conversion.cpp inline_exhaustive_pass.cpp inline_opaque_pass.cpp inline_pass.cpp inst_bindless_check_pass.cpp inst_buff_addr_check_pass.cpp instruction.cpp instruction_list.cpp instrument_pass.cpp ir_context.cpp ir_loader.cpp legalize_vector_shuffle_pass.cpp licm_pass.cpp local_access_chain_convert_pass.cpp local_redundancy_elimination.cpp local_single_block_elim_pass.cpp local_single_store_elim_pass.cpp local_ssa_elim_pass.cpp loop_dependence.cpp loop_dependence_helpers.cpp loop_descriptor.cpp loop_fission.cpp loop_fusion.cpp loop_fusion_pass.cpp loop_peeling.cpp loop_utils.cpp loop_unroller.cpp loop_unswitch_pass.cpp mem_pass.cpp merge_return_pass.cpp module.cpp optimizer.cpp pass.cpp pass_manager.cpp private_to_local_pass.cpp process_lines_pass.cpp propagator.cpp reduce_load_size.cpp redundancy_elimination.cpp register_pressure.cpp remove_duplicates_pass.cpp replace_invalid_opc.cpp scalar_analysis.cpp scalar_analysis_simplification.cpp scalar_replacement_pass.cpp set_spec_constant_default_value_pass.cpp simplification_pass.cpp split_invalid_unreachable_pass.cpp ssa_rewrite_pass.cpp strength_reduction_pass.cpp strip_atomic_counter_memory_pass.cpp strip_debug_info_pass.cpp strip_reflect_info_pass.cpp struct_cfg_analysis.cpp type_manager.cpp types.cpp unify_const_pass.cpp upgrade_memory_model.cpp value_number_table.cpp vector_dce.cpp workaround1209.cpp wrap_opkill.cpp ) if(MSVC) # Enable parallel builds across four cores for this lib add_definitions(/MP4) endif() spvtools_pch(SPIRV_TOOLS_OPT_SOURCES pch_source_opt) add_library(SPIRV-Tools-opt ${SPIRV_TOOLS_OPT_SOURCES}) spvtools_default_compile_options(SPIRV-Tools-opt) target_include_directories(SPIRV-Tools-opt PUBLIC ${spirv-tools_SOURCE_DIR}/include PUBLIC ${SPIRV_HEADER_INCLUDE_DIR} PRIVATE ${spirv-tools_BINARY_DIR} ) # We need the assembling and disassembling functionalities in the main library. target_link_libraries(SPIRV-Tools-opt PUBLIC ${SPIRV_TOOLS}) set_property(TARGET SPIRV-Tools-opt PROPERTY FOLDER "SPIRV-Tools libraries") spvtools_check_symbol_exports(SPIRV-Tools-opt) if(ENABLE_SPIRV_TOOLS_INSTALL) install(TARGETS SPIRV-Tools-opt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif(ENABLE_SPIRV_TOOLS_INSTALL)