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