Merge "Generate genlex rules from bp2build for cc targets" am: 5731d0fffd
Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2092784 Change-Id: I3d5ac491b377fb5da09f4e5a73c93779df210914 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -310,7 +310,6 @@ var (
|
|||||||
|
|
||||||
Bp2buildModuleDoNotConvertList = []string{
|
Bp2buildModuleDoNotConvertList = []string{
|
||||||
// cc bugs
|
// cc bugs
|
||||||
"libsepol", // TODO(b/207408632): Unsupported case of .l sources in cc library rules
|
|
||||||
"libactivitymanager_aidl", // TODO(b/207426160): Unsupported use of aidl sources (via Dactivity_manager_procstate_aidl) in a cc_library
|
"libactivitymanager_aidl", // TODO(b/207426160): Unsupported use of aidl sources (via Dactivity_manager_procstate_aidl) in a cc_library
|
||||||
"gen-kotlin-build-file.py", // TODO(b/198619163) module has same name as source
|
"gen-kotlin-build-file.py", // TODO(b/198619163) module has same name as source
|
||||||
"libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support.
|
"libgtest_ndk_c++", "libgtest_main_ndk_c++", // TODO(b/201816222): Requires sdk_version support.
|
||||||
@@ -363,15 +362,14 @@ var (
|
|||||||
"libtombstoned_client_rust_bridge_code", "libtombstoned_client_wrapper", // rust conversions are not supported
|
"libtombstoned_client_rust_bridge_code", "libtombstoned_client_wrapper", // rust conversions are not supported
|
||||||
|
|
||||||
// unconverted deps
|
// unconverted deps
|
||||||
"CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
|
"CarHTMLViewer", // depends on unconverted modules android.car-stubs, car-ui-lib
|
||||||
"abb", // depends on unconverted modules: libcmd, libbinder
|
"abb", // depends on unconverted modules: libcmd, libbinder
|
||||||
"adb", // depends on unconverted modules: AdbWinApi, libandroidfw, libopenscreen-discovery, libopenscreen-platform-impl, libusb, bin2c_fastdeployagent, AdbWinUsbApi
|
"adb", // depends on unconverted modules: AdbWinApi, libandroidfw, libopenscreen-discovery, libopenscreen-platform-impl, libusb, bin2c_fastdeployagent, AdbWinUsbApi
|
||||||
"android_icu4j_srcgen", // depends on unconverted modules: currysrc
|
"android_icu4j_srcgen", // depends on unconverted modules: currysrc
|
||||||
"android_icu4j_srcgen_binary", // depends on unconverted modules: android_icu4j_srcgen, currysrc
|
"android_icu4j_srcgen_binary", // depends on unconverted modules: android_icu4j_srcgen, currysrc
|
||||||
"apex_manifest_proto_java", // b/210751803, depends on libprotobuf-java-full
|
"apex_manifest_proto_java", // b/210751803, depends on libprotobuf-java-full
|
||||||
"art-script", // depends on unconverted modules: dalvikvm, dex2oat
|
"art-script", // depends on unconverted modules: dalvikvm, dex2oat
|
||||||
"bin2c_fastdeployagent", // depends on unconverted modules: deployagent
|
"bin2c_fastdeployagent", // depends on unconverted modules: deployagent
|
||||||
"chkcon", "sefcontext_compile", // depends on unconverted modules: libsepol
|
|
||||||
"com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig
|
"com.android.runtime", // depends on unconverted modules: bionic-linker-config, linkerconfig
|
||||||
"conv_linker_config", // depends on unconverted modules: linker_config_proto
|
"conv_linker_config", // depends on unconverted modules: linker_config_proto
|
||||||
"currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9
|
"currysrc", // depends on unconverted modules: currysrc_org.eclipse, guavalib, jopt-simple-4.9
|
||||||
|
@@ -628,7 +628,7 @@ func addCommandForPyBinaryRunfilesDir(oldCommand string, zipperCommandPath, zipF
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isSymlinkAction(a action) bool {
|
func isSymlinkAction(a action) bool {
|
||||||
return a.Mnemonic == "Symlink" || a.Mnemonic == "SolibSymlink"
|
return a.Mnemonic == "Symlink" || a.Mnemonic == "SolibSymlink" || a.Mnemonic == "ExecutableSymlink"
|
||||||
}
|
}
|
||||||
|
|
||||||
func isTemplateExpandAction(a action) bool {
|
func isTemplateExpandAction(a action) bool {
|
||||||
|
@@ -86,7 +86,7 @@ func runCcHostBinaryTestCase(t *testing.T, tc ccBinaryBp2buildTestCase) {
|
|||||||
testCase := tc
|
testCase := tc
|
||||||
for i, tar := range testCase.targets {
|
for i, tar := range testCase.targets {
|
||||||
switch tar.typ {
|
switch tar.typ {
|
||||||
case "cc_binary", "proto_library", "cc_lite_proto_library":
|
case "cc_binary", "proto_library", "cc_lite_proto_library", "genlex":
|
||||||
tar.attrs["target_compatible_with"] = `select({
|
tar.attrs["target_compatible_with"] = `select({
|
||||||
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
|
"//build/bazel/platforms/os:android": ["@platforms//:incompatible"],
|
||||||
"//conditions:default": [],
|
"//conditions:default": [],
|
||||||
@@ -505,3 +505,49 @@ func TestCcBinaryStaticProto(t *testing.T) {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcBinaryConvertLex(t *testing.T) {
|
||||||
|
runCcBinaryTests(t, ccBinaryBp2buildTestCase{
|
||||||
|
description: `.l and .ll sources converted to .c and .cc`,
|
||||||
|
blueprint: `
|
||||||
|
{rule_name} {
|
||||||
|
name: "foo",
|
||||||
|
srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
|
||||||
|
lex: { flags: ["--foo_opt", "--bar_opt"] },
|
||||||
|
include_build_directory: false,
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
targets: []testBazelTarget{
|
||||||
|
{"genlex", "foo_genlex_l", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"foo1.l",
|
||||||
|
"foo2.l",
|
||||||
|
]`,
|
||||||
|
"lexopts": `[
|
||||||
|
"--foo_opt",
|
||||||
|
"--bar_opt",
|
||||||
|
]`,
|
||||||
|
}},
|
||||||
|
{"genlex", "foo_genlex_ll", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar1.ll",
|
||||||
|
"bar2.ll",
|
||||||
|
]`,
|
||||||
|
"lexopts": `[
|
||||||
|
"--foo_opt",
|
||||||
|
"--bar_opt",
|
||||||
|
]`,
|
||||||
|
}},
|
||||||
|
{"cc_binary", "foo", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.cc",
|
||||||
|
":foo_genlex_ll",
|
||||||
|
]`,
|
||||||
|
"srcs_c": `[
|
||||||
|
"foo.c",
|
||||||
|
":foo_genlex_l",
|
||||||
|
]`,
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -2457,3 +2457,51 @@ func TestCcLibraryEscapeLdflags(t *testing.T) {
|
|||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibraryConvertLex(t *testing.T) {
|
||||||
|
runCcLibraryTestCase(t, bp2buildTestCase{
|
||||||
|
moduleTypeUnderTest: "cc_library",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryFactory,
|
||||||
|
filesystem: map[string]string{
|
||||||
|
"foo.c": "",
|
||||||
|
"bar.cc": "",
|
||||||
|
"foo1.l": "",
|
||||||
|
"bar1.ll": "",
|
||||||
|
"foo2.l": "",
|
||||||
|
"bar2.ll": "",
|
||||||
|
},
|
||||||
|
blueprint: `cc_library {
|
||||||
|
name: "foo_lib",
|
||||||
|
srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
|
||||||
|
lex: { flags: ["--foo_flags"] },
|
||||||
|
include_build_directory: false,
|
||||||
|
bazel_module: { bp2build_available: true },
|
||||||
|
}`,
|
||||||
|
expectedBazelTargets: append([]string{
|
||||||
|
makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"foo1.l",
|
||||||
|
"foo2.l",
|
||||||
|
]`,
|
||||||
|
"lexopts": `["--foo_flags"]`,
|
||||||
|
}),
|
||||||
|
makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar1.ll",
|
||||||
|
"bar2.ll",
|
||||||
|
]`,
|
||||||
|
"lexopts": `["--foo_flags"]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
makeCcLibraryTargets("foo_lib", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.cc",
|
||||||
|
":foo_lib_genlex_ll",
|
||||||
|
]`,
|
||||||
|
"srcs_c": `[
|
||||||
|
"foo.c",
|
||||||
|
":foo_lib_genlex_l",
|
||||||
|
]`,
|
||||||
|
})...),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -520,3 +520,52 @@ cc_library_shared {
|
|||||||
})},
|
})},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibrarySharedConvertLex(t *testing.T) {
|
||||||
|
runCcLibrarySharedTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_shared with lex files",
|
||||||
|
moduleTypeUnderTest: "cc_library_shared",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibrarySharedFactory,
|
||||||
|
filesystem: map[string]string{
|
||||||
|
"foo.c": "",
|
||||||
|
"bar.cc": "",
|
||||||
|
"foo1.l": "",
|
||||||
|
"bar1.ll": "",
|
||||||
|
"foo2.l": "",
|
||||||
|
"bar2.ll": "",
|
||||||
|
},
|
||||||
|
blueprint: `cc_library_shared {
|
||||||
|
name: "foo_lib",
|
||||||
|
srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
|
||||||
|
lex: { flags: ["--foo_flags"] },
|
||||||
|
include_build_directory: false,
|
||||||
|
bazel_module: { bp2build_available: true },
|
||||||
|
}`,
|
||||||
|
expectedBazelTargets: []string{
|
||||||
|
makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"foo1.l",
|
||||||
|
"foo2.l",
|
||||||
|
]`,
|
||||||
|
"lexopts": `["--foo_flags"]`,
|
||||||
|
}),
|
||||||
|
makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar1.ll",
|
||||||
|
"bar2.ll",
|
||||||
|
]`,
|
||||||
|
"lexopts": `["--foo_flags"]`,
|
||||||
|
}),
|
||||||
|
makeBazelTarget("cc_library_shared", "foo_lib", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.cc",
|
||||||
|
":foo_lib_genlex_ll",
|
||||||
|
]`,
|
||||||
|
"srcs_c": `[
|
||||||
|
"foo.c",
|
||||||
|
":foo_lib_genlex_l",
|
||||||
|
]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -96,3 +96,52 @@ cc_prebuilt_library_static {
|
|||||||
expectedErr: fmt.Errorf("Expected at most one source file"),
|
expectedErr: fmt.Errorf("Expected at most one source file"),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCcLibraryStaticConvertLex(t *testing.T) {
|
||||||
|
runCcLibrarySharedTestCase(t, bp2buildTestCase{
|
||||||
|
description: "cc_library_static with lex files",
|
||||||
|
moduleTypeUnderTest: "cc_library_static",
|
||||||
|
moduleTypeUnderTestFactory: cc.LibraryStaticFactory,
|
||||||
|
filesystem: map[string]string{
|
||||||
|
"foo.c": "",
|
||||||
|
"bar.cc": "",
|
||||||
|
"foo1.l": "",
|
||||||
|
"bar1.ll": "",
|
||||||
|
"foo2.l": "",
|
||||||
|
"bar2.ll": "",
|
||||||
|
},
|
||||||
|
blueprint: `cc_library_static {
|
||||||
|
name: "foo_lib",
|
||||||
|
srcs: ["foo.c", "bar.cc", "foo1.l", "foo2.l", "bar1.ll", "bar2.ll"],
|
||||||
|
lex: { flags: ["--foo_flags"] },
|
||||||
|
include_build_directory: false,
|
||||||
|
bazel_module: { bp2build_available: true },
|
||||||
|
}`,
|
||||||
|
expectedBazelTargets: []string{
|
||||||
|
makeBazelTarget("genlex", "foo_lib_genlex_l", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"foo1.l",
|
||||||
|
"foo2.l",
|
||||||
|
]`,
|
||||||
|
"lexopts": `["--foo_flags"]`,
|
||||||
|
}),
|
||||||
|
makeBazelTarget("genlex", "foo_lib_genlex_ll", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar1.ll",
|
||||||
|
"bar2.ll",
|
||||||
|
]`,
|
||||||
|
"lexopts": `["--foo_flags"]`,
|
||||||
|
}),
|
||||||
|
makeBazelTarget("cc_library_static", "foo_lib", attrNameToString{
|
||||||
|
"srcs": `[
|
||||||
|
"bar.cc",
|
||||||
|
":foo_lib_genlex_ll",
|
||||||
|
]`,
|
||||||
|
"srcs_c": `[
|
||||||
|
"foo.c",
|
||||||
|
":foo_lib_genlex_l",
|
||||||
|
]`,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@@ -29,6 +29,8 @@ import (
|
|||||||
const (
|
const (
|
||||||
cSrcPartition = "c"
|
cSrcPartition = "c"
|
||||||
asSrcPartition = "as"
|
asSrcPartition = "as"
|
||||||
|
lSrcPartition = "l"
|
||||||
|
llSrcPartition = "ll"
|
||||||
cppSrcPartition = "cpp"
|
cppSrcPartition = "cpp"
|
||||||
protoSrcPartition = "proto"
|
protoSrcPartition = "proto"
|
||||||
)
|
)
|
||||||
@@ -76,6 +78,12 @@ func groupSrcsByExtension(ctx android.BazelConversionPathContext, srcs bazel.Lab
|
|||||||
protoSrcPartition: android.ProtoSrcLabelPartition,
|
protoSrcPartition: android.ProtoSrcLabelPartition,
|
||||||
cSrcPartition: bazel.LabelPartition{Extensions: []string{".c"}, LabelMapper: addSuffixForFilegroup("_c_srcs")},
|
cSrcPartition: bazel.LabelPartition{Extensions: []string{".c"}, LabelMapper: addSuffixForFilegroup("_c_srcs")},
|
||||||
asSrcPartition: bazel.LabelPartition{Extensions: []string{".s", ".S"}, LabelMapper: addSuffixForFilegroup("_as_srcs")},
|
asSrcPartition: bazel.LabelPartition{Extensions: []string{".s", ".S"}, LabelMapper: addSuffixForFilegroup("_as_srcs")},
|
||||||
|
// TODO(http://b/231968910): If there is ever a filegroup target that
|
||||||
|
// contains .l or .ll files we will need to find a way to add a
|
||||||
|
// LabelMapper for these that identifies these filegroups and
|
||||||
|
// converts them appropriately
|
||||||
|
lSrcPartition: bazel.LabelPartition{Extensions: []string{".l"}},
|
||||||
|
llSrcPartition: bazel.LabelPartition{Extensions: []string{".ll"}},
|
||||||
// C++ is the "catch-all" group, and comprises generated sources because we don't
|
// C++ is the "catch-all" group, and comprises generated sources because we don't
|
||||||
// know the language of these sources until the genrule is executed.
|
// know the language of these sources until the genrule is executed.
|
||||||
cppSrcPartition: bazel.LabelPartition{Extensions: []string{".cpp", ".cc", ".cxx", ".mm"}, LabelMapper: addSuffixForFilegroup("_cpp_srcs"), Keep_remainder: true},
|
cppSrcPartition: bazel.LabelPartition{Extensions: []string{".cpp", ".cc", ".cxx", ".mm"}, LabelMapper: addSuffixForFilegroup("_cpp_srcs"), Keep_remainder: true},
|
||||||
@@ -285,6 +293,11 @@ type compilerAttributes struct {
|
|||||||
cppFlags bazel.StringListAttribute
|
cppFlags bazel.StringListAttribute
|
||||||
srcs bazel.LabelListAttribute
|
srcs bazel.LabelListAttribute
|
||||||
|
|
||||||
|
// Lex sources and options
|
||||||
|
lSrcs bazel.LabelListAttribute
|
||||||
|
llSrcs bazel.LabelListAttribute
|
||||||
|
lexopts bazel.StringListAttribute
|
||||||
|
|
||||||
hdrs bazel.LabelListAttribute
|
hdrs bazel.LabelListAttribute
|
||||||
|
|
||||||
rtti bazel.BoolAttribute
|
rtti bazel.BoolAttribute
|
||||||
@@ -407,6 +420,8 @@ func (ca *compilerAttributes) finalize(ctx android.BazelConversionPathContext, i
|
|||||||
ca.srcs = partitionedSrcs[cppSrcPartition]
|
ca.srcs = partitionedSrcs[cppSrcPartition]
|
||||||
ca.cSrcs = partitionedSrcs[cSrcPartition]
|
ca.cSrcs = partitionedSrcs[cSrcPartition]
|
||||||
ca.asSrcs = partitionedSrcs[asSrcPartition]
|
ca.asSrcs = partitionedSrcs[asSrcPartition]
|
||||||
|
ca.lSrcs = partitionedSrcs[lSrcPartition]
|
||||||
|
ca.llSrcs = partitionedSrcs[llSrcPartition]
|
||||||
|
|
||||||
ca.absoluteIncludes.DeduplicateAxesFromBase()
|
ca.absoluteIncludes.DeduplicateAxesFromBase()
|
||||||
ca.localIncludes.DeduplicateAxesFromBase()
|
ca.localIncludes.DeduplicateAxesFromBase()
|
||||||
@@ -515,7 +530,9 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
|
|||||||
var allHdrs []string
|
var allHdrs []string
|
||||||
if baseCompilerProps, ok := archVariantCompilerProps[axis][config].(*BaseCompilerProperties); ok {
|
if baseCompilerProps, ok := archVariantCompilerProps[axis][config].(*BaseCompilerProperties); ok {
|
||||||
allHdrs = baseCompilerProps.Generated_headers
|
allHdrs = baseCompilerProps.Generated_headers
|
||||||
|
if baseCompilerProps.Lex != nil {
|
||||||
|
compilerAttrs.lexopts.SetSelectValue(axis, config, baseCompilerProps.Lex.Flags)
|
||||||
|
}
|
||||||
(&compilerAttrs).bp2buildForAxisAndConfig(ctx, axis, config, baseCompilerProps)
|
(&compilerAttrs).bp2buildForAxisAndConfig(ctx, axis, config, baseCompilerProps)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,6 +587,10 @@ func bp2BuildParseBaseProps(ctx android.Bp2buildMutatorContext, module *Module)
|
|||||||
(&linkerAttrs).wholeArchiveDeps.Add(protoDep.wholeStaticLib)
|
(&linkerAttrs).wholeArchiveDeps.Add(protoDep.wholeStaticLib)
|
||||||
(&linkerAttrs).implementationWholeArchiveDeps.Add(protoDep.implementationWholeStaticLib)
|
(&linkerAttrs).implementationWholeArchiveDeps.Add(protoDep.implementationWholeStaticLib)
|
||||||
|
|
||||||
|
convertedLSrcs := bp2BuildLex(ctx, module.Name(), compilerAttrs)
|
||||||
|
(&compilerAttrs).srcs.Add(&convertedLSrcs.srcName)
|
||||||
|
(&compilerAttrs).cSrcs.Add(&convertedLSrcs.cSrcName)
|
||||||
|
|
||||||
return baseAttributes{
|
return baseAttributes{
|
||||||
compilerAttrs,
|
compilerAttrs,
|
||||||
linkerAttrs,
|
linkerAttrs,
|
||||||
|
36
cc/gen.go
36
cc/gen.go
@@ -18,6 +18,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"android/soong/bazel"
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
|
|
||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
@@ -169,6 +170,41 @@ func genLex(ctx android.ModuleContext, lexFile android.Path, outFile android.Mod
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LexAttrs struct {
|
||||||
|
Srcs bazel.LabelListAttribute
|
||||||
|
Lexopts bazel.StringListAttribute
|
||||||
|
}
|
||||||
|
|
||||||
|
type LexNames struct {
|
||||||
|
cSrcName bazel.LabelAttribute
|
||||||
|
srcName bazel.LabelAttribute
|
||||||
|
}
|
||||||
|
|
||||||
|
func bp2BuildLex(ctx android.Bp2buildMutatorContext, moduleName string, ca compilerAttributes) LexNames {
|
||||||
|
names := LexNames{}
|
||||||
|
if !ca.lSrcs.IsEmpty() {
|
||||||
|
names.cSrcName = createLexTargetModule(ctx, moduleName+"_genlex_l", ca.lSrcs, ca.lexopts)
|
||||||
|
}
|
||||||
|
if !ca.llSrcs.IsEmpty() {
|
||||||
|
names.srcName = createLexTargetModule(ctx, moduleName+"_genlex_ll", ca.llSrcs, ca.lexopts)
|
||||||
|
}
|
||||||
|
return names
|
||||||
|
}
|
||||||
|
|
||||||
|
func createLexTargetModule(ctx android.Bp2buildMutatorContext, name string, srcs bazel.LabelListAttribute, opts bazel.StringListAttribute) bazel.LabelAttribute {
|
||||||
|
ctx.CreateBazelTargetModule(
|
||||||
|
bazel.BazelTargetModuleProperties{
|
||||||
|
Rule_class: "genlex",
|
||||||
|
Bzl_load_location: "//build/bazel/rules/cc:flex.bzl",
|
||||||
|
},
|
||||||
|
android.CommonAttributes{Name: name},
|
||||||
|
&LexAttrs{
|
||||||
|
Srcs: srcs,
|
||||||
|
Lexopts: opts,
|
||||||
|
})
|
||||||
|
return bazel.LabelAttribute{Value: &bazel.Label{Label: ":" + name}}
|
||||||
|
}
|
||||||
|
|
||||||
func genSysprop(ctx android.ModuleContext, syspropFile android.Path) (android.Path, android.Paths) {
|
func genSysprop(ctx android.ModuleContext, syspropFile android.Path) (android.Path, android.Paths) {
|
||||||
headerFile := android.PathForModuleGen(ctx, "sysprop", "include", syspropFile.Rel()+".h")
|
headerFile := android.PathForModuleGen(ctx, "sysprop", "include", syspropFile.Rel()+".h")
|
||||||
publicHeaderFile := android.PathForModuleGen(ctx, "sysprop/public", "include", syspropFile.Rel()+".h")
|
publicHeaderFile := android.PathForModuleGen(ctx, "sysprop/public", "include", syspropFile.Rel()+".h")
|
||||||
|
Reference in New Issue
Block a user