1 From c3a2332443a87b1a5c9477838cae5314413eebe6 Mon Sep 17 00:00:00 2001
2 From: Jackie Huang <jackie.huang@windriver.com>
3 Date: Wed, 26 Jul 2023 13:06:48 +0800
4 Subject: [PATCH 2/4] downloader: add support for arm64
7 * Dwnload arch specific binaries for arm64.
8 * Support arch specific pkg list files, and the
9 arch specific one (with suffix _arm64) will be used
15 debian_pkg_dirs_rt_arm64
16 debian_pkg_dirs_installer
17 debian_pkg_dirs_installer_arm64
20 base-bullseye_arm64.lst
26 PASS: update packages list for arm64 in repos:
32 PASS: downloader -s -b on x86-64 host
33 PASS: downloader -s -b on arm64 host
34 PASS: build-pkgs on x86-64 host
35 PASS: build-image on x86-64 host
36 PASS: build-pkgs on arm64 host
37 PASS: build-image on arm64 host
38 PASS: Deploy AIO-SX on x86-64 target
39 PASS: Deploy AIO-SX on arm64 target
44 Change-Id: I5fadf737ee75fc631d57d6bf689d54638548bffe
45 Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
47 build-tools/stx/debdownloader | 5 +++++
48 build-tools/stx/downloader | 37 +++++++++++++++++++++++++++--------
49 2 files changed, 34 insertions(+), 8 deletions(-)
51 diff --git a/build-tools/stx/debdownloader b/build-tools/stx/debdownloader
52 index 6988cc7..a1ca92e 100755
53 --- a/build-tools/stx/debdownloader
54 +++ b/build-tools/stx/debdownloader
55 @@ -109,6 +109,7 @@ if __name__ == "__main__":
57 major_ver = version.split(":")[-1]
58 pname_x86 = ''.join([name, '_', major_ver, '_amd64.deb'])
59 + pname_arm64 = ''.join([name, '_', major_ver, '_arm64.deb'])
60 pname_all = ''.join([name, '_', major_ver, '_all.deb'])
61 if repomgr.search_pkg(REPO_BIN, name, version):
62 logger.info(''.join([name, '-', version,
63 @@ -118,6 +119,10 @@ if __name__ == "__main__":
64 logger.info(''.join([name, '-', version,
65 ' already downloaded, skip download']))
66 debs_need_upload.append(pname_x86)
67 + elif debs_downloaded and pname_arm64 in debs_downloaded:
68 + logger.info(''.join([name, '-', version,
69 + ' already downloaded, skip download']))
70 + debs_need_upload.append(pname_arm64)
72 if debs_downloaded and pname_all in debs_downloaded:
73 logger.info(''.join([name, '-', version,
74 diff --git a/build-tools/stx/downloader b/build-tools/stx/downloader
75 index 14d97f7..2d98707 100755
76 --- a/build-tools/stx/downloader
77 +++ b/build-tools/stx/downloader
78 @@ -27,8 +27,14 @@ import shutil
84 -DEFAULT_ARCH = 'amd64'
86 +host_arch = platform.machine()
87 +if host_arch == 'aarch64':
90 +DEB_DISTRO = 'bullseye'
91 REPO_BIN = 'deb-local-binary'
92 mirror_root = os.environ.get('STX_MIRROR')
93 stx_src_mirror = os.path.join(mirror_root, 'sources')
94 @@ -115,7 +121,11 @@ def get_all_stx_pkgs():
96 # Find all types of package dirs?
97 if r in types_pkg_dirs:
98 - pkgs_file = os.path.join(root, r)
99 + r_arch = r + "_" + STX_ARCH
100 + if os.path.isfile(r_arch):
101 + pkgs_file = os.path.join(root, r_arch)
103 + pkgs_file = os.path.join(root, r)
104 pkgs.update(get_pkgs_from_list(root, pkgs_file))
107 @@ -153,24 +163,34 @@ def get_all_binary_list(distro=STX_DEFAULT_DISTRO, layers=None, build_types=None
108 logger.warning(' '.join([build_type, 'is not a valid build_type for distro', distro, 'of layer', layer]))
111 - pattern=''.join(['os-',build_type,'.lst'])
112 + pattern = ''.join(['os-', build_type, '.lst'])
113 + pattern_arch = ''.join(['os-', build_type, '_', STX_ARCH, '.lst'])
114 for root, dirs, files in os.walk(search_dir):
115 for f in fnmatch.filter(files, pattern):
116 - layer_binaries[layer].append(os.path.join(root, f))
117 + f_arch = os.path.join(root, pattern_arch)
118 + if os.path.isfile(f_arch):
119 + layer_binaries[layer].append(os.path.join(root, f_arch))
121 + layer_binaries[layer].append(os.path.join(root, f))
123 f"Binary lists for layer `{layer}`: "
124 f"{layer_binaries[layer]}"
127 search_dir = os.path.join(stx_config, 'common')
128 - pattern='base-*.lst'
129 + pattern = ''.join(['base-', DEB_DISTRO, '.lst'])
130 + pattern_arch = ''.join(['base-', DEB_DISTRO, '_', STX_ARCH, '.lst'])
132 if "common" not in layer_binaries:
133 layer_binaries["common"] = []
135 for root, dirs, files in os.walk(search_dir):
136 for f in fnmatch.filter(files, pattern):
137 - layer_binaries["common"].append(os.path.join(root, f))
138 + f_arch = os.path.join(root, pattern_arch)
139 + if os.path.isfile(f_arch):
140 + layer_binaries["common"].append(os.path.join(root, f_arch))
142 + layer_binaries["common"].append(os.path.join(root, f))
145 f"Binary lists for layer `common`: "
146 @@ -727,13 +747,14 @@ if __name__ == "__main__":
147 args.download_source = True
149 if args.download_binary:
151 all_binary_lists = get_all_binary_list(distro=distro, layers=layers, build_types=build_types)
152 - binary_dl = DebDownloader(DEFAULT_ARCH, stx_bin_mirror, clean_mirror, all_binary_lists)
153 + binary_dl = DebDownloader(STX_ARCH, stx_bin_mirror, clean_mirror, all_binary_lists)
154 if not binary_dl.create_binary_repo():
157 if args.download_source:
158 - source_dl = SrcDownloader(DEFAULT_ARCH, stx_src_mirror, clean_mirror)
159 + source_dl = SrcDownloader(STX_ARCH, stx_src_mirror, clean_mirror)
161 dl_register_signal_handler()