1*333d2b36SAndroid Build Coastguard Worker// Copyright 2016 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage config 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "runtime" 19*333d2b36SAndroid Build Coastguard Worker "slices" 20*333d2b36SAndroid Build Coastguard Worker "strings" 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 23*333d2b36SAndroid Build Coastguard Worker "android/soong/remoteexec" 24*333d2b36SAndroid Build Coastguard Worker) 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Workervar ( 27*333d2b36SAndroid Build Coastguard Worker pctx = android.NewPackageContext("android/soong/cc/config") 28*333d2b36SAndroid Build Coastguard Worker 29*333d2b36SAndroid Build Coastguard Worker // Flags used by lots of devices. Putting them in package static variables 30*333d2b36SAndroid Build Coastguard Worker // will save bytes in build.ninja so they aren't repeated for every file 31*333d2b36SAndroid Build Coastguard Worker commonGlobalCflags = []string{ 32*333d2b36SAndroid Build Coastguard Worker // Enable some optimization by default. 33*333d2b36SAndroid Build Coastguard Worker "-O2", 34*333d2b36SAndroid Build Coastguard Worker 35*333d2b36SAndroid Build Coastguard Worker // Warnings enabled by default. Reference: 36*333d2b36SAndroid Build Coastguard Worker // https://clang.llvm.org/docs/DiagnosticsReference.html 37*333d2b36SAndroid Build Coastguard Worker "-Wall", 38*333d2b36SAndroid Build Coastguard Worker "-Wextra", 39*333d2b36SAndroid Build Coastguard Worker "-Winit-self", 40*333d2b36SAndroid Build Coastguard Worker "-Wpointer-arith", 41*333d2b36SAndroid Build Coastguard Worker "-Wunguarded-availability", 42*333d2b36SAndroid Build Coastguard Worker 43*333d2b36SAndroid Build Coastguard Worker // Warnings treated as errors by default. 44*333d2b36SAndroid Build Coastguard Worker // See also noOverrideGlobalCflags for errors that cannot be disabled 45*333d2b36SAndroid Build Coastguard Worker // from Android.bp files. 46*333d2b36SAndroid Build Coastguard Worker 47*333d2b36SAndroid Build Coastguard Worker // Using __DATE__/__TIME__ causes build nondeterminism. 48*333d2b36SAndroid Build Coastguard Worker "-Werror=date-time", 49*333d2b36SAndroid Build Coastguard Worker // Detects forgotten */& that usually cause a crash 50*333d2b36SAndroid Build Coastguard Worker "-Werror=int-conversion", 51*333d2b36SAndroid Build Coastguard Worker // Detects unterminated alignment modification pragmas, which often lead 52*333d2b36SAndroid Build Coastguard Worker // to ABI mismatch between modules and hard-to-debug crashes. 53*333d2b36SAndroid Build Coastguard Worker "-Werror=pragma-pack", 54*333d2b36SAndroid Build Coastguard Worker // Same as above, but detects alignment pragmas around a header 55*333d2b36SAndroid Build Coastguard Worker // inclusion. 56*333d2b36SAndroid Build Coastguard Worker "-Werror=pragma-pack-suspicious-include", 57*333d2b36SAndroid Build Coastguard Worker // Detects dividing an array size by itself, which is a common typo that 58*333d2b36SAndroid Build Coastguard Worker // leads to bugs. 59*333d2b36SAndroid Build Coastguard Worker "-Werror=sizeof-array-div", 60*333d2b36SAndroid Build Coastguard Worker // Detects a typo that cuts off a prefix from a string literal. 61*333d2b36SAndroid Build Coastguard Worker "-Werror=string-plus-int", 62*333d2b36SAndroid Build Coastguard Worker // Detects for loops that will never execute more than once (for example 63*333d2b36SAndroid Build Coastguard Worker // due to unconditional break), but have a non-empty loop increment 64*333d2b36SAndroid Build Coastguard Worker // clause. Often a mistake/bug. 65*333d2b36SAndroid Build Coastguard Worker "-Werror=unreachable-code-loop-increment", 66*333d2b36SAndroid Build Coastguard Worker 67*333d2b36SAndroid Build Coastguard Worker // Warnings that should not be errors even for modules with -Werror. 68*333d2b36SAndroid Build Coastguard Worker 69*333d2b36SAndroid Build Coastguard Worker // Making deprecated usages an error causes extreme pain when trying to 70*333d2b36SAndroid Build Coastguard Worker // deprecate anything. 71*333d2b36SAndroid Build Coastguard Worker "-Wno-error=deprecated-declarations", 72*333d2b36SAndroid Build Coastguard Worker 73*333d2b36SAndroid Build Coastguard Worker // Warnings disabled by default. 74*333d2b36SAndroid Build Coastguard Worker 75*333d2b36SAndroid Build Coastguard Worker // We should encourage use of C23 features even when the whole project 76*333d2b36SAndroid Build Coastguard Worker // isn't C23-ready. 77*333d2b36SAndroid Build Coastguard Worker "-Wno-c23-extensions", 78*333d2b36SAndroid Build Coastguard Worker // Designated initializer syntax is recommended by the Google C++ style 79*333d2b36SAndroid Build Coastguard Worker // and is OK to use even if not formally supported by the chosen C++ 80*333d2b36SAndroid Build Coastguard Worker // version. 81*333d2b36SAndroid Build Coastguard Worker "-Wno-c99-designator", 82*333d2b36SAndroid Build Coastguard Worker // Detects uses of a GNU C extension equivalent to a limited form of 83*333d2b36SAndroid Build Coastguard Worker // constexpr. Enabling this would require replacing many constants with 84*333d2b36SAndroid Build Coastguard Worker // macros, which is not a good trade-off. 85*333d2b36SAndroid Build Coastguard Worker "-Wno-gnu-folding-constant", 86*333d2b36SAndroid Build Coastguard Worker // AIDL generated code redeclares pure virtual methods in each 87*333d2b36SAndroid Build Coastguard Worker // subsequent version of an interface, so this warning is currently 88*333d2b36SAndroid Build Coastguard Worker // infeasible to enable. 89*333d2b36SAndroid Build Coastguard Worker "-Wno-inconsistent-missing-override", 90*333d2b36SAndroid Build Coastguard Worker // Detects designated initializers that are in a different order than 91*333d2b36SAndroid Build Coastguard Worker // the fields in the initialized type, which causes the side effects 92*333d2b36SAndroid Build Coastguard Worker // of initializers to occur out of order with the source code. 93*333d2b36SAndroid Build Coastguard Worker // In practice, this warning has extremely poor signal to noise ratio, 94*333d2b36SAndroid Build Coastguard Worker // because it is triggered even for initializers with no side effects. 95*333d2b36SAndroid Build Coastguard Worker // Individual modules can still opt into it via cflags. 96*333d2b36SAndroid Build Coastguard Worker "-Wno-error=reorder-init-list", 97*333d2b36SAndroid Build Coastguard Worker "-Wno-reorder-init-list", 98*333d2b36SAndroid Build Coastguard Worker // Incompatible with the Google C++ style guidance to use 'int' for loop 99*333d2b36SAndroid Build Coastguard Worker // indices; poor signal to noise ratio. 100*333d2b36SAndroid Build Coastguard Worker "-Wno-sign-compare", 101*333d2b36SAndroid Build Coastguard Worker // Poor signal to noise ratio. 102*333d2b36SAndroid Build Coastguard Worker "-Wno-unused", 103*333d2b36SAndroid Build Coastguard Worker 104*333d2b36SAndroid Build Coastguard Worker // Global preprocessor constants. 105*333d2b36SAndroid Build Coastguard Worker 106*333d2b36SAndroid Build Coastguard Worker "-DANDROID", 107*333d2b36SAndroid Build Coastguard Worker "-DNDEBUG", 108*333d2b36SAndroid Build Coastguard Worker "-UDEBUG", 109*333d2b36SAndroid Build Coastguard Worker "-D__compiler_offsetof=__builtin_offsetof", 110*333d2b36SAndroid Build Coastguard Worker // Allows the bionic versioning.h to indirectly determine whether the 111*333d2b36SAndroid Build Coastguard Worker // option -Wunguarded-availability is on or not. 112*333d2b36SAndroid Build Coastguard Worker "-D__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__", 113*333d2b36SAndroid Build Coastguard Worker 114*333d2b36SAndroid Build Coastguard Worker // -f and -g options. 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Worker // Emit address-significance table which allows linker to perform safe ICF. Clang does 117*333d2b36SAndroid Build Coastguard Worker // not emit the table by default on Android since NDK still uses GNU binutils. 118*333d2b36SAndroid Build Coastguard Worker "-faddrsig", 119*333d2b36SAndroid Build Coastguard Worker 120*333d2b36SAndroid Build Coastguard Worker // Emit debugging data in a modern format (DWARF v5). 121*333d2b36SAndroid Build Coastguard Worker "-fdebug-default-version=5", 122*333d2b36SAndroid Build Coastguard Worker 123*333d2b36SAndroid Build Coastguard Worker // Force clang to always output color diagnostics. Ninja will strip the ANSI 124*333d2b36SAndroid Build Coastguard Worker // color codes if it is not running in a terminal. 125*333d2b36SAndroid Build Coastguard Worker "-fcolor-diagnostics", 126*333d2b36SAndroid Build Coastguard Worker 127*333d2b36SAndroid Build Coastguard Worker // Turn off FMA which got enabled by default in clang-r445002 (http://b/218805949) 128*333d2b36SAndroid Build Coastguard Worker "-ffp-contract=off", 129*333d2b36SAndroid Build Coastguard Worker 130*333d2b36SAndroid Build Coastguard Worker // Google C++ style does not allow exceptions, turn them off by default. 131*333d2b36SAndroid Build Coastguard Worker "-fno-exceptions", 132*333d2b36SAndroid Build Coastguard Worker 133*333d2b36SAndroid Build Coastguard Worker // Disable optimizations based on strict aliasing by default. 134*333d2b36SAndroid Build Coastguard Worker // The performance benefit of enabling them currently does not outweigh 135*333d2b36SAndroid Build Coastguard Worker // the risk of hard-to-reproduce bugs. 136*333d2b36SAndroid Build Coastguard Worker "-fno-strict-aliasing", 137*333d2b36SAndroid Build Coastguard Worker 138*333d2b36SAndroid Build Coastguard Worker // Disable line wrapping for error messages - it interferes with 139*333d2b36SAndroid Build Coastguard Worker // displaying logs in web browsers. 140*333d2b36SAndroid Build Coastguard Worker "-fmessage-length=0", 141*333d2b36SAndroid Build Coastguard Worker 142*333d2b36SAndroid Build Coastguard Worker // Using simple template names reduces the size of debug builds. 143*333d2b36SAndroid Build Coastguard Worker "-gsimple-template-names", 144*333d2b36SAndroid Build Coastguard Worker 145*333d2b36SAndroid Build Coastguard Worker // Use zstd to compress debug data. 146*333d2b36SAndroid Build Coastguard Worker "-gz=zstd", 147*333d2b36SAndroid Build Coastguard Worker 148*333d2b36SAndroid Build Coastguard Worker // Make paths in deps files relative. 149*333d2b36SAndroid Build Coastguard Worker "-no-canonical-prefixes", 150*333d2b36SAndroid Build Coastguard Worker } 151*333d2b36SAndroid Build Coastguard Worker 152*333d2b36SAndroid Build Coastguard Worker commonGlobalConlyflags = []string{} 153*333d2b36SAndroid Build Coastguard Worker 154*333d2b36SAndroid Build Coastguard Worker commonGlobalAsflags = []string{ 155*333d2b36SAndroid Build Coastguard Worker "-D__ASSEMBLY__", 156*333d2b36SAndroid Build Coastguard Worker // TODO(b/235105792): override global -fdebug-default-version=5, it is causing $TMPDIR to 157*333d2b36SAndroid Build Coastguard Worker // end up in the dwarf data for crtend_so.S. 158*333d2b36SAndroid Build Coastguard Worker "-fdebug-default-version=4", 159*333d2b36SAndroid Build Coastguard Worker } 160*333d2b36SAndroid Build Coastguard Worker 161*333d2b36SAndroid Build Coastguard Worker // Compilation flags for device code; not applied to host code. 162*333d2b36SAndroid Build Coastguard Worker deviceGlobalCflags = []string{ 163*333d2b36SAndroid Build Coastguard Worker "-ffunction-sections", 164*333d2b36SAndroid Build Coastguard Worker "-fdata-sections", 165*333d2b36SAndroid Build Coastguard Worker "-fno-short-enums", 166*333d2b36SAndroid Build Coastguard Worker "-funwind-tables", 167*333d2b36SAndroid Build Coastguard Worker "-fstack-protector-strong", 168*333d2b36SAndroid Build Coastguard Worker "-Wa,--noexecstack", 169*333d2b36SAndroid Build Coastguard Worker "-D_FORTIFY_SOURCE=2", 170*333d2b36SAndroid Build Coastguard Worker 171*333d2b36SAndroid Build Coastguard Worker "-Wstrict-aliasing=2", 172*333d2b36SAndroid Build Coastguard Worker 173*333d2b36SAndroid Build Coastguard Worker "-Werror=return-type", 174*333d2b36SAndroid Build Coastguard Worker "-Werror=non-virtual-dtor", 175*333d2b36SAndroid Build Coastguard Worker "-Werror=address", 176*333d2b36SAndroid Build Coastguard Worker "-Werror=sequence-point", 177*333d2b36SAndroid Build Coastguard Worker "-Werror=format-security", 178*333d2b36SAndroid Build Coastguard Worker } 179*333d2b36SAndroid Build Coastguard Worker 180*333d2b36SAndroid Build Coastguard Worker commonGlobalLldflags = []string{ 181*333d2b36SAndroid Build Coastguard Worker "-fuse-ld=lld", 182*333d2b36SAndroid Build Coastguard Worker "-Wl,--icf=safe", 183*333d2b36SAndroid Build Coastguard Worker "-Wl,--no-demangle", 184*333d2b36SAndroid Build Coastguard Worker } 185*333d2b36SAndroid Build Coastguard Worker 186*333d2b36SAndroid Build Coastguard Worker deviceGlobalCppflags = []string{ 187*333d2b36SAndroid Build Coastguard Worker "-fvisibility-inlines-hidden", 188*333d2b36SAndroid Build Coastguard Worker } 189*333d2b36SAndroid Build Coastguard Worker 190*333d2b36SAndroid Build Coastguard Worker // Linking flags for device code; not applied to host binaries. 191*333d2b36SAndroid Build Coastguard Worker deviceGlobalLdflags = []string{ 192*333d2b36SAndroid Build Coastguard Worker "-Wl,-z,noexecstack", 193*333d2b36SAndroid Build Coastguard Worker "-Wl,-z,relro", 194*333d2b36SAndroid Build Coastguard Worker "-Wl,-z,now", 195*333d2b36SAndroid Build Coastguard Worker "-Wl,--build-id=md5", 196*333d2b36SAndroid Build Coastguard Worker "-Wl,--fatal-warnings", 197*333d2b36SAndroid Build Coastguard Worker "-Wl,--no-undefined-version", 198*333d2b36SAndroid Build Coastguard Worker // TODO: Eventually we should link against a libunwind.a with hidden symbols, and then these 199*333d2b36SAndroid Build Coastguard Worker // --exclude-libs arguments can be removed. 200*333d2b36SAndroid Build Coastguard Worker "-Wl,--exclude-libs,libgcc.a", 201*333d2b36SAndroid Build Coastguard Worker "-Wl,--exclude-libs,libgcc_stripped.a", 202*333d2b36SAndroid Build Coastguard Worker "-Wl,--exclude-libs,libunwind_llvm.a", 203*333d2b36SAndroid Build Coastguard Worker "-Wl,--exclude-libs,libunwind.a", 204*333d2b36SAndroid Build Coastguard Worker } 205*333d2b36SAndroid Build Coastguard Worker 206*333d2b36SAndroid Build Coastguard Worker deviceGlobalLldflags = append(append(deviceGlobalLdflags, commonGlobalLldflags...), 207*333d2b36SAndroid Build Coastguard Worker "-Wl,--compress-debug-sections=zstd", 208*333d2b36SAndroid Build Coastguard Worker ) 209*333d2b36SAndroid Build Coastguard Worker 210*333d2b36SAndroid Build Coastguard Worker hostGlobalCflags = []string{} 211*333d2b36SAndroid Build Coastguard Worker 212*333d2b36SAndroid Build Coastguard Worker hostGlobalCppflags = []string{} 213*333d2b36SAndroid Build Coastguard Worker 214*333d2b36SAndroid Build Coastguard Worker hostGlobalLdflags = []string{} 215*333d2b36SAndroid Build Coastguard Worker 216*333d2b36SAndroid Build Coastguard Worker hostGlobalLldflags = commonGlobalLldflags 217*333d2b36SAndroid Build Coastguard Worker 218*333d2b36SAndroid Build Coastguard Worker commonGlobalCppflags = []string{ 219*333d2b36SAndroid Build Coastguard Worker // -Wimplicit-fallthrough is not enabled by -Wall. 220*333d2b36SAndroid Build Coastguard Worker "-Wimplicit-fallthrough", 221*333d2b36SAndroid Build Coastguard Worker 222*333d2b36SAndroid Build Coastguard Worker // Enable clang's thread-safety annotations in libcxx. 223*333d2b36SAndroid Build Coastguard Worker "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS", 224*333d2b36SAndroid Build Coastguard Worker 225*333d2b36SAndroid Build Coastguard Worker // libc++'s math.h has an #include_next outside of system_headers. 226*333d2b36SAndroid Build Coastguard Worker "-Wno-gnu-include-next", 227*333d2b36SAndroid Build Coastguard Worker } 228*333d2b36SAndroid Build Coastguard Worker 229*333d2b36SAndroid Build Coastguard Worker // These flags are appended after the module's cflags, so they cannot be 230*333d2b36SAndroid Build Coastguard Worker // overridden from Android.bp files. 231*333d2b36SAndroid Build Coastguard Worker // 232*333d2b36SAndroid Build Coastguard Worker // NOTE: if you need to disable a warning to unblock a compiler upgrade 233*333d2b36SAndroid Build Coastguard Worker // and it is only triggered by third party code, add it to 234*333d2b36SAndroid Build Coastguard Worker // extraExternalCflags (if possible) or noOverrideExternalGlobalCflags 235*333d2b36SAndroid Build Coastguard Worker // (if the former doesn't work). If the new warning also occurs in first 236*333d2b36SAndroid Build Coastguard Worker // party code, try adding it to commonGlobalCflags first. Adding it here 237*333d2b36SAndroid Build Coastguard Worker // should be the last resort, because it prevents all code in Android from 238*333d2b36SAndroid Build Coastguard Worker // opting into the warning. 239*333d2b36SAndroid Build Coastguard Worker noOverrideGlobalCflags = []string{ 240*333d2b36SAndroid Build Coastguard Worker "-Werror=bool-operation", 241*333d2b36SAndroid Build Coastguard Worker "-Werror=dangling", 242*333d2b36SAndroid Build Coastguard Worker "-Werror=format-insufficient-args", 243*333d2b36SAndroid Build Coastguard Worker "-Werror=implicit-int-float-conversion", 244*333d2b36SAndroid Build Coastguard Worker "-Werror=int-in-bool-context", 245*333d2b36SAndroid Build Coastguard Worker "-Werror=int-to-pointer-cast", 246*333d2b36SAndroid Build Coastguard Worker "-Werror=pointer-to-int-cast", 247*333d2b36SAndroid Build Coastguard Worker "-Werror=xor-used-as-pow", 248*333d2b36SAndroid Build Coastguard Worker "-Wimplicit-int-float-conversion", 249*333d2b36SAndroid Build Coastguard Worker // http://b/161386391 for -Wno-void-pointer-to-enum-cast 250*333d2b36SAndroid Build Coastguard Worker "-Wno-void-pointer-to-enum-cast", 251*333d2b36SAndroid Build Coastguard Worker // http://b/161386391 for -Wno-void-pointer-to-int-cast 252*333d2b36SAndroid Build Coastguard Worker "-Wno-void-pointer-to-int-cast", 253*333d2b36SAndroid Build Coastguard Worker // http://b/161386391 for -Wno-pointer-to-int-cast 254*333d2b36SAndroid Build Coastguard Worker "-Wno-pointer-to-int-cast", 255*333d2b36SAndroid Build Coastguard Worker "-Werror=fortify-source", 256*333d2b36SAndroid Build Coastguard Worker // http://b/315246135 temporarily disabled 257*333d2b36SAndroid Build Coastguard Worker "-Wno-unused-variable", 258*333d2b36SAndroid Build Coastguard Worker // Disabled because it produces many false positives. http://b/323050926 259*333d2b36SAndroid Build Coastguard Worker "-Wno-missing-field-initializers", 260*333d2b36SAndroid Build Coastguard Worker // http://b/323050889 261*333d2b36SAndroid Build Coastguard Worker "-Wno-packed-non-pod", 262*333d2b36SAndroid Build Coastguard Worker 263*333d2b36SAndroid Build Coastguard Worker "-Werror=address-of-temporary", 264*333d2b36SAndroid Build Coastguard Worker "-Werror=incompatible-function-pointer-types", 265*333d2b36SAndroid Build Coastguard Worker "-Werror=null-dereference", 266*333d2b36SAndroid Build Coastguard Worker "-Werror=return-type", 267*333d2b36SAndroid Build Coastguard Worker 268*333d2b36SAndroid Build Coastguard Worker // http://b/72331526 Disable -Wtautological-* until the instances detected by these 269*333d2b36SAndroid Build Coastguard Worker // new warnings are fixed. 270*333d2b36SAndroid Build Coastguard Worker "-Wno-tautological-constant-compare", 271*333d2b36SAndroid Build Coastguard Worker "-Wno-tautological-type-limit-compare", 272*333d2b36SAndroid Build Coastguard Worker // http://b/145211066 273*333d2b36SAndroid Build Coastguard Worker "-Wno-implicit-int-float-conversion", 274*333d2b36SAndroid Build Coastguard Worker // New warnings to be fixed after clang-r377782. 275*333d2b36SAndroid Build Coastguard Worker "-Wno-tautological-overlap-compare", // http://b/148815696 276*333d2b36SAndroid Build Coastguard Worker // New warnings to be fixed after clang-r383902. 277*333d2b36SAndroid Build Coastguard Worker "-Wno-deprecated-copy", // http://b/153746672 278*333d2b36SAndroid Build Coastguard Worker "-Wno-range-loop-construct", // http://b/153747076 279*333d2b36SAndroid Build Coastguard Worker "-Wno-zero-as-null-pointer-constant", // http://b/68236239 280*333d2b36SAndroid Build Coastguard Worker "-Wno-deprecated-anon-enum-enum-conversion", // http://b/153746485 281*333d2b36SAndroid Build Coastguard Worker "-Wno-deprecated-enum-enum-conversion", 282*333d2b36SAndroid Build Coastguard Worker "-Wno-error=pessimizing-move", // http://b/154270751 283*333d2b36SAndroid Build Coastguard Worker // New warnings to be fixed after clang-r399163 284*333d2b36SAndroid Build Coastguard Worker "-Wno-non-c-typedef-for-linkage", // http://b/161304145 285*333d2b36SAndroid Build Coastguard Worker // New warnings to be fixed after clang-r428724 286*333d2b36SAndroid Build Coastguard Worker "-Wno-align-mismatch", // http://b/193679946 287*333d2b36SAndroid Build Coastguard Worker // New warnings to be fixed after clang-r433403 288*333d2b36SAndroid Build Coastguard Worker "-Wno-error=unused-but-set-variable", // http://b/197240255 289*333d2b36SAndroid Build Coastguard Worker "-Wno-error=unused-but-set-parameter", // http://b/197240255 290*333d2b36SAndroid Build Coastguard Worker // New warnings to be fixed after clang-r468909 291*333d2b36SAndroid Build Coastguard Worker "-Wno-error=deprecated-builtins", // http://b/241601211 292*333d2b36SAndroid Build Coastguard Worker "-Wno-error=deprecated", // in external/googletest/googletest 293*333d2b36SAndroid Build Coastguard Worker // Disabling until the warning is fixed in libc++abi header files b/366180429 294*333d2b36SAndroid Build Coastguard Worker "-Wno-deprecated-dynamic-exception-spec", 295*333d2b36SAndroid Build Coastguard Worker // New warnings to be fixed after clang-r522817 296*333d2b36SAndroid Build Coastguard Worker "-Wno-error=invalid-offsetof", 297*333d2b36SAndroid Build Coastguard Worker "-Wno-error=thread-safety-reference-return", 298*333d2b36SAndroid Build Coastguard Worker 299*333d2b36SAndroid Build Coastguard Worker // Allow using VLA CXX extension. 300*333d2b36SAndroid Build Coastguard Worker "-Wno-vla-cxx-extension", 301*333d2b36SAndroid Build Coastguard Worker "-Wno-cast-function-type-mismatch", 302*333d2b36SAndroid Build Coastguard Worker } 303*333d2b36SAndroid Build Coastguard Worker 304*333d2b36SAndroid Build Coastguard Worker noOverride64GlobalCflags = []string{} 305*333d2b36SAndroid Build Coastguard Worker 306*333d2b36SAndroid Build Coastguard Worker // Extra cflags applied to third-party code (anything for which 307*333d2b36SAndroid Build Coastguard Worker // IsThirdPartyPath() in build/soong/android/paths.go returns true; 308*333d2b36SAndroid Build Coastguard Worker // includes external/, most of vendor/ and most of hardware/) 309*333d2b36SAndroid Build Coastguard Worker extraExternalCflags = []string{ 310*333d2b36SAndroid Build Coastguard Worker "-Wno-enum-compare", 311*333d2b36SAndroid Build Coastguard Worker "-Wno-enum-compare-switch", 312*333d2b36SAndroid Build Coastguard Worker 313*333d2b36SAndroid Build Coastguard Worker // http://b/72331524 Allow null pointer arithmetic until the instances detected by 314*333d2b36SAndroid Build Coastguard Worker // this new warning are fixed. 315*333d2b36SAndroid Build Coastguard Worker "-Wno-null-pointer-arithmetic", 316*333d2b36SAndroid Build Coastguard Worker 317*333d2b36SAndroid Build Coastguard Worker // Bug: http://b/29823425 Disable -Wnull-dereference until the 318*333d2b36SAndroid Build Coastguard Worker // new instances detected by this warning are fixed. 319*333d2b36SAndroid Build Coastguard Worker "-Wno-null-dereference", 320*333d2b36SAndroid Build Coastguard Worker 321*333d2b36SAndroid Build Coastguard Worker // http://b/145211477 322*333d2b36SAndroid Build Coastguard Worker "-Wno-pointer-compare", 323*333d2b36SAndroid Build Coastguard Worker "-Wno-final-dtor-non-final-class", 324*333d2b36SAndroid Build Coastguard Worker 325*333d2b36SAndroid Build Coastguard Worker // http://b/165945989 326*333d2b36SAndroid Build Coastguard Worker "-Wno-psabi", 327*333d2b36SAndroid Build Coastguard Worker 328*333d2b36SAndroid Build Coastguard Worker // http://b/199369603 329*333d2b36SAndroid Build Coastguard Worker "-Wno-null-pointer-subtraction", 330*333d2b36SAndroid Build Coastguard Worker 331*333d2b36SAndroid Build Coastguard Worker // http://b/175068488 332*333d2b36SAndroid Build Coastguard Worker "-Wno-string-concatenation", 333*333d2b36SAndroid Build Coastguard Worker 334*333d2b36SAndroid Build Coastguard Worker // http://b/239661264 335*333d2b36SAndroid Build Coastguard Worker "-Wno-deprecated-non-prototype", 336*333d2b36SAndroid Build Coastguard Worker 337*333d2b36SAndroid Build Coastguard Worker "-Wno-unused", 338*333d2b36SAndroid Build Coastguard Worker "-Wno-deprecated", 339*333d2b36SAndroid Build Coastguard Worker 340*333d2b36SAndroid Build Coastguard Worker // http://b/315250603 temporarily disabled 341*333d2b36SAndroid Build Coastguard Worker "-Wno-error=format", 342*333d2b36SAndroid Build Coastguard Worker } 343*333d2b36SAndroid Build Coastguard Worker 344*333d2b36SAndroid Build Coastguard Worker // Similar to noOverrideGlobalCflags, but applies only to third-party code 345*333d2b36SAndroid Build Coastguard Worker // (see extraExternalCflags). 346*333d2b36SAndroid Build Coastguard Worker // This section can unblock compiler upgrades when a third party module that 347*333d2b36SAndroid Build Coastguard Worker // enables -Werror and some group of warnings explicitly triggers newly 348*333d2b36SAndroid Build Coastguard Worker // added warnings. 349*333d2b36SAndroid Build Coastguard Worker noOverrideExternalGlobalCflags = []string{ 350*333d2b36SAndroid Build Coastguard Worker // http://b/151457797 351*333d2b36SAndroid Build Coastguard Worker "-fcommon", 352*333d2b36SAndroid Build Coastguard Worker // http://b/191699019 353*333d2b36SAndroid Build Coastguard Worker "-Wno-format-insufficient-args", 354*333d2b36SAndroid Build Coastguard Worker // http://b/296321508 355*333d2b36SAndroid Build Coastguard Worker // Introduced in response to a critical security vulnerability and 356*333d2b36SAndroid Build Coastguard Worker // should be a hard error - it requires only whitespace changes to fix. 357*333d2b36SAndroid Build Coastguard Worker "-Wno-misleading-indentation", 358*333d2b36SAndroid Build Coastguard Worker // Triggered by old LLVM code in external/llvm. Likely not worth 359*333d2b36SAndroid Build Coastguard Worker // enabling since it's a cosmetic issue. 360*333d2b36SAndroid Build Coastguard Worker "-Wno-bitwise-instead-of-logical", 361*333d2b36SAndroid Build Coastguard Worker 362*333d2b36SAndroid Build Coastguard Worker "-Wno-unused", 363*333d2b36SAndroid Build Coastguard Worker "-Wno-unused-parameter", 364*333d2b36SAndroid Build Coastguard Worker "-Wno-unused-but-set-parameter", 365*333d2b36SAndroid Build Coastguard Worker "-Wno-unqualified-std-cast-call", 366*333d2b36SAndroid Build Coastguard Worker "-Wno-array-parameter", 367*333d2b36SAndroid Build Coastguard Worker "-Wno-gnu-offsetof-extensions", 368*333d2b36SAndroid Build Coastguard Worker "-Wno-pessimizing-move", 369*333d2b36SAndroid Build Coastguard Worker // TODO: Enable this warning http://b/315245071 370*333d2b36SAndroid Build Coastguard Worker "-Wno-fortify-source", 371*333d2b36SAndroid Build Coastguard Worker } 372*333d2b36SAndroid Build Coastguard Worker 373*333d2b36SAndroid Build Coastguard Worker llvmNextExtraCommonGlobalCflags = []string{ 374*333d2b36SAndroid Build Coastguard Worker // Do not report warnings when testing with the top of trunk LLVM. 375*333d2b36SAndroid Build Coastguard Worker "-Wno-everything", 376*333d2b36SAndroid Build Coastguard Worker } 377*333d2b36SAndroid Build Coastguard Worker 378*333d2b36SAndroid Build Coastguard Worker // Flags that must not appear in any command line. 379*333d2b36SAndroid Build Coastguard Worker IllegalFlags = []string{ 380*333d2b36SAndroid Build Coastguard Worker "-w", 381*333d2b36SAndroid Build Coastguard Worker } 382*333d2b36SAndroid Build Coastguard Worker 383*333d2b36SAndroid Build Coastguard Worker CStdVersion = "gnu17" 384*333d2b36SAndroid Build Coastguard Worker CppStdVersion = "gnu++20" 385*333d2b36SAndroid Build Coastguard Worker ExperimentalCStdVersion = "gnu2x" 386*333d2b36SAndroid Build Coastguard Worker ExperimentalCppStdVersion = "gnu++2b" 387*333d2b36SAndroid Build Coastguard Worker 388*333d2b36SAndroid Build Coastguard Worker // prebuilts/clang default settings. 389*333d2b36SAndroid Build Coastguard Worker ClangDefaultBase = "prebuilts/clang/host" 390*333d2b36SAndroid Build Coastguard Worker ClangDefaultVersion = "clang-r536225" 391*333d2b36SAndroid Build Coastguard Worker ClangDefaultShortVersion = "19" 392*333d2b36SAndroid Build Coastguard Worker 393*333d2b36SAndroid Build Coastguard Worker // Directories with warnings from Android.bp files. 394*333d2b36SAndroid Build Coastguard Worker WarningAllowedProjects = []string{ 395*333d2b36SAndroid Build Coastguard Worker "device/", 396*333d2b36SAndroid Build Coastguard Worker "vendor/", 397*333d2b36SAndroid Build Coastguard Worker } 398*333d2b36SAndroid Build Coastguard Worker 399*333d2b36SAndroid Build Coastguard Worker VersionScriptFlagPrefix = "-Wl,--version-script," 400*333d2b36SAndroid Build Coastguard Worker 401*333d2b36SAndroid Build Coastguard Worker VisibilityHiddenFlag = "-fvisibility=hidden" 402*333d2b36SAndroid Build Coastguard Worker VisibilityDefaultFlag = "-fvisibility=default" 403*333d2b36SAndroid Build Coastguard Worker) 404*333d2b36SAndroid Build Coastguard Worker 405*333d2b36SAndroid Build Coastguard Workerfunc init() { 406*333d2b36SAndroid Build Coastguard Worker if runtime.GOOS == "linux" { 407*333d2b36SAndroid Build Coastguard Worker commonGlobalCflags = append(commonGlobalCflags, "-fdebug-prefix-map=/proc/self/cwd=") 408*333d2b36SAndroid Build Coastguard Worker } 409*333d2b36SAndroid Build Coastguard Worker 410*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("CommonGlobalConlyflags", strings.Join(commonGlobalConlyflags, " ")) 411*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("CommonGlobalAsflags", strings.Join(commonGlobalAsflags, " ")) 412*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("DeviceGlobalCppflags", strings.Join(deviceGlobalCppflags, " ")) 413*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("DeviceGlobalLdflags", strings.Join(deviceGlobalLdflags, " ")) 414*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("DeviceGlobalLldflags", strings.Join(deviceGlobalLldflags, " ")) 415*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("HostGlobalCppflags", strings.Join(hostGlobalCppflags, " ")) 416*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("HostGlobalLdflags", strings.Join(hostGlobalLdflags, " ")) 417*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("HostGlobalLldflags", strings.Join(hostGlobalLldflags, " ")) 418*333d2b36SAndroid Build Coastguard Worker 419*333d2b36SAndroid Build Coastguard Worker pctx.VariableFunc("CommonGlobalCflags", func(ctx android.PackageVarContext) string { 420*333d2b36SAndroid Build Coastguard Worker flags := slices.Clone(commonGlobalCflags) 421*333d2b36SAndroid Build Coastguard Worker 422*333d2b36SAndroid Build Coastguard Worker // http://b/131390872 423*333d2b36SAndroid Build Coastguard Worker // Automatically initialize any uninitialized stack variables. 424*333d2b36SAndroid Build Coastguard Worker // Prefer zero-init if multiple options are set. 425*333d2b36SAndroid Build Coastguard Worker if ctx.Config().IsEnvTrue("AUTO_ZERO_INITIALIZE") { 426*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-ftrivial-auto-var-init=zero") 427*333d2b36SAndroid Build Coastguard Worker } else if ctx.Config().IsEnvTrue("AUTO_PATTERN_INITIALIZE") { 428*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-ftrivial-auto-var-init=pattern") 429*333d2b36SAndroid Build Coastguard Worker } else if ctx.Config().IsEnvTrue("AUTO_UNINITIALIZE") { 430*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-ftrivial-auto-var-init=uninitialized") 431*333d2b36SAndroid Build Coastguard Worker } else { 432*333d2b36SAndroid Build Coastguard Worker // Default to zero initialization. 433*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-ftrivial-auto-var-init=zero") 434*333d2b36SAndroid Build Coastguard Worker } 435*333d2b36SAndroid Build Coastguard Worker 436*333d2b36SAndroid Build Coastguard Worker // Workaround for ccache with clang. 437*333d2b36SAndroid Build Coastguard Worker // See http://petereisentraut.blogspot.com/2011/05/ccache-and-clang.html. 438*333d2b36SAndroid Build Coastguard Worker if ctx.Config().IsEnvTrue("USE_CCACHE") { 439*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-Wno-unused-command-line-argument") 440*333d2b36SAndroid Build Coastguard Worker } 441*333d2b36SAndroid Build Coastguard Worker 442*333d2b36SAndroid Build Coastguard Worker if ctx.Config().IsEnvTrue("ALLOW_UNKNOWN_WARNING_OPTION") { 443*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-Wno-error=unknown-warning-option") 444*333d2b36SAndroid Build Coastguard Worker } 445*333d2b36SAndroid Build Coastguard Worker 446*333d2b36SAndroid Build Coastguard Worker switch ctx.Config().Getenv("CLANG_DEFAULT_DEBUG_LEVEL") { 447*333d2b36SAndroid Build Coastguard Worker case "debug_level_0": 448*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-g0") 449*333d2b36SAndroid Build Coastguard Worker case "debug_level_1": 450*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-g1") 451*333d2b36SAndroid Build Coastguard Worker case "debug_level_2": 452*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-g2") 453*333d2b36SAndroid Build Coastguard Worker case "debug_level_3": 454*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-g3") 455*333d2b36SAndroid Build Coastguard Worker case "debug_level_g": 456*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-g") 457*333d2b36SAndroid Build Coastguard Worker default: 458*333d2b36SAndroid Build Coastguard Worker flags = append(flags, "-g") 459*333d2b36SAndroid Build Coastguard Worker } 460*333d2b36SAndroid Build Coastguard Worker 461*333d2b36SAndroid Build Coastguard Worker return strings.Join(flags, " ") 462*333d2b36SAndroid Build Coastguard Worker }) 463*333d2b36SAndroid Build Coastguard Worker 464*333d2b36SAndroid Build Coastguard Worker pctx.VariableFunc("DeviceGlobalCflags", func(ctx android.PackageVarContext) string { 465*333d2b36SAndroid Build Coastguard Worker return strings.Join(deviceGlobalCflags, " ") 466*333d2b36SAndroid Build Coastguard Worker }) 467*333d2b36SAndroid Build Coastguard Worker 468*333d2b36SAndroid Build Coastguard Worker pctx.VariableFunc("NoOverrideGlobalCflags", func(ctx android.PackageVarContext) string { 469*333d2b36SAndroid Build Coastguard Worker flags := noOverrideGlobalCflags 470*333d2b36SAndroid Build Coastguard Worker if ctx.Config().IsEnvTrue("LLVM_NEXT") { 471*333d2b36SAndroid Build Coastguard Worker flags = append(noOverrideGlobalCflags, llvmNextExtraCommonGlobalCflags...) 472*333d2b36SAndroid Build Coastguard Worker IllegalFlags = []string{} // Don't fail build while testing a new compiler. 473*333d2b36SAndroid Build Coastguard Worker } 474*333d2b36SAndroid Build Coastguard Worker return strings.Join(flags, " ") 475*333d2b36SAndroid Build Coastguard Worker }) 476*333d2b36SAndroid Build Coastguard Worker 477*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("NoOverride64GlobalCflags", strings.Join(noOverride64GlobalCflags, " ")) 478*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("HostGlobalCflags", strings.Join(hostGlobalCflags, " ")) 479*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("NoOverrideExternalGlobalCflags", strings.Join(noOverrideExternalGlobalCflags, " ")) 480*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("CommonGlobalCppflags", strings.Join(commonGlobalCppflags, " ")) 481*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ExternalCflags", strings.Join(extraExternalCflags, " ")) 482*333d2b36SAndroid Build Coastguard Worker 483*333d2b36SAndroid Build Coastguard Worker // Everything in these lists is a crime against abstraction and dependency tracking. 484*333d2b36SAndroid Build Coastguard Worker // Do not add anything to this list. 485*333d2b36SAndroid Build Coastguard Worker commonGlobalIncludes := []string{ 486*333d2b36SAndroid Build Coastguard Worker "system/core/include", 487*333d2b36SAndroid Build Coastguard Worker "system/logging/liblog/include", 488*333d2b36SAndroid Build Coastguard Worker "system/media/audio/include", 489*333d2b36SAndroid Build Coastguard Worker "hardware/libhardware/include", 490*333d2b36SAndroid Build Coastguard Worker "hardware/libhardware_legacy/include", 491*333d2b36SAndroid Build Coastguard Worker "hardware/ril/include", 492*333d2b36SAndroid Build Coastguard Worker "frameworks/native/include", 493*333d2b36SAndroid Build Coastguard Worker "frameworks/native/opengl/include", 494*333d2b36SAndroid Build Coastguard Worker "frameworks/av/include", 495*333d2b36SAndroid Build Coastguard Worker } 496*333d2b36SAndroid Build Coastguard Worker pctx.PrefixedExistentPathsForSourcesVariable("CommonGlobalIncludes", "-I", commonGlobalIncludes) 497*333d2b36SAndroid Build Coastguard Worker 498*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("CLANG_DEFAULT_VERSION", ClangDefaultVersion) 499*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("CLANG_DEFAULT_SHORT_VERSION", ClangDefaultShortVersion) 500*333d2b36SAndroid Build Coastguard Worker 501*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("ClangBase", "LLVM_PREBUILTS_BASE", ClangDefaultBase) 502*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("ClangVersion", "LLVM_PREBUILTS_VERSION", ClangDefaultVersion) 503*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ClangPath", "${ClangBase}/${HostPrebuiltTag}/${ClangVersion}") 504*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ClangBin", "${ClangPath}/bin") 505*333d2b36SAndroid Build Coastguard Worker 506*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("ClangShortVersion", "LLVM_RELEASE_VERSION", ClangDefaultShortVersion) 507*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("ClangAsanLibDir", "${ClangBase}/linux-x86/${ClangVersion}/lib/clang/${ClangShortVersion}/lib/linux") 508*333d2b36SAndroid Build Coastguard Worker 509*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("WarningAllowedProjects", strings.Join(WarningAllowedProjects, " ")) 510*333d2b36SAndroid Build Coastguard Worker 511*333d2b36SAndroid Build Coastguard Worker // These are tied to the version of LLVM directly in external/llvm, so they might trail the host prebuilts 512*333d2b36SAndroid Build Coastguard Worker // being used for the rest of the build process. 513*333d2b36SAndroid Build Coastguard Worker pctx.SourcePathVariable("RSClangBase", "prebuilts/clang/host") 514*333d2b36SAndroid Build Coastguard Worker pctx.SourcePathVariable("RSClangVersion", "clang-3289846") 515*333d2b36SAndroid Build Coastguard Worker pctx.SourcePathVariable("RSReleaseVersion", "3.8") 516*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("RSLLVMPrebuiltsPath", "${RSClangBase}/${HostPrebuiltTag}/${RSClangVersion}/bin") 517*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariable("RSIncludePath", "${RSLLVMPrebuiltsPath}/../lib64/clang/${RSReleaseVersion}/include") 518*333d2b36SAndroid Build Coastguard Worker 519*333d2b36SAndroid Build Coastguard Worker rsGlobalIncludes := []string{ 520*333d2b36SAndroid Build Coastguard Worker "external/clang/lib/Headers", 521*333d2b36SAndroid Build Coastguard Worker "frameworks/rs/script_api/include", 522*333d2b36SAndroid Build Coastguard Worker } 523*333d2b36SAndroid Build Coastguard Worker pctx.PrefixedExistentPathsForSourcesVariable("RsGlobalIncludes", "-I", rsGlobalIncludes) 524*333d2b36SAndroid Build Coastguard Worker 525*333d2b36SAndroid Build Coastguard Worker pctx.VariableFunc("CcWrapper", func(ctx android.PackageVarContext) string { 526*333d2b36SAndroid Build Coastguard Worker if override := ctx.Config().Getenv("CC_WRAPPER"); override != "" { 527*333d2b36SAndroid Build Coastguard Worker return override + " " 528*333d2b36SAndroid Build Coastguard Worker } 529*333d2b36SAndroid Build Coastguard Worker return "" 530*333d2b36SAndroid Build Coastguard Worker }) 531*333d2b36SAndroid Build Coastguard Worker 532*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("RECXXPool", "RBE_CXX_POOL", remoteexec.DefaultPool) 533*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("RECXXLinksPool", "RBE_CXX_LINKS_POOL", remoteexec.DefaultPool) 534*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("REClangTidyPool", "RBE_CLANG_TIDY_POOL", remoteexec.DefaultPool) 535*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("RECXXLinksExecStrategy", "RBE_CXX_LINKS_EXEC_STRATEGY", remoteexec.LocalExecStrategy) 536*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("REClangTidyExecStrategy", "RBE_CLANG_TIDY_EXEC_STRATEGY", remoteexec.LocalExecStrategy) 537*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("REAbiDumperExecStrategy", "RBE_ABI_DUMPER_EXEC_STRATEGY", remoteexec.LocalExecStrategy) 538*333d2b36SAndroid Build Coastguard Worker pctx.StaticVariableWithEnvOverride("REAbiLinkerExecStrategy", "RBE_ABI_LINKER_EXEC_STRATEGY", remoteexec.LocalExecStrategy) 539*333d2b36SAndroid Build Coastguard Worker} 540*333d2b36SAndroid Build Coastguard Worker 541*333d2b36SAndroid Build Coastguard Workervar HostPrebuiltTag = pctx.VariableConfigMethod("HostPrebuiltTag", android.Config.PrebuiltOS) 542*333d2b36SAndroid Build Coastguard Worker 543*333d2b36SAndroid Build Coastguard Workerfunc ClangPath(ctx android.PathContext, file string) android.SourcePath { 544*333d2b36SAndroid Build Coastguard Worker type clangToolKey string 545*333d2b36SAndroid Build Coastguard Worker 546*333d2b36SAndroid Build Coastguard Worker key := android.NewCustomOnceKey(clangToolKey(file)) 547*333d2b36SAndroid Build Coastguard Worker 548*333d2b36SAndroid Build Coastguard Worker return ctx.Config().OnceSourcePath(key, func() android.SourcePath { 549*333d2b36SAndroid Build Coastguard Worker return clangPath(ctx).Join(ctx, file) 550*333d2b36SAndroid Build Coastguard Worker }) 551*333d2b36SAndroid Build Coastguard Worker} 552*333d2b36SAndroid Build Coastguard Worker 553*333d2b36SAndroid Build Coastguard Workervar clangPathKey = android.NewOnceKey("clangPath") 554*333d2b36SAndroid Build Coastguard Worker 555*333d2b36SAndroid Build Coastguard Workerfunc clangPath(ctx android.PathContext) android.SourcePath { 556*333d2b36SAndroid Build Coastguard Worker return ctx.Config().OnceSourcePath(clangPathKey, func() android.SourcePath { 557*333d2b36SAndroid Build Coastguard Worker clangBase := ClangDefaultBase 558*333d2b36SAndroid Build Coastguard Worker if override := ctx.Config().Getenv("LLVM_PREBUILTS_BASE"); override != "" { 559*333d2b36SAndroid Build Coastguard Worker clangBase = override 560*333d2b36SAndroid Build Coastguard Worker } 561*333d2b36SAndroid Build Coastguard Worker clangVersion := ClangDefaultVersion 562*333d2b36SAndroid Build Coastguard Worker if override := ctx.Config().Getenv("LLVM_PREBUILTS_VERSION"); override != "" { 563*333d2b36SAndroid Build Coastguard Worker clangVersion = override 564*333d2b36SAndroid Build Coastguard Worker } 565*333d2b36SAndroid Build Coastguard Worker return android.PathForSource(ctx, clangBase, ctx.Config().PrebuiltOS(), clangVersion) 566*333d2b36SAndroid Build Coastguard Worker }) 567*333d2b36SAndroid Build Coastguard Worker} 568