4
4
5
5
import typer
6
6
7
- from pyodide_build import build_env , buildall
7
+ from pyodide_build import build_env , buildall , recipe
8
8
from pyodide_build .build_env import BuildArgs , init_environment
9
9
from pyodide_build .buildpkg import RecipeBuilder
10
10
from pyodide_build .common import get_num_cores
@@ -17,6 +17,7 @@ class Args:
17
17
build_dir : Path
18
18
install_dir : Path
19
19
build_args : BuildArgs
20
+ skip_rust_setup : bool
20
21
force_rebuild : bool
21
22
n_jobs : int
22
23
@@ -28,6 +29,7 @@ def __init__(
28
29
install_dir : Path | str | None = None ,
29
30
build_args : BuildArgs ,
30
31
force_rebuild : bool ,
32
+ skip_rust_setup : bool = False ,
31
33
n_jobs : int | None = None ,
32
34
):
33
35
cwd = Path .cwd ()
@@ -41,6 +43,7 @@ def __init__(
41
43
)
42
44
self .build_args = build_args
43
45
self .force_rebuild = force_rebuild
46
+ self .skip_rust_setup = skip_rust_setup
44
47
self .n_jobs = n_jobs or get_num_cores ()
45
48
if not self .recipe_dir .is_dir ():
46
49
raise FileNotFoundError (f"Recipe directory { self .recipe_dir } not found" )
@@ -93,6 +96,11 @@ def build_recipes_no_deps(
93
96
"--continue" ,
94
97
help = "Continue a build from the middle. For debugging. Implies '--force-rebuild'" ,
95
98
),
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
+ ),
96
104
) -> None :
97
105
"""Build packages using yaml recipes but don't try to resolve dependencies"""
98
106
init_environment ()
@@ -113,15 +121,25 @@ def build_recipes_no_deps(
113
121
build_dir = build_dir ,
114
122
recipe_dir = recipe_dir ,
115
123
force_rebuild = force_rebuild ,
124
+ skip_rust_setup = skip_rust_setup ,
116
125
)
117
126
118
127
return build_recipes_no_deps_impl (packages , args , continue_ )
119
128
120
129
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
+
121
136
def build_recipes_no_deps_impl (
122
137
packages : list [str ], args : Args , continue_ : bool
123
138
) -> None :
124
139
# TODO: use multiprocessing?
140
+ if not args .skip_rust_setup :
141
+ _rust_setup (args .recipe_dir , packages )
142
+
125
143
for package in packages :
126
144
package_path = args .recipe_dir / package
127
145
package_build_dir = args .build_dir / package / "build"
0 commit comments