1570af302Sopenharmony_ci#!/usr/bin/env python
2570af302Sopenharmony_ci
3570af302Sopenharmony_ciimport os
4570af302Sopenharmony_ciimport sys
5570af302Sopenharmony_ciimport argparse
6570af302Sopenharmony_ciimport subprocess
7570af302Sopenharmony_cifrom shutil import copy
8570af302Sopenharmony_ci
9570af302Sopenharmony_cidef exec_command(cmd, log_path='out/build.log', **kwargs):
10570af302Sopenharmony_ci    process = subprocess.Popen(cmd)
11570af302Sopenharmony_ci    process.wait()
12570af302Sopenharmony_ci    ret_code = process.returncode
13570af302Sopenharmony_ci
14570af302Sopenharmony_ci    if ret_code != 0:
15570af302Sopenharmony_ci        raise Exception("{} failed, return code is {}".format(cmd, ret_code))
16570af302Sopenharmony_ci
17570af302Sopenharmony_cidef musl_copy_file(src, dest):
18570af302Sopenharmony_ci    dest_dir = os.path.dirname(dest)
19570af302Sopenharmony_ci    if not os.path.exists(dest_dir):
20570af302Sopenharmony_ci        os.makedirs(dest_dir)
21570af302Sopenharmony_ci    copy(src, dest)
22570af302Sopenharmony_ci
23570af302Sopenharmony_cidef main():
24570af302Sopenharmony_ci    parser = argparse.ArgumentParser(description=__doc__)
25570af302Sopenharmony_ci
26570af302Sopenharmony_ci    parser.add_argument('--input',
27570af302Sopenharmony_ci                        required = True,
28570af302Sopenharmony_ci                        help = 'The header source path',
29570af302Sopenharmony_ci                        metavar = 'FILE')
30570af302Sopenharmony_ci
31570af302Sopenharmony_ci    parser.add_argument('--output',
32570af302Sopenharmony_ci                        required = True,
33570af302Sopenharmony_ci                        help = 'The output directory',
34570af302Sopenharmony_ci                        metavar = 'FILE')
35570af302Sopenharmony_ci
36570af302Sopenharmony_ci    parser.add_argument('--ldpath',
37570af302Sopenharmony_ci                        required = True,
38570af302Sopenharmony_ci                        help = 'The ld file path',
39570af302Sopenharmony_ci                        metavar = 'FILE')
40570af302Sopenharmony_ci
41570af302Sopenharmony_ci    parser.add_argument('--crtplus',
42570af302Sopenharmony_ci                        required = True,
43570af302Sopenharmony_ci                        help = 'The crtplus file path',
44570af302Sopenharmony_ci                        metavar = 'FILE')
45570af302Sopenharmony_ci
46570af302Sopenharmony_ci    args = parser.parse_args()
47570af302Sopenharmony_ci
48570af302Sopenharmony_ci    if os.path.basename(args.input) == 'crtn.o':
49570af302Sopenharmony_ci        ldargs = [args.ldpath, "-r", args.input, args.crtplus, "-o", args.output]
50570af302Sopenharmony_ci        exec_command(ldargs)
51570af302Sopenharmony_ci    else:
52570af302Sopenharmony_ci        musl_copy_file(args.input, args.output)
53570af302Sopenharmony_ci
54570af302Sopenharmony_ciif __name__ == "__main__":
55570af302Sopenharmony_ci    sys.exit(main())
56