xref: /aosp_15_r20/art/compiler/Android.bp (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1//
2// Copyright (C) 2012 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17// TODO We should really separate out those files that are actually needed for both variants of an
18// architecture into its own category. Currently we just include all of the 32bit variant in the
19// 64bit variant. It also might be good to allow one to compile only the 64bit variant without the
20// 32bit one.
21
22package {
23    // See: http://go/android-license-faq
24    // A large-scale-change added 'default_applicable_licenses' to import
25    // all of the 'license_kinds' from "art_license"
26    // to get the below license kinds:
27    //   SPDX-license-identifier-Apache-2.0
28    default_applicable_licenses: ["art_license"],
29    default_team: "trendy_team_art_performance",
30}
31
32// Common dependencies for libart-compiler_deps and libartd-compiler_deps.
33cc_defaults {
34    name: "libart-compiler_common_deps",
35    shared_libs: [
36        "libbase",
37        "liblzma", // libelffile(d) dependency; must be repeated here since it's a static lib.
38        "libartpalette",
39    ],
40    header_libs: [
41        "libart_headers",
42        "libart_generated_headers",
43    ],
44}
45
46// Dependencies of libart-compiler, used to propagate libart-compiler deps when static linking.
47art_cc_defaults {
48    name: "libart-compiler_deps",
49    defaults: ["libart-compiler_common_deps"],
50    shared_libs: [
51        "libartbase",
52        "libprofile",
53        "libdexfile#impl",
54    ],
55    static_libs: ["libelffile"],
56    codegen: {
57        arm: {
58            // VIXL assembly support for ARM targets.
59            static_libs: [
60                "libvixl",
61            ],
62        },
63        arm64: {
64            // VIXL assembly support for ARM64 targets.
65            static_libs: [
66                "libvixl",
67            ],
68        },
69    },
70    // In order to save memory on device `art::HGraphVisualizerDisassembler` loads
71    // `libart-disassembler.so` dynamically. Host builds of `libart-compiler` depend on
72    // `libart-disassembler` directly with `shared_libs` or `static_libs`.
73    target: {
74        host: {
75            shared: {
76                shared_libs: [
77                    "libart-disassembler",
78                ],
79            },
80        },
81        android: {
82            runtime_libs: [
83                "libart-disassembler",
84            ],
85        },
86    },
87}
88
89// Dependencies of libartd-compiler, used to propagate libartd-compiler deps when static linking.
90art_cc_defaults {
91    name: "libartd-compiler_deps",
92    defaults: ["libart-compiler_common_deps"],
93    shared_libs: [
94        "libartbased",
95        "libprofiled",
96        "libdexfiled#impl",
97    ],
98    static_libs: ["libelffiled"],
99    codegen: {
100        arm: {
101            // VIXL assembly support for ARM targets.
102            static_libs: [
103                "libvixld",
104            ],
105        },
106        arm64: {
107            // VIXL assembly support for ARM64 targets.
108            static_libs: [
109                "libvixld",
110            ],
111        },
112    },
113    // In order to save memory on device `art::HGraphVisualizerDisassembler` loads
114    // `libartd-disassembler.so` dynamically. Host builds of `libartd-compiler` depend on
115    // `libartd-disassembler` directly with `shared_libs` or `static_libs`.
116    target: {
117        host: {
118            shared: {
119                shared_libs: [
120                    "libartd-disassembler",
121                ],
122            },
123        },
124        android: {
125            runtime_libs: [
126                "libartd-disassembler",
127            ],
128        },
129    },
130}
131
132art_cc_defaults {
133    name: "libart-compiler-defaults",
134    defaults: ["art_defaults"],
135    host_supported: true,
136    srcs: [
137        "debug/elf_debug_writer.cc",
138        "dex/inline_method_analyser.cc",
139        "driver/compiler_options.cc",
140        "driver/dex_compilation_unit.cc",
141        "jit/jit_compiler.cc",
142        "jit/jit_logger.cc",
143        "jni/quick/calling_convention.cc",
144        "jni/quick/jni_compiler.cc",
145        "optimizing/block_builder.cc",
146        "optimizing/block_namer.cc",
147        "optimizing/bounds_check_elimination.cc",
148        "optimizing/builder.cc",
149        "optimizing/cha_guard_optimization.cc",
150        "optimizing/code_generation_data.cc",
151        "optimizing/code_generator.cc",
152        "optimizing/code_generator_utils.cc",
153        "optimizing/code_sinking.cc",
154        "optimizing/constant_folding.cc",
155        "optimizing/constructor_fence_redundancy_elimination.cc",
156        "optimizing/data_type.cc",
157        "optimizing/dead_code_elimination.cc",
158        "optimizing/escape.cc",
159        "optimizing/graph_checker.cc",
160        "optimizing/graph_visualizer.cc",
161        "optimizing/gvn.cc",
162        "optimizing/handle_cache.cc",
163        "optimizing/induction_var_analysis.cc",
164        "optimizing/induction_var_range.cc",
165        "optimizing/inliner.cc",
166        "optimizing/instruction_builder.cc",
167        "optimizing/instruction_simplifier.cc",
168        "optimizing/intrinsic_objects.cc",
169        "optimizing/intrinsics.cc",
170        "optimizing/licm.cc",
171        "optimizing/linear_order.cc",
172        "optimizing/load_store_analysis.cc",
173        "optimizing/load_store_elimination.cc",
174        "optimizing/locations.cc",
175        "optimizing/loop_analysis.cc",
176        "optimizing/loop_optimization.cc",
177        "optimizing/nodes.cc",
178        "optimizing/nodes_vector.cc",
179        "optimizing/optimization.cc",
180        "optimizing/optimizing_compiler.cc",
181        "optimizing/parallel_move_resolver.cc",
182        "optimizing/prepare_for_register_allocation.cc",
183        "optimizing/profiling_info_builder.cc",
184        "optimizing/reference_type_info.cc",
185        "optimizing/reference_type_propagation.cc",
186        "optimizing/register_allocation_resolver.cc",
187        "optimizing/register_allocator.cc",
188        "optimizing/register_allocator_linear_scan.cc",
189        "optimizing/select_generator.cc",
190        "optimizing/scheduler.cc",
191        "optimizing/sharpening.cc",
192        "optimizing/side_effects_analysis.cc",
193        "optimizing/ssa_builder.cc",
194        "optimizing/ssa_liveness_analysis.cc",
195        "optimizing/ssa_phi_elimination.cc",
196        "optimizing/stack_map_stream.cc",
197        "optimizing/superblock_cloner.cc",
198        "optimizing/write_barrier_elimination.cc",
199        "trampolines/trampoline_compiler.cc",
200        "utils/assembler.cc",
201        "utils/jni_macro_assembler.cc",
202        "compiler.cc",
203    ],
204
205    codegen: {
206        arm: {
207            srcs: [
208                "jni/quick/arm/calling_convention_arm.cc",
209                "optimizing/code_generator_arm_vixl.cc",
210                "optimizing/code_generator_vector_arm_vixl.cc",
211                "optimizing/critical_native_abi_fixup_arm.cc",
212                "optimizing/instruction_simplifier_arm.cc",
213                "optimizing/instruction_simplifier_shared.cc",
214                "optimizing/intrinsics_arm_vixl.cc",
215                "optimizing/nodes_shared.cc",
216                "optimizing/scheduler_arm.cc",
217                "utils/arm/assembler_arm_vixl.cc",
218                "utils/arm/constants_arm.cc",
219                "utils/arm/jni_macro_assembler_arm_vixl.cc",
220                "utils/arm/managed_register_arm.cc",
221            ],
222        },
223        arm64: {
224            srcs: [
225                "jni/quick/arm64/calling_convention_arm64.cc",
226                "optimizing/code_generator_arm64.cc",
227                "optimizing/code_generator_vector_arm64_neon.cc",
228                "optimizing/code_generator_vector_arm64_sve.cc",
229                "optimizing/jit_patches_arm64.cc",
230                "optimizing/scheduler_arm64.cc",
231                "optimizing/instruction_simplifier_arm64.cc",
232                "optimizing/intrinsics_arm64.cc",
233                "utils/arm64/assembler_arm64.cc",
234                "utils/arm64/jni_macro_assembler_arm64.cc",
235                "utils/arm64/managed_register_arm64.cc",
236            ],
237        },
238        riscv64: {
239            srcs: [
240                "jni/quick/riscv64/calling_convention_riscv64.cc",
241                "optimizing/code_generator_riscv64.cc",
242                "optimizing/critical_native_abi_fixup_riscv64.cc",
243                "optimizing/instruction_simplifier_riscv64.cc",
244                "optimizing/intrinsics_riscv64.cc",
245                "utils/riscv64/assembler_riscv64.cc",
246                "utils/riscv64/jni_macro_assembler_riscv64.cc",
247                "utils/riscv64/managed_register_riscv64.cc",
248            ],
249        },
250        x86: {
251            srcs: [
252                "jni/quick/x86/calling_convention_x86.cc",
253                "optimizing/code_generator_x86.cc",
254                "optimizing/code_generator_vector_x86.cc",
255                "optimizing/intrinsics_x86.cc",
256                "optimizing/instruction_simplifier_x86_shared.cc",
257                "optimizing/instruction_simplifier_x86.cc",
258                "optimizing/pc_relative_fixups_x86.cc",
259                "optimizing/x86_memory_gen.cc",
260                "utils/x86/assembler_x86.cc",
261                "utils/x86/jni_macro_assembler_x86.cc",
262                "utils/x86/managed_register_x86.cc",
263            ],
264        },
265        x86_64: {
266            srcs: [
267                "jni/quick/x86_64/calling_convention_x86_64.cc",
268                "optimizing/intrinsics_x86_64.cc",
269                "optimizing/instruction_simplifier_x86_64.cc",
270                "optimizing/code_generator_x86_64.cc",
271                "optimizing/code_generator_vector_x86_64.cc",
272                "utils/x86_64/assembler_x86_64.cc",
273                "utils/x86_64/jni_macro_assembler_x86_64.cc",
274                "utils/x86_64/managed_register_x86_64.cc",
275            ],
276        },
277    },
278    generated_sources: ["art_compiler_operator_srcs"],
279    header_libs: [
280        "art_cmdlineparser_headers", // For compiler_options.
281        "art_disassembler_headers",
282        "libnativehelper_header_only",
283    ],
284
285    export_include_dirs: ["."],
286}
287
288cc_defaults {
289    name: "libart-compiler_static_base_defaults",
290    whole_static_libs: [
291        "libbase",
292    ],
293}
294
295gensrcs {
296    name: "art_compiler_operator_srcs",
297    cmd: "$(location generate_operator_out) art/compiler $(in) > $(out)",
298    tools: ["generate_operator_out"],
299    srcs: [
300        "linker/linker_patch.h",
301        "optimizing/locations.h",
302        "optimizing/nodes.h",
303        "optimizing/optimizing_compiler_stats.h",
304
305        "utils/arm/constants_arm.h",
306    ],
307    output_extension: "operator_out.cc",
308}
309
310art_cc_library_static {
311    name: "libart-compiler",
312    defaults: [
313        "libart-compiler-defaults",
314        "libart-compiler_deps",
315    ],
316    target: {
317        android: {
318            lto: {
319                thin: true,
320            },
321        },
322    },
323    apex_available: [
324        "com.android.art",
325        "com.android.art.debug",
326        "test_broken_com.android.art",
327    ],
328}
329
330// For static linking with gtests. Same as `libart-compiler`, but without LTO.
331// When gtests static link a library with LTO enabled, they are also built with LTO.
332// This makes the build process use a lot of memory. b/277207452
333art_cc_library_static {
334    name: "libart-compiler-for-test",
335    defaults: [
336        "libart-compiler-defaults",
337        "libart-compiler_deps",
338    ],
339}
340
341cc_defaults {
342    name: "libart-compiler_static_defaults",
343    defaults: [
344        "libart-compiler_static_base_defaults",
345        "libart-disassembler_static_defaults",
346        "libartbase_static_defaults",
347        "libdexfile_static_defaults",
348        "libprofile_static_defaults",
349    ],
350    whole_static_libs: ["libart-compiler"],
351}
352
353// libart-compiler_static_defaults for standalone gtests.
354// Uses libart-compiler-for-test instead of libart-compiler.
355cc_defaults {
356    name: "libart-compiler-for-test_static_defaults",
357    defaults: [
358        "libart-compiler_static_base_defaults",
359        "libart-disassembler_static_defaults",
360        "libartbase_static_defaults",
361        "libdexfile_static_defaults",
362        "libprofile_static_defaults",
363    ],
364    whole_static_libs: ["libart-compiler-for-test"],
365}
366
367art_cc_library_static {
368    name: "libartd-compiler",
369    defaults: [
370        "art_debug_defaults",
371        "libart-compiler-defaults",
372        "libartd-compiler_deps",
373    ],
374    apex_available: [
375        "com.android.art.debug",
376    ],
377}
378
379cc_defaults {
380    name: "libartd-compiler_static_defaults",
381    defaults: [
382        "libart-compiler_static_base_defaults",
383        "libartbased_static_defaults",
384        "libartd-disassembler_static_defaults",
385        "libdexfiled_static_defaults",
386        "libprofiled_static_defaults",
387    ],
388    whole_static_libs: ["libartd-compiler"],
389}
390
391// Export headers required by `libart-runtime` to use JIT from `libart-compiler`.
392cc_library_headers {
393    name: "libart-compiler_jit_headers",
394    defaults: ["art_defaults"],
395    host_supported: true,
396    export_include_dirs: ["export"],
397    apex_available: [
398        "com.android.art",
399        "com.android.art.debug",
400        "test_broken_com.android.art",
401    ],
402}
403
404// Properties common to `libart-compiler-gtest` and `libartd-compiler-gtest`.
405art_cc_defaults {
406    name: "libart-compiler-gtest-common",
407    srcs: [
408        "common_compiler_test.cc",
409    ],
410    header_libs: [
411        "libart_headers",
412    ],
413}
414
415art_cc_library_static {
416    name: "libart-compiler-gtest",
417    defaults: [
418        "libart-gtest-defaults",
419        "libart-compiler-gtest-common",
420        "libart-compiler-for-test_static_defaults",
421    ],
422}
423
424art_cc_library_static {
425    name: "libartd-compiler-gtest",
426    defaults: [
427        "art_debug_defaults",
428        "libart-gtest-defaults",
429        "libart-compiler-gtest-common",
430        // Note that `libartd-compiler-for-test` is not required here, because
431        // `libartd-compiler` doesn't use LTO.
432        "libartd-compiler_static_defaults",
433    ],
434}
435
436art_cc_defaults {
437    name: "art_compiler_tests_defaults",
438    device_common_data: [
439        ":art-gtest-jars-ExceptionHandle",
440        ":art-gtest-jars-Interfaces",
441        ":art-gtest-jars-Main",
442        ":art-gtest-jars-MyClassNatives",
443    ],
444    tidy_timeout_srcs: [
445        "jni/jni_compiler_test.cc",
446        "optimizing/codegen_test.cc",
447        "optimizing/constant_folding_test.cc",
448        "optimizing/induction_var_range_test.cc",
449        "optimizing/load_store_elimination_test.cc",
450        "optimizing/ssa_test.cc",
451    ],
452    srcs: [
453        "compiler_reflection_test.cc",
454        "debug/dwarf/dwarf_test.cc",
455        "debug/src_map_elem_test.cc",
456        "exception_test.cc",
457        "jni/jni_compiler_test.cc",
458        "linker/linker_patch_test.cc",
459        "linker/output_stream_test.cc",
460        "oat/jni_stub_hash_map_test.cc",
461        "optimizing/bounds_check_elimination_test.cc",
462        "optimizing/constant_folding_test.cc",
463        "optimizing/data_type_test.cc",
464        "optimizing/dead_code_elimination_test.cc",
465        "optimizing/dominator_test.cc",
466        "optimizing/find_loops_test.cc",
467        "optimizing/graph_checker_test.cc",
468        "optimizing/graph_test.cc",
469        "optimizing/gvn_test.cc",
470        "optimizing/induction_var_analysis_test.cc",
471        "optimizing/induction_var_range_test.cc",
472        "optimizing/licm_test.cc",
473        "optimizing/linearize_test.cc",
474        "optimizing/live_interval_test.cc",
475        "optimizing/live_ranges_test.cc",
476        "optimizing/liveness_test.cc",
477        "optimizing/loop_optimization_test.cc",
478        "optimizing/nodes_test.cc",
479        "optimizing/nodes_vector_test.cc",
480        "optimizing/parallel_move_test.cc",
481        "optimizing/pretty_printer_test.cc",
482        "optimizing/reference_type_propagation_test.cc",
483        "optimizing/select_generator_test.cc",
484        "optimizing/side_effects_test.cc",
485        "optimizing/ssa_liveness_analysis_test.cc",
486        "optimizing/ssa_test.cc",
487        "optimizing/stack_map_test.cc",
488        "optimizing/superblock_cloner_test.cc",
489        "optimizing/suspend_check_test.cc",
490        "utils/atomic_dex_ref_map_test.cc",
491        "utils/dedupe_set_test.cc",
492
493        "optimizing/codegen_test.cc",
494        "optimizing/instruction_simplifier_test.cc",
495        "optimizing/load_store_analysis_test.cc",
496        "optimizing/load_store_elimination_test.cc",
497        "optimizing/scheduler_test.cc",
498    ],
499
500    codegen: {
501        arm: {
502            srcs: [
503                "utils/arm/managed_register_arm_test.cc",
504            ],
505        },
506        arm64: {
507            srcs: [
508                "utils/arm64/managed_register_arm64_test.cc",
509            ],
510        },
511        riscv64: {
512            srcs: [
513                "optimizing/instruction_simplifier_riscv64_test.cc",
514                "utils/riscv64/managed_register_riscv64_test.cc",
515            ],
516        },
517        x86: {
518            srcs: [
519                "utils/x86/managed_register_x86_test.cc",
520
521                // This test is testing architecture-independent functionality,
522                // but happens to use x86 codegen as part of the test.
523                "optimizing/register_allocator_test.cc",
524            ],
525        },
526        x86_64: {
527            srcs: [
528                // Is this test a bit-rotten copy of the x86 test? b/77951326
529                // "utils/x86_64/managed_register_x86_64_test.cc",
530            ],
531        },
532    },
533
534    header_libs: [
535        "libart_simulator_headers",
536        "libnativehelper_header_only",
537    ],
538
539    target: {
540        host: {
541            shared_libs: [
542                "libartd-simulator",
543            ],
544            required: ["art_boot_images"],
545        },
546    },
547}
548
549// Version of ART gtest `art_compiler_tests` bundled with the ART APEX on target.
550// TODO(b/192274705): Remove this module when the migration to standalone ART gtests is complete.
551art_cc_test {
552    name: "art_compiler_tests",
553    defaults: [
554        "art_gtest_defaults",
555        "art_compiler_tests_defaults",
556    ],
557    static_libs: [
558        "libartd-simulator-container",
559    ],
560}
561
562// Standalone version of ART gtest `art_compiler_tests`, not bundled with the ART APEX on target.
563art_cc_test {
564    name: "art_standalone_compiler_tests",
565    defaults: [
566        "art_standalone_gtest_defaults",
567        "art_compiler_tests_defaults",
568    ],
569    data: [":generate-boot-image"],
570    static_libs: [
571        "libart-simulator-container",
572    ],
573    test_config: "art_standalone_compiler_tests.xml",
574}
575
576art_cc_test {
577    name: "art_compiler_host_tests",
578    device_supported: false,
579    defaults: [
580        "art_gtest_defaults",
581    ],
582    srcs: [
583        "jni/jni_cfi_test.cc",
584        "optimizing/optimizing_cfi_test.cc",
585    ],
586    tidy_timeout_srcs: [
587        "utils/x86/assembler_x86_test.cc",
588        "utils/x86_64/assembler_x86_64_test.cc",
589    ],
590    codegen: {
591        arm: {
592            srcs: [
593                "utils/assembler_thumb_test.cc",
594            ],
595        },
596        riscv64: {
597            srcs: [
598                "utils/riscv64/assembler_riscv64_test.cc",
599                "utils/riscv64/jni_macro_assembler_riscv64_test.cc",
600            ],
601        },
602        x86: {
603            srcs: [
604                "utils/x86/assembler_x86_test.cc",
605            ],
606        },
607        x86_64: {
608            srcs: [
609                "utils/x86_64/assembler_x86_64_test.cc",
610            ],
611        },
612    },
613    static_libs: [
614        "libvixld",
615    ],
616}
617