// Copyright (C) 2023 The Android Open Source Project // // 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. // package { default_applicable_licenses: ["Android-Apache-2.0"], } python_binary_host { name: "berberis_gen_lir", main: "gen_lir.py", srcs: ["gen_lir.py"], libs: ["gen_lir_lib"], } python_library_host { name: "gen_lir_lib", srcs: ["gen_lir_lib.py"], libs: ["asm_defs_lib"], } python_binary_host { name: "berberis_gen_reg_class", main: "gen_reg_class.py", srcs: ["gen_reg_class.py"], libs: ["gen_reg_class_lib"], } python_library_host { name: "gen_reg_class_lib", srcs: ["gen_reg_class_lib.py"], } filegroup { name: "libberberis_backend_machine_ir_gen_inputs_x86_64", srcs: ["x86_64/lir_instructions.json"], } filegroup { name: "libberberis_backend_reg_class_gen_inputs_x86_64", srcs: ["x86_64/reg_class_def.json"], } filegroup { name: "libberberis_backend_gen_inputs_riscv64_to_x86_64", srcs: [ ":libberberis_backend_machine_ir_gen_inputs_x86_64", ":libberberis_machine_ir_intrinsic_binding_riscv64_to_x86_64", ":libberberis_assembler_gen_inputs_x86_64", ":libberberis_macro_assembler_gen_inputs_riscv64_to_x86_64", ], } genrule_defaults { name: "berberis_backend_machine_ir_gen_headers_x86_64_defaults", out: [ "insn-inl_x86_64.h", "machine_info_x86_64-inl.h", "machine_opcode_x86_64-inl.h", "gen_machine_ir_x86_64-inl.h", ], tools: ["berberis_gen_lir"], cmd: "$(location berberis_gen_lir) --headers $(out) $(in)", // Targets using these defaults must provide the following guest-specific // fields. lir instructions MUST end with `lir_instructions.json` and // machine ir instrinsic bindngs MUST end with // `machine_ir_intrinsice_binding.json`. Order matters and def's have no // naming requirements: // srcs: [ // // ... // // ... // // ... // ], } genrule { name: "libberberis_backend_machine_ir_gen_headers_riscv64_to_x86_64", defaults: ["berberis_backend_machine_ir_gen_headers_x86_64_defaults"], srcs: [":libberberis_backend_gen_inputs_riscv64_to_x86_64"], } genrule_defaults { name: "libberberis_backend_machine_ir_gen_sources_x86_64_defaults", out: [ "gen_code_emit_x86_64.cc", "gen_code_debug_x86_64.cc", ], tools: ["berberis_gen_lir"], cmd: "$(location berberis_gen_lir) --sources $(out) $(in)", // Targets using these defaults must provide the following guest-specific // fields. lir instructions MUST end with `lir_instructions.json` and // machine ir instrinsic bindngs MUST end with // `machine_ir_intrinsice_binding.json`. Order matters and def's have no // naming requirements: // srcs: [ // // ... // // ... // // ... // ], } genrule { name: "libberberis_backend_machine_ir_gen_sources_riscv64_to_x86_64", defaults: ["libberberis_backend_machine_ir_gen_sources_x86_64_defaults"], srcs: [":libberberis_backend_gen_inputs_riscv64_to_x86_64"], } genrule { name: "libberberis_backend_reg_class_gen_headers_x86_64", out: ["machine_reg_class_x86_64-inl.h"], srcs: [":libberberis_backend_reg_class_gen_inputs_x86_64"], tools: ["berberis_gen_reg_class"], cmd: "$(location berberis_gen_reg_class) $(out) $(in)", } cc_library_headers { name: "libberberis_backend_headers", defaults: ["berberis_defaults"], host_supported: true, export_include_dirs: ["include"], header_libs: [ "libberberis_assembler_headers", "libberberis_base_headers", ], export_header_lib_headers: [ "libberberis_assembler_headers", "libberberis_base_headers", ], } cc_library_headers { name: "libberberis_backend_headers_riscv64_to_x86_64", defaults: ["berberis_defaults_64"], host_supported: true, export_include_dirs: ["riscv64_to_x86_64/include"], header_libs: [ "libberberis_backend_headers", "libberberis_guest_state_riscv64_headers", "libberberis_macro_assembler_headers_riscv64_to_x86_64", ], export_header_lib_headers: [ "libberberis_backend_headers", "libberberis_guest_state_riscv64_headers", "libberberis_macro_assembler_headers_riscv64_to_x86_64", ], generated_headers: [ "libberberis_backend_machine_ir_gen_headers_riscv64_to_x86_64", "libberberis_backend_reg_class_gen_headers_x86_64", ], export_generated_headers: [ "libberberis_backend_machine_ir_gen_headers_riscv64_to_x86_64", "libberberis_backend_reg_class_gen_headers_x86_64", ], } filegroup { name: "berberis_backend_srcs", srcs: [ "common/lifetime_analysis.cc", "common/machine_ir_debug.cc", "common/machine_ir_opt.cc", "common/reg_alloc.cc", "x86_64/code.cc", "x86_64/code_debug.cc", "x86_64/code_emit.cc", "x86_64/context_liveness_analyzer.cc", "x86_64/insn_folding.cc", "x86_64/liveness_analyzer.cc", "x86_64/local_guest_context_optimizer.cc", "x86_64/loop_guest_context_optimizer.cc", "x86_64/machine_ir_analysis.cc", "x86_64/machine_ir_check.cc", "x86_64/machine_ir_opt.cc", "x86_64/rename_copy_uses.cc", "x86_64/rename_vregs.cc", "x86_64/rename_vregs_local.cc", ], } cc_defaults { name: "berberis_backend_defaults", srcs: [ ":berberis_backend_srcs", ], header_libs: [ "libberberis_base_headers", "libberberis_code_gen_lib_headers", "libberberis_runtime_primitives_headers", ], } cc_library_static { name: "libberberis_backend_riscv64_to_x86_64", defaults: [ "berberis_defaults_64", "berberis_backend_defaults", ], host_supported: true, generated_sources: [ "libberberis_backend_machine_ir_gen_sources_riscv64_to_x86_64", ], header_libs: [ "libberberis_backend_headers_riscv64_to_x86_64", ], srcs: [ "riscv64_to_x86_64/code_gen.cc", ], } cc_library_headers { name: "libberberis_backend_testing_x86_64_headers", defaults: ["berberis_defaults_64"], export_include_dirs: ["testing/include"], host_supported: true, } filegroup { name: "libberberis_backend_x86_64_test_srcs", srcs: [ "common/machine_ir_test.cc", "x86_64/context_liveness_analyzer_test.cc", "x86_64/insn_folding_test.cc", "x86_64/liveness_analyzer_test.cc", "x86_64/local_guest_context_optimizer_test.cc", "x86_64/loop_guest_context_optimizer_test.cc", "x86_64/machine_ir_analysis_test.cc", "x86_64/machine_ir_check_test.cc", "x86_64/machine_insn_intrinsics_tests.cc", "x86_64/machine_ir_exec_test.cc", "x86_64/machine_ir_opt_test.cc", "x86_64/machine_ir_test.cc", "x86_64/machine_ir_test_corpus.cc", "x86_64/rename_copy_uses_test.cc", "x86_64/rename_vregs_test.cc", "x86_64/rename_vregs_local_test.cc", ], } cc_defaults { name: "libberberis_backend_x86_64_test_defaults", srcs: [":libberberis_backend_x86_64_test_srcs"], header_libs: [ "libberberis_backend_testing_x86_64_headers", "libberberis_code_gen_lib_headers", "libberberis_guest_state_headers", "berberis_test_utils_headers", ], // Targets using these defaults must provide the following guest-specific fields: // header_libs: [ // "libberberis_backend_headers__to_x86_64", // "libberberis_guest_state__headers", // ], } cc_test_library { name: "libberberis_backend_riscv64_to_x86_64_unit_tests", defaults: [ "berberis_defaults_64", "libberberis_backend_x86_64_test_defaults", ], host_supported: true, header_libs: [ "libberberis_backend_headers_riscv64_to_x86_64", "libberberis_guest_state_riscv64_headers", ], shared: { enabled: false, }, }