You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
427 lines
13 KiB
427 lines
13 KiB
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-open",
|
|
"bugprone-argument-comment",
|
|
"bugprone-lambda-function-name",
|
|
"bugprone-unused-raii", // Protect scoped things like MutexLock.
|
|
"bugprone-unused-return-value",
|
|
"bugprone-virtual-near-miss",
|
|
"modernize-use-bool-literals",
|
|
"modernize-use-nullptr",
|
|
"modernize-use-using",
|
|
"performance-faster-string-find",
|
|
"performance-for-range-copy",
|
|
"performance-implicit-conversion-in-loop",
|
|
"performance-noexcept-move-constructor",
|
|
"performance-unnecessary-copy-initialization",
|
|
"performance-unnecessary-value-param",
|
|
"misc-unused-using-decls",
|
|
]
|
|
|
|
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",
|
|
// "Modernization" we don't agree with.
|
|
"-modernize-use-auto",
|
|
"-modernize-return-braced-init-list",
|
|
"-modernize-use-default-member-init",
|
|
"-modernize-pass-by-value",
|
|
]
|
|
|
|
soong_config_module_type_import {
|
|
from: "art/build/SoongConfig.bp",
|
|
module_types: [
|
|
"art_module_art_global_defaults",
|
|
"art_module_cc_defaults",
|
|
"art_module_java_defaults",
|
|
],
|
|
}
|
|
|
|
art_module_art_global_defaults {
|
|
// Additional flags are computed by art.go
|
|
|
|
name: "art_defaults",
|
|
|
|
// 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",
|
|
],
|
|
header_libs: [
|
|
// We optimize Thread::Current() with a direct TLS access. This requires access to a
|
|
// platform specific Bionic header.
|
|
"bionic_libc_platform_headers",
|
|
],
|
|
},
|
|
linux: {
|
|
cflags: [
|
|
// Enable missing-noreturn only on non-Mac. As lots of things are not implemented for
|
|
// Apple, it's a pain.
|
|
"-Wmissing-noreturn",
|
|
],
|
|
},
|
|
linux_bionic: {
|
|
header_libs: [
|
|
// We optimize Thread::Current() with a direct TLS access. This requires access to a
|
|
// platform specific Bionic header.
|
|
"bionic_libc_platform_headers",
|
|
],
|
|
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.
|
|
"-msse4.2",
|
|
"-mpopcnt",
|
|
],
|
|
},
|
|
},
|
|
|
|
codegen: {
|
|
arm: {
|
|
cflags: ["-DART_ENABLE_CODEGEN_arm"],
|
|
},
|
|
arm64: {
|
|
cflags: ["-DART_ENABLE_CODEGEN_arm64"],
|
|
},
|
|
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: "S",
|
|
}
|
|
|
|
// 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"],
|
|
},
|
|
x86_64: {
|
|
ldflags: ["-z max-page-size=0x200000"],
|
|
},
|
|
},
|
|
}
|
|
|
|
cc_defaults {
|
|
name: "art_pgo_defaults",
|
|
visibility: ["//art:__subpackages__"],
|
|
pgo: {
|
|
sampling: true,
|
|
},
|
|
target: {
|
|
android_arm64: {
|
|
pgo: {
|
|
profile_file: "art/art_arm_arm64.profdata",
|
|
},
|
|
},
|
|
android_arm: {
|
|
pgo: {
|
|
profile_file: "art/art_arm_arm64.profdata",
|
|
},
|
|
},
|
|
android_x86_64: {
|
|
pgo: {
|
|
profile_file: "art/art_x86_x86_64.profdata",
|
|
},
|
|
},
|
|
android_x86: {
|
|
pgo: {
|
|
profile_file: "art/art_x86_x86_64.profdata",
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
art_debug_defaults {
|
|
name: "art_debug_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="],
|
|
},
|
|
},
|
|
|
|
min_sdk_version: "S",
|
|
}
|
|
|
|
// Use this to enable a cc_* module 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,
|
|
},
|
|
},
|
|
}
|
|
|
|
// Use this to enable a java_* module 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_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: {
|
|
// Windows is disabled by default, but if we set enabled:true
|
|
// globally above we need to disable it explicitly.
|
|
enabled: false,
|
|
},
|
|
},
|
|
}
|
|
|
|
// 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"],
|
|
},
|
|
},
|
|
}
|