Add basic VNDK support in Soong

am: d2ede879b5

Change-Id: I2441b81dfd6637d4af6b5d748601494498774050
This commit is contained in:
Dan Willemsen 2016-11-29 20:42:39 +00:00 committed by android-build-merger
commit c415039ced
10 changed files with 57 additions and 7 deletions

View file

@ -424,3 +424,10 @@ func (c *deviceConfig) Arches() []Arch {
}
return arches
}
func (c *deviceConfig) VndkVersion() string {
if c.config.ProductVariables.DeviceVndkVersion == nil {
return ""
}
return *c.config.ProductVariables.DeviceVndkVersion
}

View file

@ -87,6 +87,7 @@ type productVariables struct {
DeviceCpuVariant *string `json:",omitempty"`
DeviceAbi *[]string `json:",omitempty"`
DeviceUsesClang *bool `json:",omitempty"`
DeviceVndkVersion *string `json:",omitempty"`
DeviceSecondaryArch *string `json:",omitempty"`
DeviceSecondaryArchVariant *string `json:",omitempty"`

View file

@ -77,6 +77,7 @@ var standardProperties = map[string]struct {
"LOCAL_NO_STANDARD_LIBRARIES": {"no_standard_libraries", bpparser.BoolType},
"LOCAL_PACK_MODULE_RELOCATIONS": {"pack_relocations", bpparser.BoolType},
"LOCAL_TIDY": {"tidy", bpparser.BoolType},
"LOCAL_USE_VNDK": {"use_vndk", bpparser.BoolType},
"LOCAL_EXPORT_PACKAGE_RESOURCES": {"export_package_resources", bpparser.BoolType},
}

View file

@ -59,6 +59,9 @@ func (c *Module) AndroidMk() (ret android.AndroidMkData, err error) {
if c.Target().Os == android.Android && c.Properties.Sdk_version != "" {
fmt.Fprintln(w, "LOCAL_SDK_VERSION := "+c.Properties.Sdk_version)
fmt.Fprintln(w, "LOCAL_NDK_STL_VARIANT := none")
} else if c.Target().Os == android.Android && c.Properties.Use_vndk {
fmt.Fprintln(w, "LOCAL_USE_VNDK := true")
fmt.Fprintln(w, "LOCAL_NDK_STL_VARIANT := none")
} else {
// These are already included in LOCAL_SHARED_LIBRARIES
fmt.Fprintln(w, "LOCAL_CXX_STL := none")

View file

@ -93,7 +93,7 @@ func (binary *binaryDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps
deps = binary.baseLinker.linkerDeps(ctx, deps)
if ctx.toolchain().Bionic() {
if !Bool(binary.baseLinker.Properties.Nocrt) {
if !ctx.sdk() {
if !ctx.sdk() && !ctx.vndk() {
if binary.static() {
deps.CrtBegin = "crtbegin_static"
} else {

View file

@ -125,6 +125,9 @@ type BaseProperties struct {
// Minimum sdk version supported when compiling against the ndk
Sdk_version string
// Whether to compile against the VNDK
Use_vndk bool
// don't insert default compiler flags into asflags, cflags,
// cppflags, conlyflags, ldflags, or include_dirs
No_default_compiler_flags *bool
@ -132,6 +135,7 @@ type BaseProperties struct {
AndroidMkSharedLibs []string `blueprint:"mutated"`
HideFromMake bool `blueprint:"mutated"`
PreventInstall bool `blueprint:"mutated"`
Vndk_version string `blueprint:"mutated"`
}
type UnusedProperties struct {
@ -147,6 +151,7 @@ type ModuleContextIntf interface {
noDefaultCompilerFlags() bool
sdk() bool
sdkVersion() string
vndk() bool
selectedStl() string
baseModuleName() string
}
@ -345,11 +350,22 @@ func (ctx *moduleContextImpl) sdk() bool {
func (ctx *moduleContextImpl) sdkVersion() string {
if ctx.ctx.Device() {
if ctx.mod.Properties.Use_vndk {
return ctx.mod.Properties.Vndk_version
} else {
return ctx.mod.Properties.Sdk_version
}
}
return ""
}
func (ctx *moduleContextImpl) vndk() bool {
if ctx.ctx.Device() {
return ctx.mod.Properties.Use_vndk
}
return false
}
func (ctx *moduleContextImpl) selectedStl() string {
if stl := ctx.mod.stl; stl != nil {
return stl.Properties.SelectedStl
@ -493,11 +509,22 @@ func (c *Module) begin(ctx BaseModuleContext) {
feature.begin(ctx)
}
if ctx.sdk() {
if ctx.vndk() {
ctx.PropertyErrorf("use_vndk",
"sdk_version and use_vndk cannot be used at the same time")
}
version, err := normalizeNdkApiLevel(ctx.sdkVersion(), ctx.Arch())
if err != nil {
ctx.PropertyErrorf("sdk_version", err.Error())
}
c.Properties.Sdk_version = version
} else if ctx.vndk() {
version, err := normalizeNdkApiLevel(ctx.DeviceConfig().VndkVersion(), ctx.Arch())
if err != nil {
ctx.ModuleErrorf("Bad BOARD_VNDK_VERSION: %s", err.Error())
}
c.Properties.Vndk_version = version
}
}
@ -579,7 +606,7 @@ func (c *Module) DepsMutator(actx android.BottomUpMutatorContext) {
variantNdkLibs := []string{}
variantLateNdkLibs := []string{}
if ctx.sdk() {
if ctx.sdk() || ctx.vndk() {
version := ctx.sdkVersion()
// Rewrites the names of shared libraries into the names of the NDK

View file

@ -160,7 +160,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
}
if !ctx.noDefaultCompilerFlags() {
if !ctx.sdk() || ctx.Host() {
if !(ctx.sdk() || ctx.vndk()) || ctx.Host() {
flags.GlobalFlags = append(flags.GlobalFlags,
"${config.CommonGlobalIncludes}",
"${config.CommonGlobalSystemIncludes}",
@ -171,7 +171,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags) Flag
flags.GlobalFlags = append(flags.GlobalFlags, "-I"+android.PathForModuleSrc(ctx).String())
}
if ctx.sdk() {
if ctx.sdk() || ctx.vndk() {
// The NDK headers are installed to a common sysroot. While a more
// typical Soong approach would be to only make the headers for the
// library you're using available, we're trying to emulate the NDK
@ -354,7 +354,7 @@ func (compiler *baseCompiler) hasSrcExt(ext string) bool {
var gnuToCReplacer = strings.NewReplacer("gnu", "c")
func ndkPathDeps(ctx ModuleContext) android.Paths {
if ctx.sdk() {
if ctx.sdk() || ctx.vndk() {
// The NDK sysroot timestamp file depends on all the NDK sysroot files
// (headers and libraries).
return android.Paths{getNdkSysrootTimestampFile(ctx)}

View file

@ -163,3 +163,7 @@ func bionicHeaders(bionicArch, kernelArch string) string {
"-isystem bionic/libc/kernel/android/uapi",
}, " ")
}
func VndkLibraries() []string {
return []string{}
}

View file

@ -331,7 +331,7 @@ func (library *libraryDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) De
deps.SharedLibs = append(deps.SharedLibs, library.Properties.Static.Shared_libs...)
} else {
if ctx.toolchain().Bionic() && !Bool(library.baseLinker.Properties.Nocrt) {
if !ctx.sdk() {
if !ctx.sdk() && !ctx.vndk() {
deps.CrtBegin = "crtbegin_so"
deps.CrtEnd = "crtend_so"
} else {

View file

@ -45,6 +45,13 @@ func makeVarsProvider(ctx android.MakeVarsContext) {
ctx.Strict("GLOBAL_CLANG_CPPFLAGS_NO_OVERRIDE", "")
ctx.Strict("NDK_PREBUILT_SHARED_LIBRARIES", strings.Join(ndkPrebuiltSharedLibs, " "))
if ctx.Config().ProductVariables.DeviceVndkVersion != nil {
ctx.Strict("BOARD_VNDK_VERSION", *ctx.Config().ProductVariables.DeviceVndkVersion)
} else {
ctx.Strict("BOARD_VNDK_VERSION", "")
}
ctx.Strict("VNDK_LIBRARIES", strings.Join(config.VndkLibraries(), " "))
ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_CFLAGS", asanCflags)
ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_LDFLAGS", asanLdflags)
ctx.Strict("ADDRESS_SANITIZER_CONFIG_EXTRA_STATIC_LIBRARIES", asanLibs)