| package { |
| // See: http://go/android-license-faq |
| // A large-scale-change added 'default_applicable_licenses' to import |
| // all of the 'license_kinds' from "art_license" |
| // to get the below license kinds: |
| // SPDX-license-identifier-Apache-2.0 |
| default_applicable_licenses: ["art_license"], |
| } |
| |
| bootstrap_go_package { |
| name: "soong-art", |
| pkgPath: "android/soong/art", |
| deps: [ |
| "blueprint", |
| "blueprint-pathtools", |
| "blueprint-proptools", |
| "soong", |
| "soong-android", |
| "soong-apex", |
| "soong-cc", |
| ], |
| srcs: [ |
| "art.go", |
| "codegen.go", |
| "makevars.go", |
| ], |
| pluginFor: ["soong_build"], |
| } |
| |
| art_clang_tidy_errors = [ |
| "android-cloexec-dup", |
| "android-cloexec-fopen", |
| "android-cloexec-open", |
| "bugprone-argument-comment", |
| "bugprone-lambda-function-name", |
| "bugprone-macro-parentheses", |
| "bugprone-macro-repeated-side-effects", |
| "bugprone-unused-raii", // Protect scoped things like MutexLock. |
| "bugprone-unused-return-value", |
| "bugprone-use-after-move", |
| "bugprone-virtual-near-miss", |
| "misc-unused-using-decls", |
| "modernize-use-bool-literals", |
| "modernize-use-nullptr", |
| "performance-faster-string-find", |
| "performance-for-range-copy", |
| "performance-implicit-conversion-in-loop", |
| "performance-inefficient-string-concatenation", |
| "performance-inefficient-vector-operation", |
| "performance-no-automatic-move", |
| "performance-noexcept-move-constructor", |
| "performance-unnecessary-copy-initialization", |
| "performance-unnecessary-value-param", |
| "readability-duplicate-include", |
| "readability-redundant-string-cstr", |
| ] |
| |
| art_clang_tidy_disabled = [ |
| "-google-default-arguments", |
| // We have local stores that are only used for debug checks. |
| "-clang-analyzer-deadcode.DeadStores", |
| // We are OK with some static globals and that they can, in theory, throw. |
| "-cert-err58-cpp", |
| // We have lots of C-style variadic functions, and are OK with them. JNI ensures |
| // that working around this warning would be extra-painful. |
| "-cert-dcl50-cpp", |
| "-misc-redundant-expression", |
| // "Modernization" we don't agree with. |
| "-modernize-use-auto", |
| "-modernize-return-braced-init-list", |
| "-modernize-use-default-member-init", |
| "-modernize-pass-by-value", |
| // The only two remaining offenders are art/openjdkjvmti/include/jvmti.h and |
| // libcore/ojluni/src/main/native/jvm.h, which are both external files by Oracle |
| "-modernize-use-using", |
| ] |
| |
| soong_config_module_type_import { |
| from: "art/build/SoongConfig.bp", |
| module_types: [ |
| "art_debug_defaults", |
| "art_module_art_global_defaults", |
| "art_module_cc_defaults", |
| "art_module_java_defaults", |
| "art_module_genrule_defaults", |
| "art_module_prebuilt_defaults", |
| ], |
| } |
| |
| art_module_art_global_defaults { |
| // Additional flags are computed by art.go |
| |
| name: "art_defaults", |
| |
| cpp_std: "gnu++17", // TODO(b/311052584): fix C++20 build and revert this line |
| |
| // Disable all ART Soong modules by default when ART prebuilts are in use. |
| // TODO(b/172480617): Clean up when sources are gone from the platform tree |
| // and we no longer need to support sources present when prebuilts are used. |
| enabled: false, |
| soong_config_variables: { |
| source_build: { |
| enabled: true, |
| }, |
| }, |
| |
| // This is the default visibility for the //art package, but we repeat it |
| // here so that it gets merged with other visibility rules in modules |
| // extending these defaults. |
| visibility: ["//art:__subpackages__"], |
| |
| cflags: [ |
| // Base set of cflags used by all things ART. |
| "-fno-rtti", |
| "-ggdb3", |
| "-Wall", |
| "-Werror", |
| "-Wextra", |
| "-Wstrict-aliasing", |
| "-fstrict-aliasing", |
| "-Wunreachable-code", |
| "-Wredundant-decls", |
| "-Wshadow", |
| "-Wunused", |
| "-fvisibility=protected", |
| |
| // Warn about thread safety violations with clang. |
| "-Wthread-safety", |
| // TODO(b/144045034): turn on -Wthread-safety-negative |
| //"-Wthread-safety-negative", |
| |
| // Warn if switch fallthroughs aren't annotated. |
| "-Wimplicit-fallthrough", |
| |
| // Enable float equality warnings. |
| "-Wfloat-equal", |
| |
| // Enable warning of converting ints to void*. |
| "-Wint-to-void-pointer-cast", |
| |
| // Enable warning of wrong unused annotations. |
| "-Wused-but-marked-unused", |
| |
| // Enable warning for deprecated language features. |
| "-Wdeprecated", |
| |
| // Enable warning for unreachable break & return. |
| "-Wunreachable-code-break", |
| "-Wunreachable-code-return", |
| |
| // Disable warning for use of offsetof on non-standard layout type. |
| // We use it to implement OFFSETOF_MEMBER - see macros.h. |
| "-Wno-invalid-offsetof", |
| |
| // Enable inconsistent-missing-override warning. This warning is disabled by default in |
| // Android. |
| "-Winconsistent-missing-override", |
| |
| // Enable thread annotations for std::mutex, etc. |
| "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS", |
| ], |
| |
| arch: { |
| x86: { |
| avx2: { |
| cflags: [ |
| "-mavx2", |
| "-mfma", |
| ], |
| }, |
| }, |
| x86_64: { |
| avx2: { |
| cflags: [ |
| "-mavx2", |
| "-mfma", |
| ], |
| }, |
| }, |
| }, |
| |
| target: { |
| android: { |
| cflags: [ |
| // To use oprofile_android --callgraph, uncomment this and recompile with |
| // mmma -j art |
| // "-fno-omit-frame-pointer", |
| // "-marm", |
| // "-mapcs", |
| ], |
| }, |
| linux: { |
| cflags: [ |
| // Enable missing-noreturn only on non-Mac. As lots of things are not implemented for |
| // Apple, it's a pain. |
| "-Wmissing-noreturn", |
| ], |
| // Don't export symbols of statically linked libziparchive. |
| // Workaround to fix ODR violations (b/264235288) in gtests. |
| // `--exclude-libs` flag is not supported on windows/darwin. |
| ldflags: ["-Wl,--exclude-libs=libziparchive.a"], |
| }, |
| linux_bionic: { |
| strip: { |
| // Do not strip art libs when building for linux-bionic. |
| // Otherwise we can't get any symbols out of crashes. |
| none: true, |
| }, |
| }, |
| darwin: { |
| enabled: false, |
| }, |
| windows: { |
| // When the module is enabled globally in the soong_config_variables |
| // stanza above, it may get enabled on windows too for some module |
| // types. Hence we need to disable it explicitly. |
| // TODO(b/172480617): Clean up with that. |
| enabled: false, |
| }, |
| host: { |
| cflags: [ |
| // Bug: 15446488. We don't omit the frame pointer to work around |
| // clang/libunwind bugs that cause SEGVs in run-test-004-ThreadStress. |
| "-fno-omit-frame-pointer", |
| ], |
| }, |
| // The build assumes that all our x86/x86_64 hosts (such as buildbots and developer |
| // desktops) support at least sse4.2/popcount. This firstly implies that the ART |
| // runtime binary itself may exploit these features. Secondly, this implies that |
| // the ART runtime passes these feature flags to dex2oat and JIT by calling the |
| // method InstructionSetFeatures::FromCppDefines(). Since invoking dex2oat directly |
| // does not pick up these flags, cross-compiling from a x86/x86_64 host to a |
| // x86/x86_64 target should not be affected. |
| linux_x86: { |
| cflags: [ |
| "-msse4.2", |
| "-mpopcnt", |
| ], |
| }, |
| linux_x86_64: { |
| cflags: [ |
| "-msse4.2", |
| "-mpopcnt", |
| ], |
| }, |
| }, |
| |
| codegen: { |
| arm: { |
| cflags: ["-DART_ENABLE_CODEGEN_arm"], |
| }, |
| arm64: { |
| cflags: ["-DART_ENABLE_CODEGEN_arm64"], |
| }, |
| riscv64: { |
| cflags: ["-DART_ENABLE_CODEGEN_riscv64"], |
| }, |
| x86: { |
| cflags: ["-DART_ENABLE_CODEGEN_x86"], |
| }, |
| x86_64: { |
| cflags: ["-DART_ENABLE_CODEGEN_x86_64"], |
| }, |
| }, |
| |
| tidy_checks: art_clang_tidy_errors + art_clang_tidy_disabled, |
| |
| tidy_checks_as_errors: art_clang_tidy_errors, |
| |
| tidy_flags: [ |
| // The static analyzer treats DCHECK as always enabled; we sometimes get |
| // false positives when we use DCHECKs with code that relies on NDEBUG. |
| "-extra-arg=-UNDEBUG", |
| // clang-tidy complains about functions like: |
| // void foo() { CHECK(kIsFooEnabled); /* do foo... */ } |
| // not being marked noreturn if kIsFooEnabled is false. |
| "-extra-arg=-Wno-missing-noreturn", |
| // Because tidy doesn't like our flow checks for compile-time configuration and thinks that |
| // the following code is dead (it is, but not for all configurations), disable unreachable |
| // code detection in Clang for tidy builds. It is still on for regular build steps, so we |
| // will still get the "real" errors. |
| "-extra-arg=-Wno-unreachable-code", |
| ], |
| |
| min_sdk_version: "31", |
| } |
| |
| // Used to generate binaries that can be backed by transparent hugepages. |
| cc_defaults { |
| name: "art_hugepage_defaults", |
| arch: { |
| arm64: { |
| ldflags: ["-z max-page-size=0x200000"], |
| }, |
| riscv64: { |
| ldflags: ["-z max-page-size=0x200000"], |
| }, |
| x86_64: { |
| ldflags: ["-z max-page-size=0x200000"], |
| }, |
| }, |
| } |
| |
| art_debug_defaults { |
| name: "art_debug_defaults", |
| defaults: ["art_defaults"], |
| visibility: ["//art:__subpackages__"], |
| cflags: [ |
| "-DDYNAMIC_ANNOTATIONS_ENABLED=1", |
| "-DVIXL_DEBUG", |
| "-UNDEBUG", |
| ], |
| asflags: [ |
| "-UNDEBUG", |
| ], |
| target: { |
| // This has to be duplicated for android and host to make sure it |
| // comes after the -Wframe-larger-than warnings inserted by art.go |
| // target-specific properties |
| android: { |
| cflags: ["-Wno-frame-larger-than="], |
| }, |
| host: { |
| cflags: ["-Wno-frame-larger-than="], |
| }, |
| }, |
| soong_config_variables: { |
| art_debug_opt_flag: { |
| cflags: ["%s"], |
| conditions_default: { |
| cflags: ["-Og"], |
| }, |
| }, |
| }, |
| } |
| |
| // A version of conscrypt only for enabling the "-hostdex" version to test ART on host. |
| java_library { |
| // We need our own name to not clash with the conscrypt library. |
| name: "conscrypt-host", |
| installable: true, |
| hostdex: true, |
| static_libs: ["conscrypt-for-host"], |
| |
| // Tests and build files rely on this file to be installed as "conscrypt-hostdex", |
| // therefore set a stem. Without it, the file would be installed as |
| // "conscrypt-host-hostdex". |
| stem: "conscrypt", |
| sdk_version: "core_platform", |
| target: { |
| hostdex: { |
| required: ["libjavacrypto"], |
| }, |
| darwin: { |
| // required module "libjavacrypto" is disabled on darwin |
| enabled: false, |
| }, |
| }, |
| } |
| |
| // A version of core-icu4j only for enabling the "-hostdex" version to test ART on host. |
| java_library { |
| // We need our own name to not clash with the core-icu4j library. |
| name: "core-icu4j-host", |
| installable: true, |
| hostdex: true, |
| static_libs: ["core-icu4j-for-host"], |
| |
| // Tests and build files rely on this file to be installed as "core-icu4j-hostdex", |
| // therefore set a stem. Without it, the file would be installed as |
| // "core-icu4j-host-hostdex". |
| stem: "core-icu4j", |
| sdk_version: "core_platform", |
| target: { |
| hostdex: { |
| required: ["libicu_jni"], |
| }, |
| }, |
| } |
| |
| // Defaults for different module types to enable them only when building ART |
| // from sources. TODO(b/172480617): Clean up when sources are gone from the |
| // platform tree and we no longer need to support sources present when prebuilts |
| // are used. |
| |
| art_module_cc_defaults { |
| name: "art_module_source_build_defaults", |
| defaults_visibility: [ |
| "//art:__subpackages__", |
| "//libcore:__subpackages__", |
| "//libnativehelper:__subpackages__", |
| ], |
| enabled: false, |
| soong_config_variables: { |
| source_build: { |
| enabled: true, |
| }, |
| }, |
| target: { |
| windows: { |
| // Windows is disabled by default, but if we set enabled:true |
| // globally above we need to disable it explicitly. |
| enabled: false, |
| }, |
| }, |
| } |
| |
| art_module_java_defaults { |
| name: "art_module_source_build_java_defaults", |
| defaults_visibility: [ |
| "//art:__subpackages__", |
| "//libcore:__subpackages__", |
| "//libnativehelper:__subpackages__", |
| ], |
| enabled: false, |
| soong_config_variables: { |
| source_build: { |
| enabled: true, |
| }, |
| }, |
| target: { |
| windows: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| art_module_genrule_defaults { |
| name: "art_module_source_build_genrule_defaults", |
| defaults_visibility: [ |
| "//art:__subpackages__", |
| "//libcore:__subpackages__", |
| "//libnativehelper:__subpackages__", |
| ], |
| enabled: false, |
| soong_config_variables: { |
| source_build: { |
| enabled: true, |
| }, |
| }, |
| target: { |
| windows: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| art_module_prebuilt_defaults { |
| name: "art_module_source_build_prebuilt_defaults", |
| defaults_visibility: [ |
| "//art:__subpackages__", |
| "//libcore:__subpackages__", |
| "//libnativehelper:__subpackages__", |
| ], |
| enabled: false, |
| soong_config_variables: { |
| source_build: { |
| enabled: true, |
| }, |
| }, |
| target: { |
| windows: { |
| enabled: false, |
| }, |
| }, |
| } |