From 3950cd6ed4c0331032c6dd91a0ad3bd0666798df Mon Sep 17 00:00:00 2001 From: Jingwen Chen Date: Wed, 12 May 2021 04:33:00 +0000 Subject: [PATCH] bp2build: remove libc_tzcode from denylist. This now works with --features no_copts_tokenization. With tokenization, the escaped empty string '\"\"' became an actual empty string '' on the command line, setting -DWILDABBR to the wrong value. However, no_copts_tokenization unveiled other problems with Android.bp flags, such as spaces in existing cflags like https://cs.android.com/android/platform/superproject/+/master:bionic/libc/Android.bp;l=288;drc=a0a4a6c2967b5b3c02c951ea1145f32ed5564ab9 - this trips up Bazel's copts when generated literally, so the fix (other than splitting on space and making Soong accept strings that don't start with dashes as cflags) is to make bp2build split cflags on spaces before generating them as copts. Test: bp2build, build bionic/... Fixes: 186822591 Change-Id: Icf10bd20f6fb81db0b719ca0555fc70c75b91a79 --- android/bazel.go | 1 - bp2build/cc_library_conversion_test.go | 26 ++++++++++++++++++++++++++ cc/bp2build.go | 9 ++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/android/bazel.go b/android/bazel.go index 6c476a78e..0af4aa0ea 100644 --- a/android/bazel.go +++ b/android/bazel.go @@ -207,7 +207,6 @@ var ( "libc_jemalloc_wrapper", // http://b/187012490, cc_library_static, depends on //external/jemalloc_new:libjemalloc5 (http://b/186828626) "libc_ndk", // http://b/187013218, cc_library_static, depends on //bionic/libm:libm (http://b/183064661) "libc", // http://b/183064430, cc_library, depends on //external/jemalloc_new:libjemalloc5 (http://b/186828626) - "libc_tzcode", // http://b/186822591, cc_library_static, localtime.c:84:46: error: expected expression "libc_bionic_ndk", // http://b/186822256, cc_library_static, signal.cpp:186:52: error: ISO C++ requires field designators to be specified in declaration order "libc_malloc_hooks", // http://b/187016307, cc_library, ld.lld: error: undefined symbol: __malloc_hook "libm", // http://b/183064661, cc_library, math.h:25:16: error: unexpected token in argument list diff --git a/bp2build/cc_library_conversion_test.go b/bp2build/cc_library_conversion_test.go index 407073a85..8f060c011 100644 --- a/bp2build/cc_library_conversion_test.go +++ b/bp2build/cc_library_conversion_test.go @@ -443,6 +443,32 @@ cc_library { "//conditions:default": [], }), srcs = ["c.cpp"], +)`}, + }, + { + description: "cc_library spaces in copts", + moduleTypeUnderTest: "cc_library", + moduleTypeUnderTestFactory: cc.LibraryFactory, + moduleTypeUnderTestBp2BuildMutator: cc.CcLibraryBp2Build, + depsMutators: []android.RegisterMutatorFunc{cc.RegisterDepsBp2Build}, + dir: "foo/bar", + filesystem: map[string]string{ + "foo/bar/Android.bp": ` +cc_library { + name: "a", + cflags: ["-include header.h",], + bazel_module: { bp2build_available: true }, +} +`, + }, + bp: soongCcLibraryPreamble, + expectedBazelTargets: []string{`cc_library( + name = "a", + copts = [ + "-include", + "header.h", + "-Ifoo/bar", + ], )`}, }, } diff --git a/cc/bp2build.go b/cc/bp2build.go index 7d01986f1..4c01de562 100644 --- a/cc/bp2build.go +++ b/cc/bp2build.go @@ -17,6 +17,7 @@ import ( "android/soong/android" "android/soong/bazel" "path/filepath" + "strings" ) // bp2build functions and helpers for converting cc_* modules to Bazel. @@ -188,7 +189,13 @@ func bp2BuildParseCompilerProps(ctx android.TopDownMutatorContext, module *Modul // Parse the list of copts. parseCopts := func(baseCompilerProps *BaseCompilerProperties) []string { - copts := append([]string{}, baseCompilerProps.Cflags...) + var copts []string + for _, flag := range baseCompilerProps.Cflags { + // Soong's cflags can contain spaces, like `-include header.h`. For + // Bazel's copts, split them up to be compatible with the + // no_copts_tokenization feature. + copts = append(copts, strings.Split(flag, " ")...) + } for _, dir := range parseLocalIncludeDirs(baseCompilerProps) { copts = append(copts, includeFlag(dir)) }