Merge changes from topic "future_symbol"
* changes: API availability should be checked using __builtin_available __ANDROID_API__ tracks min_sdk_version
This commit is contained in:
47
cc/cc.go
47
cc/cc.go
@@ -256,11 +256,27 @@ type BaseProperties struct {
|
|||||||
// Deprecated. true is the default, false is invalid.
|
// Deprecated. true is the default, false is invalid.
|
||||||
Clang *bool `android:"arch_variant"`
|
Clang *bool `android:"arch_variant"`
|
||||||
|
|
||||||
// Minimum sdk version supported when compiling against the ndk. Setting this property causes
|
// The API level that this module is built against. The APIs of this API level will be
|
||||||
// two variants to be built, one for the platform and one for apps.
|
// visible at build time, but use of any APIs newer than min_sdk_version will render the
|
||||||
|
// module unloadable on older devices. In the future it will be possible to weakly-link new
|
||||||
|
// APIs, making the behavior match Java: such modules will load on older devices, but
|
||||||
|
// calling new APIs on devices that do not support them will result in a crash.
|
||||||
|
//
|
||||||
|
// This property has the same behavior as sdk_version does for Java modules. For those
|
||||||
|
// familiar with Android Gradle, the property behaves similarly to how compileSdkVersion
|
||||||
|
// does for Java code.
|
||||||
|
//
|
||||||
|
// In addition, setting this property causes two variants to be built, one for the platform
|
||||||
|
// and one for apps.
|
||||||
Sdk_version *string
|
Sdk_version *string
|
||||||
|
|
||||||
// Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
|
// Minimum OS API level supported by this C or C++ module. This property becomes the value
|
||||||
|
// of the __ANDROID_API__ macro. When the C or C++ module is included in an APEX or an APK,
|
||||||
|
// this property is also used to ensure that the min_sdk_version of the containing module is
|
||||||
|
// not older (i.e. less) than this module's min_sdk_version. When not set, this property
|
||||||
|
// defaults to the value of sdk_version. When this is set to "apex_inherit", this tracks
|
||||||
|
// min_sdk_version of the containing APEX. When the module
|
||||||
|
// is not built for an APEX, "apex_inherit" defaults to sdk_version.
|
||||||
Min_sdk_version *string
|
Min_sdk_version *string
|
||||||
|
|
||||||
// If true, always create an sdk variant and don't create a platform variant.
|
// If true, always create an sdk variant and don't create a platform variant.
|
||||||
@@ -441,6 +457,8 @@ type ModuleContextIntf interface {
|
|||||||
canUseSdk() bool
|
canUseSdk() bool
|
||||||
useSdk() bool
|
useSdk() bool
|
||||||
sdkVersion() string
|
sdkVersion() string
|
||||||
|
minSdkVersion() string
|
||||||
|
isSdkVariant() bool
|
||||||
useVndk() bool
|
useVndk() bool
|
||||||
isNdk(config android.Config) bool
|
isNdk(config android.Config) bool
|
||||||
IsLlndk() bool
|
IsLlndk() bool
|
||||||
@@ -1320,6 +1338,29 @@ func (ctx *moduleContextImpl) sdkVersion() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ctx *moduleContextImpl) minSdkVersion() string {
|
||||||
|
ver := ctx.mod.MinSdkVersion()
|
||||||
|
if ver == "apex_inherit" && !ctx.isForPlatform() {
|
||||||
|
ver = ctx.apexSdkVersion().String()
|
||||||
|
}
|
||||||
|
if ver == "apex_inherit" || ver == "" {
|
||||||
|
ver = ctx.sdkVersion()
|
||||||
|
}
|
||||||
|
// Also make sure that minSdkVersion is not greater than sdkVersion, if they are both numbers
|
||||||
|
sdkVersionInt, err := strconv.Atoi(ctx.sdkVersion())
|
||||||
|
minSdkVersionInt, err2 := strconv.Atoi(ver)
|
||||||
|
if err == nil && err2 == nil {
|
||||||
|
if sdkVersionInt < minSdkVersionInt {
|
||||||
|
return strconv.Itoa(sdkVersionInt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ver
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ctx *moduleContextImpl) isSdkVariant() bool {
|
||||||
|
return ctx.mod.IsSdkVariant()
|
||||||
|
}
|
||||||
|
|
||||||
func (ctx *moduleContextImpl) useVndk() bool {
|
func (ctx *moduleContextImpl) useVndk() bool {
|
||||||
return ctx.mod.UseVndk()
|
return ctx.mod.UseVndk()
|
||||||
}
|
}
|
||||||
|
@@ -404,7 +404,12 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps
|
|||||||
|
|
||||||
target := "-target " + tc.ClangTriple()
|
target := "-target " + tc.ClangTriple()
|
||||||
if ctx.Os().Class == android.Device {
|
if ctx.Os().Class == android.Device {
|
||||||
version := ctx.sdkVersion()
|
// When built for the non-updateble part of platform, minSdkVersion doesn't matter.
|
||||||
|
// It matters only when building we are building for modules that can be unbundled.
|
||||||
|
version := "current"
|
||||||
|
if !ctx.isForPlatform() || ctx.isSdkVariant() {
|
||||||
|
version = ctx.minSdkVersion()
|
||||||
|
}
|
||||||
if version == "" || version == "current" {
|
if version == "" || version == "current" {
|
||||||
target += strconv.Itoa(android.FutureApiLevelInt)
|
target += strconv.Itoa(android.FutureApiLevelInt)
|
||||||
} else {
|
} else {
|
||||||
|
@@ -141,6 +141,13 @@ func init() {
|
|||||||
// Warnings from clang-10
|
// Warnings from clang-10
|
||||||
// Nested and array designated initialization is nice to have.
|
// Nested and array designated initialization is nice to have.
|
||||||
"-Wno-c99-designator",
|
"-Wno-c99-designator",
|
||||||
|
|
||||||
|
// Calls to the APIs that are newer than the min sdk version of the caller should be
|
||||||
|
// guarded with __builtin_available.
|
||||||
|
"-Wunguarded-availability",
|
||||||
|
// This macro allows the bionic versioning.h to indirectly determine whether the
|
||||||
|
// option -Wunguarded-availability is on or not.
|
||||||
|
"-D__ANDROID_UNGUARDED_AVAILABILITY__",
|
||||||
}, " "))
|
}, " "))
|
||||||
|
|
||||||
pctx.StaticVariable("ClangExtraCppflags", strings.Join([]string{
|
pctx.StaticVariable("ClangExtraCppflags", strings.Join([]string{
|
||||||
|
Reference in New Issue
Block a user