Skip to content
Draft
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
37 changes: 24 additions & 13 deletions build_tools/build_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

"""Installation script."""

import copy
import os
import subprocess
import sys
import sysconfig
import copy
import tempfile
import time

from pathlib import Path
Expand Down Expand Up @@ -111,23 +112,33 @@ def run(self) -> None:
for ext in self.extensions:
package_path = Path(self.get_ext_fullpath(ext.name))
install_dir = package_path.resolve().parent
if isinstance(ext, CMakeExtension):
print(f"Building CMake extension {ext.name}")
# Set up incremental builds for CMake extensions
build_dir = os.getenv("NVTE_CMAKE_BUILD_DIR")
if build_dir:
build_dir = Path(build_dir).resolve()
else:
root_dir = Path(__file__).resolve().parent.parent
build_dir = root_dir / "build" / "cmake"

# Ensure the directory exists
if not isinstance(ext, CMakeExtension):
continue

print(f"Building CMake extension {ext.name}")
configured_build_dir = os.getenv("NVTE_CMAKE_BUILD_DIR")
if configured_build_dir:
# An explicit build directory enables incremental builds.
build_dir = Path(configured_build_dir).resolve()
build_dir.mkdir(parents=True, exist_ok=True)

ext._build_cmake(
build_dir=build_dir,
install_dir=install_dir,
)
continue

# Isolate CMake state between concurrent and successive builds.
build_temp = Path(self.build_temp)
build_temp.mkdir(parents=True, exist_ok=True)
with tempfile.TemporaryDirectory(
prefix=f"cmake-build-{ext.name}-",
dir=build_temp,
) as build_dir:
print(f"Building CMake extension {ext.name} in temporary directory {build_dir}")
ext._build_cmake(
build_dir=Path(build_dir),
install_dir=install_dir,
)

# Build non-CMake extensions as usual
all_extensions = self.extensions
Expand Down
Loading