mirror of https://github.com/pyodide/pyodide.git
80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
import argparse
|
|
from pathlib import Path
|
|
|
|
import typer # type: ignore[import]
|
|
|
|
from .. import buildall
|
|
|
|
app = typer.Typer()
|
|
|
|
|
|
@app.command() # type: ignore[misc]
|
|
def recipe(
|
|
packages: list[str] = typer.Argument(
|
|
..., help="Packages to build, or * for all packages in recipe directory"
|
|
),
|
|
recipe_dir: str = typer.Option(
|
|
None,
|
|
help="The directory containing the recipe of packages. "
|
|
"If not specified, the default is `./packages`",
|
|
),
|
|
install: bool = typer.Option(
|
|
False,
|
|
help="If true, install the built packages into the install_dir. "
|
|
"If false, build packages without installing.",
|
|
),
|
|
install_dir: str = typer.Option(
|
|
None,
|
|
help="Path to install built packages and repodata.json. "
|
|
"If not specified, the default is `./dist`.",
|
|
),
|
|
cflags: str = typer.Option(
|
|
None, help="Extra compiling flags. Default: SIDE_MODULE_CFLAGS"
|
|
),
|
|
cxxflags: str = typer.Option(
|
|
None, help="Extra compiling flags. Default: SIDE_MODULE_CXXFLAGS"
|
|
),
|
|
ldflags: str = typer.Option(
|
|
None, help="Extra linking flags. Default: SIDE_MODULE_LDFLAGS"
|
|
),
|
|
target_install_dir: str = typer.Option(
|
|
None,
|
|
help="The path to the target Python installation. Default: TARGETINSTALLDIR",
|
|
),
|
|
host_install_dir: str = typer.Option(
|
|
None,
|
|
help="Directory for installing built host packages. Default: HOSTINSTALLDIR",
|
|
),
|
|
log_dir: str = typer.Option(None, help="Directory to place log files"),
|
|
force_rebuild: bool = typer.Option(
|
|
False,
|
|
help="Force rebuild of all packages regardless of whether they appear to have been updated",
|
|
),
|
|
n_jobs: int = typer.Option(4, help="Number of packages to build in parallel"),
|
|
ctx: typer.Context = typer.Context,
|
|
) -> None:
|
|
"""Build packages using yaml recipes and create repodata.json"""
|
|
root = Path.cwd()
|
|
recipe_dir_ = root / "packages" if not recipe_dir else Path(recipe_dir)
|
|
install_dir_ = root / "dist" if not install_dir else Path(install_dir)
|
|
|
|
# Note: to make minimal changes to the existing pyodide-build entrypoint,
|
|
# keep arguments of buildall unghanged.
|
|
# TODO: refactor this when we remove pyodide-build entrypoint.
|
|
args = argparse.Namespace(**ctx.params)
|
|
args.dir = args.recipe_dir
|
|
|
|
if len(args.packages) == 1 and "," in args.packages[0]:
|
|
# Handle packages passed with old comma separated syntax.
|
|
# This is to support `PYODIDE_PACKAGES="pkg1,pkg2,..." make` syntax.
|
|
args.only = args.packages[0].replace(" ", "")
|
|
else:
|
|
args.only = ",".join(args.packages)
|
|
|
|
args = buildall.set_default_args(args)
|
|
|
|
pkg_map = buildall.build_packages(recipe_dir_, args)
|
|
|
|
if install:
|
|
buildall.install_packages(pkg_map, install_dir_)
|