blob: 9305bc6fffe251110f164f9f42a53f2419c66094 [file] [log] [blame]
Colin Cross1f7f3bd2016-07-27 10:12:38 -07001bootstrap_go_package {
2 name: "soong-art",
3 pkgPath: "android/soong/art",
4 deps: [
5 "blueprint",
6 "blueprint-pathtools",
Colin Cross84b69332017-11-01 14:23:17 -07007 "blueprint-proptools",
Colin Cross1f7f3bd2016-07-27 10:12:38 -07008 "soong",
9 "soong-android",
Alex Lightda948ce2018-12-06 17:05:41 +000010 "soong-apex",
Colin Cross1f7f3bd2016-07-27 10:12:38 -070011 "soong-cc",
12 ],
13 srcs: [
14 "art.go",
15 "codegen.go",
16 "makevars.go",
17 ],
18 pluginFor: ["soong_build"],
19}
20
Andreas Gampe896583e2018-06-15 13:31:58 -070021art_clang_tidy_errors = [
Andreas Gampedfcd82c2018-10-16 20:22:37 -070022 "android-cloexec-dup",
23 "android-cloexec-open",
Andreas Gampe6cd83902018-10-03 20:03:03 -070024 "bugprone-argument-comment",
Andreas Gampe322c0892018-09-18 13:50:29 -070025 "bugprone-lambda-function-name",
Andreas Gampe0dc93b12019-05-15 10:30:22 -070026 "bugprone-unused-raii", // Protect scoped things like MutexLock.
Andreas Gampeafaf7f82018-10-16 11:32:38 -070027 "bugprone-unused-return-value",
Andreas Gampe322c0892018-09-18 13:50:29 -070028 "bugprone-virtual-near-miss",
Andreas Gampe8351aac2018-09-10 12:37:49 -070029 "modernize-use-bool-literals",
Andreas Gampe322c0892018-09-18 13:50:29 -070030 "modernize-use-nullptr",
Andreas Gampec55bb392018-09-21 00:02:02 +000031 "modernize-use-using",
Andreas Gampe322c0892018-09-18 13:50:29 -070032 "performance-faster-string-find",
Andreas Gampe6f4cf6e2018-06-19 17:10:48 -070033 "performance-for-range-copy",
Andreas Gampe322c0892018-09-18 13:50:29 -070034 "performance-implicit-conversion-in-loop",
Andreas Gampe44b31742018-10-01 19:30:57 -070035 "performance-noexcept-move-constructor",
Andreas Gampe6f4cf6e2018-06-19 17:10:48 -070036 "performance-unnecessary-copy-initialization",
37 "performance-unnecessary-value-param",
Andreas Gampebd39d142018-07-19 11:14:42 -070038 "misc-unused-using-decls",
Andreas Gampe896583e2018-06-15 13:31:58 -070039]
Andreas Gampe896583e2018-06-15 13:31:58 -070040
41art_clang_tidy_disabled = [
42 "-google-default-arguments",
43 // We have local stores that are only used for debug checks.
44 "-clang-analyzer-deadcode.DeadStores",
45 // We are OK with some static globals and that they can, in theory, throw.
46 "-cert-err58-cpp",
47 // We have lots of C-style variadic functions, and are OK with them. JNI ensures
48 // that working around this warning would be extra-painful.
49 "-cert-dcl50-cpp",
Andreas Gampe322c0892018-09-18 13:50:29 -070050 // "Modernization" we don't agree with.
51 "-modernize-use-auto",
52 "-modernize-return-braced-init-list",
53 "-modernize-use-default-member-init",
54 "-modernize-pass-by-value",
Andreas Gampe896583e2018-06-15 13:31:58 -070055]
56
Colin Cross1f7f3bd2016-07-27 10:12:38 -070057art_global_defaults {
58 // Additional flags are computed by art.go
59
60 name: "art_defaults",
Martin Stjernholmb4abe0a2019-05-17 19:22:55 +010061
62 // This is the default visibility for the //art package, but we repeat it
63 // here so that it gets merged with other visibility rules in modules
64 // extending these defaults.
65 visibility: ["//art:__subpackages__"],
66
Colin Cross1f7f3bd2016-07-27 10:12:38 -070067 cflags: [
Colin Cross1f7f3bd2016-07-27 10:12:38 -070068 // Base set of cflags used by all things ART.
69 "-fno-rtti",
70 "-ggdb3",
71 "-Wall",
72 "-Werror",
73 "-Wextra",
74 "-Wstrict-aliasing",
75 "-fstrict-aliasing",
76 "-Wunreachable-code",
77 "-Wredundant-decls",
78 "-Wshadow",
79 "-Wunused",
80 "-fvisibility=protected",
81
82 // Warn about thread safety violations with clang.
83 "-Wthread-safety",
Colin Cross62f62f32019-11-05 15:55:45 -080084 // TODO(b/144045034): turn on -Wthread-safety-negative
85 //"-Wthread-safety-negative",
Colin Cross1f7f3bd2016-07-27 10:12:38 -070086
87 // Warn if switch fallthroughs aren't annotated.
88 "-Wimplicit-fallthrough",
89
90 // Enable float equality warnings.
91 "-Wfloat-equal",
92
93 // Enable warning of converting ints to void*.
94 "-Wint-to-void-pointer-cast",
95
96 // Enable warning of wrong unused annotations.
97 "-Wused-but-marked-unused",
98
99 // Enable warning for deprecated language features.
100 "-Wdeprecated",
101
102 // Enable warning for unreachable break & return.
103 "-Wunreachable-code-break",
104 "-Wunreachable-code-return",
105
David Srbecky56de89a2018-10-01 15:32:20 +0100106 // Disable warning for use of offsetof on non-standard layout type.
107 // We use it to implement OFFSETOF_MEMBER - see macros.h.
108 "-Wno-invalid-offsetof",
109
Yi Kong39402542019-03-24 02:47:16 -0700110 // Enable inconsistent-missing-override warning. This warning is disabled by default in
111 // Android.
112 "-Winconsistent-missing-override",
113
David Sehrae3bcac2017-02-03 15:19:00 -0800114 // Enable thread annotations for std::mutex, etc.
115 "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS",
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700116 ],
117
jaishankbf7ce252019-06-10 16:16:47 +0530118 arch: {
119 x86: {
120 avx2: {
121 cflags: [
122 "-mavx2",
123 "-mfma",
124 ],
125 },
126 },
127 x86_64: {
128 avx2: {
129 cflags: [
130 "-mavx2",
131 "-mfma",
132 ],
133 },
134 },
135 },
136
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700137 target: {
138 android: {
139 cflags: [
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700140 // To use oprofile_android --callgraph, uncomment this and recompile with
141 // mmma -j art
142 // "-fno-omit-frame-pointer",
143 // "-marm",
144 // "-mapcs",
145 ],
Paul Duffin34ac9f72019-07-18 13:03:24 +0100146 header_libs: [
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700147 // We optimize Thread::Current() with a direct TLS access. This requires access to a
Christopher Ferrisfd64e562019-09-25 17:58:26 -0700148 // platform specific Bionic header.
149 "bionic_libc_platform_headers",
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700150 ],
151 },
Dan Willemsen057f1e42017-10-03 14:11:48 -0700152 linux: {
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700153 cflags: [
154 // Enable missing-noreturn only on non-Mac. As lots of things are not implemented for
155 // Apple, it's a pain.
156 "-Wmissing-noreturn",
157 ],
158 },
Andreas Gampea47a6e82019-07-24 09:46:16 -0700159 linux_bionic: {
160 header_libs: [
161 // We optimize Thread::Current() with a direct TLS access. This requires access to a
Christopher Ferrisfd64e562019-09-25 17:58:26 -0700162 // platform specific Bionic header.
163 "bionic_libc_platform_headers",
Andreas Gampea47a6e82019-07-24 09:46:16 -0700164 ],
Calin Juravle542e3932019-12-09 19:54:18 -0800165 strip: {
Calin Juravle3bdb9772019-12-10 11:31:53 -0800166 // Do not strip art libs when building for linux-bionic.
167 // Otherwise we can't get any symbols out of crashes.
Calin Juravle542e3932019-12-09 19:54:18 -0800168 none: true,
169 },
Andreas Gampea47a6e82019-07-24 09:46:16 -0700170 },
David Srbeckyd53f6062019-03-22 14:55:21 +0000171 darwin: {
172 enabled: false,
173 },
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700174 host: {
175 cflags: [
176 // Bug: 15446488. We don't omit the frame pointer to work around
177 // clang/libunwind bugs that cause SEGVs in run-test-004-ThreadStress.
178 "-fno-omit-frame-pointer",
Aart Bikf6052572017-07-20 16:47:45 -0700179 // The build assumes that all our x86/x86_64 hosts (such as buildbots and developer
180 // desktops) support at least sse4.2/popcount. This firstly implies that the ART
181 // runtime binary itself may exploit these features. Secondly, this implies that
182 // the ART runtime passes these feature flags to dex2oat and JIT by calling the
183 // method InstructionSetFeatures::FromCppDefines(). Since invoking dex2oat directly
184 // does not pick up these flags, cross-compiling from a x86/x86_64 host to a
185 // x86/x86_64 target should not be affected.
186 "-msse4.2",
187 "-mpopcnt",
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700188 ],
189 },
190 },
191
192 codegen: {
193 arm: {
194 cflags: ["-DART_ENABLE_CODEGEN_arm"],
195 },
196 arm64: {
197 cflags: ["-DART_ENABLE_CODEGEN_arm64"],
198 },
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700199 x86: {
200 cflags: ["-DART_ENABLE_CODEGEN_x86"],
201 },
202 x86_64: {
203 cflags: ["-DART_ENABLE_CODEGEN_x86_64"],
204 },
205 },
206
Andreas Gampe896583e2018-06-15 13:31:58 -0700207 tidy_checks: art_clang_tidy_errors + art_clang_tidy_disabled,
Nikita Ioffe08417352019-03-28 12:47:38 +0000208 tidy_checks_as_errors: art_clang_tidy_errors,
George Burgess IV7fb46652017-06-16 15:35:33 -0700209
210 tidy_flags: [
211 // The static analyzer treats DCHECK as always enabled; we sometimes get
212 // false positives when we use DCHECKs with code that relies on NDEBUG.
213 "-extra-arg=-UNDEBUG",
George Burgess IVdd8aa322017-06-21 16:34:35 -0700214 // clang-tidy complains about functions like:
215 // void foo() { CHECK(kIsFooEnabled); /* do foo... */ }
216 // not being marked noreturn if kIsFooEnabled is false.
217 "-extra-arg=-Wno-missing-noreturn",
Andreas Gampe020020f2018-07-10 12:34:23 -0700218 // Because tidy doesn't like our flow checks for compile-time configuration and thinks that
219 // the following code is dead (it is, but not for all configurations), disable unreachable
220 // code detection in Clang for tidy builds. It is still on for regular build steps, so we
221 // will still get the "real" errors.
222 "-extra-arg=-Wno-unreachable-code",
George Burgess IV7fb46652017-06-16 15:35:33 -0700223 ],
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700224}
225
Colin Crossbe332ed2016-09-21 13:23:53 -0700226art_debug_defaults {
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700227 name: "art_debug_defaults",
Martin Stjernholmb4abe0a2019-05-17 19:22:55 +0100228 visibility: ["//art:__subpackages__"],
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700229 cflags: [
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700230 "-DDYNAMIC_ANNOTATIONS_ENABLED=1",
231 "-DVIXL_DEBUG",
232 "-UNDEBUG",
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700233 ],
234 asflags: [
235 "-UNDEBUG",
236 ],
Colin Crossc5644062016-08-30 15:41:08 -0700237 target: {
238 // This has to be duplicated for android and host to make sure it
239 // comes after the -Wframe-larger-than warnings inserted by art.go
240 // target-specific properties
241 android: {
242 cflags: ["-Wno-frame-larger-than="],
243 },
244 host: {
245 cflags: ["-Wno-frame-larger-than="],
246 },
247 },
Colin Cross1f7f3bd2016-07-27 10:12:38 -0700248}
Nicolas Geoffrayf6c37842020-03-31 14:00:47 +0100249
250// A version of conscrypt only for enabling the "-hostdex" version to test ART on host.
251java_library {
Victor Changd20e51d2020-05-05 16:01:19 +0100252 // We need our own name to not clash with the conscrypt library.
Nicolas Geoffrayf6c37842020-03-31 14:00:47 +0100253 name: "conscrypt-host",
254 installable: true,
255 hostdex: true,
256 static_libs: ["conscrypt"],
257
258 // Tests and build files rely on this file to be installed as "conscrypt-hostdex",
259 // therefore set a stem. Without it, the file would be installed as
260 // "conscrypt-host-hostdex".
261 stem: "conscrypt",
262 sdk_version: "core_platform",
263 target: {
264 hostdex: {
265 required: ["libjavacrypto"],
266 },
Yo Chiange492f7e2020-08-07 04:22:18 +0000267 darwin: {
268 // required module "libjavacrypto" is disabled on darwin
269 enabled: false,
270 },
Nicolas Geoffrayf6c37842020-03-31 14:00:47 +0100271 },
272}
Victor Changd20e51d2020-05-05 16:01:19 +0100273
274// A version of core-icu4j only for enabling the "-hostdex" version to test ART on host.
275java_library {
276 // We need our own name to not clash with the core-icu4j library.
277 name: "core-icu4j-host",
278 installable: true,
279 hostdex: true,
280 static_libs: ["core-icu4j"],
281
282 // Tests and build files rely on this file to be installed as "core-icu4j-hostdex",
283 // therefore set a stem. Without it, the file would be installed as
284 // "core-icu4j-host-hostdex".
285 stem: "core-icu4j",
286 sdk_version: "core_platform",
287 target: {
288 hostdex: {
289 required: ["libicu_jni"],
290 },
291 },
292}