blob: 1ebc0a06438a3de5f86efd289a0c013447a2df05 [file] [log] [blame]
// Copyright (C) 2018 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: "gen_intrinsics",
main: "gen_intrinsics.py",
srcs: ["gen_intrinsics.py"],
libs: ["asm_defs_lib"],
}
python_library_host {
name: "gen_intrinsics_lib",
srcs: ["gen_intrinsics.py"],
}
python_test_host {
name: "gen_intrinsics_tests",
main: "gen_intrinsics_test.py",
srcs: [
"gen_intrinsics_test.py",
"gen_intrinsics.py",
],
libs: ["asm_defs_lib"],
test_suites: ["device-tests"],
test_options: {
unit_test: true,
},
}
genrule {
name: "libberberis_text_assembler_gen_headers_x86_32",
out: [
"gen_text_assembler_common_x86-inl.h",
"gen_text_assembler_x86_32-inl.h",
],
srcs: [":libberberis_assembler_gen_inputs_x86_32"],
tools: ["gen_asm_x86"],
cmd: "$(location gen_asm_x86) --text-assembler $(out) $(in)",
}
genrule {
name: "libberberis_text_assembler_gen_headers_x86_64",
out: [
"gen_text_assembler_common_x86-inl.h",
"gen_text_assembler_x86_64-inl.h",
],
srcs: [":libberberis_assembler_gen_inputs_x86_64"],
tools: ["gen_asm_x86"],
cmd: "$(location gen_asm_x86) --text-assembler $(out) $(in)",
}
filegroup {
name: "libberberis_intrinsics_gen_inputs_riscv64_to_x86_64",
srcs: ["riscv64_to_x86_64/intrinsic_def.json"],
}
filegroup {
name: "libberberis_machine_ir_intrinsic_binding_riscv64_to_x86_64",
srcs: ["riscv64_to_x86_64/machine_ir_intrinsic_binding.json"],
}
filegroup {
name: "libberberis_macro_assembler_gen_inputs_riscv64_to_x86_64",
srcs: ["riscv64_to_x86_64/macro_def.json"],
}
filegroup {
name: "dummy_gen_text_asm_intrinsics_srcs",
srcs: ["dummy_gen_text_asm_intrinsics.cc"],
}
filegroup {
name: "gen_text_asm_intrinsics_srcs",
srcs: ["common_to_x86/gen_text_asm_intrinsics.cc"],
}
genrule {
name: "libberberis_intrinsics_gen_inline_headers_riscv64_to_x86_64",
out: ["berberis/intrinsics/intrinsics.h"],
srcs: [],
tools: ["gen_riscv64_to_x86_64_intrinsics"],
cmd: "$(location gen_riscv64_to_x86_64_intrinsics) $(out)",
}
genrule {
name: "libberberis_macro_assembler_gen_intrinsics_headers_riscv64_to_x86_64",
out: ["text_asm_intrinsics_process_bindings-inl.h"],
srcs: [
":libberberis_intrinsics_gen_inputs_riscv64_to_x86_64",
":libberberis_machine_ir_intrinsic_binding_riscv64_to_x86_64",
":libberberis_macro_assembler_gen_inputs_riscv64_to_x86_64",
":libberberis_assembler_gen_inputs_x86_64",
],
tools: ["gen_intrinsics"],
cmd: "$(location gen_intrinsics) --text_asm_intrinsics_bindings $(out) $(in)",
}
genrule {
name: "libberberis_intrinsics_gen_public_headers_riscv64_to_x86_64",
out: [
"berberis/intrinsics/intrinsics-inl.h",
"berberis/intrinsics/intrinsics_process_bindings-inl.h",
"berberis/intrinsics/interpreter_intrinsics_hooks-inl.h",
"berberis/intrinsics/translator_intrinsics_hooks-inl.h",
"berberis/intrinsics/mock_semantics_listener_intrinsics_hooks-inl.h",
],
srcs: [
":libberberis_intrinsics_gen_inputs_riscv64_to_x86_64",
":libberberis_machine_ir_intrinsic_binding_riscv64_to_x86_64",
":libberberis_macro_assembler_gen_inputs_riscv64_to_x86_64",
":libberberis_assembler_gen_inputs_x86_64",
],
tools: ["gen_intrinsics"],
cmd: "$(location gen_intrinsics) --public_headers $(out) $(in)",
}
genrule {
name: "libberberis_macro_assembler_gen_headers_riscv64_to_x86_64",
out: ["berberis/intrinsics/macro_assembler_interface-inl.h"],
srcs: [":libberberis_macro_assembler_gen_inputs_riscv64_to_x86_64"],
tools: ["gen_asm_x86"],
cmd: "$(location gen_asm_x86) --binary-assembler $(out) $(in)",
}
// Note: the following two genrules and this host binary are working together.
//
// gen_riscv64_to_x86_64_intrinsics is C++ program, generated by python script,
// which does not accept any inputs and produces berberis/intrinsics/intrinsics.h
//
// Other modules are not supposed to use gen_riscv64_to_x86_64_intrinsics, they should only
// depend on libberberis_intrinsics_gen_asm_impl_headers_riscv64_to_x86_64
//
// So with 64-bit RISC V headers we have two-step operation:
//
// gen_intrinsics
// -> text_asm_intrinsics_process_bindings-inl.h
// -> gen_riscv64_to_x86_64_intrinsics
// -> libberberis_intrinsics_gen_asm_impl_headers_riscv64_to_x86_64
//
// Compare to single-step generation of common headers:
//
// gen_intrinsics
// -> libberberis_intrinsics_gen_public_headers_riscv64_to_x86_64
cc_binary_host {
name: "gen_riscv64_to_x86_64_intrinsics",
defaults: ["gen_text_asm_intrinsics_defaults"],
local_include_dirs: ["riscv64_to_x86_64"],
target: {
linux: {
generated_headers: [
"libberberis_intrinsics_gen_public_headers_riscv64_to_x86_64",
"libberberis_macro_assembler_gen_intrinsics_headers_riscv64_to_x86_64",
"libberberis_text_assembler_gen_headers_x86_64",
],
header_libs: ["libberberis_macro_assembler_headers_riscv64_to_x86_64"],
static_libs: ["libberberis_macro_assembler_riscv64_to_x86_64"],
},
},
}
cc_defaults {
name: "gen_text_asm_intrinsics_defaults",
// Note: build system would pick the build OS variant.
// Usually that's 64-bit version thus we can only support 64bit version here.
// Currently none of Android builds that we care about used 32bit version of host tools.
defaults: ["berberis_defaults_64"],
host_supported: true,
header_libs: ["libberberis_intrinsics_headers"],
// Note: since this tool is used in genrule, it has to be buildable and
// available on all platforms unconditionally.
//
// Since we don't support MacOS build for the rest of berberis we are providing
// a "dummy" version on non-linux platform: it would always generate empty header.
//
// That version does not need any internal headers, libraries or sources,
// thus we use conditional dependencies only on linux platform here.
target: {
darwin: {
enabled: true,
srcs: [":dummy_gen_text_asm_intrinsics_srcs"],
},
linux: {
// We are only ever executing that binary once, it's faster to build it without
// optimizations and spend half-second more running it, than spend tens of seconds
// optimizing the code to save that half-second.
cflags: ["-O0"],
srcs: [":gen_text_asm_intrinsics_srcs"],
header_libs: [
"libberberis_base_headers",
"libberberis_runtime_primitives_headers",
],
shared_libs: ["liblog"],
},
},
// Targets using these defaults must provide the following guest-specific fields on linux:
// generated_header: [
// "libberberis_intrinsics_gen_public_headers_<guest>_to_<host>",
// "libberberis_text_assembler_gen_headers_<guest>_to_<host>",
// ],
// header_libs: [ "libberberis_macro_assembler_headers_<guest>_to_<host>" ],
// static_libs: [ "libberberis_macro_assembler_<guest>_to_<host>" ],
}
cc_library_headers {
name: "libberberis_intrinsics_riscv64_headers",
defaults: ["berberis_defaults"],
host_supported: true,
header_libs: [
"libberberis_base_headers",
"libberberis_intrinsics_headers",
"libberberis_runtime_primitives_headers", // for platform.h
],
export_header_lib_headers: [
"libberberis_base_headers",
"libberberis_intrinsics_headers",
"libberberis_runtime_primitives_headers", // for platform.h
],
arch: {
x86_64: {
generated_headers: [
"libberberis_intrinsics_gen_inline_headers_riscv64_to_x86_64",
"libberberis_intrinsics_gen_public_headers_riscv64_to_x86_64",
],
export_generated_headers: [
"libberberis_intrinsics_gen_inline_headers_riscv64_to_x86_64",
"libberberis_intrinsics_gen_public_headers_riscv64_to_x86_64",
],
export_include_dirs: [
"riscv64_to_x86_64/include",
"riscv64/include",
],
},
},
}
cc_library_headers {
name: "libberberis_intrinsics_headers",
defaults: ["berberis_defaults"],
host_supported: true,
export_include_dirs: ["include"],
header_libs: ["libberberis_base_headers"],
export_header_lib_headers: ["libberberis_base_headers"],
arch: {
x86: {
export_include_dirs: [
"common_to_x86/include",
],
},
x86_64: {
export_include_dirs: [
"common_to_x86/include",
],
},
},
}
cc_library_static {
name: "libberberis_intrinsics",
defaults: ["berberis_defaults"],
host_supported: true,
header_libs: ["libberberis_intrinsics_riscv64_headers"],
static_libs: ["libberberis_base"],
export_header_lib_headers: ["libberberis_intrinsics_riscv64_headers"],
}
cc_library_headers {
name: "libberberis_macro_assembler_headers_riscv64_to_x86_64",
defaults: ["berberis_defaults_64"],
host_supported: true,
export_include_dirs: [
"riscv64_to_x86_64/include",
"riscv64/include",
"common_to_x86/include",
"include",
],
header_libs: [
"libberberis_base_headers",
"libberberis_intrinsics_headers",
],
export_header_lib_headers: [
"libberberis_base_headers",
"libberberis_intrinsics_headers",
],
generated_headers: ["libberberis_macro_assembler_gen_headers_riscv64_to_x86_64"],
export_generated_headers: ["libberberis_macro_assembler_gen_headers_riscv64_to_x86_64"],
}
cc_library_static {
name: "libberberis_macro_assembler_riscv64_to_x86_64",
defaults: ["berberis_defaults_64"],
host_supported: true,
srcs: ["riscv64_to_x86_64/macro_assembler.cc"],
header_libs: ["libberberis_macro_assembler_headers_riscv64_to_x86_64"],
}
cc_library_static {
name: "libberberis_intrinsics_riscv64",
defaults: ["berberis_defaults_64"],
host_supported: true,
srcs: [
"riscv64/intrinsics.cc",
"riscv64/vector_intrinsics.cc",
],
header_libs: [
"libberberis_base_headers",
"libberberis_intrinsics_riscv64_headers",
],
export_header_lib_headers: [
"libberberis_base_headers",
"libberberis_intrinsics_riscv64_headers",
],
}
cc_test_library {
name: "libberberis_intrinsics_unit_tests",
defaults: ["berberis_defaults"],
host_supported: true,
arch: {
x86: {
srcs: [
"common_to_x86/intrinsics_float_test.cc",
"common_to_x86/simd_register_test.cc",
],
},
x86_64: {
cflags: ["-mssse3"],
srcs: [
"common_to_x86/intrinsics_float_test.cc",
"common_to_x86_64/tuple_test.cc",
"riscv64/vector_intrinsics_test.cc",
],
},
},
static_libs: [
"libberberis_base",
"libberberis_intrinsics",
],
shared: {
enabled: false,
},
}