diff --git a/bp2build/cc_library_static_conversion_test.go b/bp2build/cc_library_static_conversion_test.go index 467b0b286..ef528e96b 100644 --- a/bp2build/cc_library_static_conversion_test.go +++ b/bp2build/cc_library_static_conversion_test.go @@ -101,6 +101,9 @@ func TestCcLibraryStaticBp2Build(t *testing.T) { "export_include_dir_1/export_include_dir_1_b.h": "", "export_include_dir_2/export_include_dir_2_a.h": "", "export_include_dir_2/export_include_dir_2_b.h": "", + // NOTE: Soong implicitly includes headers in the current directory + "implicit_include_1.h": "", + "implicit_include_2.h": "", }, bp: soongCcLibraryStaticPreamble + ` cc_library_headers { @@ -203,34 +206,65 @@ cc_library_static { "include_dir_2", "local_include_dir_1", "local_include_dir_2", + ".", ], linkstatic = True, srcs = [ "foo_static1.cc", "foo_static2.cc", + "implicit_include_1.h", + "implicit_include_2.h", + "include_dir_1/include_dir_1_a.h", + "include_dir_1/include_dir_1_b.h", + "include_dir_2/include_dir_2_a.h", + "include_dir_2/include_dir_2_b.h", + "local_include_dir_1/local_include_dir_1_a.h", + "local_include_dir_1/local_include_dir_1_b.h", + "local_include_dir_2/local_include_dir_2_a.h", + "local_include_dir_2/local_include_dir_2_b.h", ], )`, `cc_library_static( name = "static_lib_1", + includes = [ + ".", + ], linkstatic = True, srcs = [ + "implicit_include_1.h", + "implicit_include_2.h", "static_lib_1.cc", ], )`, `cc_library_static( name = "static_lib_2", + includes = [ + ".", + ], linkstatic = True, srcs = [ + "implicit_include_1.h", + "implicit_include_2.h", "static_lib_2.cc", ], )`, `cc_library_static( name = "whole_static_lib_1", + includes = [ + ".", + ], linkstatic = True, srcs = [ + "implicit_include_1.h", + "implicit_include_2.h", "whole_static_lib_1.cc", ], )`, `cc_library_static( name = "whole_static_lib_2", + includes = [ + ".", + ], linkstatic = True, srcs = [ + "implicit_include_1.h", + "implicit_include_2.h", "whole_static_lib_2.cc", ], )`}, diff --git a/cc/library.go b/cc/library.go index b49f1e510..18f9fae28 100644 --- a/cc/library.go +++ b/cc/library.go @@ -2104,7 +2104,22 @@ func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) { break } } - srcsLabels := bazel.MakeLabelListAttribute(android.BazelLabelForModuleSrc(ctx, srcs)) + + // Soong implicitly includes headers from the module's directory. + // For Bazel builds to work we have to make these header includes explicit. + if module.compiler.(*libraryDecorator).includeBuildDirectory() { + localIncludeDirs = append(localIncludeDirs, ".") + } + + srcsLabels := android.BazelLabelForModuleSrc(ctx, srcs) + + // For Bazel, be more explicit about headers - list all header files in include dirs as srcs + for _, includeDir := range includeDirs { + srcsLabels.Append(bp2BuildListHeadersInDir(ctx, includeDir)) + } + for _, localIncludeDir := range localIncludeDirs { + srcsLabels.Append(bp2BuildListHeadersInDir(ctx, localIncludeDir)) + } var staticLibs []string var wholeStaticLibs []string @@ -2135,7 +2150,7 @@ func CcLibraryStaticBp2Build(ctx android.TopDownMutatorContext) { attrs := &bazelCcLibraryStaticAttributes{ Copts: copts, - Srcs: srcsLabels, + Srcs: bazel.MakeLabelListAttribute(srcsLabels), Deps: bazel.MakeLabelListAttribute(depsLabels), Linkstatic: true, Includes: allIncludes,