1// Copyright (C) 2018 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15
16package {
17    default_applicable_licenses: ["Android-Apache-2.0"],
18}
19
20python_binary_host {
21    name: "gen_asm",
22    main: "gen_asm.py",
23    srcs: ["gen_asm.py"],
24    libs: ["asm_defs_lib"],
25}
26
27python_binary_host {
28    name: "gen_asm_tests_x86",
29    main: "gen_asm_tests_x86.py",
30    srcs: [
31        "gen_asm_tests_x86.py",
32        "gen_asm.py",
33    ],
34    libs: ["asm_defs_lib"],
35}
36
37python_library_host {
38    name: "asm_defs_lib",
39    srcs: ["asm_defs.py"],
40}
41
42filegroup {
43    name: "libberberis_assembler_gen_inputs_riscv32",
44    srcs: [
45        "instructions/insn_def_riscv.json",
46        "instructions/insn_def_rv32.json",
47    ],
48}
49
50filegroup {
51    name: "libberberis_assembler_gen_inputs_riscv64",
52    srcs: [
53        "instructions/insn_def_riscv.json",
54        "instructions/insn_def_rv64.json",
55    ],
56}
57
58filegroup {
59    name: "libberberis_assembler_gen_inputs_x86_32",
60    srcs: [
61        "instructions/insn_def_x86.json",
62        "instructions/insn_def_x86_32.json",
63    ],
64}
65
66filegroup {
67    name: "libberberis_assembler_gen_inputs_x86_64",
68    srcs: [
69        "instructions/insn_def_x86.json",
70        "instructions/insn_def_x86_64.json",
71    ],
72}
73
74genrule {
75    name: "libberberis_assembler_gen_public_headers_riscv32",
76    out: [
77        "berberis/assembler/gen_assembler_common_riscv-inl.h",
78        "berberis/assembler/gen_assembler_rv32-inl.h",
79    ],
80    srcs: [":libberberis_assembler_gen_inputs_riscv32"],
81    tools: ["gen_asm"],
82    cmd: "$(location gen_asm) --binary-assembler $(out) $(in)",
83}
84
85genrule {
86    name: "libberberis_assembler_gen_public_headers_riscv64",
87    out: [
88        "berberis/assembler/gen_assembler_common_riscv-inl.h",
89        "berberis/assembler/gen_assembler_rv64-inl.h",
90    ],
91    srcs: [":libberberis_assembler_gen_inputs_riscv64"],
92    tools: ["gen_asm"],
93    cmd: "$(location gen_asm) --binary-assembler $(out) $(in)",
94}
95
96genrule {
97    name: "libberberis_assembler_gen_public_headers_x86_32",
98    out: [
99        "berberis/assembler/gen_assembler_x86_32_and_x86_64-inl.h",
100        "berberis/assembler/gen_assembler_x86_32-inl.h",
101    ],
102    srcs: [":libberberis_assembler_gen_inputs_x86_32"],
103    tools: ["gen_asm"],
104    cmd: "$(location gen_asm) --binary-assembler $(out) $(in)",
105}
106
107genrule {
108    name: "libberberis_assembler_gen_public_headers_x86_64",
109    out: [
110        "berberis/assembler/gen_assembler_x86_32_and_x86_64-inl.h",
111        "berberis/assembler/gen_assembler_x86_64-inl.h",
112    ],
113    srcs: [":libberberis_assembler_gen_inputs_x86_64"],
114    tools: ["gen_asm"],
115    cmd: "$(location gen_asm) --binary-assembler $(out) $(in)",
116}
117
118cc_library_headers {
119    name: "libberberis_assembler_headers",
120    defaults: ["berberis_all_hosts_defaults"],
121    host_supported: true,
122    header_libs: ["libberberis_base_headers"],
123    export_header_lib_headers: ["libberberis_base_headers"],
124    generated_headers: [
125        "libberberis_assembler_gen_public_headers_riscv32",
126        "libberberis_assembler_gen_public_headers_riscv64",
127        "libberberis_assembler_gen_public_headers_x86_32",
128        "libberberis_assembler_gen_public_headers_x86_64",
129    ],
130    export_generated_headers: [
131        "libberberis_assembler_gen_public_headers_riscv32",
132        "libberberis_assembler_gen_public_headers_riscv64",
133        "libberberis_assembler_gen_public_headers_x86_32",
134        "libberberis_assembler_gen_public_headers_x86_64",
135    ],
136    export_include_dirs: ["include"],
137}
138
139cc_library_static {
140    name: "libberberis_assembler",
141    defaults: ["berberis_defaults"],
142    host_supported: true,
143    srcs: [
144        "machine_code.cc",
145    ],
146    header_libs: ["libberberis_assembler_headers"],
147    export_header_lib_headers: ["libberberis_assembler_headers"],
148}
149
150cc_genrule {
151    name: "libberberis_assembler_test_gen_sources",
152    host_supported: true,
153    out: [
154        "gen_asm_tests_ref.S",
155        "gen_asm_tests_test.cc",
156    ],
157    arch: {
158        x86: {
159            srcs: [":libberberis_assembler_gen_inputs_x86_32"],
160        },
161        x86_64: {
162            srcs: [":libberberis_assembler_gen_inputs_x86_64"],
163        },
164    },
165    tools: ["gen_asm_tests_x86"],
166    cmd: "$(location gen_asm_tests_x86) $(out) $(in) --fast",
167}
168
169cc_test_library {
170    name: "libberberis_assembler_unit_tests",
171    defaults: ["berberis_defaults"],
172    host_supported: true,
173    header_libs: ["berberis_test_utils_headers"],
174    srcs: [
175        "assembler_test.cc",
176        "immediates_test.cc",
177        "machine_code_test.cc",
178    ],
179    generated_sources: ["libberberis_assembler_test_gen_sources"],
180    static_libs: [
181        "libberberis_assembler",
182        "libberberis_base",
183    ],
184    shared: {
185        enabled: false,
186    },
187}
188