summaryrefslogtreecommitdiff
path: root/scripts/mkcratersp.py
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 /scripts/mkcratersp.py
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 'scripts/mkcratersp.py')
-rwxr-xr-xscripts/mkcratersp.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/scripts/mkcratersp.py b/scripts/mkcratersp.py
index 86b4aa3fb..6ef01ebcc 100755
--- a/scripts/mkcratersp.py
+++ b/scripts/mkcratersp.py
@@ -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,9 +66,13 @@ create_archive(f'{out}.whole.a', objects, [])
create_archive(f'{out}.a', [], temp_archives)
with open(out, 'w') as f:
- print(f'-Wl,--whole-archive', file=f)
- print(f'{out}.whole.a', file=f)
- print(f'-Wl,--no-whole-archive', file=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)
print(f'{out}.a', file=f)
for a in archives:
print(a, file=f)