aboutsummaryrefslogtreecommitdiff
path: root/desktop/scripts/macos-merge-universal.py
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/scripts/macos-merge-universal.py')
-rwxr-xr-xdesktop/scripts/macos-merge-universal.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/desktop/scripts/macos-merge-universal.py b/desktop/scripts/macos-merge-universal.py
new file mode 100755
index 00000000..d67bf957
--- /dev/null
+++ b/desktop/scripts/macos-merge-universal.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python3
+import os
+import shutil
+import click
+import subprocess
+
+
+from common import get_binary_arches
+
+
+@click.command()
+@click.argument("intel_app", type=click.Path(exists=True))
+@click.argument("silicon_app", type=click.Path(exists=True))
+@click.argument("output_app", type=click.Path(exists=False))
+def main(intel_app, silicon_app, output_app):
+ # Get the list of binaries in each app
+ print("Looking up binaries from Intel app:", intel_app)
+ intel_universal, intel_silicon, intel_intel = get_binary_arches(intel_app)
+ print("Looking up binaries from Silicon app:", silicon_app)
+ silicon_universal, silicon_silicon, silicon_intel = get_binary_arches(silicon_app)
+
+ # Find which binaries should be merged
+ intel_intel_filenames = [i[len(intel_app) + 1 :] for i in intel_intel]
+ silicon_silicon_filenames = [i[len(silicon_app) + 1 :] for i in silicon_silicon]
+ intersection = set(intel_intel_filenames).intersection(
+ set(silicon_silicon_filenames)
+ )
+
+ # Copy the Silicon app to the output app
+ print("Copying the app bundle for the output app")
+ shutil.copytree(silicon_app, output_app, symlinks=True)
+
+ # Merge them
+ for filename in intersection:
+ print(f"Merging {filename}")
+ intel_binary = os.path.join(intel_app, filename)
+ silicon_binary = os.path.join(silicon_app, filename)
+ output_binary = os.path.join(output_app, filename)
+ subprocess.run(
+ ["lipo", "-create", intel_binary, silicon_binary, "-output", output_binary]
+ )
+
+ print(f"Merge complete: {output_app}")
+
+
+if __name__ == "__main__":
+ main()