diff --git a/Android.bp b/Android.bp index 1b93c0d2f..ef42c84c4 100644 --- a/Android.bp +++ b/Android.bp @@ -435,6 +435,7 @@ toolchain_library { src: "prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/lib/libwinpthread.a", }, }, + notice: "../../prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/licenses/mingw-w64-svn-r5861/mingw-w64-libraries/winpthreads/COPYING", } toolchain_library { diff --git a/android/androidmk.go b/android/androidmk.go index 703052315..493ba97e4 100644 --- a/android/androidmk.go +++ b/android/androidmk.go @@ -275,9 +275,10 @@ func translateAndroidModule(ctx SingletonContext, w io.Writer, mod blueprint.Mod if amod.commonProperties.Owner != nil { fmt.Fprintln(&data.preamble, "LOCAL_MODULE_OWNER :=", *amod.commonProperties.Owner) } - if amod.commonProperties.Notice != nil { - fmt.Fprintln(&data.preamble, "LOCAL_NOTICE_FILE :=", "$(LOCAL_PATH)/"+*amod.commonProperties.Notice) - } + } + + if amod.commonProperties.Notice != nil { + fmt.Fprintln(&data.preamble, "LOCAL_NOTICE_FILE :=", "$(LOCAL_PATH)/"+*amod.commonProperties.Notice) } if host { diff --git a/cc/androidmk.go b/cc/androidmk.go index 324b5bc38..69ed77183 100644 --- a/cc/androidmk.go +++ b/cc/androidmk.go @@ -70,6 +70,12 @@ func (c *Module) AndroidMk() android.AndroidMkData { if len(c.Properties.AndroidMkSharedLibs) > 0 { fmt.Fprintln(w, "LOCAL_SHARED_LIBRARIES := "+strings.Join(c.Properties.AndroidMkSharedLibs, " ")) } + if len(c.Properties.AndroidMkStaticLibs) > 0 { + fmt.Fprintln(w, "LOCAL_STATIC_LIBRARIES := "+strings.Join(c.Properties.AndroidMkStaticLibs, " ")) + } + if len(c.Properties.AndroidMkWholeStaticLibs) > 0 { + fmt.Fprintln(w, "LOCAL_WHOLE_STATIC_LIBRARIES := "+strings.Join(c.Properties.AndroidMkWholeStaticLibs, " ")) + } fmt.Fprintln(w, "LOCAL_SOONG_LINK_TYPE :=", c.getMakeLinkType()) if c.useVndk() { fmt.Fprintln(w, "LOCAL_USE_VNDK := true") diff --git a/cc/cc.go b/cc/cc.go index 05695637a..66018d0f9 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -176,10 +176,12 @@ type BaseProperties struct { // Minimum sdk version supported when compiling against the ndk Sdk_version *string - AndroidMkSharedLibs []string `blueprint:"mutated"` - AndroidMkRuntimeLibs []string `blueprint:"mutated"` - HideFromMake bool `blueprint:"mutated"` - PreventInstall bool `blueprint:"mutated"` + AndroidMkSharedLibs []string `blueprint:"mutated"` + AndroidMkStaticLibs []string `blueprint:"mutated"` + AndroidMkRuntimeLibs []string `blueprint:"mutated"` + AndroidMkWholeStaticLibs []string `blueprint:"mutated"` + HideFromMake bool `blueprint:"mutated"` + PreventInstall bool `blueprint:"mutated"` UseVndk bool `blueprint:"mutated"` @@ -1479,9 +1481,15 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps { // they merely serve as Make dependencies and do not affect this lib itself. c.Properties.AndroidMkSharedLibs = append( c.Properties.AndroidMkSharedLibs, makeLibName(depName)) + case staticDepTag, staticExportDepTag, lateStaticDepTag: + c.Properties.AndroidMkStaticLibs = append( + c.Properties.AndroidMkStaticLibs, makeLibName(depName)) case runtimeDepTag: c.Properties.AndroidMkRuntimeLibs = append( c.Properties.AndroidMkRuntimeLibs, makeLibName(depName)) + case wholeStaticDepTag: + c.Properties.AndroidMkWholeStaticLibs = append( + c.Properties.AndroidMkWholeStaticLibs, makeLibName(depName)) } }) diff --git a/cc/cc_test.go b/cc/cc_test.go index e4904f23d..e0cc96302 100644 --- a/cc/cc_test.go +++ b/cc/cc_test.go @@ -1549,6 +1549,43 @@ func TestRuntimeLibsNoVndk(t *testing.T) { checkRuntimeLibs(t, []string{"libvendor_available1", "libvendor1"}, module) } +func checkStaticLibs(t *testing.T, expected []string, module *Module) { + actual := module.Properties.AndroidMkStaticLibs + if !reflect.DeepEqual(actual, expected) { + t.Errorf("incorrect static_libs"+ + "\nactual: %v"+ + "\nexpected: %v", + actual, + expected, + ) + } +} + +const staticLibAndroidBp = ` + cc_library { + name: "lib1", + } + cc_library { + name: "lib2", + static_libs: ["lib1"], + } +` + +func TestStaticLibDepExport(t *testing.T) { + ctx := testCc(t, staticLibAndroidBp) + + // Check the shared version of lib2. + variant := "android_arm64_armv8-a_core_shared" + module := ctx.ModuleForTests("lib2", variant).Module().(*Module) + checkStaticLibs(t, []string{"lib1", "libclang_rt.builtins-aarch64-android", "libatomic", "libgcc"}, module) + + // Check the static version of lib2. + variant = "android_arm64_armv8-a_core_static" + module = ctx.ModuleForTests("lib2", variant).Module().(*Module) + // libc++_static is linked additionally. + checkStaticLibs(t, []string{"lib1", "libc++_static", "libclang_rt.builtins-aarch64-android", "libatomic", "libgcc"}, module) +} + var compilerFlagsTestCases = []struct { in string out bool