2b63afb270fed7193f3dd0bec13cc560fa42ae3f
[pti/rtp.git] /
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
5
6 * Check the host arch.
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
10   if it exists.
11 e.g.
12 debian_pkg_dirs
13 debian_pkg_dirs_arm64
14 debian_pkg_dirs_rt
15 debian_pkg_dirs_rt_arm64
16 debian_pkg_dirs_installer
17 debian_pkg_dirs_installer_arm64
18
19 base-bullseye.lst
20 base-bullseye_arm64.lst
21
22 os-std.lst
23 os-std_arm64.lst
24
25 Test Plan:
26 PASS: update packages list for arm64 in repos:
27       - starlingx/tools
28       - starlingx/kernel
29       - starlingx/integ
30       - starlingx/virt
31       - starlingx/utilities
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
40
41 Story: 2010739
42 Task: 48013
43
44 Change-Id: I5fadf737ee75fc631d57d6bf689d54638548bffe
45 Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
46 ---
47  build-tools/stx/debdownloader |  5 +++++
48  build-tools/stx/downloader    | 37 +++++++++++++++++++++++++++--------
49  2 files changed, 34 insertions(+), 8 deletions(-)
50
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__":
56              # strip epoch
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)
71                  else:
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
79  import signal
80  import sys
81  import utils
82 +import platform
83  
84 -DEFAULT_ARCH = 'amd64'
85 +STX_ARCH = 'amd64'
86 +host_arch = platform.machine()
87 +if host_arch == 'aarch64':
88 +    STX_ARCH = "arm64"
89 +
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():
95          for r in files:
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)
102 +                else:
103 +                    pkgs_file = os.path.join(root, r)
104                  pkgs.update(get_pkgs_from_list(root, pkgs_file))
105      return pkgs
106  
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]))
109                  continue
110  
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))
120 +                    else:
121 +                        layer_binaries[layer].append(os.path.join(root, f))
122          logger.info(
123              f"Binary lists for layer `{layer}`: "
124              f"{layer_binaries[layer]}"
125          )
126  
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'])
131  
132      if "common" not in layer_binaries:
133          layer_binaries["common"] = []
134  
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))
141 +            else:
142 +                layer_binaries["common"].append(os.path.join(root, f))
143  
144      logger.info(
145          f"Binary lists for layer `common`: "
146 @@ -727,13 +747,14 @@ if __name__ == "__main__":
147          args.download_source = True
148  
149      if args.download_binary:
150 +
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():
155              sys.exit(1)
156  
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)
160  
161      dl_register_signal_handler()
162      if binary_dl:
163 -- 
164 2.30.2
165