soong: add support for module specific lexer flags
To support module specific lexer flags, this follows the same strategy as the yacc flags: - add LexProperties to the BaseCompilerProperties - propagate those flags to the generator generation (i.e. genLex) - add a placeholder for custom flags - replace the placeholder with the concatenated flags This might not support escaping very well, but I figured that this is a very edge case. Support for escaping etc. could be added later on. Bug: 159682555 Signed-off-by: Matthias Maennich <maennich@google.com> Change-Id: I31a3b783bb05213fe1621191031952b41b318103
This commit is contained in:
@@ -361,6 +361,7 @@ type builderFlags struct {
|
|||||||
protoOptionsFile bool
|
protoOptionsFile bool
|
||||||
|
|
||||||
yacc *YaccProperties
|
yacc *YaccProperties
|
||||||
|
lex *LexProperties
|
||||||
}
|
}
|
||||||
|
|
||||||
type Objects struct {
|
type Objects struct {
|
||||||
|
1
cc/cc.go
1
cc/cc.go
@@ -210,6 +210,7 @@ type Flags struct {
|
|||||||
protoOptionsFile bool // Whether to look for a .options file next to the .proto
|
protoOptionsFile bool // Whether to look for a .options file next to the .proto
|
||||||
|
|
||||||
Yacc *YaccProperties
|
Yacc *YaccProperties
|
||||||
|
Lex *LexProperties
|
||||||
}
|
}
|
||||||
|
|
||||||
// Properties used to compile all C or C++ modules
|
// Properties used to compile all C or C++ modules
|
||||||
|
@@ -111,6 +111,7 @@ type BaseCompilerProperties struct {
|
|||||||
Gnu_extensions *bool
|
Gnu_extensions *bool
|
||||||
|
|
||||||
Yacc *YaccProperties
|
Yacc *YaccProperties
|
||||||
|
Lex *LexProperties
|
||||||
|
|
||||||
Aidl struct {
|
Aidl struct {
|
||||||
// list of directories that will be added to the aidl include paths.
|
// list of directories that will be added to the aidl include paths.
|
||||||
@@ -289,6 +290,7 @@ func (compiler *baseCompiler) compilerFlags(ctx ModuleContext, flags Flags, deps
|
|||||||
flags.Local.YasmFlags = append(flags.Local.YasmFlags, esc(compiler.Properties.Asflags)...)
|
flags.Local.YasmFlags = append(flags.Local.YasmFlags, esc(compiler.Properties.Asflags)...)
|
||||||
|
|
||||||
flags.Yacc = compiler.Properties.Yacc
|
flags.Yacc = compiler.Properties.Yacc
|
||||||
|
flags.Lex = compiler.Properties.Lex
|
||||||
|
|
||||||
// Include dir cflags
|
// Include dir cflags
|
||||||
localIncludeDirs := android.PathsForModuleSrc(ctx, compiler.Properties.Local_include_dirs)
|
localIncludeDirs := android.PathsForModuleSrc(ctx, compiler.Properties.Local_include_dirs)
|
||||||
|
21
cc/gen.go
21
cc/gen.go
@@ -34,9 +34,9 @@ func init() {
|
|||||||
var (
|
var (
|
||||||
lex = pctx.AndroidStaticRule("lex",
|
lex = pctx.AndroidStaticRule("lex",
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
Command: "M4=$m4Cmd $lexCmd -o$out $in",
|
Command: "M4=$m4Cmd $lexCmd $flags -o$out $in",
|
||||||
CommandDeps: []string{"$lexCmd", "$m4Cmd"},
|
CommandDeps: []string{"$lexCmd", "$m4Cmd"},
|
||||||
})
|
}, "flags")
|
||||||
|
|
||||||
sysprop = pctx.AndroidStaticRule("sysprop",
|
sysprop = pctx.AndroidStaticRule("sysprop",
|
||||||
blueprint.RuleParams{
|
blueprint.RuleParams{
|
||||||
@@ -153,12 +153,23 @@ func genAidl(ctx android.ModuleContext, rule *android.RuleBuilder, aidlFile andr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func genLex(ctx android.ModuleContext, lexFile android.Path, outFile android.ModuleGenPath) {
|
type LexProperties struct {
|
||||||
|
// list of module-specific flags that will be used for .l and .ll compiles
|
||||||
|
Flags []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func genLex(ctx android.ModuleContext, lexFile android.Path, outFile android.ModuleGenPath, props *LexProperties) {
|
||||||
|
var flags []string
|
||||||
|
if props != nil {
|
||||||
|
flags = props.Flags
|
||||||
|
}
|
||||||
|
flagsString := strings.Join(flags[:], " ")
|
||||||
ctx.Build(pctx, android.BuildParams{
|
ctx.Build(pctx, android.BuildParams{
|
||||||
Rule: lex,
|
Rule: lex,
|
||||||
Description: "lex " + lexFile.Rel(),
|
Description: "lex " + lexFile.Rel(),
|
||||||
Output: outFile,
|
Output: outFile,
|
||||||
Input: lexFile,
|
Input: lexFile,
|
||||||
|
Args: map[string]string{"flags": flagsString},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,11 +246,11 @@ func genSources(ctx android.ModuleContext, srcFiles android.Paths,
|
|||||||
case ".l":
|
case ".l":
|
||||||
cFile := android.GenPathWithExt(ctx, "lex", srcFile, "c")
|
cFile := android.GenPathWithExt(ctx, "lex", srcFile, "c")
|
||||||
srcFiles[i] = cFile
|
srcFiles[i] = cFile
|
||||||
genLex(ctx, srcFile, cFile)
|
genLex(ctx, srcFile, cFile, buildFlags.lex)
|
||||||
case ".ll":
|
case ".ll":
|
||||||
cppFile := android.GenPathWithExt(ctx, "lex", srcFile, "cpp")
|
cppFile := android.GenPathWithExt(ctx, "lex", srcFile, "cpp")
|
||||||
srcFiles[i] = cppFile
|
srcFiles[i] = cppFile
|
||||||
genLex(ctx, srcFile, cppFile)
|
genLex(ctx, srcFile, cppFile, buildFlags.lex)
|
||||||
case ".proto":
|
case ".proto":
|
||||||
ccFile, headerFile := genProto(ctx, srcFile, buildFlags)
|
ccFile, headerFile := genProto(ctx, srcFile, buildFlags)
|
||||||
srcFiles[i] = ccFile
|
srcFiles[i] = ccFile
|
||||||
|
@@ -97,6 +97,7 @@ func flagsToBuilderFlags(in Flags) builderFlags {
|
|||||||
protoOptionsFile: in.protoOptionsFile,
|
protoOptionsFile: in.protoOptionsFile,
|
||||||
|
|
||||||
yacc: in.Yacc,
|
yacc: in.Yacc,
|
||||||
|
lex: in.Lex,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user