14cffe588Sopenharmony_ci#!/usr/bin/env python 24cffe588Sopenharmony_ci# -*- coding: utf-8 -*- 34cffe588Sopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd. 44cffe588Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 54cffe588Sopenharmony_ci# you may not use this file except in compliance with the License. 64cffe588Sopenharmony_ci# You may obtain a copy of the License at 74cffe588Sopenharmony_ci# 84cffe588Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 94cffe588Sopenharmony_ci# 104cffe588Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 114cffe588Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 124cffe588Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134cffe588Sopenharmony_ci# See the License for the specific language governing permissions and 144cffe588Sopenharmony_ci# limitations under the License. 154cffe588Sopenharmony_ci 164cffe588Sopenharmony_ciimport tarfile 174cffe588Sopenharmony_ciimport argparse 184cffe588Sopenharmony_ciimport os 194cffe588Sopenharmony_ciimport subprocess 204cffe588Sopenharmony_ciimport sys 214cffe588Sopenharmony_ciimport shutil 224cffe588Sopenharmony_ci 234cffe588Sopenharmony_cipatch_files = [ 244cffe588Sopenharmony_ci "backport-x86-64-Always-double-jump-table-slot-size-for-CET-71.patch", 254cffe588Sopenharmony_ci "backport-Fix-check-for-invalid-varargs-arguments-707.patch", 264cffe588Sopenharmony_ci "libffi-Add-sw64-architecture.patch", 274cffe588Sopenharmony_ci "backport-Fix-signed-vs-unsigned-comparison.patch", 284cffe588Sopenharmony_ci "riscv-extend-return-types-smaller-than-ffi_arg-680.patch", 294cffe588Sopenharmony_ci "fix-AARCH64EB-support.patch", 304cffe588Sopenharmony_ci "backport-openharmony-adapt.patch", 314cffe588Sopenharmony_ci "backport-openharmony-dummy.patch" 324cffe588Sopenharmony_ci] 334cffe588Sopenharmony_ci 344cffe588Sopenharmony_cidef untar_file(tar_file_path, extract_path): 354cffe588Sopenharmony_ci try: 364cffe588Sopenharmony_ci tar_cmd = ['tar', '-zxf', tar_file_path, '-C', extract_path] 374cffe588Sopenharmony_ci subprocess.run(tar_cmd, check=True) 384cffe588Sopenharmony_ci except Exception as e: 394cffe588Sopenharmony_ci print("tar error!") 404cffe588Sopenharmony_ci return 414cffe588Sopenharmony_ci 424cffe588Sopenharmony_cidef move_file(src_path, dst_path): 434cffe588Sopenharmony_ci patch_dir = os.path.join(src_path, "patch") 444cffe588Sopenharmony_ci for file in patch_files: 454cffe588Sopenharmony_ci src_file = os.path.join(patch_dir, file) 464cffe588Sopenharmony_ci dst_file = os.path.join(dst_path, file) 474cffe588Sopenharmony_ci shutil.copy(src_file, dst_file) 484cffe588Sopenharmony_ci 494cffe588Sopenharmony_cidef apply_patch(patch_file, target_dir): 504cffe588Sopenharmony_ci try: 514cffe588Sopenharmony_ci if not os.path.exists(target_dir): 524cffe588Sopenharmony_ci return 534cffe588Sopenharmony_ci patch_cmd = ['patch', '-p1', "--fuzz=0", "--no-backup-if-mismatch", '-i', patch_file, '-d', target_dir] 544cffe588Sopenharmony_ci subprocess.run(patch_cmd, check=True) 554cffe588Sopenharmony_ci except Exception as e: 564cffe588Sopenharmony_ci print("apply_patch error!") 574cffe588Sopenharmony_ci return 584cffe588Sopenharmony_ci 594cffe588Sopenharmony_cidef do_patch(target_dir): 604cffe588Sopenharmony_ci for patch in patch_files: 614cffe588Sopenharmony_ci apply_patch(patch, target_dir) 624cffe588Sopenharmony_ci 634cffe588Sopenharmony_cidef main(): 644cffe588Sopenharmony_ci libffi_path = argparse.ArgumentParser() 654cffe588Sopenharmony_ci libffi_path.add_argument('--gen-dir', help='generate path of log', required=True) 664cffe588Sopenharmony_ci libffi_path.add_argument('--source-dir', help='generate path of log', required=True) 674cffe588Sopenharmony_ci args = libffi_path.parse_args() 684cffe588Sopenharmony_ci tar_file_path = os.path.join(args.source_dir, "libffi-3.4.2.tar.gz") 694cffe588Sopenharmony_ci target_dir = os.path.join(args.gen_dir, "libffi-3.4.2") 704cffe588Sopenharmony_ci 714cffe588Sopenharmony_ci untar_file(tar_file_path, args.gen_dir) 724cffe588Sopenharmony_ci move_file(args.source_dir, target_dir) 734cffe588Sopenharmony_ci do_patch(target_dir) 744cffe588Sopenharmony_ci return 0 754cffe588Sopenharmony_ci 764cffe588Sopenharmony_ciif __name__ == '__main__': 774cffe588Sopenharmony_ci sys.exit(main()) 78