blob: 4c9445080416ea751b08e250b29f24e8d192d3dd [file] [log] [blame]
Nan Zhang5323f8e2017-05-10 13:37:54 -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 python
16
17import (
18 "android/soong/android"
19 "fmt"
20 "io"
21 "path/filepath"
22 "strings"
23)
24
25type subAndroidMkProvider interface {
Nan Zhangd4e641b2017-07-12 12:55:28 -070026 AndroidMk(*Module, *android.AndroidMkData)
Nan Zhang5323f8e2017-05-10 13:37:54 -070027}
28
Nan Zhangd4e641b2017-07-12 12:55:28 -070029func (p *Module) subAndroidMk(data *android.AndroidMkData, obj interface{}) {
Nan Zhang5323f8e2017-05-10 13:37:54 -070030 if p.subAndroidMkOnce == nil {
31 p.subAndroidMkOnce = make(map[subAndroidMkProvider]bool)
32 }
33 if androidmk, ok := obj.(subAndroidMkProvider); ok {
34 if !p.subAndroidMkOnce[androidmk] {
35 p.subAndroidMkOnce[androidmk] = true
36 androidmk.AndroidMk(p, data)
37 }
38 }
39}
40
Nan Zhangd4e641b2017-07-12 12:55:28 -070041func (p *Module) AndroidMk() android.AndroidMkData {
Colin Crossa18e9cf2017-08-10 17:00:19 -070042 ret := android.AndroidMkData{}
43
Nan Zhang5323f8e2017-05-10 13:37:54 -070044 p.subAndroidMk(&ret, p.installer)
45
Colin Crossa18e9cf2017-08-10 17:00:19 -070046 return ret
Nan Zhang5323f8e2017-05-10 13:37:54 -070047}
48
Nan Zhangd4e641b2017-07-12 12:55:28 -070049func (p *binaryDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) {
Nan Zhang5323f8e2017-05-10 13:37:54 -070050 ret.Class = "EXECUTABLES"
Nan Zhangc9c6cb72017-11-03 16:54:05 -070051
52 ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
53 if len(p.binaryProperties.Test_suites) > 0 {
54 fmt.Fprintln(w, "LOCAL_COMPATIBILITY_SUITE :=",
55 strings.Join(p.binaryProperties.Test_suites, " "))
56 }
57 })
Nan Zhangd4e641b2017-07-12 12:55:28 -070058 base.subAndroidMk(ret, p.baseInstaller)
Nan Zhang5323f8e2017-05-10 13:37:54 -070059}
60
Nan Zhangd4e641b2017-07-12 12:55:28 -070061func (p *testDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) {
Nan Zhang5323f8e2017-05-10 13:37:54 -070062 ret.Class = "NATIVE_TESTS"
Nan Zhangc9c6cb72017-11-03 16:54:05 -070063
64 ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
65 if len(p.binaryDecorator.binaryProperties.Test_suites) > 0 {
66 fmt.Fprintln(w, "LOCAL_COMPATIBILITY_SUITE :=",
67 strings.Join(p.binaryDecorator.binaryProperties.Test_suites, " "))
68 }
69 })
Nan Zhangd4e641b2017-07-12 12:55:28 -070070 base.subAndroidMk(ret, p.binaryDecorator.baseInstaller)
Nan Zhang5323f8e2017-05-10 13:37:54 -070071}
72
Nan Zhangd4e641b2017-07-12 12:55:28 -070073func (installer *pythonInstaller) AndroidMk(base *Module, ret *android.AndroidMkData) {
Nan Zhang5323f8e2017-05-10 13:37:54 -070074 // Soong installation is only supported for host modules. Have Make
75 // installation trigger Soong installation.
76 if base.Target().Os.Class == android.Host {
77 ret.OutputFile = android.OptionalPathForPath(installer.path)
78 }
79
Colin Cross27a4b052017-08-10 16:32:23 -070080 ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
Nan Zhang5323f8e2017-05-10 13:37:54 -070081 path := installer.path.RelPathString()
82 dir, file := filepath.Split(path)
83 stem := strings.TrimSuffix(file, filepath.Ext(file))
84
85 fmt.Fprintln(w, "LOCAL_MODULE_SUFFIX := "+filepath.Ext(file))
86 fmt.Fprintln(w, "LOCAL_MODULE_PATH := $(OUT_DIR)/"+filepath.Clean(dir))
87 fmt.Fprintln(w, "LOCAL_MODULE_STEM := "+stem)
Nan Zhang5323f8e2017-05-10 13:37:54 -070088 })
89}