Loading cc/genrule_test.go +39 −0 Original line number Diff line number Diff line Loading @@ -76,3 +76,42 @@ func TestArchGenruleCmd(t *testing.T) { t.Errorf(`want arm64 inputs %v, got %v`, expected, gen.Inputs.Strings()) } } func TestLibraryGenruleCmd(t *testing.T) { bp := ` cc_library { name: "libboth", } cc_library_shared { name: "libshared", } cc_library_static { name: "libstatic", } cc_genrule { name: "gen", tool_files: ["tool"], srcs: [ ":libboth", ":libshared", ":libstatic", ], cmd: "$(location tool) $(in) $(out)", out: ["out"], } ` ctx := testCc(t, bp) gen := ctx.ModuleForTests("gen", "android_arm_armv7-a-neon").Output("out") expected := []string{"libboth.so", "libshared.so", "libstatic.a"} var got []string for _, input := range gen.Inputs { got = append(got, input.Base()) } if !reflect.DeepEqual(expected, got) { t.Errorf(`want inputs %v, got %v`, expected, got) } } cc/library.go +15 −12 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import ( "android/soong/android" "android/soong/cc/config" "android/soong/genrule" ) type LibraryProperties struct { Loading Loading @@ -1469,6 +1468,12 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) { static.linker.(prebuiltLibraryInterface).setStatic() shared.linker.(prebuiltLibraryInterface).setShared() if library.buildShared() { mctx.AliasVariation("shared") } else if library.buildStatic() { mctx.AliasVariation("static") } if !library.buildStatic() { static.linker.(prebuiltLibraryInterface).disablePrebuilt() } Loading Loading @@ -1500,18 +1505,22 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) { if _, ok := library.(*Module); ok { reuseStaticLibrary(mctx, static.(*Module), shared.(*Module)) } mctx.AliasVariation("shared") } else if library.BuildStaticVariant() { variations := append([]string{"static"}, variations...) modules := mctx.CreateLocalVariations(variations...) modules[0].(LinkableInterface).SetStatic() mctx.AliasVariation("static") } else if library.BuildSharedVariant() { variations := append([]string{"shared"}, variations...) modules := mctx.CreateLocalVariations(variations...) modules[0].(LinkableInterface).SetShared() mctx.AliasVariation("shared") } else if len(variations) > 0 { mctx.CreateLocalVariations(variations...) mctx.AliasVariation(variations[0]) } } } Loading Loading @@ -1558,13 +1567,14 @@ func createVersionVariations(mctx android.BottomUpMutatorContext, versions []str // "" is for the non-stubs variant versions = append([]string{""}, versions...) modules := mctx.CreateVariations(versions...) modules := mctx.CreateLocalVariations(versions...) for i, m := range modules { if versions[i] != "" { m.(LinkableInterface).SetBuildStubs() m.(LinkableInterface).SetStubsVersions(versions[i]) } } mctx.AliasVariation("") } func VersionVariantAvailable(module interface { Loading Loading @@ -1599,7 +1609,7 @@ func VersionMutator(mctx android.BottomUpMutatorContext) { if c, ok := library.(*Module); ok && c.IsStubs() { stubsVersionsLock.Lock() defer stubsVersionsLock.Unlock() // For LLNDK llndk_library, we borrow vstubs.ersions from its implementation library. // For LLNDK llndk_library, we borrow stubs.versions from its implementation library. // Since llndk_library has dependency to its implementation library, // we can safely access stubsVersionsFor() with its baseModuleName. versions := stubsVersionsFor(mctx.Config())[c.BaseModuleName()] Loading @@ -1610,18 +1620,11 @@ func VersionMutator(mctx android.BottomUpMutatorContext) { return } mctx.CreateVariations("") return } if genrule, ok := mctx.Module().(*genrule.Module); ok { if _, ok := genrule.Extra.(*GenruleExtraProperties); ok { if VersionVariantAvailable(genrule) { mctx.CreateVariations("") mctx.CreateLocalVariations("") mctx.AliasVariation("") return } } } } // maybeInjectBoringSSLHash adds a rule to run bssl_inject_hash on the output file if the module has the // inject_bssl_hash or if any static library dependencies have inject_bssl_hash set. It returns the output path Loading Loading
cc/genrule_test.go +39 −0 Original line number Diff line number Diff line Loading @@ -76,3 +76,42 @@ func TestArchGenruleCmd(t *testing.T) { t.Errorf(`want arm64 inputs %v, got %v`, expected, gen.Inputs.Strings()) } } func TestLibraryGenruleCmd(t *testing.T) { bp := ` cc_library { name: "libboth", } cc_library_shared { name: "libshared", } cc_library_static { name: "libstatic", } cc_genrule { name: "gen", tool_files: ["tool"], srcs: [ ":libboth", ":libshared", ":libstatic", ], cmd: "$(location tool) $(in) $(out)", out: ["out"], } ` ctx := testCc(t, bp) gen := ctx.ModuleForTests("gen", "android_arm_armv7-a-neon").Output("out") expected := []string{"libboth.so", "libshared.so", "libstatic.a"} var got []string for _, input := range gen.Inputs { got = append(got, input.Base()) } if !reflect.DeepEqual(expected, got) { t.Errorf(`want inputs %v, got %v`, expected, got) } }
cc/library.go +15 −12 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import ( "android/soong/android" "android/soong/cc/config" "android/soong/genrule" ) type LibraryProperties struct { Loading Loading @@ -1469,6 +1468,12 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) { static.linker.(prebuiltLibraryInterface).setStatic() shared.linker.(prebuiltLibraryInterface).setShared() if library.buildShared() { mctx.AliasVariation("shared") } else if library.buildStatic() { mctx.AliasVariation("static") } if !library.buildStatic() { static.linker.(prebuiltLibraryInterface).disablePrebuilt() } Loading Loading @@ -1500,18 +1505,22 @@ func LinkageMutator(mctx android.BottomUpMutatorContext) { if _, ok := library.(*Module); ok { reuseStaticLibrary(mctx, static.(*Module), shared.(*Module)) } mctx.AliasVariation("shared") } else if library.BuildStaticVariant() { variations := append([]string{"static"}, variations...) modules := mctx.CreateLocalVariations(variations...) modules[0].(LinkableInterface).SetStatic() mctx.AliasVariation("static") } else if library.BuildSharedVariant() { variations := append([]string{"shared"}, variations...) modules := mctx.CreateLocalVariations(variations...) modules[0].(LinkableInterface).SetShared() mctx.AliasVariation("shared") } else if len(variations) > 0 { mctx.CreateLocalVariations(variations...) mctx.AliasVariation(variations[0]) } } } Loading Loading @@ -1558,13 +1567,14 @@ func createVersionVariations(mctx android.BottomUpMutatorContext, versions []str // "" is for the non-stubs variant versions = append([]string{""}, versions...) modules := mctx.CreateVariations(versions...) modules := mctx.CreateLocalVariations(versions...) for i, m := range modules { if versions[i] != "" { m.(LinkableInterface).SetBuildStubs() m.(LinkableInterface).SetStubsVersions(versions[i]) } } mctx.AliasVariation("") } func VersionVariantAvailable(module interface { Loading Loading @@ -1599,7 +1609,7 @@ func VersionMutator(mctx android.BottomUpMutatorContext) { if c, ok := library.(*Module); ok && c.IsStubs() { stubsVersionsLock.Lock() defer stubsVersionsLock.Unlock() // For LLNDK llndk_library, we borrow vstubs.ersions from its implementation library. // For LLNDK llndk_library, we borrow stubs.versions from its implementation library. // Since llndk_library has dependency to its implementation library, // we can safely access stubsVersionsFor() with its baseModuleName. versions := stubsVersionsFor(mctx.Config())[c.BaseModuleName()] Loading @@ -1610,18 +1620,11 @@ func VersionMutator(mctx android.BottomUpMutatorContext) { return } mctx.CreateVariations("") return } if genrule, ok := mctx.Module().(*genrule.Module); ok { if _, ok := genrule.Extra.(*GenruleExtraProperties); ok { if VersionVariantAvailable(genrule) { mctx.CreateVariations("") mctx.CreateLocalVariations("") mctx.AliasVariation("") return } } } } // maybeInjectBoringSSLHash adds a rule to run bssl_inject_hash on the output file if the module has the // inject_bssl_hash or if any static library dependencies have inject_bssl_hash set. It returns the output path Loading