From f60ecf081ef8fa4525d2804e920c5e36fb17b1aa Mon Sep 17 00:00:00 2001 From: Chris Parsons Date: Tue, 27 Apr 2021 14:48:30 -0400 Subject: [PATCH] Mixed builds: propagate includes from cc_* targets This allows us to remove libasync_safe from the mixed builds denylist. Test: mixed_libc.sh CI script Change-Id: Ibafd231284864078bf30340f919d39e5098843ce --- android/bazel.go | 7 +++---- cc/library.go | 17 +++++++++++++---- cc/linkable.go | 4 ++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/android/bazel.go b/android/bazel.go index 49fc0adb0..218bbc12d 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -221,10 +221,9 @@ var ( // Per-module denylist to opt modules out of mixed builds. Such modules will // still be generated via bp2build. mixedBuildsDisabledList = []string{ - "libasync_safe", // lberki@, cc_library_static, 'async_safe/log.h not found' for out/combined-aosp_arm64.ninja out/soong/.intermediates/system/unwinding/libbacktrace/libbacktrace/android_arm64_armv8-a_shared/obj/system/unwinding/libbacktrace/ThreadEntry.o - "libc_gdtoa", // ruperts@, cc_library_static, OK for bp2build but undefined symbol: __strtorQ for mixed builds - "libc_netbsd", // lberki@, cc_library_static, version script assignment of 'LIBC_PRIVATE' to symbol 'SHA1Final' failed: symbol not defined - "libc_openbsd", // ruperts@, cc_library_static, OK for bp2build but error: duplicate symbol: strcpy for mixed builds + "libc_gdtoa", // ruperts@, cc_library_static, OK for bp2build but undefined symbol: __strtorQ for mixed builds + "libc_netbsd", // lberki@, cc_library_static, version script assignment of 'LIBC_PRIVATE' to symbol 'SHA1Final' failed: symbol not defined + "libc_openbsd", // ruperts@, cc_library_static, OK for bp2build but error: duplicate symbol: strcpy for mixed builds } // Used for quicker lookups diff --git a/cc/library.go b/cc/library.go index 3ac7e115c..73215edf9 100644 --- a/cc/library.go +++ b/cc/library.go @@ -402,11 +402,18 @@ func (f *flagExporter) addExportedGeneratedHeaders(headers ...android.Path) { func (f *flagExporter) setProvider(ctx android.ModuleContext) { ctx.SetProvider(FlagExporterInfoProvider, FlagExporterInfo{ - IncludeDirs: android.FirstUniquePaths(f.dirs), + // Comes from Export_include_dirs property, and those of exported transitive deps + IncludeDirs: android.FirstUniquePaths(f.dirs), + // Comes from Export_system_include_dirs property, and those of exported transitive deps SystemIncludeDirs: android.FirstUniquePaths(f.systemDirs), - Flags: f.flags, - Deps: f.deps, - GeneratedHeaders: f.headers, + // Used in very few places as a one-off way of adding extra defines. + Flags: f.flags, + // Used sparingly, for extra files that need to be explicitly exported to dependers, + // or for phony files to minimize ninja. + Deps: f.deps, + // For exported generated headers, such as exported aidl headers, proto headers, or + // sysprop headers. + GeneratedHeaders: f.headers, }) } @@ -524,6 +531,8 @@ func (handler *staticLibraryBazelHandler) generateBazelBuildActions(ctx android. Direct(outputFilePath). Build(), }) + + ctx.SetProvider(FlagExporterInfoProvider, flagExporterInfoFromCcInfo(ctx, ccInfo)) if i, ok := handler.module.linker.(snapshotLibraryInterface); ok { // Dependencies on this library will expect collectedSnapshotHeaders to // be set, otherwise validation will fail. For now, set this to an empty diff --git a/cc/linkable.go b/cc/linkable.go index 8fe0b4a9d..2351fc348 100644 --- a/cc/linkable.go +++ b/cc/linkable.go @@ -283,7 +283,7 @@ func flagExporterInfoFromCcInfo(ctx android.ModuleContext, ccInfo cquery.CcInfo) systemIncludes := android.PathsForBazelOut(ctx, ccInfo.SystemIncludes) return FlagExporterInfo{ - IncludeDirs: includes, - SystemIncludeDirs: systemIncludes, + IncludeDirs: android.FirstUniquePaths(includes), + SystemIncludeDirs: android.FirstUniquePaths(systemIncludes), } }