57 lines
2.5 KiB
Python
57 lines
2.5 KiB
Python
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
"""Post-install checks for a built TVM wheel.
|
|
|
|
These live in ``tests/python/all-platform-minimal-test`` so the standard suite and
|
|
the cibuildwheel ``test-command`` run a single pytest invocation. The assertions
|
|
here are wheel-specific things the rest of the suite cannot check -- that LLVM is
|
|
enabled (the other LLVM test merely *skips* when LLVM is absent) and that the CUDA
|
|
runtime library got bundled -- so each is gated behind a ``TVM_WHEEL_EXPECT_*`` env
|
|
var and SKIPS unless that var is set. cibuildwheel sets the vars (see
|
|
``CIBW_TEST_ENVIRONMENT`` in ``.github/actions/build-wheel-for-publish``); ordinary
|
|
source-build CI (e.g. ``main.yml``) leaves them unset, so these tests skip there and
|
|
never fail a non-wheel / non-LLVM / non-CUDA build.
|
|
"""
|
|
|
|
import glob
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
import tvm
|
|
|
|
|
|
def test_llvm_enabled():
|
|
"""Every published TVM wheel ships with LLVM enabled. Only assert this when
|
|
validating a wheel (``TVM_WHEEL_EXPECT_LLVM=1``); skip otherwise so source
|
|
builds with LLVM off do not fail."""
|
|
if os.environ.get("TVM_WHEEL_EXPECT_LLVM") != "1":
|
|
pytest.skip("LLVM enablement only asserted during wheel validation")
|
|
assert tvm.runtime.enabled("llvm"), "wheel was not built with LLVM enabled"
|
|
|
|
|
|
def test_cuda_runtime_present():
|
|
"""The bundled CUDA runtime library must be present in tvm/lib."""
|
|
if os.environ.get("TVM_WHEEL_EXPECT_CUDA_RUNTIME") != "1":
|
|
pytest.skip("CUDA runtime not expected in this wheel")
|
|
libdir = Path(tvm.__file__).resolve().parent / "lib"
|
|
present = glob.glob(str(libdir / "libtvm_runtime_cuda.*")) or glob.glob(
|
|
str(libdir / "tvm_runtime_cuda.*")
|
|
)
|
|
assert present, "CUDA runtime expected but not bundled in tvm/lib"
|