mirror of
https://github.com/tile-ai/tilelang.git
synced 2026-10-26 07:22:54 +08:00
* update exclude in sdist * reuse cibw workflow in maint * update * fix * fmt * upload artifacts for [Release] PRs * dot-prefix version file * update
94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import platform
|
|
import subprocess
|
|
from pathlib import Path
|
|
from functools import lru_cache
|
|
|
|
ROOT = Path(__file__).parent
|
|
|
|
base_version = (ROOT / 'VERSION').read_text().strip()
|
|
# When installing a sdist,
|
|
# the installed version needs to match the sdist version,
|
|
# so pip will complain when we install `tilelang-0.1.6.post2+gitxxxx.tar.gz`.
|
|
# To workaround that, when building sdist,
|
|
# we do not add version label and use a file to store the git hash instead.
|
|
git_pin = ROOT / '.git_commit.txt'
|
|
|
|
|
|
def _read_cmake_bool(i: str | None, default=False):
|
|
if i is None:
|
|
return default
|
|
return i.lower() not in ('0', 'false', 'off', 'no', 'n', '')
|
|
|
|
|
|
@lru_cache(maxsize=1)
|
|
def get_git_commit_id() -> str | None:
|
|
"""Get the current git commit hash by running git in the current file's directory."""
|
|
|
|
r = subprocess.run(['git', 'rev-parse', 'HEAD'],
|
|
cwd=ROOT,
|
|
capture_output=True,
|
|
encoding='utf-8')
|
|
if r.returncode == 0:
|
|
_git = r.stdout.strip()
|
|
git_pin.write_text(_git)
|
|
return _git
|
|
elif git_pin.exists():
|
|
return git_pin.read_text().strip()
|
|
else:
|
|
return None
|
|
|
|
|
|
def dynamic_metadata(
|
|
field: str,
|
|
settings: dict[str, object] | None = None,
|
|
) -> str:
|
|
assert field == 'version'
|
|
|
|
version = base_version
|
|
|
|
# generate git version for sdist
|
|
get_git_commit_id()
|
|
|
|
if not _read_cmake_bool(os.environ.get('NO_VERSION_LABEL')):
|
|
exts = []
|
|
backend = None
|
|
if _read_cmake_bool(os.environ.get('NO_TOOLCHAIN_VERSION')):
|
|
pass
|
|
elif platform.system() == 'Darwin':
|
|
# only on macosx_11_0_arm64, not necessary
|
|
# backend = 'metal'
|
|
pass
|
|
elif _read_cmake_bool(os.environ.get('USE_ROCM', '')):
|
|
backend = 'rocm'
|
|
elif 'USE_CUDA' in os.environ and not _read_cmake_bool(os.environ.get('USE_CUDA')):
|
|
backend = 'cpu'
|
|
else: # cuda
|
|
# Read nvcc version from env.
|
|
# This is not exactly how it should be,
|
|
# but works for now if building in a nvidia/cuda image.
|
|
if cuda_version := os.environ.get('CUDA_VERSION'):
|
|
major, minor, *_ = cuda_version.split('.')
|
|
backend = f'cu{major}{minor}'
|
|
else:
|
|
backend = 'cuda'
|
|
if backend:
|
|
exts.append(backend)
|
|
|
|
if _read_cmake_bool(os.environ.get('NO_GIT_VERSION')):
|
|
pass
|
|
elif git_hash := get_git_commit_id():
|
|
exts.append(f'git{git_hash[:8]}')
|
|
else:
|
|
exts.append('gitunknown')
|
|
|
|
if exts:
|
|
version += '+' + '.'.join(exts)
|
|
|
|
return version
|
|
|
|
|
|
__all__ = ["dynamic_metadata"]
|