github.com/westcoastroms/westcoastroms-build@v0.0.0-20190928114312-2350e5a73030/build/soong/python/androidmk.go (about)

     1  // 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  
    15  package python
    16  
    17  import (
    18  	"android/soong/android"
    19  	"fmt"
    20  	"io"
    21  	"path/filepath"
    22  	"strings"
    23  )
    24  
    25  type subAndroidMkProvider interface {
    26  	AndroidMk(*Module, *android.AndroidMkData)
    27  }
    28  
    29  func (p *Module) subAndroidMk(data *android.AndroidMkData, obj interface{}) {
    30  	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  
    41  func (p *Module) AndroidMk() android.AndroidMkData {
    42  	ret := android.AndroidMkData{OutputFile: p.installSource}
    43  
    44  	p.subAndroidMk(&ret, p.installer)
    45  
    46  	return ret
    47  }
    48  
    49  func (p *binaryDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) {
    50  	ret.Class = "EXECUTABLES"
    51  
    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  	})
    58  	base.subAndroidMk(ret, p.pythonInstaller)
    59  }
    60  
    61  func (p *testDecorator) AndroidMk(base *Module, ret *android.AndroidMkData) {
    62  	ret.Class = "NATIVE_TESTS"
    63  
    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  	})
    70  	base.subAndroidMk(ret, p.binaryDecorator.pythonInstaller)
    71  }
    72  
    73  func (installer *pythonInstaller) AndroidMk(base *Module, ret *android.AndroidMkData) {
    74  	// 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  
    80  	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile android.Path) {
    81  		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)
    88  	})
    89  }