Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b42a0976 authored by Cody Schuffelen's avatar Cody Schuffelen Committed by Automerger Merge Worker
Browse files

Merge "Darwin/Mac OS host rust compilation fixes" into main am: a405301f

parents e380846f a405301f
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -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,6 +400,7 @@ func transformSrctoCrate(ctx ModuleContext, main android.Path, deps PathDeps, fl
			Implicits:   linkImplicits,
			OrderOnly:   linkOrderOnly,
			Args: map[string]string{
				"earlyLinkFlags": earlyLinkFlags,
				"linkFlags":      strings.Join(linkFlags, " "),
				"crtBegin":       strings.Join(deps.CrtBegin.Strings(), " "),
				"crtEnd":         strings.Join(deps.CrtEnd.Strings(), " "),
+0 −1
Original line number Diff line number Diff line
@@ -102,7 +102,6 @@ func init() {

	pctx.ImportAs("cc_config", "android/soong/cc/config")
	pctx.StaticVariable("RustLinker", "${cc_config.ClangBin}/clang++")
	pctx.StaticVariable("RustLinkerArgs", "-Wl,--as-needed")

	pctx.StaticVariable("DeviceGlobalLinkFlags", strings.Join(deviceGlobalLinkFlags, " "))

+9 −3
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ for i, arg in enumerate(sys.argv):
    linkdirs.append(sys.argv[i+1])
  if arg.startswith('-l') or arg == '-shared':
    libs.append(arg)
  if os.getenv('ANDROID_RUST_DARWIN') and (arg == '-dylib' or arg == '-dynamiclib'):
    libs.append(arg)
  if arg.startswith('-Wl,--version-script='):
    version_script = arg[21:]
  if arg[0] == '-':
@@ -64,6 +66,10 @@ create_archive(f'{out}.whole.a', objects, [])
create_archive(f'{out}.a', [], temp_archives)

with open(out, 'w') as f:
  if os.getenv("ANDROID_RUST_DARWIN"):
    print(f'-force_load', file=f)
    print(f'{out}.whole.a', file=f)
  else:
    print(f'-Wl,--whole-archive', file=f)
    print(f'{out}.whole.a', file=f)
    print(f'-Wl,--no-whole-archive', file=f)