| import os |
| import subprocess |
| |
| from setuptools import setup |
| from setuptools.command.build_py import build_py |
| |
| # Typically in files like this we'd use find_packages() to traverse directories |
| # for any static packages. However, we are trying to add data to a package that |
| # will actually exist in another repository. Therefore, we have to explicitly |
| # list out the package name, directory, and data information. |
| |
| # We are building data for the following module: |
| package_name = "pel.hwdiags" |
| |
| # Since we are not using find_packages() we have to provide a package directory, |
| # but in this case nothing exists because there are no static package |
| # directories. Therefore, we will just use the empty string. |
| package_dir = "" |
| |
| # Split the package data directory into its components. |
| data_dir_components = [*package_name.split("."), "data"] |
| |
| # It is important to note that '/' must be used as the path separator, even on |
| # Windows. Setuptools will automatically convert the slashes where appropriate. |
| package_data_glob = "/".join(data_dir_components) |
| |
| |
| # This is a custom build class that is used to dynamically build the data files. |
| class my_build_py(build_py): |
| def run(self): |
| if not self.dry_run: # honor --dry-run flag |
| # Make sure the build directory for the data exists. |
| # Yes, os.path.join() is necessary in this case, which is different |
| # that what is stated above regarding package_data_glob. |
| data_dir = os.path.join(self.build_lib, *data_dir_components) |
| self.mkpath(data_dir) |
| |
| # Generate the PEL parser data JSON from the Chip Data XML. |
| # TODO: The current tool to build the PEL parser JSON files is a |
| # perl script. Eventually, it will be converted to a python |
| # module. |
| # TODO: The list of data file directories will need to be |
| # configurable via the package config in the bitbake recipes. |
| for chip in ("p10", "explorer"): |
| subprocess.run( |
| [ |
| "./parse_chip_data_xml", |
| "--json", |
| "-i", |
| chip, |
| "-o", |
| data_dir, |
| ], |
| check=True, |
| ) |
| |
| # Call the superclass run() to ensure everything else builds. |
| super().run() |
| |
| |
| setup( |
| name="openpower-hw-diags-pel-parser-data", |
| version=os.getenv("PELTOOL_VERSION", "1.0"), |
| classifiers=["License :: OSI Approved :: Apache Software License"], |
| cmdclass={"build_py": my_build_py}, # register custom build class |
| packages=[package_name], |
| package_dir={package_name: package_dir}, |
| package_data={package_name: [package_data_glob]}, |
| ) |