1// Copyright (C) 2019 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package cc 16 17import ( 18 "android/soong/android" 19) 20 21func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) { 22 RegisterPrebuiltBuildComponents(ctx) 23 android.RegisterPrebuiltMutators(ctx) 24 25 RegisterCCBuildComponents(ctx) 26 RegisterBinaryBuildComponents(ctx) 27 RegisterLibraryBuildComponents(ctx) 28 RegisterLibraryHeadersBuildComponents(ctx) 29 30 ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory) 31 ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory) 32 ctx.RegisterModuleType("cc_object", ObjectFactory) 33 ctx.RegisterModuleType("ndk_prebuilt_shared_stl", NdkPrebuiltSharedStlFactory) 34 ctx.RegisterModuleType("ndk_prebuilt_object", NdkPrebuiltObjectFactory) 35} 36 37func GatherRequiredDepsForTest(oses ...android.OsType) string { 38 ret := ` 39 toolchain_library { 40 name: "libatomic", 41 vendor_available: true, 42 recovery_available: true, 43 native_bridge_supported: true, 44 src: "", 45 } 46 47 toolchain_library { 48 name: "libcompiler_rt-extras", 49 vendor_available: true, 50 recovery_available: true, 51 src: "", 52 } 53 54 toolchain_library { 55 name: "libclang_rt.builtins-arm-android", 56 vendor_available: true, 57 recovery_available: true, 58 native_bridge_supported: true, 59 src: "", 60 } 61 62 toolchain_library { 63 name: "libclang_rt.builtins-aarch64-android", 64 vendor_available: true, 65 recovery_available: true, 66 native_bridge_supported: true, 67 src: "", 68 } 69 70 cc_prebuilt_library_shared { 71 name: "libclang_rt.hwasan-aarch64-android", 72 nocrt: true, 73 vendor_available: true, 74 recovery_available: true, 75 system_shared_libs: [], 76 stl: "none", 77 srcs: [""], 78 check_elf_files: false, 79 sanitize: { 80 never: true, 81 }, 82 } 83 84 toolchain_library { 85 name: "libclang_rt.builtins-i686-android", 86 vendor_available: true, 87 recovery_available: true, 88 native_bridge_supported: true, 89 src: "", 90 } 91 92 toolchain_library { 93 name: "libclang_rt.builtins-x86_64-android", 94 vendor_available: true, 95 recovery_available: true, 96 native_bridge_supported: true, 97 src: "", 98 } 99 100 toolchain_library { 101 name: "libclang_rt.fuzzer-arm-android", 102 vendor_available: true, 103 recovery_available: true, 104 src: "", 105 } 106 107 toolchain_library { 108 name: "libclang_rt.fuzzer-aarch64-android", 109 vendor_available: true, 110 recovery_available: true, 111 src: "", 112 } 113 114 toolchain_library { 115 name: "libclang_rt.fuzzer-i686-android", 116 vendor_available: true, 117 recovery_available: true, 118 src: "", 119 } 120 121 toolchain_library { 122 name: "libclang_rt.fuzzer-x86_64-android", 123 vendor_available: true, 124 recovery_available: true, 125 src: "", 126 } 127 128 toolchain_library { 129 name: "libclang_rt.fuzzer-x86_64", 130 vendor_available: true, 131 recovery_available: true, 132 src: "", 133 } 134 135 // Needed for sanitizer 136 cc_prebuilt_library_shared { 137 name: "libclang_rt.ubsan_standalone-aarch64-android", 138 vendor_available: true, 139 recovery_available: true, 140 system_shared_libs: [], 141 srcs: [""], 142 } 143 144 toolchain_library { 145 name: "libgcc", 146 vendor_available: true, 147 recovery_available: true, 148 src: "", 149 } 150 151 toolchain_library { 152 name: "libgcc_stripped", 153 vendor_available: true, 154 recovery_available: true, 155 sdk_version: "current", 156 src: "", 157 } 158 159 cc_library { 160 name: "libc", 161 no_libcrt: true, 162 nocrt: true, 163 stl: "none", 164 system_shared_libs: [], 165 recovery_available: true, 166 stubs: { 167 versions: ["27", "28", "29"], 168 }, 169 } 170 llndk_library { 171 name: "libc", 172 symbol_file: "", 173 sdk_version: "current", 174 } 175 cc_library { 176 name: "libm", 177 no_libcrt: true, 178 nocrt: true, 179 stl: "none", 180 system_shared_libs: [], 181 recovery_available: true, 182 stubs: { 183 versions: ["27", "28", "29"], 184 }, 185 apex_available: [ 186 "//apex_available:platform", 187 "myapex" 188 ], 189 } 190 llndk_library { 191 name: "libm", 192 symbol_file: "", 193 sdk_version: "current", 194 } 195 cc_library { 196 name: "libdl", 197 no_libcrt: true, 198 nocrt: true, 199 stl: "none", 200 system_shared_libs: [], 201 recovery_available: true, 202 stubs: { 203 versions: ["27", "28", "29"], 204 }, 205 apex_available: [ 206 "//apex_available:platform", 207 "myapex" 208 ], 209 } 210 llndk_library { 211 name: "libdl", 212 symbol_file: "", 213 sdk_version: "current", 214 } 215 cc_library { 216 name: "libft2", 217 no_libcrt: true, 218 nocrt: true, 219 system_shared_libs: [], 220 recovery_available: true, 221 } 222 llndk_library { 223 name: "libft2", 224 symbol_file: "", 225 vendor_available: false, 226 sdk_version: "current", 227 } 228 cc_library { 229 name: "libc++_static", 230 no_libcrt: true, 231 nocrt: true, 232 system_shared_libs: [], 233 stl: "none", 234 vendor_available: true, 235 recovery_available: true, 236 host_supported: true, 237 apex_available: [ 238 "//apex_available:platform", 239 "//apex_available:anyapex", 240 ], 241 } 242 cc_library { 243 name: "libc++", 244 no_libcrt: true, 245 nocrt: true, 246 system_shared_libs: [], 247 stl: "none", 248 vendor_available: true, 249 recovery_available: true, 250 host_supported: true, 251 vndk: { 252 enabled: true, 253 support_system_process: true, 254 }, 255 apex_available: [ 256 "//apex_available:platform", 257 "myapex" 258 ], 259 } 260 cc_library { 261 name: "libc++demangle", 262 no_libcrt: true, 263 nocrt: true, 264 system_shared_libs: [], 265 stl: "none", 266 host_supported: false, 267 vendor_available: true, 268 recovery_available: true, 269 apex_available: [ 270 "//apex_available:platform", 271 "//apex_available:anyapex", 272 ], 273 } 274 cc_library { 275 name: "libunwind_llvm", 276 no_libcrt: true, 277 nocrt: true, 278 system_shared_libs: [], 279 stl: "none", 280 vendor_available: true, 281 recovery_available: true, 282 } 283 284 cc_defaults { 285 name: "crt_defaults", 286 recovery_available: true, 287 vendor_available: true, 288 native_bridge_supported: true, 289 stl: "none", 290 apex_available: [ 291 "//apex_available:platform", 292 "//apex_available:anyapex", 293 ], 294 } 295 296 cc_object { 297 name: "crtbegin_so", 298 defaults: ["crt_defaults"], 299 recovery_available: true, 300 vendor_available: true, 301 native_bridge_supported: true, 302 stl: "none", 303 } 304 305 cc_object { 306 name: "crtbegin_dynamic", 307 defaults: ["crt_defaults"], 308 recovery_available: true, 309 vendor_available: true, 310 native_bridge_supported: true, 311 stl: "none", 312 } 313 314 cc_object { 315 name: "crtbegin_static", 316 defaults: ["crt_defaults"], 317 recovery_available: true, 318 vendor_available: true, 319 native_bridge_supported: true, 320 stl: "none", 321 } 322 323 cc_object { 324 name: "crtend_so", 325 defaults: ["crt_defaults"], 326 recovery_available: true, 327 vendor_available: true, 328 native_bridge_supported: true, 329 stl: "none", 330 } 331 332 cc_object { 333 name: "crtend_android", 334 defaults: ["crt_defaults"], 335 recovery_available: true, 336 vendor_available: true, 337 native_bridge_supported: true, 338 stl: "none", 339 } 340 341 cc_library { 342 name: "libprotobuf-cpp-lite", 343 } 344 345 cc_library { 346 name: "ndk_libunwind", 347 sdk_version: "current", 348 stl: "none", 349 system_shared_libs: [], 350 } 351 352 cc_library { 353 name: "libc.ndk.current", 354 sdk_version: "current", 355 stl: "none", 356 system_shared_libs: [], 357 } 358 359 cc_library { 360 name: "libm.ndk.current", 361 sdk_version: "current", 362 stl: "none", 363 system_shared_libs: [], 364 } 365 366 cc_library { 367 name: "libdl.ndk.current", 368 sdk_version: "current", 369 stl: "none", 370 system_shared_libs: [], 371 } 372 373 ndk_prebuilt_object { 374 name: "ndk_crtbegin_so.27", 375 sdk_version: "27", 376 } 377 378 ndk_prebuilt_object { 379 name: "ndk_crtend_so.27", 380 sdk_version: "27", 381 } 382 383 ndk_prebuilt_object { 384 name: "ndk_crtbegin_dynamic.27", 385 sdk_version: "27", 386 } 387 388 ndk_prebuilt_object { 389 name: "ndk_crtend_android.27", 390 sdk_version: "27", 391 } 392 393 ndk_prebuilt_shared_stl { 394 name: "ndk_libc++_shared", 395 } 396 ` 397 398 for _, os := range oses { 399 if os == android.Fuchsia { 400 ret += ` 401 cc_library { 402 name: "libbioniccompat", 403 stl: "none", 404 } 405 cc_library { 406 name: "libcompiler_rt", 407 stl: "none", 408 } 409 ` 410 } 411 if os == android.Windows { 412 ret += ` 413 toolchain_library { 414 name: "libwinpthread", 415 host_supported: true, 416 enabled: false, 417 target: { 418 windows: { 419 enabled: true, 420 }, 421 }, 422 src: "", 423 } 424 ` 425 } 426 } 427 return ret 428} 429 430func GatherRequiredFilesForTest(fs map[string][]byte) { 431} 432 433func TestConfig(buildDir string, os android.OsType, env map[string]string, 434 bp string, fs map[string][]byte) android.Config { 435 436 // add some modules that are required by the compiler and/or linker 437 bp = bp + GatherRequiredDepsForTest(os) 438 439 mockFS := map[string][]byte{} 440 441 GatherRequiredFilesForTest(mockFS) 442 443 for k, v := range fs { 444 mockFS[k] = v 445 } 446 447 var config android.Config 448 if os == android.Fuchsia { 449 config = android.TestArchConfigFuchsia(buildDir, env, bp, mockFS) 450 } else { 451 config = android.TestArchConfig(buildDir, env, bp, mockFS) 452 } 453 454 return config 455} 456 457func CreateTestContext() *android.TestContext { 458 ctx := android.NewTestArchContext() 459 ctx.RegisterModuleType("cc_fuzz", FuzzFactory) 460 ctx.RegisterModuleType("cc_test", TestFactory) 461 ctx.RegisterModuleType("llndk_headers", llndkHeadersFactory) 462 ctx.RegisterModuleType("ndk_library", NdkLibraryFactory) 463 ctx.RegisterModuleType("vendor_public_library", vendorPublicLibraryFactory) 464 ctx.RegisterModuleType("filegroup", android.FileGroupFactory) 465 ctx.RegisterModuleType("vndk_prebuilt_shared", VndkPrebuiltSharedFactory) 466 ctx.RegisterModuleType("vndk_libraries_txt", VndkLibrariesTxtFactory) 467 ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators) 468 RegisterRequiredBuildComponentsForTest(ctx) 469 ctx.RegisterSingletonType("vndk-snapshot", VndkSnapshotSingleton) 470 ctx.RegisterSingletonType("vendor-snapshot", VendorSnapshotSingleton) 471 472 return ctx 473} 474