aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2016-06-06 18:22:19 -0700
committerDan Willemsen <dwillemsen@google.com>2016-06-06 18:35:57 -0700
commit490a8dc2d5cd742a46926850beac8e96446c4be4 (patch)
tree06245072760813fee2b6168a904cb3f521a49668
parent0c41054beccd52c1bcc90347a74fd41a90d72f45 (diff)
downloadbuild_soong-490a8dc2d5cd742a46926850beac8e96446c4be4.tar.gz
build_soong-490a8dc2d5cd742a46926850beac8e96446c4be4.tar.bz2
build_soong-490a8dc2d5cd742a46926850beac8e96446c4be4.zip
Implement re-exporting of library headers
This matches LOCAL_EXPORT_(SHARED|STATIC)_LIBRARY_HEADERS in Make. Change-Id: Iede67e2c24a24cf51e68a50123299effbe4e4196
-rw-r--r--androidmk/cmd/androidmk/android.go36
-rw-r--r--cc/cc.go87
2 files changed, 84 insertions, 39 deletions
diff --git a/androidmk/cmd/androidmk/android.go b/androidmk/cmd/androidmk/android.go
index d4802744..8f4895b6 100644
--- a/androidmk/cmd/androidmk/android.go
+++ b/androidmk/cmd/androidmk/android.go
@@ -32,23 +32,25 @@ var standardProperties = map[string]struct {
"LOCAL_MODULE_RELATIVE_PATH": {"relative_install_path", bpparser.String},
// List properties
- "LOCAL_SRC_FILES_EXCLUDE": {"exclude_srcs", bpparser.List},
- "LOCAL_SHARED_LIBRARIES": {"shared_libs", bpparser.List},
- "LOCAL_STATIC_LIBRARIES": {"static_libs", bpparser.List},
- "LOCAL_WHOLE_STATIC_LIBRARIES": {"whole_static_libs", bpparser.List},
- "LOCAL_SYSTEM_SHARED_LIBRARIES": {"system_shared_libs", bpparser.List},
- "LOCAL_ASFLAGS": {"asflags", bpparser.List},
- "LOCAL_CLANG_ASFLAGS": {"clang_asflags", bpparser.List},
- "LOCAL_CFLAGS": {"cflags", bpparser.List},
- "LOCAL_CONLYFLAGS": {"conlyflags", bpparser.List},
- "LOCAL_CPPFLAGS": {"cppflags", bpparser.List},
- "LOCAL_REQUIRED_MODULES": {"required", bpparser.List},
- "LOCAL_MODULE_TAGS": {"tags", bpparser.List},
- "LOCAL_LDLIBS": {"host_ldlibs", bpparser.List},
- "LOCAL_CLANG_CFLAGS": {"clang_cflags", bpparser.List},
- "LOCAL_YACCFLAGS": {"yaccflags", bpparser.List},
- "LOCAL_SANITIZE_RECOVER": {"sanitize.recover", bpparser.List},
- "LOCAL_LOGTAGS_FILES": {"logtags", bpparser.List},
+ "LOCAL_SRC_FILES_EXCLUDE": {"exclude_srcs", bpparser.List},
+ "LOCAL_SHARED_LIBRARIES": {"shared_libs", bpparser.List},
+ "LOCAL_STATIC_LIBRARIES": {"static_libs", bpparser.List},
+ "LOCAL_WHOLE_STATIC_LIBRARIES": {"whole_static_libs", bpparser.List},
+ "LOCAL_SYSTEM_SHARED_LIBRARIES": {"system_shared_libs", bpparser.List},
+ "LOCAL_ASFLAGS": {"asflags", bpparser.List},
+ "LOCAL_CLANG_ASFLAGS": {"clang_asflags", bpparser.List},
+ "LOCAL_CFLAGS": {"cflags", bpparser.List},
+ "LOCAL_CONLYFLAGS": {"conlyflags", bpparser.List},
+ "LOCAL_CPPFLAGS": {"cppflags", bpparser.List},
+ "LOCAL_REQUIRED_MODULES": {"required", bpparser.List},
+ "LOCAL_MODULE_TAGS": {"tags", bpparser.List},
+ "LOCAL_LDLIBS": {"host_ldlibs", bpparser.List},
+ "LOCAL_CLANG_CFLAGS": {"clang_cflags", bpparser.List},
+ "LOCAL_YACCFLAGS": {"yaccflags", bpparser.List},
+ "LOCAL_SANITIZE_RECOVER": {"sanitize.recover", bpparser.List},
+ "LOCAL_LOGTAGS_FILES": {"logtags", bpparser.List},
+ "LOCAL_EXPORT_SHARED_LIBRARY_HEADERS": {"export_shared_lib_headers", bpparser.List},
+ "LOCAL_EXPORT_STATIC_LIBRARY_HEADERS": {"export_static_lib_headers", bpparser.List},
"LOCAL_JAVA_RESOURCE_DIRS": {"java_resource_dirs", bpparser.List},
"LOCAL_JAVACFLAGS": {"javacflags", bpparser.List},
diff --git a/cc/cc.go b/cc/cc.go
index 3cc0d0da..9acc48e8 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -182,6 +182,8 @@ type Deps struct {
SharedLibs, LateSharedLibs []string
StaticLibs, LateStaticLibs, WholeStaticLibs []string
+ ReexportSharedLibHeaders, ReexportStaticLibHeaders []string
+
ObjFiles []string
GeneratedSources []string
@@ -327,6 +329,14 @@ type BaseLinkerProperties struct {
// -l arguments to pass to linker for host-provided shared libraries
Host_ldlibs []string `android:"arch_variant"`
+
+ // list of shared libraries to re-export include directories from. Entries must be
+ // present in shared_libs.
+ Export_shared_lib_headers []string `android:"arch_variant"`
+
+ // list of static libraries to re-export include directories from. Entries must be
+ // present in static_libs.
+ Export_static_lib_headers []string `android:"arch_variant"`
}
type LibraryCompilerProperties struct {
@@ -493,20 +503,24 @@ type dependencyTag struct {
blueprint.BaseDependencyTag
name string
library bool
+
+ reexportFlags bool
}
var (
- sharedDepTag = dependencyTag{name: "shared", library: true}
- lateSharedDepTag = dependencyTag{name: "late shared", library: true}
- staticDepTag = dependencyTag{name: "static", library: true}
- lateStaticDepTag = dependencyTag{name: "late static", library: true}
- wholeStaticDepTag = dependencyTag{name: "whole static", library: true}
- genSourceDepTag = dependencyTag{name: "gen source"}
- genHeaderDepTag = dependencyTag{name: "gen header"}
- objDepTag = dependencyTag{name: "obj"}
- crtBeginDepTag = dependencyTag{name: "crtbegin"}
- crtEndDepTag = dependencyTag{name: "crtend"}
- reuseObjTag = dependencyTag{name: "reuse objects"}
+ sharedDepTag = dependencyTag{name: "shared", library: true}
+ sharedExportDepTag = dependencyTag{name: "shared", library: true, reexportFlags: true}
+ lateSharedDepTag = dependencyTag{name: "late shared", library: true}
+ staticDepTag = dependencyTag{name: "static", library: true}
+ staticExportDepTag = dependencyTag{name: "static", library: true, reexportFlags: true}
+ lateStaticDepTag = dependencyTag{name: "late static", library: true}
+ wholeStaticDepTag = dependencyTag{name: "whole static", library: true, reexportFlags: true}
+ genSourceDepTag = dependencyTag{name: "gen source"}
+ genHeaderDepTag = dependencyTag{name: "gen header"}
+ objDepTag = dependencyTag{name: "obj"}
+ crtBeginDepTag = dependencyTag{name: "crtbegin"}
+ crtEndDepTag = dependencyTag{name: "crtend"}
+ reuseObjTag = dependencyTag{name: "reuse objects"}
)
// Module contains the properties and members used by all C/C++ module types, and implements
@@ -783,6 +797,18 @@ func (c *Module) deps(ctx BaseModuleContext) Deps {
deps.SharedLibs = lastUniqueElements(deps.SharedLibs)
deps.LateSharedLibs = lastUniqueElements(deps.LateSharedLibs)
+ for _, lib := range deps.ReexportSharedLibHeaders {
+ if !inList(lib, deps.SharedLibs) {
+ ctx.PropertyErrorf("export_shared_lib_headers", "Shared library not in shared_libs: '%s'", lib)
+ }
+ }
+
+ for _, lib := range deps.ReexportStaticLibHeaders {
+ if !inList(lib, deps.StaticLibs) {
+ ctx.PropertyErrorf("export_static_lib_headers", "Static library not in static_libs: '%s'", lib)
+ }
+ }
+
return deps
}
@@ -808,14 +834,26 @@ func (c *Module) depsMutator(actx android.BottomUpMutatorContext) {
actx.AddVariationDependencies([]blueprint.Variation{{"link", "static"}}, wholeStaticDepTag,
deps.WholeStaticLibs...)
- actx.AddVariationDependencies([]blueprint.Variation{{"link", "static"}}, staticDepTag,
- deps.StaticLibs...)
+ for _, lib := range deps.StaticLibs {
+ depTag := staticDepTag
+ if inList(lib, deps.ReexportStaticLibHeaders) {
+ depTag = staticExportDepTag
+ }
+ actx.AddVariationDependencies([]blueprint.Variation{{"link", "static"}}, depTag,
+ deps.StaticLibs...)
+ }
actx.AddVariationDependencies([]blueprint.Variation{{"link", "static"}}, lateStaticDepTag,
deps.LateStaticLibs...)
- actx.AddVariationDependencies([]blueprint.Variation{{"link", "shared"}}, sharedDepTag,
- deps.SharedLibs...)
+ for _, lib := range deps.SharedLibs {
+ depTag := sharedDepTag
+ if inList(lib, deps.ReexportSharedLibHeaders) {
+ depTag = sharedExportDepTag
+ }
+ actx.AddVariationDependencies([]blueprint.Variation{{"link", "shared"}}, depTag,
+ deps.SharedLibs...)
+ }
actx.AddVariationDependencies([]blueprint.Variation{{"link", "shared"}}, lateSharedDepTag,
deps.LateSharedLibs...)
@@ -925,28 +963,30 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
return
}
- var cflags []string
- if t, _ := tag.(dependencyTag); t.library {
+ if t, ok := tag.(dependencyTag); ok && t.library {
if i, ok := c.linker.(exportedFlagsProducer); ok {
- cflags = i.exportedFlags()
+ cflags := i.exportedFlags()
depPaths.Cflags = append(depPaths.Cflags, cflags...)
+
+ if t.reexportFlags {
+ depPaths.ReexportedCflags = append(depPaths.ReexportedCflags, cflags...)
+ }
}
}
var depPtr *android.Paths
switch tag {
- case sharedDepTag:
+ case sharedDepTag, sharedExportDepTag:
depPtr = &depPaths.SharedLibs
case lateSharedDepTag:
depPtr = &depPaths.LateSharedLibs
- case staticDepTag:
+ case staticDepTag, staticExportDepTag:
depPtr = &depPaths.StaticLibs
case lateStaticDepTag:
depPtr = &depPaths.LateStaticLibs
case wholeStaticDepTag:
depPtr = &depPaths.WholeStaticLibs
- depPaths.ReexportedCflags = append(depPaths.ReexportedCflags, cflags...)
staticLib, _ := c.linker.(*libraryLinker)
if staticLib == nil || !staticLib.static() {
ctx.ModuleErrorf("module %q not a static library", ctx.OtherModuleName(m))
@@ -969,7 +1009,7 @@ func (c *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
case crtEndDepTag:
depPaths.CrtEnd = c.outputFile
default:
- panic(fmt.Errorf("unknown dependency tag: %s", ctx.OtherModuleDependencyTag(m)))
+ panic(fmt.Errorf("unknown dependency tag: %s", tag))
}
if depPtr != nil {
@@ -1223,6 +1263,9 @@ func (linker *baseLinker) deps(ctx BaseModuleContext, deps Deps) Deps {
deps.StaticLibs = append(deps.StaticLibs, linker.Properties.Static_libs...)
deps.SharedLibs = append(deps.SharedLibs, linker.Properties.Shared_libs...)
+ deps.ReexportStaticLibHeaders = append(deps.ReexportStaticLibHeaders, linker.Properties.Export_static_lib_headers...)
+ deps.ReexportSharedLibHeaders = append(deps.ReexportSharedLibHeaders, linker.Properties.Export_shared_lib_headers...)
+
if ctx.ModuleName() != "libcompiler_rt-extras" {
deps.StaticLibs = append(deps.StaticLibs, "libcompiler_rt-extras")
}