diff --git a/Android.bp b/Android.bp index e39489245..c87903f02 100644 --- a/Android.bp +++ b/Android.bp @@ -47,6 +47,7 @@ bootstrap_go_package { ], srcs: [ "android/androidmk.go", + "android/api_levels.go", "android/arch.go", "android/config.go", "android/defaults.go", diff --git a/android/api_levels.go b/android/api_levels.go new file mode 100644 index 000000000..c77ced16e --- /dev/null +++ b/android/api_levels.go @@ -0,0 +1,63 @@ +// Copyright 2017 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package android + +import ( + "encoding/json" + + "github.com/google/blueprint" +) + +func init() { + RegisterSingletonType("api_levels", ApiLevelsSingleton) +} + +func ApiLevelsSingleton() blueprint.Singleton { + return &apiLevelsSingleton{} +} + +type apiLevelsSingleton struct{} + +func createApiLevelsJson(ctx blueprint.SingletonContext, file string, + apiLevelsMap map[string]int) { + + jsonStr, err := json.Marshal(apiLevelsMap) + if err != nil { + ctx.Errorf(err.Error()) + } + + ctx.Build(pctx, blueprint.BuildParams{ + Rule: WriteFile, + Outputs: []string{file}, + Args: map[string]string{ + "content": string(jsonStr[:]), + }, + }) +} + +func GetApiLevelsJson(ctx PathContext) Path { + return PathForOutput(ctx, "api_levels.json") +} + +func (a *apiLevelsSingleton) GenerateBuildActions(ctx blueprint.SingletonContext) { + baseApiLevel := 9000 + apiLevelsMap := map[string]int{} + for i, codename := range ctx.Config().(Config).PlatformVersionAllCodenames() { + apiLevelsMap[codename] = baseApiLevel + i + } + + apiLevelsJson := GetApiLevelsJson(ctx) + createApiLevelsJson(ctx, apiLevelsJson.String(), apiLevelsMap) +} diff --git a/android/config.go b/android/config.go index 686eeb8ec..3c2548512 100644 --- a/android/config.go +++ b/android/config.go @@ -353,6 +353,10 @@ func (c *config) PlatformSdkVersion() string { return strconv.Itoa(c.PlatformSdkVersionInt()) } +func (c *config) PlatformVersionAllCodenames() []string { + return c.ProductVariables.Platform_version_all_codenames +} + func (c *config) BuildNumber() string { return "000000" } diff --git a/android/defs.go b/android/defs.go index d7e2a9f72..6f4631625 100644 --- a/android/defs.go +++ b/android/defs.go @@ -80,6 +80,13 @@ var ( Description: "concatenate licenses $out", }) + WriteFile = pctx.AndroidStaticRule("WriteFile", + blueprint.RuleParams{ + Command: "echo '$content' > $out", + Description: "writing file $out", + }, + "content") + // Used only when USE_GOMA=true is set, to restrict non-goma jobs to the local parallelism value localPool = blueprint.NewBuiltinPool("local_pool") ) diff --git a/android/variable.go b/android/variable.go index c5b957be5..b0ab2d0cc 100644 --- a/android/variable.go +++ b/android/variable.go @@ -82,7 +82,8 @@ type productVariables struct { // Suffix to add to generated Makefiles Make_suffix *string `json:",omitempty"` - Platform_sdk_version *int `json:",omitempty"` + Platform_sdk_version *int `json:",omitempty"` + Platform_version_all_codenames []string `json:",omitempty"` DeviceName *string `json:",omitempty"` DeviceArch *string `json:",omitempty"`