blob: d276c6118e3719b322ada8d6e8c547dfa31be32d [file] [log] [blame]
# 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.
import argparse
import re
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parent.parent.parent
LIBINFO_CC = REPO_ROOT / "src" / "support" / "libinfo.cc"
LIBINFO_CMAKE = REPO_ROOT / "cmake" / "modules" / "LibInfo.cmake"
CMAKELISTS = REPO_ROOT / "CMakeLists.txt"
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Check that CMake options are mirrored to libinfo.cc"
)
with open(CMAKELISTS) as f:
cmake = f.readlines()
with open(LIBINFO_CC) as f:
libinfo = f.read()
with open(LIBINFO_CMAKE) as f:
libinfo_cmake = f.read()
# Read tvm_options from CMakeLists.txt
options = []
for line in cmake:
m = re.search(r"tvm_option\((.*?) ", line)
if m is not None:
options.append(m.groups()[0])
# Check that each option is present in libinfo.cc
missing_lines = []
for option in options:
expected_line = f' {{"{option}", TVM_INFO_{option}}},'
if expected_line not in libinfo:
missing_lines.append(expected_line)
error = False
if len(missing_lines) > 0:
missing_lines = "\n".join(missing_lines)
print(
f"Missing these lines from {LIBINFO_CC.relative_to(REPO_ROOT)}, please update it\n{missing_lines}"
)
error = True
# Check that each option has a compile defintion in LibInfo.cmake
missing_cmake_lines = []
for option in options:
expected_line = f' TVM_INFO_{option}="${{{option}}}"'
if expected_line not in libinfo_cmake:
missing_cmake_lines.append(expected_line)
if len(missing_cmake_lines) > 0:
missing_cmake_lines = "\n".join(missing_cmake_lines)
print(
f"Missing these lines from {LIBINFO_CMAKE.relative_to(REPO_ROOT)}, please update it\n{missing_cmake_lines}"
)
error = True
if error:
exit(1)