Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 44 additions & 5 deletions Apple/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,11 @@ def all_host_triples(platform: str) -> list[str]:
return triples


def clean(context: argparse.Namespace, target: str = "all") -> None:
def clean(context: argparse.Namespace, target: str | None = None) -> None:
"""The implementation of the "clean" command."""
if target is None:
target = context.host

# If we're explicitly targeting the build, there's no platform or
# distribution artefacts. If we're cleaning tests, we keep all built
# artefacts. Otherwise, the built artefacts must be dirty, so we remove
Expand Down Expand Up @@ -377,7 +380,12 @@ def configure_host_python(
with group(f"Downloading dependencies ({host})"):
if not prefix_dir.exists():
prefix_dir.mkdir()
unpack_deps(context.platform, host, prefix_dir, context.cache_dir)
cache_dir = (
Path(context.cache_dir).resolve()
if context.cache_dir
else CROSS_BUILD_DIR / "downloads"
)
unpack_deps(context.platform, host, prefix_dir, cache_dir)
else:
print("Dependencies already installed")

Expand Down Expand Up @@ -828,7 +836,7 @@ def test(context: argparse.Namespace, host: str | None = None) -> None: # noqa:
+ [
"--",
"test",
f"--{context.ci_mode}-ci",
f"--{context.ci_mode or 'fast'}-ci",
"--single-process",
"--no-randomize",
# Timeout handling requires subprocesses; explicitly setting
Expand Down Expand Up @@ -894,7 +902,7 @@ def parse_args() -> argparse.Namespace:
configure_build = subcommands.add_parser(
"configure-build", help="Run `configure` for the build Python"
)
subcommands.add_parser(
make_build = subcommands.add_parser(
"make-build", help="Run `make` for the build Python"
)
configure_host = subcommands.add_parser(
Expand Down Expand Up @@ -950,6 +958,31 @@ def parse_args() -> argparse.Namespace:
),
)

# --cross-build-dir argument
for cmd in [
clean,
configure_build,
make_build,
configure_host,
make_host,
build,
package,
test,
ci,
]:
cmd.add_argument(
"--cross-build-dir",
action="store",
default=os.environ.get("CROSS_BUILD_DIR"),
dest="cross_build_dir",
type=Path,
help=(
"Path to the cross-build directory "
f"(default: {CROSS_BUILD_DIR}). Can also be set "
"with the CROSS_BUILD_DIR environment variable."
),
)

# --clean option
for cmd in [configure_build, configure_host, build, package, test, ci]:
cmd.add_argument(
Expand All @@ -964,7 +997,7 @@ def parse_args() -> argparse.Namespace:
for cmd in [configure_host, build, ci]:
cmd.add_argument(
"--cache-dir",
default="./cross-build/downloads",
default=os.environ.get("CACHE_DIR"),
help="The directory to store cached downloads.",
)

Expand Down Expand Up @@ -1031,6 +1064,12 @@ def signal_handler(*args):

# Process command line arguments
context = parse_args()

# Set the CROSS_BUILD_DIR if an argument was provided
if context.cross_build_dir:
global CROSS_BUILD_DIR
CROSS_BUILD_DIR = context.cross_build_dir.resolve()

dispatch: dict[str, Callable] = {
"clean": clean,
"configure-build": configure_build_python,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
The clean target for the Apple/iOS XCframework build script is now more
selective when targeting a single architecture.
Loading