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 cc 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "fmt" 19*333d2b36SAndroid Build Coastguard Worker "path/filepath" 20*333d2b36SAndroid Build Coastguard Worker "regexp" 21*333d2b36SAndroid Build Coastguard Worker "strconv" 22*333d2b36SAndroid Build Coastguard Worker "strings" 23*333d2b36SAndroid Build Coastguard Worker 24*333d2b36SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 25*333d2b36SAndroid Build Coastguard Worker 26*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 27*333d2b36SAndroid Build Coastguard Worker "android/soong/cc/config" 28*333d2b36SAndroid Build Coastguard Worker) 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Workervar ( 31*333d2b36SAndroid Build Coastguard Worker allowedManualInterfacePaths = []string{"vendor/", "hardware/"} 32*333d2b36SAndroid Build Coastguard Worker) 33*333d2b36SAndroid Build Coastguard Worker 34*333d2b36SAndroid Build Coastguard Worker// This file contains the basic C/C++/assembly to .o compliation steps 35*333d2b36SAndroid Build Coastguard Worker 36*333d2b36SAndroid Build Coastguard Workertype BaseCompilerProperties struct { 37*333d2b36SAndroid Build Coastguard Worker // list of source files used to compile the C/C++ module. May be .c, .cpp, or .S files. 38*333d2b36SAndroid Build Coastguard Worker // srcs may reference the outputs of other modules that produce source files like genrule 39*333d2b36SAndroid Build Coastguard Worker // or filegroup using the syntax ":module". 40*333d2b36SAndroid Build Coastguard Worker Srcs proptools.Configurable[[]string] `android:"path,arch_variant"` 41*333d2b36SAndroid Build Coastguard Worker 42*333d2b36SAndroid Build Coastguard Worker // list of source files that should not be compiled with clang-tidy. 43*333d2b36SAndroid Build Coastguard Worker Tidy_disabled_srcs []string `android:"path,arch_variant"` 44*333d2b36SAndroid Build Coastguard Worker 45*333d2b36SAndroid Build Coastguard Worker // list of source files that should not be compiled by clang-tidy when TIDY_TIMEOUT is set. 46*333d2b36SAndroid Build Coastguard Worker Tidy_timeout_srcs []string `android:"path,arch_variant"` 47*333d2b36SAndroid Build Coastguard Worker 48*333d2b36SAndroid Build Coastguard Worker // list of source files that should not be used to build the C/C++ module. 49*333d2b36SAndroid Build Coastguard Worker // This is most useful in the arch/multilib variants to remove non-common files 50*333d2b36SAndroid Build Coastguard Worker Exclude_srcs proptools.Configurable[[]string] `android:"path,arch_variant"` 51*333d2b36SAndroid Build Coastguard Worker 52*333d2b36SAndroid Build Coastguard Worker // list of module-specific flags that will be used for C and C++ compiles. 53*333d2b36SAndroid Build Coastguard Worker Cflags proptools.Configurable[[]string] `android:"arch_variant"` 54*333d2b36SAndroid Build Coastguard Worker 55*333d2b36SAndroid Build Coastguard Worker // list of module-specific flags that will be used for C++ compiles 56*333d2b36SAndroid Build Coastguard Worker Cppflags proptools.Configurable[[]string] `android:"arch_variant"` 57*333d2b36SAndroid Build Coastguard Worker 58*333d2b36SAndroid Build Coastguard Worker // list of module-specific flags that will be used for C compiles 59*333d2b36SAndroid Build Coastguard Worker Conlyflags []string `android:"arch_variant"` 60*333d2b36SAndroid Build Coastguard Worker 61*333d2b36SAndroid Build Coastguard Worker // list of module-specific flags that will be used for .S compiles 62*333d2b36SAndroid Build Coastguard Worker Asflags []string `android:"arch_variant"` 63*333d2b36SAndroid Build Coastguard Worker 64*333d2b36SAndroid Build Coastguard Worker // list of module-specific flags that will be used for C and C++ compiles when 65*333d2b36SAndroid Build Coastguard Worker // compiling with clang 66*333d2b36SAndroid Build Coastguard Worker Clang_cflags []string `android:"arch_variant"` 67*333d2b36SAndroid Build Coastguard Worker 68*333d2b36SAndroid Build Coastguard Worker // list of module-specific flags that will be used for .S compiles when 69*333d2b36SAndroid Build Coastguard Worker // compiling with clang 70*333d2b36SAndroid Build Coastguard Worker Clang_asflags []string `android:"arch_variant"` 71*333d2b36SAndroid Build Coastguard Worker 72*333d2b36SAndroid Build Coastguard Worker // the instruction set architecture to use to compile the C/C++ 73*333d2b36SAndroid Build Coastguard Worker // module. 74*333d2b36SAndroid Build Coastguard Worker Instruction_set *string `android:"arch_variant"` 75*333d2b36SAndroid Build Coastguard Worker 76*333d2b36SAndroid Build Coastguard Worker // list of directories relative to the root of the source tree that will 77*333d2b36SAndroid Build Coastguard Worker // be added to the include path using -I. 78*333d2b36SAndroid Build Coastguard Worker // If possible, don't use this. If adding paths from the current directory use 79*333d2b36SAndroid Build Coastguard Worker // local_include_dirs, if adding paths from other modules use export_include_dirs in 80*333d2b36SAndroid Build Coastguard Worker // that module. 81*333d2b36SAndroid Build Coastguard Worker Include_dirs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"` 82*333d2b36SAndroid Build Coastguard Worker 83*333d2b36SAndroid Build Coastguard Worker // list of directories relative to the Blueprints file that will 84*333d2b36SAndroid Build Coastguard Worker // be added to the include path using -I 85*333d2b36SAndroid Build Coastguard Worker Local_include_dirs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"` 86*333d2b36SAndroid Build Coastguard Worker 87*333d2b36SAndroid Build Coastguard Worker // Add the directory containing the Android.bp file to the list of include 88*333d2b36SAndroid Build Coastguard Worker // directories. Defaults to true. 89*333d2b36SAndroid Build Coastguard Worker Include_build_directory *bool 90*333d2b36SAndroid Build Coastguard Worker 91*333d2b36SAndroid Build Coastguard Worker // list of generated sources to compile. These are the names of gensrcs or 92*333d2b36SAndroid Build Coastguard Worker // genrule modules. 93*333d2b36SAndroid Build Coastguard Worker Generated_sources []string `android:"arch_variant"` 94*333d2b36SAndroid Build Coastguard Worker 95*333d2b36SAndroid Build Coastguard Worker // list of generated sources that should not be used to build the C/C++ module. 96*333d2b36SAndroid Build Coastguard Worker // This is most useful in the arch/multilib variants to remove non-common files 97*333d2b36SAndroid Build Coastguard Worker Exclude_generated_sources []string `android:"arch_variant"` 98*333d2b36SAndroid Build Coastguard Worker 99*333d2b36SAndroid Build Coastguard Worker // list of generated headers to add to the include path. These are the names 100*333d2b36SAndroid Build Coastguard Worker // of genrule modules. 101*333d2b36SAndroid Build Coastguard Worker Generated_headers proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"` 102*333d2b36SAndroid Build Coastguard Worker 103*333d2b36SAndroid Build Coastguard Worker // Same as generated_headers, but the dependencies will be added based on the first supported 104*333d2b36SAndroid Build Coastguard Worker // arch variant and the device os variant. This can be useful for creating a host tool that 105*333d2b36SAndroid Build Coastguard Worker // embeds a copy of a device tool, that it then extracts and pushes to a device at runtime. 106*333d2b36SAndroid Build Coastguard Worker Device_first_generated_headers proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"` 107*333d2b36SAndroid Build Coastguard Worker 108*333d2b36SAndroid Build Coastguard Worker // pass -frtti instead of -fno-rtti 109*333d2b36SAndroid Build Coastguard Worker Rtti *bool `android:"arch_variant"` 110*333d2b36SAndroid Build Coastguard Worker 111*333d2b36SAndroid Build Coastguard Worker // C standard version to use. Can be a specific version (such as "gnu11"), 112*333d2b36SAndroid Build Coastguard Worker // "experimental" (which will use draft versions like C1x when available), 113*333d2b36SAndroid Build Coastguard Worker // or the empty string (which will use the default). 114*333d2b36SAndroid Build Coastguard Worker C_std *string 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Worker // C++ standard version to use. Can be a specific version (such as 117*333d2b36SAndroid Build Coastguard Worker // "gnu++11"), "experimental" (which will use draft versions like C++1z when 118*333d2b36SAndroid Build Coastguard Worker // available), or the empty string (which will use the default). 119*333d2b36SAndroid Build Coastguard Worker Cpp_std *string 120*333d2b36SAndroid Build Coastguard Worker 121*333d2b36SAndroid Build Coastguard Worker // if set to false, use -std=c++* instead of -std=gnu++* 122*333d2b36SAndroid Build Coastguard Worker Gnu_extensions *bool 123*333d2b36SAndroid Build Coastguard Worker 124*333d2b36SAndroid Build Coastguard Worker // cc Build rules targeting BPF must set this to true. The correct fix is to 125*333d2b36SAndroid Build Coastguard Worker // ban targeting bpf in cc rules instead use bpf_rules. (b/323415017) 126*333d2b36SAndroid Build Coastguard Worker Bpf_target *bool 127*333d2b36SAndroid Build Coastguard Worker 128*333d2b36SAndroid Build Coastguard Worker // Add "-Xclang -verify" to the cflags and appends "touch $out" to 129*333d2b36SAndroid Build Coastguard Worker // the clang command line. 130*333d2b36SAndroid Build Coastguard Worker Clang_verify bool 131*333d2b36SAndroid Build Coastguard Worker 132*333d2b36SAndroid Build Coastguard Worker Yacc *YaccProperties 133*333d2b36SAndroid Build Coastguard Worker Lex *LexProperties 134*333d2b36SAndroid Build Coastguard Worker 135*333d2b36SAndroid Build Coastguard Worker Aidl struct { 136*333d2b36SAndroid Build Coastguard Worker // List of aidl_library modules 137*333d2b36SAndroid Build Coastguard Worker Libs []string 138*333d2b36SAndroid Build Coastguard Worker 139*333d2b36SAndroid Build Coastguard Worker // list of directories that will be added to the aidl include paths. 140*333d2b36SAndroid Build Coastguard Worker Include_dirs []string 141*333d2b36SAndroid Build Coastguard Worker 142*333d2b36SAndroid Build Coastguard Worker // list of directories relative to the Blueprints file that will 143*333d2b36SAndroid Build Coastguard Worker // be added to the aidl include paths. 144*333d2b36SAndroid Build Coastguard Worker Local_include_dirs []string 145*333d2b36SAndroid Build Coastguard Worker 146*333d2b36SAndroid Build Coastguard Worker // whether to generate traces (for systrace) for this interface 147*333d2b36SAndroid Build Coastguard Worker Generate_traces *bool 148*333d2b36SAndroid Build Coastguard Worker 149*333d2b36SAndroid Build Coastguard Worker // list of flags that will be passed to the AIDL compiler 150*333d2b36SAndroid Build Coastguard Worker Flags []string 151*333d2b36SAndroid Build Coastguard Worker } 152*333d2b36SAndroid Build Coastguard Worker 153*333d2b36SAndroid Build Coastguard Worker // Populated by aidl_interface CPP backend to let other modules (e.g. cc_cmake_snapshot) 154*333d2b36SAndroid Build Coastguard Worker // access actual source files and not generated cpp intermediary sources. 155*333d2b36SAndroid Build Coastguard Worker AidlInterface struct { 156*333d2b36SAndroid Build Coastguard Worker // list of aidl_interface sources 157*333d2b36SAndroid Build Coastguard Worker Sources []string `blueprint:"mutated"` 158*333d2b36SAndroid Build Coastguard Worker 159*333d2b36SAndroid Build Coastguard Worker // root directory of AIDL sources 160*333d2b36SAndroid Build Coastguard Worker AidlRoot string `blueprint:"mutated"` 161*333d2b36SAndroid Build Coastguard Worker 162*333d2b36SAndroid Build Coastguard Worker // AIDL backend language (e.g. "cpp", "ndk") 163*333d2b36SAndroid Build Coastguard Worker Lang string `blueprint:"mutated"` 164*333d2b36SAndroid Build Coastguard Worker 165*333d2b36SAndroid Build Coastguard Worker // list of flags passed to AIDL generator 166*333d2b36SAndroid Build Coastguard Worker Flags []string `blueprint:"mutated"` 167*333d2b36SAndroid Build Coastguard Worker } `blueprint:"mutated"` 168*333d2b36SAndroid Build Coastguard Worker 169*333d2b36SAndroid Build Coastguard Worker Renderscript struct { 170*333d2b36SAndroid Build Coastguard Worker // list of directories that will be added to the llvm-rs-cc include paths 171*333d2b36SAndroid Build Coastguard Worker Include_dirs []string 172*333d2b36SAndroid Build Coastguard Worker 173*333d2b36SAndroid Build Coastguard Worker // list of flags that will be passed to llvm-rs-cc 174*333d2b36SAndroid Build Coastguard Worker Flags []string 175*333d2b36SAndroid Build Coastguard Worker 176*333d2b36SAndroid Build Coastguard Worker // Renderscript API level to target 177*333d2b36SAndroid Build Coastguard Worker Target_api *string 178*333d2b36SAndroid Build Coastguard Worker } 179*333d2b36SAndroid Build Coastguard Worker 180*333d2b36SAndroid Build Coastguard Worker Target struct { 181*333d2b36SAndroid Build Coastguard Worker Vendor, Product struct { 182*333d2b36SAndroid Build Coastguard Worker // list of source files that should only be used in vendor or 183*333d2b36SAndroid Build Coastguard Worker // product variant of the C/C++ module. 184*333d2b36SAndroid Build Coastguard Worker Srcs []string `android:"path"` 185*333d2b36SAndroid Build Coastguard Worker 186*333d2b36SAndroid Build Coastguard Worker // list of source files that should not be used to build vendor 187*333d2b36SAndroid Build Coastguard Worker // or product variant of the C/C++ module. 188*333d2b36SAndroid Build Coastguard Worker Exclude_srcs []string `android:"path"` 189*333d2b36SAndroid Build Coastguard Worker 190*333d2b36SAndroid Build Coastguard Worker // List of additional cflags that should be used to build vendor 191*333d2b36SAndroid Build Coastguard Worker // or product variant of the C/C++ module. 192*333d2b36SAndroid Build Coastguard Worker Cflags []string 193*333d2b36SAndroid Build Coastguard Worker 194*333d2b36SAndroid Build Coastguard Worker // list of generated sources that should not be used to build 195*333d2b36SAndroid Build Coastguard Worker // vendor or product variant of the C/C++ module. 196*333d2b36SAndroid Build Coastguard Worker Exclude_generated_sources []string 197*333d2b36SAndroid Build Coastguard Worker } 198*333d2b36SAndroid Build Coastguard Worker Recovery struct { 199*333d2b36SAndroid Build Coastguard Worker // list of source files that should only be used in the 200*333d2b36SAndroid Build Coastguard Worker // recovery variant of the C/C++ module. 201*333d2b36SAndroid Build Coastguard Worker Srcs []string `android:"path"` 202*333d2b36SAndroid Build Coastguard Worker 203*333d2b36SAndroid Build Coastguard Worker // list of source files that should not be used to 204*333d2b36SAndroid Build Coastguard Worker // build the recovery variant of the C/C++ module. 205*333d2b36SAndroid Build Coastguard Worker Exclude_srcs []string `android:"path"` 206*333d2b36SAndroid Build Coastguard Worker 207*333d2b36SAndroid Build Coastguard Worker // List of additional cflags that should be used to build the recovery 208*333d2b36SAndroid Build Coastguard Worker // variant of the C/C++ module. 209*333d2b36SAndroid Build Coastguard Worker Cflags []string 210*333d2b36SAndroid Build Coastguard Worker 211*333d2b36SAndroid Build Coastguard Worker // list of generated sources that should not be used to 212*333d2b36SAndroid Build Coastguard Worker // build the recovery variant of the C/C++ module. 213*333d2b36SAndroid Build Coastguard Worker Exclude_generated_sources []string 214*333d2b36SAndroid Build Coastguard Worker } 215*333d2b36SAndroid Build Coastguard Worker Ramdisk, Vendor_ramdisk struct { 216*333d2b36SAndroid Build Coastguard Worker // list of source files that should not be used to 217*333d2b36SAndroid Build Coastguard Worker // build the ramdisk variants of the C/C++ module. 218*333d2b36SAndroid Build Coastguard Worker Exclude_srcs []string `android:"path"` 219*333d2b36SAndroid Build Coastguard Worker 220*333d2b36SAndroid Build Coastguard Worker // List of additional cflags that should be used to build the ramdisk 221*333d2b36SAndroid Build Coastguard Worker // variants of the C/C++ module. 222*333d2b36SAndroid Build Coastguard Worker Cflags []string 223*333d2b36SAndroid Build Coastguard Worker } 224*333d2b36SAndroid Build Coastguard Worker Platform struct { 225*333d2b36SAndroid Build Coastguard Worker // List of additional cflags that should be used to build the platform 226*333d2b36SAndroid Build Coastguard Worker // variant of the C/C++ module. 227*333d2b36SAndroid Build Coastguard Worker Cflags []string 228*333d2b36SAndroid Build Coastguard Worker } 229*333d2b36SAndroid Build Coastguard Worker } 230*333d2b36SAndroid Build Coastguard Worker 231*333d2b36SAndroid Build Coastguard Worker Proto struct { 232*333d2b36SAndroid Build Coastguard Worker // Link statically against the protobuf runtime 233*333d2b36SAndroid Build Coastguard Worker Static *bool `android:"arch_variant"` 234*333d2b36SAndroid Build Coastguard Worker } `android:"arch_variant"` 235*333d2b36SAndroid Build Coastguard Worker 236*333d2b36SAndroid Build Coastguard Worker // Build and link with OpenMP 237*333d2b36SAndroid Build Coastguard Worker Openmp *bool `android:"arch_variant"` 238*333d2b36SAndroid Build Coastguard Worker} 239*333d2b36SAndroid Build Coastguard Worker 240*333d2b36SAndroid Build Coastguard Workerfunc NewBaseCompiler() *baseCompiler { 241*333d2b36SAndroid Build Coastguard Worker return &baseCompiler{} 242*333d2b36SAndroid Build Coastguard Worker} 243*333d2b36SAndroid Build Coastguard Worker 244*333d2b36SAndroid Build Coastguard Workertype baseCompiler struct { 245*333d2b36SAndroid Build Coastguard Worker Properties BaseCompilerProperties 246*333d2b36SAndroid Build Coastguard Worker Proto android.ProtoProperties 247*333d2b36SAndroid Build Coastguard Worker cFlagsDeps android.Paths 248*333d2b36SAndroid Build Coastguard Worker pathDeps android.Paths 249*333d2b36SAndroid Build Coastguard Worker flags builderFlags 250*333d2b36SAndroid Build Coastguard Worker 251*333d2b36SAndroid Build Coastguard Worker // Sources that were passed to the C/C++ compiler 252*333d2b36SAndroid Build Coastguard Worker srcs android.Paths 253*333d2b36SAndroid Build Coastguard Worker 254*333d2b36SAndroid Build Coastguard Worker // Sources that were passed in the Android.bp file, including generated sources generated by 255*333d2b36SAndroid Build Coastguard Worker // other modules and filegroups. May include source files that have not yet been translated to 256*333d2b36SAndroid Build Coastguard Worker // C/C++ (.aidl, .proto, etc.) 257*333d2b36SAndroid Build Coastguard Worker srcsBeforeGen android.Paths 258*333d2b36SAndroid Build Coastguard Worker 259*333d2b36SAndroid Build Coastguard Worker generatedSourceInfo 260*333d2b36SAndroid Build Coastguard Worker} 261*333d2b36SAndroid Build Coastguard Worker 262*333d2b36SAndroid Build Coastguard Workervar _ compiler = (*baseCompiler)(nil) 263*333d2b36SAndroid Build Coastguard Worker 264*333d2b36SAndroid Build Coastguard Workertype CompiledInterface interface { 265*333d2b36SAndroid Build Coastguard Worker Srcs() android.Paths 266*333d2b36SAndroid Build Coastguard Worker} 267*333d2b36SAndroid Build Coastguard Worker 268*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) Srcs() android.Paths { 269*333d2b36SAndroid Build Coastguard Worker return append(android.Paths{}, compiler.srcs...) 270*333d2b36SAndroid Build Coastguard Worker} 271*333d2b36SAndroid Build Coastguard Worker 272*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) appendCflags(flags []string) { 273*333d2b36SAndroid Build Coastguard Worker compiler.Properties.Cflags.AppendSimpleValue(flags) 274*333d2b36SAndroid Build Coastguard Worker} 275*333d2b36SAndroid Build Coastguard Worker 276*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) appendAsflags(flags []string) { 277*333d2b36SAndroid Build Coastguard Worker compiler.Properties.Asflags = append(compiler.Properties.Asflags, flags...) 278*333d2b36SAndroid Build Coastguard Worker} 279*333d2b36SAndroid Build Coastguard Worker 280*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) compilerProps() []interface{} { 281*333d2b36SAndroid Build Coastguard Worker return []interface{}{&compiler.Properties, &compiler.Proto} 282*333d2b36SAndroid Build Coastguard Worker} 283*333d2b36SAndroid Build Coastguard Worker 284*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) baseCompilerProps() BaseCompilerProperties { 285*333d2b36SAndroid Build Coastguard Worker return compiler.Properties 286*333d2b36SAndroid Build Coastguard Worker} 287*333d2b36SAndroid Build Coastguard Worker 288*333d2b36SAndroid Build Coastguard Workerfunc includeBuildDirectory(prop *bool) bool { 289*333d2b36SAndroid Build Coastguard Worker return proptools.BoolDefault(prop, true) 290*333d2b36SAndroid Build Coastguard Worker} 291*333d2b36SAndroid Build Coastguard Worker 292*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) includeBuildDirectory() bool { 293*333d2b36SAndroid Build Coastguard Worker return includeBuildDirectory(compiler.Properties.Include_build_directory) 294*333d2b36SAndroid Build Coastguard Worker} 295*333d2b36SAndroid Build Coastguard Worker 296*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) compilerInit(ctx BaseModuleContext) {} 297*333d2b36SAndroid Build Coastguard Worker 298*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps { 299*333d2b36SAndroid Build Coastguard Worker deps.GeneratedSources = append(deps.GeneratedSources, compiler.Properties.Generated_sources...) 300*333d2b36SAndroid Build Coastguard Worker deps.GeneratedSources = removeListFromList(deps.GeneratedSources, compiler.Properties.Exclude_generated_sources) 301*333d2b36SAndroid Build Coastguard Worker deps.GeneratedHeaders = append(deps.GeneratedHeaders, compiler.Properties.Generated_headers.GetOrDefault(ctx, nil)...) 302*333d2b36SAndroid Build Coastguard Worker deps.DeviceFirstGeneratedHeaders = append(deps.DeviceFirstGeneratedHeaders, compiler.Properties.Device_first_generated_headers.GetOrDefault(ctx, nil)...) 303*333d2b36SAndroid Build Coastguard Worker deps.AidlLibs = append(deps.AidlLibs, compiler.Properties.Aidl.Libs...) 304*333d2b36SAndroid Build Coastguard Worker 305*333d2b36SAndroid Build Coastguard Worker android.ProtoDeps(ctx, &compiler.Proto) 306*333d2b36SAndroid Build Coastguard Worker if compiler.hasSrcExt(ctx, ".proto") { 307*333d2b36SAndroid Build Coastguard Worker deps = protoDeps(ctx, deps, &compiler.Proto, Bool(compiler.Properties.Proto.Static)) 308*333d2b36SAndroid Build Coastguard Worker } 309*333d2b36SAndroid Build Coastguard Worker 310*333d2b36SAndroid Build Coastguard Worker if Bool(compiler.Properties.Openmp) { 311*333d2b36SAndroid Build Coastguard Worker deps.StaticLibs = append(deps.StaticLibs, "libomp") 312*333d2b36SAndroid Build Coastguard Worker } 313*333d2b36SAndroid Build Coastguard Worker 314*333d2b36SAndroid Build Coastguard Worker return deps 315*333d2b36SAndroid Build Coastguard Worker} 316*333d2b36SAndroid Build Coastguard Worker 317*333d2b36SAndroid Build Coastguard Worker// Return true if the module is in the WarningAllowedProjects. 318*333d2b36SAndroid Build Coastguard Workerfunc warningsAreAllowed(subdir string) bool { 319*333d2b36SAndroid Build Coastguard Worker subdir += "/" 320*333d2b36SAndroid Build Coastguard Worker return android.HasAnyPrefix(subdir, config.WarningAllowedProjects) 321*333d2b36SAndroid Build Coastguard Worker} 322*333d2b36SAndroid Build Coastguard Worker 323*333d2b36SAndroid Build Coastguard Workerfunc addToModuleList(ctx ModuleContext, key android.OnceKey, module string) { 324*333d2b36SAndroid Build Coastguard Worker getNamedMapForConfig(ctx.Config(), key).Store(module, true) 325*333d2b36SAndroid Build Coastguard Worker} 326*333d2b36SAndroid Build Coastguard Worker 327*333d2b36SAndroid Build Coastguard Workerfunc useGnuExtensions(gnuExtensions *bool) bool { 328*333d2b36SAndroid Build Coastguard Worker return proptools.BoolDefault(gnuExtensions, true) 329*333d2b36SAndroid Build Coastguard Worker} 330*333d2b36SAndroid Build Coastguard Worker 331*333d2b36SAndroid Build Coastguard Workerfunc maybeReplaceGnuToC(gnuExtensions *bool, cStd string, cppStd string) (string, string) { 332*333d2b36SAndroid Build Coastguard Worker if !useGnuExtensions(gnuExtensions) { 333*333d2b36SAndroid Build Coastguard Worker cStd = gnuToCReplacer.Replace(cStd) 334*333d2b36SAndroid Build Coastguard Worker cppStd = gnuToCReplacer.Replace(cppStd) 335*333d2b36SAndroid Build Coastguard Worker } 336*333d2b36SAndroid Build Coastguard Worker return cStd, cppStd 337*333d2b36SAndroid Build Coastguard Worker} 338*333d2b36SAndroid Build Coastguard Worker 339*333d2b36SAndroid Build Coastguard Workerfunc parseCppStd(cppStdPtr *string) string { 340*333d2b36SAndroid Build Coastguard Worker cppStd := String(cppStdPtr) 341*333d2b36SAndroid Build Coastguard Worker switch cppStd { 342*333d2b36SAndroid Build Coastguard Worker case "": 343*333d2b36SAndroid Build Coastguard Worker return config.CppStdVersion 344*333d2b36SAndroid Build Coastguard Worker case "experimental": 345*333d2b36SAndroid Build Coastguard Worker return config.ExperimentalCppStdVersion 346*333d2b36SAndroid Build Coastguard Worker default: 347*333d2b36SAndroid Build Coastguard Worker return cppStd 348*333d2b36SAndroid Build Coastguard Worker } 349*333d2b36SAndroid Build Coastguard Worker} 350*333d2b36SAndroid Build Coastguard Worker 351*333d2b36SAndroid Build Coastguard Workerfunc parseCStd(cStdPtr *string) string { 352*333d2b36SAndroid Build Coastguard Worker cStd := String(cStdPtr) 353*333d2b36SAndroid Build Coastguard Worker switch cStd { 354*333d2b36SAndroid Build Coastguard Worker case "": 355*333d2b36SAndroid Build Coastguard Worker return config.CStdVersion 356*333d2b36SAndroid Build Coastguard Worker case "experimental": 357*333d2b36SAndroid Build Coastguard Worker return config.ExperimentalCStdVersion 358*333d2b36SAndroid Build Coastguard Worker default: 359*333d2b36SAndroid Build Coastguard Worker return cStd 360*333d2b36SAndroid Build Coastguard Worker } 361*333d2b36SAndroid Build Coastguard Worker} 362*333d2b36SAndroid Build Coastguard Worker 363*333d2b36SAndroid Build Coastguard Worker// Create a Flags struct that collects the compile flags from global values, 364*333d2b36SAndroid Build Coastguard Worker// per-target values, module type values, and per-module Blueprints properties 365*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps PathDeps) Flags { 366*333d2b36SAndroid Build Coastguard Worker tc := ctx.toolchain() 367*333d2b36SAndroid Build Coastguard Worker modulePath := ctx.ModuleDir() 368*333d2b36SAndroid Build Coastguard Worker 369*333d2b36SAndroid Build Coastguard Worker reuseObjs := false 370*333d2b36SAndroid Build Coastguard Worker if len(ctx.GetDirectDepsWithTag(reuseObjTag)) > 0 { 371*333d2b36SAndroid Build Coastguard Worker reuseObjs = true 372*333d2b36SAndroid Build Coastguard Worker } 373*333d2b36SAndroid Build Coastguard Worker 374*333d2b36SAndroid Build Coastguard Worker // If a reuseObjTag dependency exists then this module is reusing the objects (generally the shared variant 375*333d2b36SAndroid Build Coastguard Worker // reusing objects from the static variant), and doesn't need to compile any sources of its own. 376*333d2b36SAndroid Build Coastguard Worker var srcs []string 377*333d2b36SAndroid Build Coastguard Worker if !reuseObjs { 378*333d2b36SAndroid Build Coastguard Worker srcs = compiler.Properties.Srcs.GetOrDefault(ctx, nil) 379*333d2b36SAndroid Build Coastguard Worker exclude_srcs := compiler.Properties.Exclude_srcs.GetOrDefault(ctx, nil) 380*333d2b36SAndroid Build Coastguard Worker compiler.srcsBeforeGen = android.PathsForModuleSrcExcludes(ctx, srcs, exclude_srcs) 381*333d2b36SAndroid Build Coastguard Worker compiler.srcsBeforeGen = append(compiler.srcsBeforeGen, deps.GeneratedSources...) 382*333d2b36SAndroid Build Coastguard Worker } 383*333d2b36SAndroid Build Coastguard Worker 384*333d2b36SAndroid Build Coastguard Worker cflags := compiler.Properties.Cflags.GetOrDefault(ctx, nil) 385*333d2b36SAndroid Build Coastguard Worker cppflags := compiler.Properties.Cppflags.GetOrDefault(ctx, nil) 386*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "cflags", cflags) 387*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "cppflags", cppflags) 388*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "conlyflags", compiler.Properties.Conlyflags) 389*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "asflags", compiler.Properties.Asflags) 390*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "vendor.cflags", compiler.Properties.Target.Vendor.Cflags) 391*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "product.cflags", compiler.Properties.Target.Product.Cflags) 392*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "recovery.cflags", compiler.Properties.Target.Recovery.Cflags) 393*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "ramdisk.cflags", compiler.Properties.Target.Ramdisk.Cflags) 394*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "vendor_ramdisk.cflags", compiler.Properties.Target.Vendor_ramdisk.Cflags) 395*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "platform.cflags", compiler.Properties.Target.Platform.Cflags) 396*333d2b36SAndroid Build Coastguard Worker 397*333d2b36SAndroid Build Coastguard Worker esc := proptools.NinjaAndShellEscapeList 398*333d2b36SAndroid Build Coastguard Worker 399*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(cflags)...) 400*333d2b36SAndroid Build Coastguard Worker flags.Local.CppFlags = append(flags.Local.CppFlags, esc(cppflags)...) 401*333d2b36SAndroid Build Coastguard Worker flags.Local.ConlyFlags = append(flags.Local.ConlyFlags, esc(compiler.Properties.Conlyflags)...) 402*333d2b36SAndroid Build Coastguard Worker flags.Local.AsFlags = append(flags.Local.AsFlags, esc(compiler.Properties.Asflags)...) 403*333d2b36SAndroid Build Coastguard Worker flags.Local.YasmFlags = append(flags.Local.YasmFlags, esc(compiler.Properties.Asflags)...) 404*333d2b36SAndroid Build Coastguard Worker 405*333d2b36SAndroid Build Coastguard Worker flags.Yacc = compiler.Properties.Yacc 406*333d2b36SAndroid Build Coastguard Worker flags.Lex = compiler.Properties.Lex 407*333d2b36SAndroid Build Coastguard Worker 408*333d2b36SAndroid Build Coastguard Worker flags.ClangVerify = compiler.Properties.Clang_verify 409*333d2b36SAndroid Build Coastguard Worker if compiler.Properties.Clang_verify { 410*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, "-Xclang", "-verify") 411*333d2b36SAndroid Build Coastguard Worker } 412*333d2b36SAndroid Build Coastguard Worker 413*333d2b36SAndroid Build Coastguard Worker // Include dir cflags 414*333d2b36SAndroid Build Coastguard Worker localIncludeDirs := android.PathsForModuleSrc(ctx, compiler.Properties.Local_include_dirs.GetOrDefault(ctx, nil)) 415*333d2b36SAndroid Build Coastguard Worker if len(localIncludeDirs) > 0 { 416*333d2b36SAndroid Build Coastguard Worker f := includeDirsToFlags(localIncludeDirs) 417*333d2b36SAndroid Build Coastguard Worker flags.Local.CommonFlags = append(flags.Local.CommonFlags, f) 418*333d2b36SAndroid Build Coastguard Worker flags.Local.YasmFlags = append(flags.Local.YasmFlags, f) 419*333d2b36SAndroid Build Coastguard Worker } 420*333d2b36SAndroid Build Coastguard Worker rootIncludeDirs := android.PathsForSource(ctx, compiler.Properties.Include_dirs.GetOrDefault(ctx, nil)) 421*333d2b36SAndroid Build Coastguard Worker if len(rootIncludeDirs) > 0 { 422*333d2b36SAndroid Build Coastguard Worker f := includeDirsToFlags(rootIncludeDirs) 423*333d2b36SAndroid Build Coastguard Worker flags.Local.CommonFlags = append(flags.Local.CommonFlags, f) 424*333d2b36SAndroid Build Coastguard Worker flags.Local.YasmFlags = append(flags.Local.YasmFlags, f) 425*333d2b36SAndroid Build Coastguard Worker } 426*333d2b36SAndroid Build Coastguard Worker 427*333d2b36SAndroid Build Coastguard Worker if compiler.includeBuildDirectory() { 428*333d2b36SAndroid Build Coastguard Worker flags.Local.CommonFlags = append(flags.Local.CommonFlags, "-I"+modulePath) 429*333d2b36SAndroid Build Coastguard Worker flags.Local.YasmFlags = append(flags.Local.YasmFlags, "-I"+modulePath) 430*333d2b36SAndroid Build Coastguard Worker } 431*333d2b36SAndroid Build Coastguard Worker 432*333d2b36SAndroid Build Coastguard Worker if !(ctx.useSdk() || ctx.InVendorOrProduct()) || ctx.Host() { 433*333d2b36SAndroid Build Coastguard Worker flags.SystemIncludeFlags = append(flags.SystemIncludeFlags, 434*333d2b36SAndroid Build Coastguard Worker "${config.CommonGlobalIncludes}", 435*333d2b36SAndroid Build Coastguard Worker tc.IncludeFlags()) 436*333d2b36SAndroid Build Coastguard Worker } 437*333d2b36SAndroid Build Coastguard Worker 438*333d2b36SAndroid Build Coastguard Worker if ctx.useSdk() { 439*333d2b36SAndroid Build Coastguard Worker // The NDK headers are installed to a common sysroot. While a more 440*333d2b36SAndroid Build Coastguard Worker // typical Soong approach would be to only make the headers for the 441*333d2b36SAndroid Build Coastguard Worker // library you're using available, we're trying to emulate the NDK 442*333d2b36SAndroid Build Coastguard Worker // behavior here, and the NDK always has all the NDK headers available. 443*333d2b36SAndroid Build Coastguard Worker flags.SystemIncludeFlags = append(flags.SystemIncludeFlags, 444*333d2b36SAndroid Build Coastguard Worker "--sysroot "+getNdkSysrootBase(ctx).String()) 445*333d2b36SAndroid Build Coastguard Worker } else if ctx.Device() { 446*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CFlags, "-nostdlibinc") 447*333d2b36SAndroid Build Coastguard Worker } 448*333d2b36SAndroid Build Coastguard Worker 449*333d2b36SAndroid Build Coastguard Worker if ctx.InVendorOrProduct() { 450*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VNDK__") 451*333d2b36SAndroid Build Coastguard Worker if ctx.inVendor() { 452*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VENDOR__") 453*333d2b36SAndroid Build Coastguard Worker } else if ctx.inProduct() { 454*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_PRODUCT__") 455*333d2b36SAndroid Build Coastguard Worker } 456*333d2b36SAndroid Build Coastguard Worker 457*333d2b36SAndroid Build Coastguard Worker // Define __ANDROID_VENDOR_API__ for both product and vendor variants 458*333d2b36SAndroid Build Coastguard Worker // because they both use the same LLNDK libraries. 459*333d2b36SAndroid Build Coastguard Worker vendorApiLevel := ctx.Config().VendorApiLevel() 460*333d2b36SAndroid Build Coastguard Worker if vendorApiLevel == "" { 461*333d2b36SAndroid Build Coastguard Worker // TODO(b/314036847): This is a fallback for UDC targets. 462*333d2b36SAndroid Build Coastguard Worker // This must be a build failure when UDC is no longer built 463*333d2b36SAndroid Build Coastguard Worker // from this source tree. 464*333d2b36SAndroid Build Coastguard Worker vendorApiLevel = ctx.Config().PlatformSdkVersion().String() 465*333d2b36SAndroid Build Coastguard Worker } 466*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_VENDOR_API__="+vendorApiLevel) 467*333d2b36SAndroid Build Coastguard Worker } 468*333d2b36SAndroid Build Coastguard Worker 469*333d2b36SAndroid Build Coastguard Worker if ctx.inRecovery() { 470*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_RECOVERY__") 471*333d2b36SAndroid Build Coastguard Worker } 472*333d2b36SAndroid Build Coastguard Worker 473*333d2b36SAndroid Build Coastguard Worker if ctx.inRecovery() || ctx.inRamdisk() || ctx.inVendorRamdisk() { 474*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_RAMDISK__") 475*333d2b36SAndroid Build Coastguard Worker } 476*333d2b36SAndroid Build Coastguard Worker 477*333d2b36SAndroid Build Coastguard Worker if ctx.apexVariationName() != "" { 478*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_APEX__") 479*333d2b36SAndroid Build Coastguard Worker } 480*333d2b36SAndroid Build Coastguard Worker 481*333d2b36SAndroid Build Coastguard Worker if ctx.Target().NativeBridge == android.NativeBridgeEnabled { 482*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "-D__ANDROID_NATIVE_BRIDGE__") 483*333d2b36SAndroid Build Coastguard Worker } 484*333d2b36SAndroid Build Coastguard Worker 485*333d2b36SAndroid Build Coastguard Worker instructionSet := String(compiler.Properties.Instruction_set) 486*333d2b36SAndroid Build Coastguard Worker if flags.RequiredInstructionSet != "" { 487*333d2b36SAndroid Build Coastguard Worker instructionSet = flags.RequiredInstructionSet 488*333d2b36SAndroid Build Coastguard Worker } 489*333d2b36SAndroid Build Coastguard Worker instructionSetFlags, err := tc.InstructionSetFlags(instructionSet) 490*333d2b36SAndroid Build Coastguard Worker if err != nil { 491*333d2b36SAndroid Build Coastguard Worker ctx.ModuleErrorf("%s", err) 492*333d2b36SAndroid Build Coastguard Worker } 493*333d2b36SAndroid Build Coastguard Worker 494*333d2b36SAndroid Build Coastguard Worker if !ctx.DeviceConfig().BuildBrokenClangCFlags() && len(compiler.Properties.Clang_cflags) != 0 { 495*333d2b36SAndroid Build Coastguard Worker ctx.PropertyErrorf("clang_cflags", "property is deprecated, see Changes.md file") 496*333d2b36SAndroid Build Coastguard Worker } else { 497*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "clang_cflags", compiler.Properties.Clang_cflags) 498*333d2b36SAndroid Build Coastguard Worker } 499*333d2b36SAndroid Build Coastguard Worker if !ctx.DeviceConfig().BuildBrokenClangAsFlags() && len(compiler.Properties.Clang_asflags) != 0 { 500*333d2b36SAndroid Build Coastguard Worker ctx.PropertyErrorf("clang_asflags", "property is deprecated, see Changes.md file") 501*333d2b36SAndroid Build Coastguard Worker } else { 502*333d2b36SAndroid Build Coastguard Worker CheckBadCompilerFlags(ctx, "clang_asflags", compiler.Properties.Clang_asflags) 503*333d2b36SAndroid Build Coastguard Worker } 504*333d2b36SAndroid Build Coastguard Worker 505*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = config.ClangFilterUnknownCflags(flags.Local.CFlags) 506*333d2b36SAndroid Build Coastguard Worker if !ctx.DeviceConfig().BuildBrokenClangCFlags() { 507*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Clang_cflags)...) 508*333d2b36SAndroid Build Coastguard Worker } 509*333d2b36SAndroid Build Coastguard Worker if !ctx.DeviceConfig().BuildBrokenClangAsFlags() { 510*333d2b36SAndroid Build Coastguard Worker flags.Local.AsFlags = append(flags.Local.AsFlags, esc(compiler.Properties.Clang_asflags)...) 511*333d2b36SAndroid Build Coastguard Worker } 512*333d2b36SAndroid Build Coastguard Worker flags.Local.CppFlags = config.ClangFilterUnknownCflags(flags.Local.CppFlags) 513*333d2b36SAndroid Build Coastguard Worker flags.Local.ConlyFlags = config.ClangFilterUnknownCflags(flags.Local.ConlyFlags) 514*333d2b36SAndroid Build Coastguard Worker flags.Local.LdFlags = config.ClangFilterUnknownCflags(flags.Local.LdFlags) 515*333d2b36SAndroid Build Coastguard Worker 516*333d2b36SAndroid Build Coastguard Worker target := "-target " + tc.ClangTriple() 517*333d2b36SAndroid Build Coastguard Worker if ctx.Os().Class == android.Device { 518*333d2b36SAndroid Build Coastguard Worker version := ctx.minSdkVersion() 519*333d2b36SAndroid Build Coastguard Worker if version == "" || version == "current" { 520*333d2b36SAndroid Build Coastguard Worker target += strconv.Itoa(android.FutureApiLevelInt) 521*333d2b36SAndroid Build Coastguard Worker } else { 522*333d2b36SAndroid Build Coastguard Worker apiLevel := nativeApiLevelOrPanic(ctx, version) 523*333d2b36SAndroid Build Coastguard Worker target += strconv.Itoa(apiLevel.FinalOrFutureInt()) 524*333d2b36SAndroid Build Coastguard Worker } 525*333d2b36SAndroid Build Coastguard Worker } 526*333d2b36SAndroid Build Coastguard Worker 527*333d2b36SAndroid Build Coastguard Worker // bpf targets don't need the default target triple. b/308826679 528*333d2b36SAndroid Build Coastguard Worker if proptools.Bool(compiler.Properties.Bpf_target) { 529*333d2b36SAndroid Build Coastguard Worker target = "--target=bpf" 530*333d2b36SAndroid Build Coastguard Worker } 531*333d2b36SAndroid Build Coastguard Worker 532*333d2b36SAndroid Build Coastguard Worker flags.Global.CFlags = append(flags.Global.CFlags, target) 533*333d2b36SAndroid Build Coastguard Worker flags.Global.AsFlags = append(flags.Global.AsFlags, target) 534*333d2b36SAndroid Build Coastguard Worker flags.Global.LdFlags = append(flags.Global.LdFlags, target) 535*333d2b36SAndroid Build Coastguard Worker 536*333d2b36SAndroid Build Coastguard Worker hod := "Host" 537*333d2b36SAndroid Build Coastguard Worker if ctx.Os().Class == android.Device { 538*333d2b36SAndroid Build Coastguard Worker hod = "Device" 539*333d2b36SAndroid Build Coastguard Worker } 540*333d2b36SAndroid Build Coastguard Worker 541*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, instructionSetFlags) 542*333d2b36SAndroid Build Coastguard Worker flags.Global.ConlyFlags = append([]string{"${config.CommonGlobalConlyflags}"}, flags.Global.ConlyFlags...) 543*333d2b36SAndroid Build Coastguard Worker flags.Global.CppFlags = append([]string{fmt.Sprintf("${config.%sGlobalCppflags}", hod)}, flags.Global.CppFlags...) 544*333d2b36SAndroid Build Coastguard Worker 545*333d2b36SAndroid Build Coastguard Worker flags.Global.AsFlags = append(flags.Global.AsFlags, tc.Asflags()) 546*333d2b36SAndroid Build Coastguard Worker flags.Global.CppFlags = append([]string{"${config.CommonGlobalCppflags}"}, flags.Global.CppFlags...) 547*333d2b36SAndroid Build Coastguard Worker 548*333d2b36SAndroid Build Coastguard Worker // bpf targets don't need the target specific toolchain cflags. b/308826679 549*333d2b36SAndroid Build Coastguard Worker if !proptools.Bool(compiler.Properties.Bpf_target) { 550*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, tc.Cflags()) 551*333d2b36SAndroid Build Coastguard Worker } 552*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, 553*333d2b36SAndroid Build Coastguard Worker "${config.CommonGlobalCflags}", 554*333d2b36SAndroid Build Coastguard Worker fmt.Sprintf("${config.%sGlobalCflags}", hod)) 555*333d2b36SAndroid Build Coastguard Worker 556*333d2b36SAndroid Build Coastguard Worker if android.IsThirdPartyPath(modulePath) { 557*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, "${config.ExternalCflags}") 558*333d2b36SAndroid Build Coastguard Worker } 559*333d2b36SAndroid Build Coastguard Worker 560*333d2b36SAndroid Build Coastguard Worker if Bool(compiler.Properties.Rtti) { 561*333d2b36SAndroid Build Coastguard Worker flags.Local.CppFlags = append(flags.Local.CppFlags, "-frtti") 562*333d2b36SAndroid Build Coastguard Worker } else { 563*333d2b36SAndroid Build Coastguard Worker flags.Local.CppFlags = append(flags.Local.CppFlags, "-fno-rtti") 564*333d2b36SAndroid Build Coastguard Worker } 565*333d2b36SAndroid Build Coastguard Worker 566*333d2b36SAndroid Build Coastguard Worker flags.Global.AsFlags = append(flags.Global.AsFlags, "${config.CommonGlobalAsflags}") 567*333d2b36SAndroid Build Coastguard Worker 568*333d2b36SAndroid Build Coastguard Worker flags.Global.CppFlags = append(flags.Global.CppFlags, tc.Cppflags()) 569*333d2b36SAndroid Build Coastguard Worker 570*333d2b36SAndroid Build Coastguard Worker flags.Global.YasmFlags = append(flags.Global.YasmFlags, tc.YasmFlags()) 571*333d2b36SAndroid Build Coastguard Worker 572*333d2b36SAndroid Build Coastguard Worker // bpf targets don't need the target specific toolchain cflags. b/308826679 573*333d2b36SAndroid Build Coastguard Worker if !proptools.Bool(compiler.Properties.Bpf_target) { 574*333d2b36SAndroid Build Coastguard Worker flags.Global.CommonFlags = append(flags.Global.CommonFlags, tc.ToolchainCflags()) 575*333d2b36SAndroid Build Coastguard Worker } 576*333d2b36SAndroid Build Coastguard Worker 577*333d2b36SAndroid Build Coastguard Worker cStd := parseCStd(compiler.Properties.C_std) 578*333d2b36SAndroid Build Coastguard Worker cppStd := parseCppStd(compiler.Properties.Cpp_std) 579*333d2b36SAndroid Build Coastguard Worker 580*333d2b36SAndroid Build Coastguard Worker cStd, cppStd = maybeReplaceGnuToC(compiler.Properties.Gnu_extensions, cStd, cppStd) 581*333d2b36SAndroid Build Coastguard Worker 582*333d2b36SAndroid Build Coastguard Worker flags.Local.ConlyFlags = append([]string{"-std=" + cStd}, flags.Local.ConlyFlags...) 583*333d2b36SAndroid Build Coastguard Worker flags.Local.CppFlags = append([]string{"-std=" + cppStd}, flags.Local.CppFlags...) 584*333d2b36SAndroid Build Coastguard Worker 585*333d2b36SAndroid Build Coastguard Worker if ctx.inVendor() { 586*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Vendor.Cflags)...) 587*333d2b36SAndroid Build Coastguard Worker } 588*333d2b36SAndroid Build Coastguard Worker 589*333d2b36SAndroid Build Coastguard Worker if ctx.inProduct() { 590*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Product.Cflags)...) 591*333d2b36SAndroid Build Coastguard Worker } 592*333d2b36SAndroid Build Coastguard Worker 593*333d2b36SAndroid Build Coastguard Worker if ctx.inRecovery() { 594*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Recovery.Cflags)...) 595*333d2b36SAndroid Build Coastguard Worker } 596*333d2b36SAndroid Build Coastguard Worker 597*333d2b36SAndroid Build Coastguard Worker if ctx.inVendorRamdisk() { 598*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Vendor_ramdisk.Cflags)...) 599*333d2b36SAndroid Build Coastguard Worker } 600*333d2b36SAndroid Build Coastguard Worker if ctx.inRamdisk() { 601*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Ramdisk.Cflags)...) 602*333d2b36SAndroid Build Coastguard Worker } 603*333d2b36SAndroid Build Coastguard Worker if !ctx.useSdk() { 604*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, esc(compiler.Properties.Target.Platform.Cflags)...) 605*333d2b36SAndroid Build Coastguard Worker } 606*333d2b36SAndroid Build Coastguard Worker 607*333d2b36SAndroid Build Coastguard Worker // We can enforce some rules more strictly in the code we own. strict 608*333d2b36SAndroid Build Coastguard Worker // indicates if this is code that we can be stricter with. If we have 609*333d2b36SAndroid Build Coastguard Worker // rules that we want to apply to *our* code (but maybe can't for 610*333d2b36SAndroid Build Coastguard Worker // vendor/device specific things), we could extend this to be a ternary 611*333d2b36SAndroid Build Coastguard Worker // value. 612*333d2b36SAndroid Build Coastguard Worker strict := true 613*333d2b36SAndroid Build Coastguard Worker if strings.HasPrefix(modulePath, "external/") { 614*333d2b36SAndroid Build Coastguard Worker strict = false 615*333d2b36SAndroid Build Coastguard Worker } 616*333d2b36SAndroid Build Coastguard Worker 617*333d2b36SAndroid Build Coastguard Worker // Can be used to make some annotations stricter for code we can fix 618*333d2b36SAndroid Build Coastguard Worker // (such as when we mark functions as deprecated). 619*333d2b36SAndroid Build Coastguard Worker if strict { 620*333d2b36SAndroid Build Coastguard Worker flags.Global.CFlags = append(flags.Global.CFlags, "-DANDROID_STRICT") 621*333d2b36SAndroid Build Coastguard Worker } 622*333d2b36SAndroid Build Coastguard Worker 623*333d2b36SAndroid Build Coastguard Worker if compiler.hasSrcExt(ctx, ".proto") { 624*333d2b36SAndroid Build Coastguard Worker flags = protoFlags(ctx, flags, &compiler.Proto) 625*333d2b36SAndroid Build Coastguard Worker } 626*333d2b36SAndroid Build Coastguard Worker 627*333d2b36SAndroid Build Coastguard Worker if compiler.hasSrcExt(ctx, ".y") || compiler.hasSrcExt(ctx, ".yy") { 628*333d2b36SAndroid Build Coastguard Worker flags.Local.CommonFlags = append(flags.Local.CommonFlags, 629*333d2b36SAndroid Build Coastguard Worker "-I"+android.PathForModuleGen(ctx, "yacc", ctx.ModuleDir()).String()) 630*333d2b36SAndroid Build Coastguard Worker } 631*333d2b36SAndroid Build Coastguard Worker 632*333d2b36SAndroid Build Coastguard Worker if len(compiler.Properties.Aidl.Libs) > 0 && 633*333d2b36SAndroid Build Coastguard Worker (len(compiler.Properties.Aidl.Include_dirs) > 0 || len(compiler.Properties.Aidl.Local_include_dirs) > 0) { 634*333d2b36SAndroid Build Coastguard Worker ctx.ModuleErrorf("aidl.libs and (aidl.include_dirs or aidl.local_include_dirs) can't be set at the same time. For aidl headers, please only use aidl.libs prop") 635*333d2b36SAndroid Build Coastguard Worker } 636*333d2b36SAndroid Build Coastguard Worker 637*333d2b36SAndroid Build Coastguard Worker if compiler.hasAidl(ctx, deps) { 638*333d2b36SAndroid Build Coastguard Worker flags.aidlFlags = append(flags.aidlFlags, compiler.Properties.Aidl.Flags...) 639*333d2b36SAndroid Build Coastguard Worker if len(compiler.Properties.Aidl.Local_include_dirs) > 0 { 640*333d2b36SAndroid Build Coastguard Worker localAidlIncludeDirs := android.PathsForModuleSrc(ctx, compiler.Properties.Aidl.Local_include_dirs) 641*333d2b36SAndroid Build Coastguard Worker flags.aidlFlags = append(flags.aidlFlags, includeDirsToFlags(localAidlIncludeDirs)) 642*333d2b36SAndroid Build Coastguard Worker } 643*333d2b36SAndroid Build Coastguard Worker if len(compiler.Properties.Aidl.Include_dirs) > 0 { 644*333d2b36SAndroid Build Coastguard Worker rootAidlIncludeDirs := android.PathsForSource(ctx, compiler.Properties.Aidl.Include_dirs) 645*333d2b36SAndroid Build Coastguard Worker flags.aidlFlags = append(flags.aidlFlags, includeDirsToFlags(rootAidlIncludeDirs)) 646*333d2b36SAndroid Build Coastguard Worker } 647*333d2b36SAndroid Build Coastguard Worker 648*333d2b36SAndroid Build Coastguard Worker var rootAidlIncludeDirs android.Paths 649*333d2b36SAndroid Build Coastguard Worker for _, aidlLibraryInfo := range deps.AidlLibraryInfos { 650*333d2b36SAndroid Build Coastguard Worker rootAidlIncludeDirs = append(rootAidlIncludeDirs, aidlLibraryInfo.IncludeDirs.ToList()...) 651*333d2b36SAndroid Build Coastguard Worker } 652*333d2b36SAndroid Build Coastguard Worker if len(rootAidlIncludeDirs) > 0 { 653*333d2b36SAndroid Build Coastguard Worker flags.aidlFlags = append(flags.aidlFlags, includeDirsToFlags(rootAidlIncludeDirs)) 654*333d2b36SAndroid Build Coastguard Worker } 655*333d2b36SAndroid Build Coastguard Worker 656*333d2b36SAndroid Build Coastguard Worker if proptools.BoolDefault(compiler.Properties.Aidl.Generate_traces, true) { 657*333d2b36SAndroid Build Coastguard Worker flags.aidlFlags = append(flags.aidlFlags, "-t") 658*333d2b36SAndroid Build Coastguard Worker } 659*333d2b36SAndroid Build Coastguard Worker 660*333d2b36SAndroid Build Coastguard Worker aidlMinSdkVersion := ctx.minSdkVersion() 661*333d2b36SAndroid Build Coastguard Worker if aidlMinSdkVersion == "" { 662*333d2b36SAndroid Build Coastguard Worker aidlMinSdkVersion = "platform_apis" 663*333d2b36SAndroid Build Coastguard Worker } 664*333d2b36SAndroid Build Coastguard Worker flags.aidlFlags = append(flags.aidlFlags, "--min_sdk_version="+aidlMinSdkVersion) 665*333d2b36SAndroid Build Coastguard Worker 666*333d2b36SAndroid Build Coastguard Worker if compiler.hasSrcExt(ctx, ".aidl") { 667*333d2b36SAndroid Build Coastguard Worker flags.Local.CommonFlags = append(flags.Local.CommonFlags, 668*333d2b36SAndroid Build Coastguard Worker "-I"+android.PathForModuleGen(ctx, "aidl").String()) 669*333d2b36SAndroid Build Coastguard Worker } 670*333d2b36SAndroid Build Coastguard Worker if len(deps.AidlLibraryInfos) > 0 { 671*333d2b36SAndroid Build Coastguard Worker flags.Local.CommonFlags = append(flags.Local.CommonFlags, 672*333d2b36SAndroid Build Coastguard Worker "-I"+android.PathForModuleGen(ctx, "aidl_library").String()) 673*333d2b36SAndroid Build Coastguard Worker } 674*333d2b36SAndroid Build Coastguard Worker } 675*333d2b36SAndroid Build Coastguard Worker 676*333d2b36SAndroid Build Coastguard Worker if compiler.hasSrcExt(ctx, ".rscript") || compiler.hasSrcExt(ctx, ".fs") { 677*333d2b36SAndroid Build Coastguard Worker flags = rsFlags(ctx, flags, &compiler.Properties) 678*333d2b36SAndroid Build Coastguard Worker } 679*333d2b36SAndroid Build Coastguard Worker 680*333d2b36SAndroid Build Coastguard Worker if compiler.hasSrcExt(ctx, ".sysprop") { 681*333d2b36SAndroid Build Coastguard Worker flags.Local.CommonFlags = append(flags.Local.CommonFlags, 682*333d2b36SAndroid Build Coastguard Worker "-I"+android.PathForModuleGen(ctx, "sysprop", "include").String()) 683*333d2b36SAndroid Build Coastguard Worker } 684*333d2b36SAndroid Build Coastguard Worker 685*333d2b36SAndroid Build Coastguard Worker if len(srcs) > 0 { 686*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleDir() + "/Android.bp:" + ctx.ModuleName() 687*333d2b36SAndroid Build Coastguard Worker if inList("-Wno-error", flags.Local.CFlags) || inList("-Wno-error", flags.Local.CppFlags) { 688*333d2b36SAndroid Build Coastguard Worker ctx.getOrCreateMakeVarsInfo().UsingWnoError = module 689*333d2b36SAndroid Build Coastguard Worker } else if !inList("-Werror", flags.Local.CFlags) && !inList("-Werror", flags.Local.CppFlags) { 690*333d2b36SAndroid Build Coastguard Worker if warningsAreAllowed(ctx.ModuleDir()) { 691*333d2b36SAndroid Build Coastguard Worker ctx.getOrCreateMakeVarsInfo().WarningsAllowed = module 692*333d2b36SAndroid Build Coastguard Worker } else { 693*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append([]string{"-Werror"}, flags.Local.CFlags...) 694*333d2b36SAndroid Build Coastguard Worker } 695*333d2b36SAndroid Build Coastguard Worker } 696*333d2b36SAndroid Build Coastguard Worker } 697*333d2b36SAndroid Build Coastguard Worker 698*333d2b36SAndroid Build Coastguard Worker if Bool(compiler.Properties.Openmp) { 699*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, "-fopenmp") 700*333d2b36SAndroid Build Coastguard Worker } 701*333d2b36SAndroid Build Coastguard Worker 702*333d2b36SAndroid Build Coastguard Worker if ctx.optimizeForSize() { 703*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, "-Oz") 704*333d2b36SAndroid Build Coastguard Worker if !ctx.Config().IsEnvFalse("THINLTO_USE_MLGO") { 705*333d2b36SAndroid Build Coastguard Worker flags.Local.LdFlags = append(flags.Local.LdFlags, "-Wl,-mllvm,-enable-ml-inliner=release") 706*333d2b36SAndroid Build Coastguard Worker } 707*333d2b36SAndroid Build Coastguard Worker } 708*333d2b36SAndroid Build Coastguard Worker 709*333d2b36SAndroid Build Coastguard Worker // Exclude directories from manual binder interface allowed list. 710*333d2b36SAndroid Build Coastguard Worker //TODO(b/145621474): Move this check into IInterface.h when clang-tidy no longer uses absolute paths. 711*333d2b36SAndroid Build Coastguard Worker if android.HasAnyPrefix(ctx.ModuleDir(), allowedManualInterfacePaths) { 712*333d2b36SAndroid Build Coastguard Worker flags.Local.CFlags = append(flags.Local.CFlags, "-DDO_NOT_CHECK_MANUAL_BINDER_INTERFACES") 713*333d2b36SAndroid Build Coastguard Worker } 714*333d2b36SAndroid Build Coastguard Worker 715*333d2b36SAndroid Build Coastguard Worker flags.NoOverrideFlags = append(flags.NoOverrideFlags, "${config.NoOverrideGlobalCflags}") 716*333d2b36SAndroid Build Coastguard Worker 717*333d2b36SAndroid Build Coastguard Worker if flags.Toolchain.Is64Bit() { 718*333d2b36SAndroid Build Coastguard Worker flags.NoOverrideFlags = append(flags.NoOverrideFlags, "${config.NoOverride64GlobalCflags}") 719*333d2b36SAndroid Build Coastguard Worker } 720*333d2b36SAndroid Build Coastguard Worker 721*333d2b36SAndroid Build Coastguard Worker if android.IsThirdPartyPath(ctx.ModuleDir()) { 722*333d2b36SAndroid Build Coastguard Worker flags.NoOverrideFlags = append(flags.NoOverrideFlags, "${config.NoOverrideExternalGlobalCflags}") 723*333d2b36SAndroid Build Coastguard Worker } 724*333d2b36SAndroid Build Coastguard Worker 725*333d2b36SAndroid Build Coastguard Worker return flags 726*333d2b36SAndroid Build Coastguard Worker} 727*333d2b36SAndroid Build Coastguard Worker 728*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) hasSrcExt(ctx BaseModuleContext, ext string) bool { 729*333d2b36SAndroid Build Coastguard Worker for _, src := range compiler.srcsBeforeGen { 730*333d2b36SAndroid Build Coastguard Worker if src.Ext() == ext { 731*333d2b36SAndroid Build Coastguard Worker return true 732*333d2b36SAndroid Build Coastguard Worker } 733*333d2b36SAndroid Build Coastguard Worker } 734*333d2b36SAndroid Build Coastguard Worker for _, src := range compiler.Properties.Srcs.GetOrDefault(ctx, nil) { 735*333d2b36SAndroid Build Coastguard Worker if filepath.Ext(src) == ext { 736*333d2b36SAndroid Build Coastguard Worker return true 737*333d2b36SAndroid Build Coastguard Worker } 738*333d2b36SAndroid Build Coastguard Worker } 739*333d2b36SAndroid Build Coastguard Worker 740*333d2b36SAndroid Build Coastguard Worker return false 741*333d2b36SAndroid Build Coastguard Worker} 742*333d2b36SAndroid Build Coastguard Worker 743*333d2b36SAndroid Build Coastguard Workervar invalidDefineCharRegex = regexp.MustCompile("[^a-zA-Z0-9_]") 744*333d2b36SAndroid Build Coastguard Worker 745*333d2b36SAndroid Build Coastguard Worker// makeDefineString transforms a name of an APEX module into a value to be used as value for C define 746*333d2b36SAndroid Build Coastguard Worker// For example, com.android.foo => COM_ANDROID_FOO 747*333d2b36SAndroid Build Coastguard Workerfunc makeDefineString(name string) string { 748*333d2b36SAndroid Build Coastguard Worker return invalidDefineCharRegex.ReplaceAllString(strings.ToUpper(name), "_") 749*333d2b36SAndroid Build Coastguard Worker} 750*333d2b36SAndroid Build Coastguard Worker 751*333d2b36SAndroid Build Coastguard Workervar gnuToCReplacer = strings.NewReplacer("gnu", "c") 752*333d2b36SAndroid Build Coastguard Worker 753*333d2b36SAndroid Build Coastguard Workerfunc ndkPathDeps(ctx ModuleContext) android.Paths { 754*333d2b36SAndroid Build Coastguard Worker if ctx.Module().(*Module).IsSdkVariant() { 755*333d2b36SAndroid Build Coastguard Worker // The NDK sysroot timestamp file depends on all the NDK sysroot header files 756*333d2b36SAndroid Build Coastguard Worker // for compiling src to obj files. 757*333d2b36SAndroid Build Coastguard Worker return android.Paths{getNdkHeadersTimestampFile(ctx)} 758*333d2b36SAndroid Build Coastguard Worker } 759*333d2b36SAndroid Build Coastguard Worker return nil 760*333d2b36SAndroid Build Coastguard Worker} 761*333d2b36SAndroid Build Coastguard Worker 762*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) hasAidl(ctx BaseModuleContext, deps PathDeps) bool { 763*333d2b36SAndroid Build Coastguard Worker return len(deps.AidlLibraryInfos) > 0 || compiler.hasSrcExt(ctx, ".aidl") 764*333d2b36SAndroid Build Coastguard Worker} 765*333d2b36SAndroid Build Coastguard Worker 766*333d2b36SAndroid Build Coastguard Workerfunc (compiler *baseCompiler) compile(ctx ModuleContext, flags Flags, deps PathDeps) Objects { 767*333d2b36SAndroid Build Coastguard Worker pathDeps := deps.GeneratedDeps 768*333d2b36SAndroid Build Coastguard Worker pathDeps = append(pathDeps, ndkPathDeps(ctx)...) 769*333d2b36SAndroid Build Coastguard Worker 770*333d2b36SAndroid Build Coastguard Worker buildFlags := flagsToBuilderFlags(flags) 771*333d2b36SAndroid Build Coastguard Worker 772*333d2b36SAndroid Build Coastguard Worker srcs := append(android.Paths(nil), compiler.srcsBeforeGen...) 773*333d2b36SAndroid Build Coastguard Worker 774*333d2b36SAndroid Build Coastguard Worker srcs, genDeps, info := genSources(ctx, deps.AidlLibraryInfos, srcs, buildFlags) 775*333d2b36SAndroid Build Coastguard Worker pathDeps = append(pathDeps, genDeps...) 776*333d2b36SAndroid Build Coastguard Worker 777*333d2b36SAndroid Build Coastguard Worker compiler.pathDeps = pathDeps 778*333d2b36SAndroid Build Coastguard Worker compiler.generatedSourceInfo = info 779*333d2b36SAndroid Build Coastguard Worker compiler.cFlagsDeps = flags.CFlagsDeps 780*333d2b36SAndroid Build Coastguard Worker 781*333d2b36SAndroid Build Coastguard Worker // Save src, buildFlags and context 782*333d2b36SAndroid Build Coastguard Worker compiler.srcs = srcs 783*333d2b36SAndroid Build Coastguard Worker 784*333d2b36SAndroid Build Coastguard Worker // Compile files listed in c.Properties.Srcs into objects 785*333d2b36SAndroid Build Coastguard Worker objs := compileObjs(ctx, buildFlags, "", srcs, 786*333d2b36SAndroid Build Coastguard Worker append(android.PathsForModuleSrc(ctx, compiler.Properties.Tidy_disabled_srcs), compiler.generatedSources...), 787*333d2b36SAndroid Build Coastguard Worker android.PathsForModuleSrc(ctx, compiler.Properties.Tidy_timeout_srcs), 788*333d2b36SAndroid Build Coastguard Worker pathDeps, compiler.cFlagsDeps) 789*333d2b36SAndroid Build Coastguard Worker 790*333d2b36SAndroid Build Coastguard Worker if ctx.Failed() { 791*333d2b36SAndroid Build Coastguard Worker return Objects{} 792*333d2b36SAndroid Build Coastguard Worker } 793*333d2b36SAndroid Build Coastguard Worker 794*333d2b36SAndroid Build Coastguard Worker return objs 795*333d2b36SAndroid Build Coastguard Worker} 796*333d2b36SAndroid Build Coastguard Worker 797*333d2b36SAndroid Build Coastguard Worker// Compile a list of source files into objects a specified subdirectory 798*333d2b36SAndroid Build Coastguard Workerfunc compileObjs(ctx ModuleContext, flags builderFlags, subdir string, 799*333d2b36SAndroid Build Coastguard Worker srcFiles, noTidySrcs, timeoutTidySrcs, pathDeps android.Paths, cFlagsDeps android.Paths) Objects { 800*333d2b36SAndroid Build Coastguard Worker 801*333d2b36SAndroid Build Coastguard Worker return transformSourceToObj(ctx, subdir, srcFiles, noTidySrcs, timeoutTidySrcs, flags, pathDeps, cFlagsDeps) 802*333d2b36SAndroid Build Coastguard Worker} 803*333d2b36SAndroid Build Coastguard Worker 804*333d2b36SAndroid Build Coastguard Worker// Properties for rust_bindgen related to generating rust bindings. 805*333d2b36SAndroid Build Coastguard Worker// This exists here so these properties can be included in a cc_default 806*333d2b36SAndroid Build Coastguard Worker// which can be used in both cc and rust modules. 807*333d2b36SAndroid Build Coastguard Workertype RustBindgenClangProperties struct { 808*333d2b36SAndroid Build Coastguard Worker // list of directories relative to the Blueprints file that will 809*333d2b36SAndroid Build Coastguard Worker // be added to the include path using -I 810*333d2b36SAndroid Build Coastguard Worker Local_include_dirs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"` 811*333d2b36SAndroid Build Coastguard Worker 812*333d2b36SAndroid Build Coastguard Worker // list of static libraries that provide headers for this binding. 813*333d2b36SAndroid Build Coastguard Worker Static_libs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"` 814*333d2b36SAndroid Build Coastguard Worker 815*333d2b36SAndroid Build Coastguard Worker // list of shared libraries that provide headers for this binding. 816*333d2b36SAndroid Build Coastguard Worker Shared_libs proptools.Configurable[[]string] `android:"arch_variant"` 817*333d2b36SAndroid Build Coastguard Worker 818*333d2b36SAndroid Build Coastguard Worker // List of libraries which export include paths required for this module 819*333d2b36SAndroid Build Coastguard Worker Header_libs proptools.Configurable[[]string] `android:"arch_variant,variant_prepend"` 820*333d2b36SAndroid Build Coastguard Worker 821*333d2b36SAndroid Build Coastguard Worker // list of clang flags required to correctly interpret the headers. 822*333d2b36SAndroid Build Coastguard Worker Cflags proptools.Configurable[[]string] `android:"arch_variant"` 823*333d2b36SAndroid Build Coastguard Worker 824*333d2b36SAndroid Build Coastguard Worker // list of c++ specific clang flags required to correctly interpret the headers. 825*333d2b36SAndroid Build Coastguard Worker // This is provided primarily to make sure cppflags defined in cc_defaults are pulled in. 826*333d2b36SAndroid Build Coastguard Worker Cppflags proptools.Configurable[[]string] `android:"arch_variant"` 827*333d2b36SAndroid Build Coastguard Worker 828*333d2b36SAndroid Build Coastguard Worker // C standard version to use. Can be a specific version (such as "gnu11"), 829*333d2b36SAndroid Build Coastguard Worker // "experimental" (which will use draft versions like C1x when available), 830*333d2b36SAndroid Build Coastguard Worker // or the empty string (which will use the default). 831*333d2b36SAndroid Build Coastguard Worker // 832*333d2b36SAndroid Build Coastguard Worker // If this is set, the file extension will be ignored and this will be used as the std version value. Setting this 833*333d2b36SAndroid Build Coastguard Worker // to "default" will use the build system default version. This cannot be set at the same time as cpp_std. 834*333d2b36SAndroid Build Coastguard Worker C_std *string 835*333d2b36SAndroid Build Coastguard Worker 836*333d2b36SAndroid Build Coastguard Worker // C++ standard version to use. Can be a specific version (such as 837*333d2b36SAndroid Build Coastguard Worker // "gnu++11"), "experimental" (which will use draft versions like C++1z when 838*333d2b36SAndroid Build Coastguard Worker // available), or the empty string (which will use the default). 839*333d2b36SAndroid Build Coastguard Worker // 840*333d2b36SAndroid Build Coastguard Worker // If this is set, the file extension will be ignored and this will be used as the std version value. Setting this 841*333d2b36SAndroid Build Coastguard Worker // to "default" will use the build system default version. This cannot be set at the same time as c_std. 842*333d2b36SAndroid Build Coastguard Worker Cpp_std *string 843*333d2b36SAndroid Build Coastguard Worker 844*333d2b36SAndroid Build Coastguard Worker //TODO(b/161141999) Add support for headers from cc_library_header modules. 845*333d2b36SAndroid Build Coastguard Worker} 846