diff --git a/android/config.go b/android/config.go index c737b7092..abb07ce56 100644 --- a/android/config.go +++ b/android/config.go @@ -900,6 +900,10 @@ func (c *config) NdkAbis() bool { return Bool(c.productVariables.Ndk_abis) } +func (c *config) ExcludeDraftNdkApis() bool { + return Bool(c.productVariables.Exclude_draft_ndk_apis) +} + func (c *config) FlattenApex() bool { return Bool(c.productVariables.FlattenApex) } diff --git a/android/variable.go b/android/variable.go index 0b344f996..453477455 100644 --- a/android/variable.go +++ b/android/variable.go @@ -258,7 +258,8 @@ type productVariables struct { VendorVars map[string]map[string]string `json:",omitempty"` - Ndk_abis *bool `json:",omitempty"` + Ndk_abis *bool `json:",omitempty"` + Exclude_draft_ndk_apis *bool `json:",omitempty"` FlattenApex *bool `json:",omitempty"` } diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go index 8177ff108..504a6a0ea 100644 --- a/cc/ndk_headers.go +++ b/cc/ndk_headers.go @@ -77,6 +77,11 @@ type headerProperties struct { // Path to the NOTICE file associated with the headers. License *string + + // True if this API is not yet ready to be shipped in the NDK. It will be + // available in the platform for testing, but will be excluded from the + // sysroot provided to the NDK proper. + Draft bool } type headerModule struct { @@ -182,6 +187,11 @@ type versionedHeaderProperties struct { // Path to the NOTICE file associated with the headers. License *string + + // True if this API is not yet ready to be shipped in the NDK. It will be + // available in the platform for testing, but will be excluded from the + // sysroot provided to the NDK proper. + Draft bool } // Like ndk_headers, but preprocesses the headers with the bionic versioner: @@ -309,6 +319,11 @@ type preprocessedHeadersProperties struct { // Path to the NOTICE file associated with the headers. License *string + + // True if this API is not yet ready to be shipped in the NDK. It will be + // available in the platform for testing, but will be excluded from the + // sysroot provided to the NDK proper. + Draft bool } type preprocessedHeadersModule struct { diff --git a/cc/ndk_library.go b/cc/ndk_library.go index 63d9f2994..53fe314b7 100644 --- a/cc/ndk_library.go +++ b/cc/ndk_library.go @@ -91,6 +91,11 @@ type libraryProperties struct { // Private property for use by the mutator that splits per-API level. ApiLevel string `blueprint:"mutated"` + + // True if this API is not yet ready to be shipped in the NDK. It will be + // available in the platform for testing, but will be excluded from the + // sysroot provided to the NDK proper. + Draft bool } type stubDecorator struct { diff --git a/cc/ndk_sysroot.go b/cc/ndk_sysroot.go index 80b5c6ada..9265bffaf 100644 --- a/cc/ndk_sysroot.go +++ b/cc/ndk_sysroot.go @@ -104,22 +104,38 @@ func (n *ndkSingleton) GenerateBuildActions(ctx android.SingletonContext) { } if m, ok := module.(*headerModule); ok { + if ctx.Config().ExcludeDraftNdkApis() && m.properties.Draft { + return + } + installPaths = append(installPaths, m.installPaths...) licensePaths = append(licensePaths, m.licensePath) } if m, ok := module.(*versionedHeaderModule); ok { + if ctx.Config().ExcludeDraftNdkApis() && m.properties.Draft { + return + } + installPaths = append(installPaths, m.installPaths...) licensePaths = append(licensePaths, m.licensePath) } if m, ok := module.(*preprocessedHeadersModule); ok { + if ctx.Config().ExcludeDraftNdkApis() && m.properties.Draft { + return + } + installPaths = append(installPaths, m.installPaths...) licensePaths = append(licensePaths, m.licensePath) } if m, ok := module.(*Module); ok { if installer, ok := m.installer.(*stubDecorator); ok { + if ctx.Config().ExcludeDraftNdkApis() && + installer.properties.Draft { + return + } installPaths = append(installPaths, installer.installPath) } diff --git a/scripts/build-ndk-prebuilts.sh b/scripts/build-ndk-prebuilts.sh index 81f856421..947458a62 100755 --- a/scripts/build-ndk-prebuilts.sh +++ b/scripts/build-ndk-prebuilts.sh @@ -48,7 +48,8 @@ cat > ${SOONG_OUT}/soong.variables << EOF "Malloc_not_svelte": false, "Safestack": false, - "Ndk_abis": true + "Ndk_abis": true, + "Exclude_draft_ndk_apis": true } EOF m --skip-make ${SOONG_OUT}/ndk.timestamp