xref: /aosp_15_r20/external/executorch/scripts/strip_binary.py (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates.
3*523fa7a6SAndroid Build Coastguard Worker# All rights reserved.
4*523fa7a6SAndroid Build Coastguard Worker#
5*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the
6*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree.
7*523fa7a6SAndroid Build Coastguard Worker
8*523fa7a6SAndroid Build Coastguard Worker# pyre-strict
9*523fa7a6SAndroid Build Coastguard Worker
10*523fa7a6SAndroid Build Coastguard Worker"""
11*523fa7a6SAndroid Build Coastguard WorkerStrip a binary file using the ELF `strip` tool specified by a Skycastle workflow.
12*523fa7a6SAndroid Build Coastguard Worker
13*523fa7a6SAndroid Build Coastguard WorkerUsage:
14*523fa7a6SAndroid Build Coastguard Worker    strip_binary.py input_path output_path
15*523fa7a6SAndroid Build Coastguard Worker
16*523fa7a6SAndroid Build Coastguard Worker    Strip the ELF binary given by `input_path`, outputting the stripped
17*523fa7a6SAndroid Build Coastguard Worker    binary to `output_path`.
18*523fa7a6SAndroid Build Coastguard Worker"""
19*523fa7a6SAndroid Build Coastguard Worker
20*523fa7a6SAndroid Build Coastguard Workerimport subprocess
21*523fa7a6SAndroid Build Coastguard Workerimport sys
22*523fa7a6SAndroid Build Coastguard Workerfrom pathlib import Path
23*523fa7a6SAndroid Build Coastguard Worker
24*523fa7a6SAndroid Build Coastguard Worker
25*523fa7a6SAndroid Build Coastguard Workerdef main():
26*523fa7a6SAndroid Build Coastguard Worker    if len(sys.argv) != 3:
27*523fa7a6SAndroid Build Coastguard Worker        print("Must specify input and output file paths")
28*523fa7a6SAndroid Build Coastguard Worker        sys.exit(1)
29*523fa7a6SAndroid Build Coastguard Worker
30*523fa7a6SAndroid Build Coastguard Worker    input_file = Path(sys.argv[1])
31*523fa7a6SAndroid Build Coastguard Worker    output_file = Path(sys.argv[2])
32*523fa7a6SAndroid Build Coastguard Worker
33*523fa7a6SAndroid Build Coastguard Worker    # Assumes `strip` tool is in the path (should be specified by Skycastle workflow).
34*523fa7a6SAndroid Build Coastguard Worker    # GNU `strip`, or equivalent, should work for x86 and ARM ELF binaries. This might
35*523fa7a6SAndroid Build Coastguard Worker    # not be appropriate for more exotic, non-ELF toolchains.
36*523fa7a6SAndroid Build Coastguard Worker    completed = subprocess.run(["strip", "--strip-all", input_file, "-o", output_file])
37*523fa7a6SAndroid Build Coastguard Worker    sys.exit(completed.returncode)
38*523fa7a6SAndroid Build Coastguard Worker
39*523fa7a6SAndroid Build Coastguard Worker
40*523fa7a6SAndroid Build Coastguard Workerif __name__ == "__main__":
41*523fa7a6SAndroid Build Coastguard Worker    main()
42