From 62d37bf39b89a7c07bd23530258cbe483439be7a Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Sat, 15 Aug 2020 07:05:40 -0700 Subject: [PATCH] [Build] Reflect Compile-Time CMake Options into libtvm.so (#6280) * Initial comit * Address comments from @tqchen --- CMakeLists.txt | 10 ++++++++++ cmake/modules/Git.cmake | 40 ++++++++++++++++++++++++++++++++++++++++ python/tvm/__init__.py | 5 +++++ python/tvm/support.py | 25 +++++++++++++++++++++++++ src/support/libinfo.cc | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+) create mode 100644 cmake/modules/Git.cmake create mode 100644 python/tvm/support.py create mode 100644 src/support/libinfo.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index aa632c40e3992..365add5f711f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -336,6 +336,7 @@ include(cmake/modules/contrib/TF_TVMDSOOP.cmake) include(cmake/modules/contrib/CoreML.cmake) include(cmake/modules/contrib/ONNX.cmake) include(cmake/modules/contrib/ArmComputeLib.cmake) +include(cmake/modules/Git.cmake) include(CheckCXXCompilerFlag) if(NOT MSVC) @@ -384,6 +385,15 @@ if(BUILD_FOR_HEXAGON) PUBLIC "${USE_HEXAGON_SDK}/incs/stddef") endif() +if (${GIT_FOUND}) + set_property( + SOURCE ${CMAKE_CURRENT_LIST_DIR}/src/support/libinfo.cc + APPEND + PROPERTY COMPILE_DEFINITIONS + TVM_GIT_COMMIT_HASH="${TVM_GIT_COMMIT_HASH}" + ) +endif() + if(USE_THREADS AND NOT BUILD_FOR_HEXAGON) message(STATUS "Build with thread support...") set(CMAKE_THREAD_PREFER_PTHREAD TRUE) diff --git a/cmake/modules/Git.cmake b/cmake/modules/Git.cmake new file mode 100644 index 0000000000000..7372148687ed6 --- /dev/null +++ b/cmake/modules/Git.cmake @@ -0,0 +1,40 @@ +# 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. +# This script provides +# - GIT_FOUND - true if the command line client was found +# - GIT_EXECUTABLE - path to git command line client +# - TVM_GIT_COMMIT_HASH +find_package(Git QUIET) +if (${GIT_FOUND}) + message(STATUS "Git found: ${GIT_EXECUTABLE}") + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE TVM_GIT_COMMIT_HASH + RESULT_VARIABLE _TVM_GIT_RESULT + ERROR_VARIABLE _TVM_GIT_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE) + if (${_TVM_GIT_RESULT} EQUAL 0) + message(STATUS "Found TVM_GIT_COMMIT_HASH=${TVM_GIT_COMMIT_HASH}") + else() + message(STATUS "Not a git repo") + set(TVM_GIT_COMMIT_HASH "NOT-FOUND") + endif() +else() + message(WARNING "Git not found") + set(TVM_GIT_COMMIT_HASH "NOT-FOUND") +endif() diff --git a/python/tvm/__init__.py b/python/tvm/__init__.py index 2474ae8b5b1a1..19a69bf6f12ae 100644 --- a/python/tvm/__init__.py +++ b/python/tvm/__init__.py @@ -66,9 +66,13 @@ # others from . import arith +# support infra +from . import support + # Contrib initializers from .contrib import rocm as _rocm, nvcc as _nvcc, sdaccel as _sdaccel + def tvm_wrap_excepthook(exception_hook): """Wrap given excepthook with TVM additional work.""" @@ -82,4 +86,5 @@ def wrapper(exctype, value, trbk): return wrapper + sys.excepthook = tvm_wrap_excepthook(sys.excepthook) diff --git a/python/tvm/support.py b/python/tvm/support.py new file mode 100644 index 0000000000000..d867faa3e13a3 --- /dev/null +++ b/python/tvm/support.py @@ -0,0 +1,25 @@ +# 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. +"""Support infra of TVM.""" +import tvm._ffi + + +def libinfo(): + return GetLibInfo() + + +tvm._ffi._init_api("support", __name__) diff --git a/src/support/libinfo.cc b/src/support/libinfo.cc new file mode 100644 index 0000000000000..9942174e96904 --- /dev/null +++ b/src/support/libinfo.cc @@ -0,0 +1,38 @@ +/* + * 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. + */ +#include +#include +#include + +#ifndef TVM_GIT_COMMIT_HASH +#define TVM_GIT_COMMIT_HASH "NOT-FOUND" +#endif + +namespace tvm { + +Map GetLibInfo() { + Map result = { + {"GIT_COMMIT_HASH", TVM_GIT_COMMIT_HASH}, + }; + return result; +} + +TVM_REGISTER_GLOBAL("support.GetLibInfo").set_body_typed(GetLibInfo); + +} // namespace tvm