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