Add gensrcs module type
gensrcs allows sources to be generated by a specified command. Change-Id: I725086fcdcd72bfe6c07fb8903e7b520678a247f
This commit is contained in:
15
Blueprints
15
Blueprints
@@ -18,6 +18,7 @@ bootstrap_go_binary {
|
|||||||
"soong-cc",
|
"soong-cc",
|
||||||
"soong-common",
|
"soong-common",
|
||||||
"soong-config",
|
"soong-config",
|
||||||
|
"soong-genrule",
|
||||||
],
|
],
|
||||||
srcs: [
|
srcs: [
|
||||||
"cmd/soong_build/main.go",
|
"cmd/soong_build/main.go",
|
||||||
@@ -85,6 +86,7 @@ bootstrap_go_package {
|
|||||||
"blueprint-pathtools",
|
"blueprint-pathtools",
|
||||||
"soong-common",
|
"soong-common",
|
||||||
"soong-config",
|
"soong-config",
|
||||||
|
"soong-genrule",
|
||||||
],
|
],
|
||||||
srcs: [
|
srcs: [
|
||||||
"cc/builder.go",
|
"cc/builder.go",
|
||||||
@@ -100,6 +102,19 @@ bootstrap_go_package {
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bootstrap_go_package {
|
||||||
|
name: "soong-genrule",
|
||||||
|
pkgPath: "android/soong/genrule",
|
||||||
|
deps: [
|
||||||
|
"blueprint",
|
||||||
|
"blueprint-pathtools",
|
||||||
|
"soong-common",
|
||||||
|
"soong-config",
|
||||||
|
],
|
||||||
|
srcs: [
|
||||||
|
"genrule/genrule.go",
|
||||||
|
],
|
||||||
|
}
|
||||||
//
|
//
|
||||||
// androidmk Android.mk to Blueprints translator
|
// androidmk Android.mk to Blueprints translator
|
||||||
//
|
//
|
||||||
|
@@ -53,7 +53,7 @@ rule g.bootstrap.link
|
|||||||
# Variant:
|
# Variant:
|
||||||
# Type: bootstrap_go_binary
|
# Type: bootstrap_go_binary
|
||||||
# Factory: blueprint/bootstrap.newGoBinaryModule
|
# Factory: blueprint/bootstrap.newGoBinaryModule
|
||||||
# Defined: build/soong/Blueprints:107:1
|
# Defined: build/soong/Blueprints:122:1
|
||||||
|
|
||||||
build .bootstrap/androidmk/obj/androidmk.a: g.bootstrap.gc $
|
build .bootstrap/androidmk/obj/androidmk.a: g.bootstrap.gc $
|
||||||
${g.bootstrap.srcDir}/build/soong/androidmk/cmd/androidmk/android.go $
|
${g.bootstrap.srcDir}/build/soong/androidmk/cmd/androidmk/android.go $
|
||||||
@@ -79,7 +79,7 @@ default .bootstrap/bin/androidmk
|
|||||||
# Variant:
|
# Variant:
|
||||||
# Type: bootstrap_go_package
|
# Type: bootstrap_go_package
|
||||||
# Factory: blueprint/bootstrap.newGoPackageModule
|
# Factory: blueprint/bootstrap.newGoPackageModule
|
||||||
# Defined: build/soong/Blueprints:120:1
|
# Defined: build/soong/Blueprints:135:1
|
||||||
|
|
||||||
build .bootstrap/androidmk-parser/pkg/android/soong/androidmk/parser.a: $
|
build .bootstrap/androidmk-parser/pkg/android/soong/androidmk/parser.a: $
|
||||||
g.bootstrap.gc $
|
g.bootstrap.gc $
|
||||||
@@ -274,7 +274,7 @@ default .bootstrap/bin/minibp
|
|||||||
# Variant:
|
# Variant:
|
||||||
# Type: bootstrap_go_package
|
# Type: bootstrap_go_package
|
||||||
# Factory: blueprint/bootstrap.newGoPackageModule
|
# Factory: blueprint/bootstrap.newGoPackageModule
|
||||||
# Defined: build/soong/Blueprints:80:1
|
# Defined: build/soong/Blueprints:81:1
|
||||||
|
|
||||||
build .bootstrap/soong-cc/pkg/android/soong/cc.a: g.bootstrap.gc $
|
build .bootstrap/soong-cc/pkg/android/soong/cc.a: g.bootstrap.gc $
|
||||||
${g.bootstrap.srcDir}/build/soong/cc/builder.go $
|
${g.bootstrap.srcDir}/build/soong/cc/builder.go $
|
||||||
@@ -294,8 +294,9 @@ build .bootstrap/soong-cc/pkg/android/soong/cc.a: g.bootstrap.gc $
|
|||||||
.bootstrap/blueprint-bootstrap/pkg/blueprint/bootstrap.a $
|
.bootstrap/blueprint-bootstrap/pkg/blueprint/bootstrap.a $
|
||||||
.bootstrap/soong-glob/pkg/android/soong/glob.a $
|
.bootstrap/soong-glob/pkg/android/soong/glob.a $
|
||||||
.bootstrap/soong-common/pkg/android/soong/common.a $
|
.bootstrap/soong-common/pkg/android/soong/common.a $
|
||||||
.bootstrap/soong-config/pkg/android/soong/config.a
|
.bootstrap/soong-config/pkg/android/soong/config.a $
|
||||||
incFlags = -I .bootstrap/blueprint-parser/pkg -I .bootstrap/blueprint-proptools/pkg -I .bootstrap/blueprint/pkg -I .bootstrap/blueprint-pathtools/pkg -I .bootstrap/blueprint-deptools/pkg -I .bootstrap/blueprint-bootstrap/pkg -I .bootstrap/soong-glob/pkg -I .bootstrap/soong-common/pkg -I .bootstrap/soong-config/pkg
|
.bootstrap/soong-genrule/pkg/android/soong/genrule.a
|
||||||
|
incFlags = -I .bootstrap/blueprint-parser/pkg -I .bootstrap/blueprint-proptools/pkg -I .bootstrap/blueprint/pkg -I .bootstrap/blueprint-pathtools/pkg -I .bootstrap/blueprint-deptools/pkg -I .bootstrap/blueprint-bootstrap/pkg -I .bootstrap/soong-glob/pkg -I .bootstrap/soong-common/pkg -I .bootstrap/soong-config/pkg -I .bootstrap/soong-genrule/pkg
|
||||||
pkgPath = android/soong/cc
|
pkgPath = android/soong/cc
|
||||||
default .bootstrap/soong-cc/pkg/android/soong/cc.a
|
default .bootstrap/soong-cc/pkg/android/soong/cc.a
|
||||||
|
|
||||||
@@ -304,7 +305,7 @@ default .bootstrap/soong-cc/pkg/android/soong/cc.a
|
|||||||
# Variant:
|
# Variant:
|
||||||
# Type: bootstrap_go_package
|
# Type: bootstrap_go_package
|
||||||
# Factory: blueprint/bootstrap.newGoPackageModule
|
# Factory: blueprint/bootstrap.newGoPackageModule
|
||||||
# Defined: build/soong/Blueprints:49:1
|
# Defined: build/soong/Blueprints:50:1
|
||||||
|
|
||||||
build .bootstrap/soong-common/pkg/android/soong/common.a: g.bootstrap.gc $
|
build .bootstrap/soong-common/pkg/android/soong/common.a: g.bootstrap.gc $
|
||||||
${g.bootstrap.srcDir}/build/soong/common/arch.go $
|
${g.bootstrap.srcDir}/build/soong/common/arch.go $
|
||||||
@@ -330,7 +331,7 @@ default .bootstrap/soong-common/pkg/android/soong/common.a
|
|||||||
# Variant:
|
# Variant:
|
||||||
# Type: bootstrap_go_package
|
# Type: bootstrap_go_package
|
||||||
# Factory: blueprint/bootstrap.newGoPackageModule
|
# Factory: blueprint/bootstrap.newGoPackageModule
|
||||||
# Defined: build/soong/Blueprints:67:1
|
# Defined: build/soong/Blueprints:68:1
|
||||||
|
|
||||||
build .bootstrap/soong-config/pkg/android/soong/config.a: g.bootstrap.gc $
|
build .bootstrap/soong-config/pkg/android/soong/config.a: g.bootstrap.gc $
|
||||||
${g.bootstrap.srcDir}/build/soong/config/config.go | $
|
${g.bootstrap.srcDir}/build/soong/config/config.go | $
|
||||||
@@ -347,12 +348,35 @@ build .bootstrap/soong-config/pkg/android/soong/config.a: g.bootstrap.gc $
|
|||||||
pkgPath = android/soong/config
|
pkgPath = android/soong/config
|
||||||
default .bootstrap/soong-config/pkg/android/soong/config.a
|
default .bootstrap/soong-config/pkg/android/soong/config.a
|
||||||
|
|
||||||
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||||
|
# Module: soong-genrule
|
||||||
|
# Variant:
|
||||||
|
# Type: bootstrap_go_package
|
||||||
|
# Factory: blueprint/bootstrap.newGoPackageModule
|
||||||
|
# Defined: build/soong/Blueprints:105:1
|
||||||
|
|
||||||
|
build .bootstrap/soong-genrule/pkg/android/soong/genrule.a: g.bootstrap.gc $
|
||||||
|
${g.bootstrap.srcDir}/build/soong/genrule/genrule.go | $
|
||||||
|
${g.bootstrap.gcCmd} $
|
||||||
|
.bootstrap/blueprint-parser/pkg/blueprint/parser.a $
|
||||||
|
.bootstrap/blueprint-proptools/pkg/blueprint/proptools.a $
|
||||||
|
.bootstrap/blueprint/pkg/blueprint.a $
|
||||||
|
.bootstrap/blueprint-pathtools/pkg/blueprint/pathtools.a $
|
||||||
|
.bootstrap/blueprint-deptools/pkg/blueprint/deptools.a $
|
||||||
|
.bootstrap/blueprint-bootstrap/pkg/blueprint/bootstrap.a $
|
||||||
|
.bootstrap/soong-glob/pkg/android/soong/glob.a $
|
||||||
|
.bootstrap/soong-common/pkg/android/soong/common.a $
|
||||||
|
.bootstrap/soong-config/pkg/android/soong/config.a
|
||||||
|
incFlags = -I .bootstrap/blueprint-parser/pkg -I .bootstrap/blueprint-proptools/pkg -I .bootstrap/blueprint/pkg -I .bootstrap/blueprint-pathtools/pkg -I .bootstrap/blueprint-deptools/pkg -I .bootstrap/blueprint-bootstrap/pkg -I .bootstrap/soong-glob/pkg -I .bootstrap/soong-common/pkg -I .bootstrap/soong-config/pkg
|
||||||
|
pkgPath = android/soong/genrule
|
||||||
|
default .bootstrap/soong-genrule/pkg/android/soong/genrule.a
|
||||||
|
|
||||||
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
||||||
# Module: soong-glob
|
# Module: soong-glob
|
||||||
# Variant:
|
# Variant:
|
||||||
# Type: bootstrap_go_package
|
# Type: bootstrap_go_package
|
||||||
# Factory: blueprint/bootstrap.newGoPackageModule
|
# Factory: blueprint/bootstrap.newGoPackageModule
|
||||||
# Defined: build/soong/Blueprints:38:1
|
# Defined: build/soong/Blueprints:39:1
|
||||||
|
|
||||||
build .bootstrap/soong-glob/pkg/android/soong/glob.a: g.bootstrap.gc $
|
build .bootstrap/soong-glob/pkg/android/soong/glob.a: g.bootstrap.gc $
|
||||||
${g.bootstrap.srcDir}/build/soong/glob/glob.go | ${g.bootstrap.gcCmd} $
|
${g.bootstrap.srcDir}/build/soong/glob/glob.go | ${g.bootstrap.gcCmd} $
|
||||||
@@ -380,14 +404,15 @@ build .bootstrap/soong_build/obj/soong_build.a: g.bootstrap.gc $
|
|||||||
.bootstrap/soong-glob/pkg/android/soong/glob.a $
|
.bootstrap/soong-glob/pkg/android/soong/glob.a $
|
||||||
.bootstrap/soong-common/pkg/android/soong/common.a $
|
.bootstrap/soong-common/pkg/android/soong/common.a $
|
||||||
.bootstrap/soong-config/pkg/android/soong/config.a $
|
.bootstrap/soong-config/pkg/android/soong/config.a $
|
||||||
|
.bootstrap/soong-genrule/pkg/android/soong/genrule.a $
|
||||||
.bootstrap/soong-cc/pkg/android/soong/cc.a
|
.bootstrap/soong-cc/pkg/android/soong/cc.a
|
||||||
incFlags = -I .bootstrap/blueprint-parser/pkg -I .bootstrap/blueprint-proptools/pkg -I .bootstrap/blueprint/pkg -I .bootstrap/blueprint-deptools/pkg -I .bootstrap/blueprint-pathtools/pkg -I .bootstrap/blueprint-bootstrap/pkg -I .bootstrap/soong-glob/pkg -I .bootstrap/soong-common/pkg -I .bootstrap/soong-config/pkg -I .bootstrap/soong-cc/pkg
|
incFlags = -I .bootstrap/blueprint-parser/pkg -I .bootstrap/blueprint-proptools/pkg -I .bootstrap/blueprint/pkg -I .bootstrap/blueprint-deptools/pkg -I .bootstrap/blueprint-pathtools/pkg -I .bootstrap/blueprint-bootstrap/pkg -I .bootstrap/soong-glob/pkg -I .bootstrap/soong-common/pkg -I .bootstrap/soong-config/pkg -I .bootstrap/soong-genrule/pkg -I .bootstrap/soong-cc/pkg
|
||||||
pkgPath = soong_build
|
pkgPath = soong_build
|
||||||
default .bootstrap/soong_build/obj/soong_build.a
|
default .bootstrap/soong_build/obj/soong_build.a
|
||||||
|
|
||||||
build .bootstrap/soong_build/obj/a.out: g.bootstrap.link $
|
build .bootstrap/soong_build/obj/a.out: g.bootstrap.link $
|
||||||
.bootstrap/soong_build/obj/soong_build.a | ${g.bootstrap.linkCmd}
|
.bootstrap/soong_build/obj/soong_build.a | ${g.bootstrap.linkCmd}
|
||||||
libDirFlags = -L .bootstrap/blueprint-parser/pkg -L .bootstrap/blueprint-proptools/pkg -L .bootstrap/blueprint/pkg -L .bootstrap/blueprint-deptools/pkg -L .bootstrap/blueprint-pathtools/pkg -L .bootstrap/blueprint-bootstrap/pkg -L .bootstrap/soong-glob/pkg -L .bootstrap/soong-common/pkg -L .bootstrap/soong-config/pkg -L .bootstrap/soong-cc/pkg
|
libDirFlags = -L .bootstrap/blueprint-parser/pkg -L .bootstrap/blueprint-proptools/pkg -L .bootstrap/blueprint/pkg -L .bootstrap/blueprint-deptools/pkg -L .bootstrap/blueprint-pathtools/pkg -L .bootstrap/blueprint-bootstrap/pkg -L .bootstrap/soong-glob/pkg -L .bootstrap/soong-common/pkg -L .bootstrap/soong-config/pkg -L .bootstrap/soong-genrule/pkg -L .bootstrap/soong-cc/pkg
|
||||||
default .bootstrap/soong_build/obj/a.out
|
default .bootstrap/soong_build/obj/a.out
|
||||||
|
|
||||||
build .bootstrap/bin/soong_build: g.bootstrap.cp $
|
build .bootstrap/bin/soong_build: g.bootstrap.cp $
|
||||||
@@ -399,7 +424,7 @@ default .bootstrap/bin/soong_build
|
|||||||
# Variant:
|
# Variant:
|
||||||
# Type: bootstrap_go_binary
|
# Type: bootstrap_go_binary
|
||||||
# Factory: blueprint/bootstrap.newGoBinaryModule
|
# Factory: blueprint/bootstrap.newGoBinaryModule
|
||||||
# Defined: build/soong/Blueprints:28:1
|
# Defined: build/soong/Blueprints:29:1
|
||||||
|
|
||||||
build .bootstrap/soong_glob/obj/soong_glob.a: g.bootstrap.gc $
|
build .bootstrap/soong_glob/obj/soong_glob.a: g.bootstrap.gc $
|
||||||
${g.bootstrap.srcDir}/build/soong/cmd/soong_glob/soong_glob.go | $
|
${g.bootstrap.srcDir}/build/soong/cmd/soong_glob/soong_glob.go | $
|
||||||
|
33
cc/cc.go
33
cc/cc.go
@@ -1,3 +1,4 @@
|
|||||||
|
// Copyright 2015 Google Inc. All rights reserved.
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
@@ -25,6 +26,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"android/soong/common"
|
"android/soong/common"
|
||||||
|
"android/soong/genrule"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config interface {
|
type Config interface {
|
||||||
@@ -284,7 +286,7 @@ func newCCBase(base *ccBase, module ccModuleType, hod common.HostOrDeviceSupport
|
|||||||
|
|
||||||
props = append(props, &base.properties, &base.unused)
|
props = append(props, &base.properties, &base.unused)
|
||||||
|
|
||||||
return common.InitAndroidModule(module, hod, multilib, props...)
|
return common.InitAndroidArchModule(module, hod, multilib, props...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ccBase) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
|
func (c *ccBase) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
|
||||||
@@ -313,6 +315,13 @@ func (c *ccBase) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generatedObjFiles := c.compileGeneratedObjs(ctx, flags, deps)
|
||||||
|
if ctx.Failed() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
objFiles = append(objFiles, generatedObjFiles...)
|
||||||
|
|
||||||
c.ccModuleType().compileModule(ctx, flags, deps, objFiles)
|
c.ccModuleType().compileModule(ctx, flags, deps, objFiles)
|
||||||
if ctx.Failed() {
|
if ctx.Failed() {
|
||||||
return
|
return
|
||||||
@@ -578,6 +587,28 @@ func (c *ccBase) compileObjs(ctx common.AndroidModuleContext, flags ccFlags,
|
|||||||
return c.customCompileObjs(ctx, flags, deps, "", c.properties.Srcs)
|
return c.customCompileObjs(ctx, flags, deps, "", c.properties.Srcs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compile generated source files from dependencies
|
||||||
|
func (c *ccBase) compileGeneratedObjs(ctx common.AndroidModuleContext, flags ccFlags,
|
||||||
|
deps ccDeps) []string {
|
||||||
|
var srcs []string
|
||||||
|
|
||||||
|
if c.properties.SkipCompileObjs {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.VisitDirectDeps(func(module blueprint.Module) {
|
||||||
|
if gen, ok := module.(genrule.SourceFileGenerator); ok {
|
||||||
|
srcs = append(srcs, gen.GeneratedSourceFiles()...)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if len(srcs) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return TransformSourceToObj(ctx, "", srcs, ccFlagsToBuilderFlags(flags))
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ccBase) outputFile() string {
|
func (c *ccBase) outputFile() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@ import (
|
|||||||
"android/soong/cc"
|
"android/soong/cc"
|
||||||
"android/soong/common"
|
"android/soong/common"
|
||||||
"android/soong/config"
|
"android/soong/config"
|
||||||
|
"android/soong/genrule"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -50,6 +51,8 @@ func main() {
|
|||||||
ctx.RegisterModuleType("cc_library_host_shared", cc.NewCCLibraryHostShared)
|
ctx.RegisterModuleType("cc_library_host_shared", cc.NewCCLibraryHostShared)
|
||||||
ctx.RegisterModuleType("cc_binary_host", cc.NewCCBinaryHost)
|
ctx.RegisterModuleType("cc_binary_host", cc.NewCCBinaryHost)
|
||||||
|
|
||||||
|
ctx.RegisterModuleType("gensrcs", genrule.NewGenSrcs)
|
||||||
|
|
||||||
// Mutators
|
// Mutators
|
||||||
ctx.RegisterEarlyMutator("arch", common.ArchMutator)
|
ctx.RegisterEarlyMutator("arch", common.ArchMutator)
|
||||||
ctx.RegisterEarlyMutator("link", cc.LinkageMutator)
|
ctx.RegisterEarlyMutator("link", cc.LinkageMutator)
|
||||||
|
@@ -280,6 +280,10 @@ func ArchMutator(mctx blueprint.EarlyMutatorContext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(arches) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
archNames := []string{}
|
archNames := []string{}
|
||||||
for _, arch := range arches {
|
for _, arch := range arches {
|
||||||
archNames = append(archNames, arch.String())
|
archNames = append(archNames, arch.String())
|
||||||
@@ -300,8 +304,6 @@ func InitArchModule(m AndroidModule, defaultMultilib Multilib,
|
|||||||
|
|
||||||
base.commonProperties.Compile_multilib = string(defaultMultilib)
|
base.commonProperties.Compile_multilib = string(defaultMultilib)
|
||||||
|
|
||||||
base.generalProperties = append(base.generalProperties,
|
|
||||||
&base.commonProperties)
|
|
||||||
base.generalProperties = append(base.generalProperties,
|
base.generalProperties = append(base.generalProperties,
|
||||||
propertyStructs...)
|
propertyStructs...)
|
||||||
|
|
||||||
|
@@ -87,11 +87,23 @@ const (
|
|||||||
MultilibFirst Multilib = "first"
|
MultilibFirst Multilib = "first"
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitAndroidModule(m AndroidModule, hod HostOrDeviceSupported, defaultMultilib Multilib,
|
func InitAndroidModule(m AndroidModule,
|
||||||
propertyStructs ...interface{}) (blueprint.Module, []interface{}) {
|
propertyStructs ...interface{}) (blueprint.Module, []interface{}) {
|
||||||
|
|
||||||
base := m.base()
|
base := m.base()
|
||||||
base.module = m
|
base.module = m
|
||||||
|
|
||||||
|
propertyStructs = append(propertyStructs, &base.commonProperties)
|
||||||
|
|
||||||
|
return m, propertyStructs
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitAndroidArchModule(m AndroidModule, hod HostOrDeviceSupported, defaultMultilib Multilib,
|
||||||
|
propertyStructs ...interface{}) (blueprint.Module, []interface{}) {
|
||||||
|
|
||||||
|
_, propertyStructs = InitAndroidModule(m, propertyStructs...)
|
||||||
|
|
||||||
|
base := m.base()
|
||||||
base.commonProperties.HostOrDeviceSupported = hod
|
base.commonProperties.HostOrDeviceSupported = hod
|
||||||
|
|
||||||
if hod == HostAndDeviceSupported {
|
if hod == HostAndDeviceSupported {
|
||||||
|
97
genrule/genrule.go
Normal file
97
genrule/genrule.go
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
// Copyright 2015 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 genrule
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"blueprint"
|
||||||
|
"blueprint/pathtools"
|
||||||
|
|
||||||
|
"android/soong/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Config interface {
|
||||||
|
SrcDir() string
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
pctx = blueprint.NewPackageContext("android/soong/genrule")
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
pctx.VariableConfigMethod("srcDir", Config.SrcDir)
|
||||||
|
}
|
||||||
|
|
||||||
|
type SourceFileGenerator interface {
|
||||||
|
GeneratedSourceFiles() []string
|
||||||
|
}
|
||||||
|
|
||||||
|
type genSrcsProperties struct {
|
||||||
|
// cmd: command to run on each input file. Available variables for substitution:
|
||||||
|
// $in: an input file
|
||||||
|
// $out: the corresponding output file
|
||||||
|
// $srcDir: the root directory of the source tree
|
||||||
|
Cmd string
|
||||||
|
|
||||||
|
// srcs: list of input files
|
||||||
|
Srcs []string
|
||||||
|
|
||||||
|
// output_extension: extension that will be substituted for each output file
|
||||||
|
Output_extension string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGenSrcs() (blueprint.Module, []interface{}) {
|
||||||
|
module := &genSrcs{}
|
||||||
|
|
||||||
|
return common.InitAndroidModule(module, &module.properties)
|
||||||
|
}
|
||||||
|
|
||||||
|
type genSrcs struct {
|
||||||
|
common.AndroidModuleBase
|
||||||
|
|
||||||
|
properties genSrcsProperties
|
||||||
|
outputFiles []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *genSrcs) GenerateAndroidBuildActions(ctx common.AndroidModuleContext) {
|
||||||
|
rule := ctx.Rule(pctx, "genSrcs", blueprint.RuleParams{
|
||||||
|
Command: g.properties.Cmd,
|
||||||
|
})
|
||||||
|
|
||||||
|
srcFiles := g.properties.Srcs
|
||||||
|
srcFiles = pathtools.PrefixPaths(srcFiles, common.ModuleSrcDir(ctx))
|
||||||
|
srcFiles = common.ExpandGlobs(ctx, srcFiles)
|
||||||
|
|
||||||
|
g.outputFiles = make([]string, 0, len(srcFiles))
|
||||||
|
|
||||||
|
for _, in := range srcFiles {
|
||||||
|
out := pathtools.ReplaceExtension(in, g.properties.Output_extension)
|
||||||
|
out = filepath.Join(common.ModuleGenDir(ctx), out)
|
||||||
|
g.outputFiles = append(g.outputFiles, out)
|
||||||
|
ctx.Build(pctx, blueprint.BuildParams{
|
||||||
|
Rule: rule,
|
||||||
|
Inputs: []string{in},
|
||||||
|
Outputs: []string{out},
|
||||||
|
// TODO: visit dependencies to add implicit dependencies on required tools
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ SourceFileGenerator = (*genSrcs)(nil)
|
||||||
|
|
||||||
|
func (g *genSrcs) GeneratedSourceFiles() []string {
|
||||||
|
return g.outputFiles
|
||||||
|
}
|
Reference in New Issue
Block a user