From 23d37e09e994a6a2744a6746f72998499d5eaf5f Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Wed, 28 Nov 2018 08:30:10 -0800 Subject: [PATCH] Allow NDK APIs to be marked as drafts. Draft APIs are available to the platform and to CTS to allow developers to iterate on an API, but hidden from the NDK artifacts to avoid releasing the API until it is ready. Test: Mark binder_ndk headers and library as drafts, make checkbuild, build-ndk-prebuilts.sh, verify missing from NDK artifact. Bug: http://b/120091134 Change-Id: I8685e92bdaaea581e17fe98e7a2bfb9388f9f132 --- android/config.go | 4 ++++ android/variable.go | 3 ++- cc/ndk_headers.go | 15 +++++++++++++++ cc/ndk_library.go | 5 +++++ cc/ndk_sysroot.go | 16 ++++++++++++++++ scripts/build-ndk-prebuilts.sh | 3 ++- 6 files changed, 44 insertions(+), 2 deletions(-) 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