1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
|
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",
]
art_global_defaults {
// Additional flags are computed by art.go
name: "art_defaults",
// 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: [
"-DART_TARGET",
// 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,
},
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"],
},
mips: {
cflags: ["-DART_ENABLE_CODEGEN_mips"],
},
mips64: {
cflags: ["-DART_ENABLE_CODEGEN_mips64"],
},
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",
],
}
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="],
},
},
}
|