Support .asm files for assembly
Test: mmma -j external/libjpeg-turbo
Change-Id: Id192dae5d74ecbf500fc668931c37f9b91d25ca4
diff --git a/cc/builder.go b/cc/builder.go
index a568a29..ee53f41 100644
--- a/cc/builder.go
+++ b/cc/builder.go
@@ -158,6 +158,16 @@
Description: "tidy $out",
},
"cFlags", "tidyFlags")
+
+ yasmCmd = pctx.SourcePathVariable("yasmCmd", "prebuilts/misc/${config.HostPrebuiltTag}/yasm/yasm")
+
+ yasm = pctx.AndroidStaticRule("yasm",
+ blueprint.RuleParams{
+ Command: "$yasmCmd $asFlags -o $out $in",
+ CommandDeps: []string{"$yasmCmd"},
+ Description: "yasm $out",
+ },
+ "asFlags")
)
func init() {
@@ -183,6 +193,7 @@
yaccFlags string
protoFlags string
tidyFlags string
+ yasmFlags string
toolchain config.Toolchain
clang bool
tidy bool
@@ -240,6 +251,19 @@
objFiles[i] = objFile
+ if srcFile.Ext() == ".asm" {
+ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+ Rule: yasm,
+ Output: objFile,
+ Input: srcFile,
+ OrderOnly: deps,
+ Args: map[string]string{
+ "asFlags": flags.yasmFlags,
+ },
+ })
+ continue
+ }
+
var moduleCflags string
var ccCmd string
tidy := flags.tidy && flags.clang
diff --git a/cc/cc.go b/cc/cc.go
index df4e5cf..a4f8e58 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -101,6 +101,7 @@
LdFlags []string // Flags that apply to linker command lines
libFlags []string // Flags to add libraries early to the link order
TidyFlags []string // Flags that apply to clang-tidy
+ YasmFlags []string // Flags that apply to yasm assembly source files
Toolchain config.Toolchain
Clang bool
diff --git a/cc/compiler.go b/cc/compiler.go
index def8d58..04f536f 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -147,6 +147,7 @@
flags.CppFlags = append(flags.CppFlags, esc(compiler.Properties.Cppflags)...)
flags.ConlyFlags = append(flags.ConlyFlags, esc(compiler.Properties.Conlyflags)...)
flags.AsFlags = append(flags.AsFlags, esc(compiler.Properties.Asflags)...)
+ flags.YasmFlags = append(flags.YasmFlags, esc(compiler.Properties.Asflags)...)
flags.YaccFlags = append(flags.YaccFlags, esc(compiler.Properties.Yaccflags)...)
// Include dir cflags
@@ -281,6 +282,8 @@
} else {
flags.CppFlags = append(flags.CppFlags, tc.Cppflags())
}
+
+ flags.YasmFlags = append(flags.YasmFlags, tc.YasmFlags())
}
if flags.Clang {
diff --git a/cc/config/toolchain.go b/cc/config/toolchain.go
index 020a0dd..995c8c6 100644
--- a/cc/config/toolchain.go
+++ b/cc/config/toolchain.go
@@ -66,6 +66,8 @@
ClangLdflags() string
ClangInstructionSetFlags(string) (string, error)
+ YasmFlags() string
+
Is64Bit() bool
ShlibSuffix() string
@@ -127,6 +129,10 @@
return ""
}
+func (toolchainBase) YasmFlags() string {
+ return ""
+}
+
func (toolchainBase) SanitizerRuntimeLibraryArch() string {
return ""
}
diff --git a/cc/config/x86_64_device.go b/cc/config/x86_64_device.go
index 918ddf7..2a6fe2a 100644
--- a/cc/config/x86_64_device.go
+++ b/cc/config/x86_64_device.go
@@ -166,6 +166,9 @@
pctx.StaticVariable("X86_64ClangLdflags", strings.Join(ClangFilterUnknownCflags(x86_64Ldflags), " "))
pctx.StaticVariable("X86_64ClangCppflags", strings.Join(ClangFilterUnknownCflags(x86_64Cppflags), " "))
+ // Yasm flags
+ pctx.StaticVariable("X86_64YasmFlags", "-f elf64 -m amd64")
+
// Extended cflags
// Architecture variant cflags
@@ -245,6 +248,10 @@
return "${config.X86_64Ldflags}"
}
+func (t *toolchainX86_64) YasmFlags() string {
+ return "${config.X86_64YasmFlags}"
+}
+
func (toolchainX86_64) SanitizerRuntimeLibraryArch() string {
return "x86_64"
}
diff --git a/cc/config/x86_device.go b/cc/config/x86_device.go
index 6b55564..23518b6 100644
--- a/cc/config/x86_device.go
+++ b/cc/config/x86_device.go
@@ -188,6 +188,9 @@
pctx.StaticVariable("X86ClangLdflags", strings.Join(ClangFilterUnknownCflags(x86Ldflags), " "))
pctx.StaticVariable("X86ClangCppflags", strings.Join(ClangFilterUnknownCflags(x86Cppflags), " "))
+ // Yasm flags
+ pctx.StaticVariable("X86YasmFlags", "-f elf32 -m x86")
+
// Extended cflags
// Architecture variant cflags
@@ -267,6 +270,10 @@
return "${config.X86Ldflags}"
}
+func (t *toolchainX86) YasmFlags() string {
+ return "${config.X86YasmFlags}"
+}
+
func (toolchainX86) SanitizerRuntimeLibraryArch() string {
return "i686"
}
diff --git a/cc/util.go b/cc/util.go
index 1cb3dd7..9f958d1 100644
--- a/cc/util.go
+++ b/cc/util.go
@@ -97,6 +97,7 @@
ldFlags: strings.Join(in.LdFlags, " "),
libFlags: strings.Join(in.libFlags, " "),
tidyFlags: strings.Join(in.TidyFlags, " "),
+ yasmFlags: strings.Join(in.YasmFlags, " "),
toolchain: in.Toolchain,
clang: in.Clang,
tidy: in.Tidy,