blob: 5ccce90f7eaba6b5419fca47e0327be507f5e722 [file] [log] [blame]
// 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: [
// <lir_instructions.json>
// ...
// <machine_ir_intrinsic_binding.json>
// ...
// <def>
// ...
// ],
}
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: [
// <lir_instructions.json>
// ...
// <machine_ir_intrinsic_binding.json>
// ...
// <def>
// ...
// ],
}
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,
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_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_<guest>_to_x86_64",
// "libberberis_guest_state_<guest>_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,
},
}