44
55import typer
66
7- from pyodide_build import build_env , buildall
7+ from pyodide_build import build_env , buildall , recipe
88from pyodide_build .build_env import BuildArgs , init_environment
99from pyodide_build .buildpkg import RecipeBuilder
1010from pyodide_build .common import get_num_cores
@@ -17,6 +17,7 @@ class Args:
1717 build_dir : Path
1818 install_dir : Path
1919 build_args : BuildArgs
20+ skip_rust_setup : bool
2021 force_rebuild : bool
2122 n_jobs : int
2223
@@ -28,6 +29,7 @@ def __init__(
2829 install_dir : Path | str | None = None ,
2930 build_args : BuildArgs ,
3031 force_rebuild : bool ,
32+ skip_rust_setup : bool = False ,
3133 n_jobs : int | None = None ,
3234 ):
3335 cwd = Path .cwd ()
@@ -41,6 +43,7 @@ def __init__(
4143 )
4244 self .build_args = build_args
4345 self .force_rebuild = force_rebuild
46+ self .skip_rust_setup = skip_rust_setup
4447 self .n_jobs = n_jobs or get_num_cores ()
4548 if not self .recipe_dir .is_dir ():
4649 raise FileNotFoundError (f"Recipe directory { self .recipe_dir } not found" )
@@ -93,6 +96,11 @@ def build_recipes_no_deps(
9396 "--continue" ,
9497 help = "Continue a build from the middle. For debugging. Implies '--force-rebuild'" ,
9598 ),
99+ skip_rust_setup : bool = typer .Option (
100+ False ,
101+ "--skip-rust-setup" ,
102+ help = "Don't setup rust environment when building a rust package" ,
103+ ),
96104) -> None :
97105 """Build packages using yaml recipes but don't try to resolve dependencies"""
98106 init_environment ()
@@ -113,15 +121,25 @@ def build_recipes_no_deps(
113121 build_dir = build_dir ,
114122 recipe_dir = recipe_dir ,
115123 force_rebuild = force_rebuild ,
124+ skip_rust_setup = skip_rust_setup ,
116125 )
117126
118127 return build_recipes_no_deps_impl (packages , args , continue_ )
119128
120129
130+ def _rust_setup (recipe_dir : Path , packages : list [str ]):
131+ recipes = recipe .load_recipes (recipe_dir , packages , False )
132+ if any (recipe .is_rust_package () for recipe in recipes .values ()):
133+ buildall ._ensure_rust_toolchain ()
134+
135+
121136def build_recipes_no_deps_impl (
122137 packages : list [str ], args : Args , continue_ : bool
123138) -> None :
124139 # TODO: use multiprocessing?
140+ if not args .skip_rust_setup :
141+ _rust_setup (args .recipe_dir , packages )
142+
125143 for package in packages :
126144 package_path = args .recipe_dir / package
127145 package_build_dir = args .build_dir / package / "build"
0 commit comments