summaryrefslogtreecommitdiff
path: root/rust/builder.go
diff options
context:
space:
mode:
author A. Cody Schuffelen <schuffelen@google.com> 2023-07-13 19:03:39 -0700
committer A. Cody Schuffelen <schuffelen@google.com> 2023-08-03 16:26:44 -0700
commitf29ca58e88c5846bbe8955e5192135e5ab4f14a1 (patch)
tree1eea81e6f3b0a185c5e9b87ef018b10ef6c144a1 /rust/builder.go
parentcfe9e6d00823dbf4bfdd9f29a57c6a82baf68e97 (diff)
Darwin/Mac OS host rust compilation fixes
- Don't pass `--as-needed` to the linker on Mac OS which is unsupported there - Use `--force_load` rather than `--Wl,--whole-archive` on Mac OS - Scan `rustc`'s linker arguments for `-dylib` and `-dynamiclib`, which it can use instead of `-shared` on Mac OS: https://github.com/rust-lang/rust/blob/7bd81ee1902c049691d0a1f03be5558bee51d100/compiler/rustc_codegen_ssa/src/back/linker.rs#L319 Test: m libhalf serde_derive Bug: 291164566 Change-Id: Iecd6c2532fa31c9476834f49b109de98cbd2dccf
Diffstat (limited to 'rust/builder.go')
-rw-r--r--rust/builder.go20
1 files changed, 15 insertions, 5 deletions
diff --git a/rust/builder.go b/rust/builder.go
index fbceecc80..b1f049d15 100644
--- a/rust/builder.go
+++ b/rust/builder.go
@@ -45,9 +45,9 @@ var (
"rustcFlags", "libFlags", "envVars")
rustLink = pctx.AndroidStaticRule("rustLink",
blueprint.RuleParams{
- Command: "${config.RustLinker} -o $out ${crtBegin} ${config.RustLinkerArgs} @$in ${linkFlags} ${crtEnd}",
+ Command: "${config.RustLinker} -o $out ${crtBegin} ${earlyLinkFlags} @$in ${linkFlags} ${crtEnd}",
},
- "linkFlags", "crtBegin", "crtEnd")
+ "earlyLinkFlags", "linkFlags", "crtBegin", "crtEnd")
_ = pctx.SourcePathVariable("rustdocCmd", "${config.RustBin}/rustdoc")
rustdoc = pctx.AndroidStaticRule("rustdoc",
@@ -244,6 +244,10 @@ func rustEnvVars(ctx ModuleContext, deps PathDeps) []string {
envVars = append(envVars, "AR=${cc_config.ClangBin}/llvm-ar")
+ if ctx.Darwin() {
+ envVars = append(envVars, "ANDROID_RUST_DARWIN=true")
+ }
+
return envVars
}
@@ -254,6 +258,7 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
var implicits, linkImplicits, linkOrderOnly android.Paths
var output buildOutput
var rustcFlags, linkFlags []string
+ var earlyLinkFlags string
output.outputFile = outputFile
crateName := ctx.RustModule().CrateName()
@@ -292,6 +297,10 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
}
// Collect linker flags
+ if !ctx.Darwin() {
+ earlyLinkFlags = "-Wl,--as-needed"
+ }
+
linkFlags = append(linkFlags, flags.GlobalLinkFlags...)
linkFlags = append(linkFlags, flags.LinkFlags...)
@@ -391,9 +400,10 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
Implicits: linkImplicits,
OrderOnly: linkOrderOnly,
Args: map[string]string{
- "linkFlags": strings.Join(linkFlags, " "),
- "crtBegin": strings.Join(deps.CrtBegin.Strings(), " "),
- "crtEnd": strings.Join(deps.CrtEnd.Strings(), " "),
+ "earlyLinkFlags": earlyLinkFlags,
+ "linkFlags": strings.Join(linkFlags, " "),
+ "crtBegin": strings.Join(deps.CrtBegin.Strings(), " "),
+ "crtEnd": strings.Join(deps.CrtEnd.Strings(), " "),
},
})
}