xref: /aosp_15_r20/external/pigweed/pw_package/py/pw_package/packages/stm32cube.py (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1# Copyright 2021 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7#     https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14"""Install and check status of stm32cube."""
15
16import pathlib
17from typing import Sequence
18
19import pw_stm32cube_build.gen_file_list
20import pw_package.git_repo
21import pw_package.package_manager
22
23# Compatible versions are listed in either of:
24# - For older releases, the README.md of each hal_driver, e.g.:
25# https://github.com/STMicroelectronics/stm32f4xx_hal_driver/blob/v1.8.0/README.md
26# - For newer releases, the Release_Notes.html file in STM32Cube release, e.g.:
27# https://github.com/STMicroelectronics/STM32CubeF4/blob/v1.27.1/Release_Notes.html
28_STM32CUBE_VERSIONS = {
29    "f0": {
30        "hal_driver_tag": "v1.7.6",
31        "cmsis_device_tag": "v2.3.6",
32        "cmsis_core_tag": "v5.4.0_cm0",
33    },
34    "f1": {
35        "hal_driver_tag": "v1.1.8",
36        "cmsis_device_tag": "v4.3.3",
37        "cmsis_core_tag": "v5.4.0_cm3",
38    },
39    "f2": {
40        "hal_driver_tag": "v1.2.7",
41        "cmsis_device_tag": "v2.2.5",
42        "cmsis_core_tag": "v5.4.0_cm3",
43    },
44    "f3": {
45        "hal_driver_tag": "v1.5.6",
46        "cmsis_device_tag": "v2.3.6",
47        "cmsis_core_tag": "v5.4.0_cm4",
48    },
49    "f4": {
50        "hal_driver_tag": "v1.8.0",
51        "cmsis_device_tag": "v2.6.8",
52        "cmsis_core_tag": "v5.4.0_cm4",
53    },
54    "f7": {
55        "hal_driver_tag": "v1.3.0",
56        "cmsis_device_tag": "v1.2.8",
57        "cmsis_core_tag": "v5.4.0_cm7",
58    },
59    "g0": {
60        "hal_driver_tag": "v1.4.5",
61        "cmsis_device_tag": "v1.4.3",
62        "cmsis_core_tag": "v5.6.0_cm0",
63    },
64    "g4": {
65        "hal_driver_tag": "v1.2.2",
66        "cmsis_device_tag": "v1.2.2",
67        "cmsis_core_tag": "v5.6.0_cm4",
68    },
69    "h7": {
70        "hal_driver_tag": "v1.11.0",
71        "cmsis_device_tag": "v1.10.2",
72        "cmsis_core_tag": "v5.6.0",
73    },
74    "l0": {
75        "hal_driver_tag": "v1.10.5",
76        "cmsis_device_tag": "v1.9.2",
77        "cmsis_core_tag": "v5.4.0_cm0",
78    },
79    "l1": {
80        "hal_driver_tag": "v1.4.4",
81        "cmsis_device_tag": "v2.3.2",
82        "cmsis_core_tag": "v5.4.0_cm3",
83    },
84    "l4": {
85        "hal_driver_tag": "v1.13.3",
86        "cmsis_device_tag": "v1.7.2",
87        "cmsis_core_tag": "v5.6.0_cm4",
88    },
89    "l5": {
90        "hal_driver_tag": "v1.0.4",
91        "cmsis_device_tag": "v1.0.4",
92        "cmsis_core_tag": "v5.6.0_cm33",
93    },
94    "wb": {
95        "hal_driver_tag": "v1.11.0",
96        "cmsis_device_tag": "v1.11.0",
97        "cmsis_core_tag": "v5.6.0_cm4",
98    },
99    "wl": {
100        "hal_driver_tag": "v1.1.0",
101        "cmsis_device_tag": "v1.1.0",
102        "cmsis_core_tag": "v5.6.0_cm4",
103    },
104}
105
106
107class Stm32Cube(pw_package.package_manager.Package):
108    """Install and check status of stm32cube."""
109
110    def __init__(self, family, tags, *args, **kwargs):
111        super().__init__(*args, name=f'stm32cube_{family}', **kwargs)
112
113        st_github_url = (
114            'https://pigweed.googlesource.com/'
115            'third_party/github/STMicroelectronics'
116        )
117
118        self._hal_driver = pw_package.git_repo.GitRepo(
119            name='hal_driver',
120            url=f'{st_github_url}/stm32{family}xx_hal_driver.git',
121            tag=tags['hal_driver_tag'],
122        )
123
124        self._cmsis_core = pw_package.git_repo.GitRepo(
125            name='cmsis_core',
126            url=f'{st_github_url}/cmsis_core.git',
127            tag=tags['cmsis_core_tag'],
128        )
129
130        self._cmsis_device = pw_package.git_repo.GitRepo(
131            name='cmsis_device',
132            url=f'{st_github_url}/cmsis_device_{family}.git',
133            tag=tags['cmsis_device_tag'],
134        )
135
136    def install(self, path: pathlib.Path) -> None:
137        self._hal_driver.install(path / self._hal_driver.name)
138        self._cmsis_core.install(path / self._cmsis_core.name)
139        self._cmsis_device.install(path / self._cmsis_device.name)
140
141        pw_stm32cube_build.gen_file_list.gen_file_list(path)
142
143    def status(self, path: pathlib.Path) -> bool:
144        return all(
145            [
146                self._hal_driver.status(path / self._hal_driver.name),
147                self._cmsis_core.status(path / self._cmsis_core.name),
148                self._cmsis_device.status(path / self._cmsis_device.name),
149                (path / "files.txt").is_file(),
150            ]
151        )
152
153    def info(self, path: pathlib.Path) -> Sequence[str]:
154        return (
155            f'{self.name} installed in: {path}',
156            "Enable by running 'gn args out' and adding this line:",
157            f'  dir_pw_third_party_{self.name} = "{path}"',
158        )
159
160
161for st_family, st_tags in _STM32CUBE_VERSIONS.items():
162    pw_package.package_manager.register(Stm32Cube, st_family, st_tags)
163