diff --git a/tilelang/__init__.py b/tilelang/__init__.py index 06eb87ef0..abd3d4e2b 100644 --- a/tilelang/__init__.py +++ b/tilelang/__init__.py @@ -158,6 +158,7 @@ def _load_tile_lang_lib(): from .utils import ( TensorSupplyType, # noqa: F401 deprecated, # noqa: F401 + build_date, # noqa: F401 ) from .layout import ( Layout, # noqa: F401 diff --git a/tilelang/utils/__init__.py b/tilelang/utils/__init__.py index f2e8ec441..ce925c103 100644 --- a/tilelang/utils/__init__.py +++ b/tilelang/utils/__init__.py @@ -20,3 +20,4 @@ side_effect, # noqa: F401 ) from .deprecated import deprecated # noqa: F401 +from .version import build_date # noqa: F401 diff --git a/tilelang/utils/version.py b/tilelang/utils/version.py new file mode 100644 index 000000000..46d23d753 --- /dev/null +++ b/tilelang/utils/version.py @@ -0,0 +1,31 @@ +"""Version utilities for tilelang.""" + +from __future__ import annotations + +import re + + +def build_date(version_str: str | None = None) -> int | None: + """Extract build date (YYYYMMDD) from version string. + + Args: + version_str: Version string like "0.1.7.post3+cuda.d20260127.gita17230e4". + If None, uses tilelang.__version__. + + Returns: + Build date as integer (e.g., 20260127), or None if not found. + + Example: + >>> import tilelang + >>> if tilelang.build_date() >= 20260127: + ... print("Version meets requirement") + """ + if version_str is None: + import tilelang + + version_str = tilelang.__version__ + + match = re.search(r"\.d(\d{8})\.", version_str) + if match: + return int(match.group(1)) + return None diff --git a/version_provider.py b/version_provider.py index c2ca929ae..9b7f258c3 100644 --- a/version_provider.py +++ b/version_provider.py @@ -3,6 +3,7 @@ import os import platform import subprocess +import time from pathlib import Path from functools import lru_cache @@ -71,6 +72,10 @@ def dynamic_metadata(field: str, settings: dict[str, object] | None = None) -> s if backend: exts.append(backend) + # Add build date if TILELANG_BUILD_WHEEL_WITH_DATE is set + if _read_cmake_bool(os.environ.get("TILELANG_BUILD_WHEEL_WITH_DATE")): + exts.append(f"d{time.strftime('%Y%m%d')}") + if _read_cmake_bool(os.environ.get("NO_GIT_VERSION")): pass elif git_hash := get_git_commit_id():