blob: a405df4cd1f48de8f5bf740a6d61415f30337a11 [file] [log] [blame]
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,
},
},
}