blob: 70b251b612efadfbef74e8157cbab362e0f10f2a [file] [log] [blame]
Dan Albert30c9d6e2017-03-28 14:54:55 -07001// Copyright 2017 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package android
16
17import (
18 "encoding/json"
Colin Cross67a5c132017-05-09 13:45:28 -070019 "path/filepath"
Dan Albert30c9d6e2017-03-28 14:54:55 -070020
21 "github.com/google/blueprint"
22)
23
24func init() {
25 RegisterSingletonType("api_levels", ApiLevelsSingleton)
26}
27
28func ApiLevelsSingleton() blueprint.Singleton {
29 return &apiLevelsSingleton{}
30}
31
32type apiLevelsSingleton struct{}
33
34func createApiLevelsJson(ctx blueprint.SingletonContext, file string,
35 apiLevelsMap map[string]int) {
36
37 jsonStr, err := json.Marshal(apiLevelsMap)
38 if err != nil {
39 ctx.Errorf(err.Error())
40 }
41
42 ctx.Build(pctx, blueprint.BuildParams{
Colin Cross67a5c132017-05-09 13:45:28 -070043 Rule: WriteFile,
44 Description: "generate " + filepath.Base(file),
45 Outputs: []string{file},
Dan Albert30c9d6e2017-03-28 14:54:55 -070046 Args: map[string]string{
47 "content": string(jsonStr[:]),
48 },
49 })
50}
51
52func GetApiLevelsJson(ctx PathContext) Path {
53 return PathForOutput(ctx, "api_levels.json")
54}
55
56func (a *apiLevelsSingleton) GenerateBuildActions(ctx blueprint.SingletonContext) {
57 baseApiLevel := 9000
58 apiLevelsMap := map[string]int{}
59 for i, codename := range ctx.Config().(Config).PlatformVersionAllCodenames() {
60 apiLevelsMap[codename] = baseApiLevel + i
61 }
62
63 apiLevelsJson := GetApiLevelsJson(ctx)
64 createApiLevelsJson(ctx, apiLevelsJson.String(), apiLevelsMap)
65}