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} 30 31art_cc_defaults { 32 name: "libart-compiler-defaults", 33 defaults: ["art_defaults"], 34 host_supported: true, 35 srcs: [ 36 "debug/elf_debug_writer.cc", 37 "dex/inline_method_analyser.cc", 38 "driver/compiler_options.cc", 39 "driver/dex_compilation_unit.cc", 40 "jit/jit_compiler.cc", 41 "jit/jit_logger.cc", 42 "jni/quick/calling_convention.cc", 43 "jni/quick/jni_compiler.cc", 44 "optimizing/block_builder.cc", 45 "optimizing/block_namer.cc", 46 "optimizing/bounds_check_elimination.cc", 47 "optimizing/builder.cc", 48 "optimizing/cha_guard_optimization.cc", 49 "optimizing/code_generator.cc", 50 "optimizing/code_generator_utils.cc", 51 "optimizing/code_sinking.cc", 52 "optimizing/constant_folding.cc", 53 "optimizing/constructor_fence_redundancy_elimination.cc", 54 "optimizing/data_type.cc", 55 "optimizing/dead_code_elimination.cc", 56 "optimizing/escape.cc", 57 "optimizing/execution_subgraph.cc", 58 "optimizing/graph_checker.cc", 59 "optimizing/graph_visualizer.cc", 60 "optimizing/gvn.cc", 61 "optimizing/induction_var_analysis.cc", 62 "optimizing/induction_var_range.cc", 63 "optimizing/inliner.cc", 64 "optimizing/instruction_builder.cc", 65 "optimizing/instruction_simplifier.cc", 66 "optimizing/intrinsic_objects.cc", 67 "optimizing/intrinsics.cc", 68 "optimizing/licm.cc", 69 "optimizing/linear_order.cc", 70 "optimizing/load_store_analysis.cc", 71 "optimizing/load_store_elimination.cc", 72 "optimizing/locations.cc", 73 "optimizing/loop_analysis.cc", 74 "optimizing/loop_optimization.cc", 75 "optimizing/nodes.cc", 76 "optimizing/optimization.cc", 77 "optimizing/optimizing_compiler.cc", 78 "optimizing/parallel_move_resolver.cc", 79 "optimizing/prepare_for_register_allocation.cc", 80 "optimizing/reference_type_propagation.cc", 81 "optimizing/register_allocation_resolver.cc", 82 "optimizing/register_allocator.cc", 83 "optimizing/register_allocator_graph_color.cc", 84 "optimizing/register_allocator_linear_scan.cc", 85 "optimizing/select_generator.cc", 86 "optimizing/scheduler.cc", 87 "optimizing/sharpening.cc", 88 "optimizing/side_effects_analysis.cc", 89 "optimizing/ssa_builder.cc", 90 "optimizing/ssa_liveness_analysis.cc", 91 "optimizing/ssa_phi_elimination.cc", 92 "optimizing/stack_map_stream.cc", 93 "optimizing/superblock_cloner.cc", 94 "optimizing/write_barrier_elimination.cc", 95 "trampolines/trampoline_compiler.cc", 96 "utils/assembler.cc", 97 "utils/jni_macro_assembler.cc", 98 "compiler.cc", 99 ], 100 101 codegen: { 102 arm: { 103 srcs: [ 104 "jni/quick/arm/calling_convention_arm.cc", 105 "optimizing/code_generator_arm_vixl.cc", 106 "optimizing/code_generator_vector_arm_vixl.cc", 107 "optimizing/critical_native_abi_fixup_arm.cc", 108 "optimizing/instruction_simplifier_arm.cc", 109 "optimizing/instruction_simplifier_shared.cc", 110 "optimizing/intrinsics_arm_vixl.cc", 111 "optimizing/nodes_shared.cc", 112 "optimizing/scheduler_arm.cc", 113 "utils/arm/assembler_arm_vixl.cc", 114 "utils/arm/constants_arm.cc", 115 "utils/arm/jni_macro_assembler_arm_vixl.cc", 116 "utils/arm/managed_register_arm.cc", 117 ], 118 }, 119 arm64: { 120 srcs: [ 121 "jni/quick/arm64/calling_convention_arm64.cc", 122 "optimizing/code_generator_arm64.cc", 123 "optimizing/code_generator_vector_arm64_neon.cc", 124 "optimizing/code_generator_vector_arm64_sve.cc", 125 "optimizing/scheduler_arm64.cc", 126 "optimizing/instruction_simplifier_arm64.cc", 127 "optimizing/intrinsics_arm64.cc", 128 "utils/arm64/assembler_arm64.cc", 129 "utils/arm64/jni_macro_assembler_arm64.cc", 130 "utils/arm64/managed_register_arm64.cc", 131 ], 132 }, 133 riscv64: { 134 srcs: [ 135 "utils/riscv64/managed_register_riscv64.cc", 136 ], 137 }, 138 x86: { 139 srcs: [ 140 "jni/quick/x86/calling_convention_x86.cc", 141 "optimizing/code_generator_x86.cc", 142 "optimizing/code_generator_vector_x86.cc", 143 "optimizing/intrinsics_x86.cc", 144 "optimizing/instruction_simplifier_x86_shared.cc", 145 "optimizing/instruction_simplifier_x86.cc", 146 "optimizing/pc_relative_fixups_x86.cc", 147 "optimizing/x86_memory_gen.cc", 148 "utils/x86/assembler_x86.cc", 149 "utils/x86/jni_macro_assembler_x86.cc", 150 "utils/x86/managed_register_x86.cc", 151 ], 152 }, 153 x86_64: { 154 srcs: [ 155 "jni/quick/x86_64/calling_convention_x86_64.cc", 156 "optimizing/intrinsics_x86_64.cc", 157 "optimizing/instruction_simplifier_x86_64.cc", 158 "optimizing/code_generator_x86_64.cc", 159 "optimizing/code_generator_vector_x86_64.cc", 160 "utils/x86_64/assembler_x86_64.cc", 161 "utils/x86_64/jni_macro_assembler_x86_64.cc", 162 "utils/x86_64/managed_register_x86_64.cc", 163 ], 164 }, 165 }, 166 static: { 167 cflags: ["-DART_STATIC_LIBART_COMPILER"], 168 }, 169 generated_sources: ["art_compiler_operator_srcs"], 170 shared_libs: [ 171 "libbase", 172 "liblzma", // libelffile(d) dependency; must be repeated here since it's a static lib. 173 ], 174 header_libs: [ 175 "art_cmdlineparser_headers", // For compiler_options. 176 "art_disassembler_headers", 177 "libnativehelper_header_only", 178 ], 179 180 export_include_dirs: ["."], 181 // Not using .map.txt because this is an internal API 182 version_script: "libart-compiler.map", 183} 184 185cc_defaults { 186 name: "libart-compiler_static_base_defaults", 187 whole_static_libs: [ 188 "libbase", 189 ], 190} 191 192gensrcs { 193 name: "art_compiler_operator_srcs", 194 cmd: "$(location generate_operator_out) art/compiler $(in) > $(out)", 195 tools: ["generate_operator_out"], 196 srcs: [ 197 "linker/linker_patch.h", 198 "optimizing/locations.h", 199 "optimizing/nodes.h", 200 "optimizing/optimizing_compiler_stats.h", 201 202 "utils/arm/constants_arm.h", 203 ], 204 output_extension: "operator_out.cc", 205} 206 207art_cc_library { 208 name: "libart-compiler", 209 defaults: [ 210 "libart-compiler-defaults", 211 "dex2oat-pgo-defaults", 212 "art_hugepage_defaults", 213 ], 214 codegen: { 215 arm: { 216 // VIXL assembly support for ARM targets. 217 static_libs: [ 218 "libvixl", 219 ], 220 }, 221 arm64: { 222 // VIXL assembly support for ARM64 targets. 223 static_libs: [ 224 "libvixl", 225 ], 226 }, 227 }, 228 shared_libs: [ 229 "libart", 230 "libartbase", 231 "libartpalette", 232 "libprofile", 233 "libdexfile", 234 ], 235 static_libs: ["libelffile"], 236 runtime_libs: [ 237 // `art::HGraphVisualizerDisassembler::HGraphVisualizerDisassembler` may dynamically load 238 // `libart-disassembler.so`. 239 "libart-disassembler", 240 ], 241 242 target: { 243 android: { 244 lto: { 245 thin: true, 246 }, 247 }, 248 }, 249 apex_available: [ 250 "com.android.art", 251 "com.android.art.debug", 252 "test_broken_com.android.art", 253 ], 254} 255 256cc_defaults { 257 name: "libart-compiler_static_defaults", 258 defaults: [ 259 "libart-compiler_static_base_defaults", 260 "libart-disassembler_static_defaults", 261 "libart_static_defaults", 262 "libartbase_static_defaults", 263 "libdexfile_static_defaults", 264 "libprofile_static_defaults", 265 ], 266 whole_static_libs: ["libart-compiler"], 267} 268 269art_cc_library { 270 name: "libartd-compiler", 271 defaults: [ 272 "art_debug_defaults", 273 "libart-compiler-defaults", 274 ], 275 codegen: { 276 arm: { 277 // VIXL assembly support for ARM targets. 278 static_libs: [ 279 "libvixld", 280 ], 281 // Export vixl headers as they are included in this library's headers used by tests. 282 export_static_lib_headers: [ 283 "libvixld", 284 ], 285 }, 286 arm64: { 287 // VIXL assembly support for ARM64 targets. 288 static_libs: [ 289 "libvixld", 290 ], 291 // Export vixl headers as they are included in this library's headers used by tests. 292 export_static_lib_headers: [ 293 "libvixld", 294 ], 295 }, 296 }, 297 shared_libs: [ 298 "libartbased", 299 "libartd", 300 "libartpalette", 301 "libprofiled", 302 "libdexfiled", 303 ], 304 static_libs: ["libelffiled"], 305 runtime_libs: [ 306 // `art::HGraphVisualizerDisassembler::HGraphVisualizerDisassembler` may dynamically load 307 // `libartd-disassembler.so`. 308 "libartd-disassembler", 309 ], 310 311 apex_available: [ 312 "com.android.art.debug", 313 // TODO(b/183882457): This lib doesn't go into com.android.art, but 314 // apex_available lists need to be the same for internal libs to avoid 315 // stubs, and this depends on libdexfiled. 316 "com.android.art", 317 ], 318} 319 320cc_defaults { 321 name: "libartd-compiler_static_defaults", 322 defaults: [ 323 "libart-compiler_static_base_defaults", 324 "libartbased_static_defaults", 325 "libartd-disassembler_static_defaults", 326 "libartd_static_defaults", 327 "libdexfiled_static_defaults", 328 "libprofiled_static_defaults", 329 ], 330 whole_static_libs: ["libartd-compiler"], 331} 332 333// Properties common to `libart-compiler-gtest` and `libartd-compiler-gtest`. 334art_cc_defaults { 335 name: "libart-compiler-gtest-common", 336 srcs: [ 337 "common_compiler_test.cc", 338 ], 339 shared_libs: [ 340 "libbase", 341 ], 342} 343 344art_cc_library { 345 name: "libart-compiler-gtest", 346 defaults: [ 347 "libart-gtest-defaults", 348 "libart-compiler-gtest-common", 349 ], 350 shared_libs: [ 351 "libart-compiler", 352 "libart-disassembler", 353 "libartbase-art-gtest", 354 "libart-runtime-gtest", 355 ], 356} 357 358art_cc_library { 359 name: "libartd-compiler-gtest", 360 defaults: [ 361 "libartd-gtest-defaults", 362 "libart-compiler-gtest-common", 363 ], 364 shared_libs: [ 365 "libartd-compiler", 366 "libartd-disassembler", 367 "libartbased-art-gtest", 368 "libartd-runtime-gtest", 369 ], 370} 371 372art_cc_defaults { 373 name: "art_compiler_tests_defaults", 374 data: [ 375 ":art-gtest-jars-ExceptionHandle", 376 ":art-gtest-jars-Interfaces", 377 ":art-gtest-jars-Main", 378 ":art-gtest-jars-MyClassNatives", 379 ], 380 tidy_timeout_srcs: [ 381 "jni/jni_compiler_test.cc", 382 "optimizing/codegen_test.cc", 383 "optimizing/constant_folding_test.cc", 384 "optimizing/execution_subgraph_test.cc", 385 "optimizing/induction_var_range_test.cc", 386 "optimizing/load_store_elimination_test.cc", 387 "optimizing/ssa_test.cc", 388 ], 389 srcs: [ 390 "compiler_reflection_test.cc", 391 "debug/dwarf/dwarf_test.cc", 392 "debug/src_map_elem_test.cc", 393 "exception_test.cc", 394 "jni/jni_compiler_test.cc", 395 "linker/linker_patch_test.cc", 396 "linker/output_stream_test.cc", 397 "optimizing/bounds_check_elimination_test.cc", 398 "optimizing/constant_folding_test.cc", 399 "optimizing/data_type_test.cc", 400 "optimizing/dead_code_elimination_test.cc", 401 "optimizing/dominator_test.cc", 402 "optimizing/find_loops_test.cc", 403 "optimizing/graph_checker_test.cc", 404 "optimizing/graph_test.cc", 405 "optimizing/gvn_test.cc", 406 "optimizing/induction_var_analysis_test.cc", 407 "optimizing/induction_var_range_test.cc", 408 "optimizing/licm_test.cc", 409 "optimizing/linearize_test.cc", 410 "optimizing/live_interval_test.cc", 411 "optimizing/live_ranges_test.cc", 412 "optimizing/liveness_test.cc", 413 "optimizing/loop_optimization_test.cc", 414 "optimizing/nodes_test.cc", 415 "optimizing/nodes_vector_test.cc", 416 "optimizing/parallel_move_test.cc", 417 "optimizing/pretty_printer_test.cc", 418 "optimizing/reference_type_propagation_test.cc", 419 "optimizing/select_generator_test.cc", 420 "optimizing/side_effects_test.cc", 421 "optimizing/ssa_liveness_analysis_test.cc", 422 "optimizing/ssa_test.cc", 423 "optimizing/stack_map_test.cc", 424 "optimizing/superblock_cloner_test.cc", 425 "optimizing/suspend_check_test.cc", 426 "utils/atomic_dex_ref_map_test.cc", 427 "utils/dedupe_set_test.cc", 428 429 "jni/jni_cfi_test.cc", 430 "optimizing/codegen_test.cc", 431 "optimizing/execution_subgraph_test.cc", 432 "optimizing/instruction_simplifier_test.cc", 433 "optimizing/load_store_analysis_test.cc", 434 "optimizing/load_store_elimination_test.cc", 435 "optimizing/optimizing_cfi_test.cc", 436 "optimizing/scheduler_test.cc", 437 ], 438 439 codegen: { 440 arm: { 441 srcs: [ 442 "utils/arm/managed_register_arm_test.cc", 443 ], 444 }, 445 arm64: { 446 srcs: [ 447 "utils/arm64/managed_register_arm64_test.cc", 448 ], 449 }, 450 riscv64: { 451 srcs: [ 452 "utils/riscv64/managed_register_riscv64_test.cc", 453 ], 454 }, 455 x86: { 456 srcs: [ 457 "utils/x86/managed_register_x86_test.cc", 458 459 // This test is testing architecture-independent functionality, 460 // but happens to use x86 codegen as part of the test. 461 "optimizing/register_allocator_test.cc", 462 ], 463 }, 464 x86_64: { 465 srcs: [ 466 // Is this test a bit-rotten copy of the x86 test? b/77951326 467 // "utils/x86_64/managed_register_x86_64_test.cc", 468 ], 469 }, 470 }, 471 472 header_libs: [ 473 "libart_simulator_headers", 474 "libnativehelper_header_only", 475 ], 476 477 shared_libs: [ 478 "libnativeloader", 479 "libunwindstack", 480 ], 481 482 target: { 483 host: { 484 shared_libs: [ 485 "libartd-simulator", 486 ], 487 }, 488 }, 489} 490 491// Version of ART gtest `art_compiler_tests` bundled with the ART APEX on target. 492// TODO(b/192274705): Remove this module when the migration to standalone ART gtests is complete. 493art_cc_test { 494 name: "art_compiler_tests", 495 defaults: [ 496 "art_gtest_defaults", 497 "art_compiler_tests_defaults", 498 ], 499 shared_libs: [ 500 "libprofiled", 501 "libartd-simulator-container", 502 "liblzma", 503 ], 504 static_libs: [ 505 "libartd-compiler", 506 "libelffiled", 507 "libvixld", 508 ], 509} 510 511// Standalone version of ART gtest `art_compiler_tests`, not bundled with the ART APEX on target. 512art_cc_test { 513 name: "art_standalone_compiler_tests", 514 defaults: [ 515 "art_standalone_gtest_defaults", 516 "art_compiler_tests_defaults", 517 ], 518 data: [":generate-boot-image"], 519 shared_libs: [ 520 "libprofile", 521 "liblzma", 522 "libartpalette", 523 ], 524 static_libs: [ 525 // For now, link `libart-simulator-container` statically for simplicity, 526 // to save the added complexity to package it in test suites (along with 527 // other test artifacts) and install it on device during tests. 528 // TODO(b/192070541): Consider linking `libart-simulator-container` 529 // dynamically. 530 "libart-simulator-container", 531 "libart-compiler", 532 "libelffile", 533 "libvixl", 534 ], 535 test_config: "art_standalone_compiler_tests.xml", 536} 537 538art_cc_test { 539 name: "art_compiler_host_tests", 540 device_supported: false, 541 defaults: [ 542 "art_gtest_defaults", 543 ], 544 tidy_timeout_srcs: [ 545 "utils/x86/assembler_x86_test.cc", 546 "utils/x86_64/assembler_x86_64_test.cc", 547 ], 548 codegen: { 549 arm: { 550 srcs: [ 551 "utils/assembler_thumb_test.cc", 552 ], 553 }, 554 x86: { 555 srcs: [ 556 "utils/x86/assembler_x86_test.cc", 557 ], 558 }, 559 x86_64: { 560 srcs: [ 561 "utils/x86_64/assembler_x86_64_test.cc", 562 ], 563 }, 564 }, 565 shared_libs: [ 566 "liblzma", 567 ], 568 static_libs: [ 569 "libartd-compiler", 570 "libelffiled", 571 "libvixld", 572 ], 573} 574