This is an automated email from the ASF dual-hosted git repository.
tqchen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm-ffi.git
The following commit(s) were added to refs/heads/main by this push:
new 98b26ed chore: Add cmake-format and cmake-lint (#89)
98b26ed is described below
commit 98b26edda72c3d9b9480cb638a68d07d3df6b88f
Author: Junru Shao <[email protected]>
AuthorDate: Sun Oct 5 14:17:49 2025 -0700
chore: Add cmake-format and cmake-lint (#89)
Add cmake-format to pre-commit hooks
---
.cmake-format.json | 64 ++++++++++
.github/workflows/ci_test.yml | 4 +-
.pre-commit-config.yaml | 5 +
CMakeLists.txt | 235 +++++++++++++++++++-----------------
cmake/Utils/AddGoogleTest.cmake | 81 ++++++++++---
cmake/Utils/AddLibbacktrace.cmake | 76 ++++++------
cmake/Utils/CxxWarning.cmake | 22 ++--
cmake/Utils/Library.cmake | 126 ++++++++++++-------
cmake/Utils/Sanitizer.cmake | 40 +++---
cmake/tvm_ffi-config.cmake | 44 ++++---
examples/packaging/CMakeLists.txt | 48 +++++---
examples/quick_start/CMakeLists.txt | 47 +++-----
tests/cpp/CMakeLists.txt | 26 ++--
13 files changed, 496 insertions(+), 322 deletions(-)
diff --git a/.cmake-format.json b/.cmake-format.json
new file mode 100644
index 0000000..b9a900d
--- /dev/null
+++ b/.cmake-format.json
@@ -0,0 +1,64 @@
+{
+ "format": {
+ "disable": false,
+ "line_width": 100,
+ "tab_size": 2,
+ "use_tabchars": false,
+ "fractional_tab_policy": "use-space",
+ "max_subgroups_hwrap": 2,
+ "max_pargs_hwrap": 6,
+ "max_rows_cmdline": 2,
+ "separate_ctrl_name_with_space": true,
+ "separate_fn_name_with_space": false,
+ "dangle_parens": true,
+ "dangle_align": "prefix",
+ "min_prefix_chars": 4,
+ "max_prefix_chars": 10,
+ "max_lines_hwrap": 2,
+ "line_ending": "unix",
+ "command_case": "canonical",
+ "keyword_case": "unchanged",
+ "always_wrap": [],
+ "enable_sort": true,
+ "autosort": false,
+ "require_valid_layout": false,
+ "layout_passes": {}
+ },
+ "markup": {
+ "bullet_char": "*",
+ "enum_char": ".",
+ "first_comment_is_literal": true,
+ "literal_comment_pattern": null,
+ "fence_pattern": "^\\s*([`~]{3}[`~]*)(.*)$",
+ "ruler_pattern": "^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$",
+ "explicit_trailing_pattern": "#<",
+ "hashruler_min_length": 10,
+ "canonicalize_hashrulers": true,
+ "enable_markup": true
+ },
+ "lint": {
+ "disabled_codes": [],
+ "function_pattern": "[0-9a-z_]+",
+ "macro_pattern": "[0-9A-Z_]+",
+ "global_var_pattern": "[A-Z][0-9A-Z_]+",
+ "internal_var_pattern": "_[A-Z][0-9A-Z_]+",
+ "local_var_pattern": "[a-z][a-z0-9_]+",
+ "private_var_pattern": "_[0-9a-z_]+",
+ "public_var_pattern": "[A-Z][0-9A-Z_]+",
+ "argument_var_pattern": "[a-z][a-z0-9_]+",
+ "keyword_pattern": "[A-Z][0-9A-Z_]+",
+ "max_conditionals_custom_parser": 2,
+ "min_statement_spacing": 1,
+ "max_statement_spacing": 2,
+ "max_returns": 6,
+ "max_branches": 12,
+ "max_arguments": 5,
+ "max_localvars": 15,
+ "max_statements": 50
+ },
+ "encode": {
+ "emit_byteorder_mark": false,
+ "input_encoding": "utf-8",
+ "output_encoding": "utf-8"
+ }
+}
diff --git a/.github/workflows/ci_test.yml b/.github/workflows/ci_test.yml
index aec3266..2ea884c 100644
--- a/.github/workflows/ci_test.yml
+++ b/.github/workflows/ci_test.yml
@@ -60,7 +60,7 @@ jobs:
with:
submodules: recursive
- name: Set up uv
- uses: astral-sh/setup-uv@b75a909f75acd358c2196fb9a5f1299a9a8868a4 #
v6.7.0
+ uses: astral-sh/setup-uv@b75a909f75acd358c2196fb9a5f1299a9a8868a4 #
v6.7.0
with:
python-version: 3.13
- name: Generate docs
@@ -119,7 +119,7 @@ jobs:
# Run Python tests
- name: Setup Python ${{ matrix.python_version }}
- uses: astral-sh/setup-uv@b75a909f75acd358c2196fb9a5f1299a9a8868a4 #
v6.7.0
+ uses: astral-sh/setup-uv@b75a909f75acd358c2196fb9a5f1299a9a8868a4 #
v6.7.0
with:
python-version: ${{ matrix.python_version }}
activate-environment: true
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 8e842f3..8737cff 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -125,3 +125,8 @@ repos:
- ml-dtypes>=0.1
- pytest
- typing-extensions>=4.5
+ - repo: https://github.com/cheshirekow/cmake-format-precommit
+ rev: v0.6.13
+ hooks:
+ - id: cmake-format
+ - id: cmake-lint
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d0a3c0b..3f94aff 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,12 +14,10 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
+
cmake_minimum_required(VERSION 3.18)
-project(
- tvm_ffi
- LANGUAGES CXX C
-)
+project(tvm_ffi LANGUAGES CXX C)
option(TVM_FFI_USE_LIBBACKTRACE "Enable libbacktrace" ON)
option(TVM_FFI_USE_EXTRA_CXX_API "Enable extra CXX API in shared lib" ON)
@@ -27,71 +25,68 @@ option(TVM_FFI_BACKTRACE_ON_SEGFAULT "Set signal handler to
print backtrace on s
if (TVM_FFI_USE_LIBBACKTRACE)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/Utils/AddLibbacktrace.cmake)
-endif()
+endif ()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/Utils/Library.cmake)
+# ######### Target: `tvm_ffi_header` ##########
-########## Target: `tvm_ffi_header` ##########
-
-# they can be used in cases where user do not want to link into the library
-# in cases like deferred linking
+# they can be used in cases where user do not want to link into the library in
cases like deferred
+# linking
add_library(tvm_ffi_header INTERFACE)
target_compile_features(tvm_ffi_header INTERFACE cxx_std_17)
target_include_directories(
- tvm_ffi_header INTERFACE
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- $<INSTALL_INTERFACE:include>
+ tvm_ffi_header INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:include>
)
target_include_directories(
- tvm_ffi_header INTERFACE
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dlpack/include>
- $<INSTALL_INTERFACE:include>
+ tvm_ffi_header INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dlpack/include>
+ $<INSTALL_INTERFACE:include>
)
-########## Target: `tvm_ffi_objs` ##########
-
-set(tvm_ffi_objs_sources
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/backtrace.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/backtrace_win.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/object.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/error.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/function.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/tensor.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/dtype.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/container.cc"
+# ######### Target: `tvm_ffi_objs` ##########
+
+set(_tvm_ffi_objs_sources
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/backtrace.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/backtrace_win.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/object.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/error.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/function.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/tensor.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/dtype.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/container.cc"
)
-set(tvm_ffi_extra_objs_sources
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/structural_equal.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/structural_hash.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/json_parser.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/json_writer.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/serialization.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/reflection_extra.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/module.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/library_module.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/library_module_system_lib.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/library_module_dynamic_lib.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/env_context.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/env_c_api.cc"
- "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/testing.cc"
+set(_tvm_ffi_extra_objs_sources
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/structural_equal.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/structural_hash.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/json_parser.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/json_writer.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/serialization.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/reflection_extra.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/module.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/library_module.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/library_module_system_lib.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/library_module_dynamic_lib.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/env_context.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/env_c_api.cc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/ffi/extra/testing.cc"
)
if (TVM_FFI_USE_EXTRA_CXX_API)
- list(APPEND tvm_ffi_objs_sources ${tvm_ffi_extra_objs_sources})
-endif()
+ list(APPEND _tvm_ffi_objs_sources ${_tvm_ffi_extra_objs_sources})
+endif ()
-add_library(tvm_ffi_objs OBJECT ${tvm_ffi_objs_sources})
+add_library(tvm_ffi_objs OBJECT ${_tvm_ffi_objs_sources})
target_compile_features(tvm_ffi_objs PRIVATE cxx_std_17)
set_target_properties(
- tvm_ffi_objs PROPERTIES
- POSITION_INDEPENDENT_CODE ON
- CXX_EXTENSIONS OFF
- CXX_STANDARD_REQUIRED ON
- CXX_VISIBILITY_PRESET hidden
- VISIBILITY_INLINES_HIDDEN ON
- PREFIX "lib"
+ tvm_ffi_objs
+ PROPERTIES POSITION_INDEPENDENT_CODE ON
+ CXX_EXTENSIONS OFF
+ CXX_STANDARD_REQUIRED ON
+ CXX_VISIBILITY_PRESET hidden
+ VISIBILITY_INLINES_HIDDEN ON
+ PREFIX "lib"
)
# add the include path as public so they are visible to downstreams
@@ -100,18 +95,18 @@ target_link_libraries(tvm_ffi_objs PUBLIC tvm_ffi_header)
if (TVM_FFI_USE_LIBBACKTRACE)
message(STATUS "Setting C++ macro TVM_FFI_USE_LIBBACKTRACE - 1")
target_compile_definitions(tvm_ffi_objs PRIVATE TVM_FFI_USE_LIBBACKTRACE=1)
-else()
+else ()
message(STATUS "Setting C++ macro TVM_FFI_USE_LIBBACKTRACE - 0")
target_compile_definitions(tvm_ffi_objs PRIVATE TVM_FFI_USE_LIBBACKTRACE=0)
-endif()
+endif ()
if (TVM_FFI_BACKTRACE_ON_SEGFAULT)
message(STATUS "Setting C++ macro TVM_FFI_BACKTRACE_ON_SEGFAULT - 1")
target_compile_definitions(tvm_ffi_objs PRIVATE
TVM_FFI_BACKTRACE_ON_SEGFAULT=1)
-else()
+else ()
message(STATUS "Setting C++ macro TVM_FFI_BACKTRACE_ON_SEGFAULT - 0")
target_compile_definitions(tvm_ffi_objs PRIVATE
TVM_FFI_BACKTRACE_ON_SEGFAULT=0)
-endif()
+endif ()
tvm_ffi_add_msvc_flags(tvm_ffi_objs)
tvm_ffi_add_target_from_obj(tvm_ffi tvm_ffi_objs)
@@ -135,106 +130,111 @@ target_link_libraries(tvm_ffi_objs PUBLIC
tvm_ffi_header)
target_link_libraries(tvm_ffi_shared PUBLIC tvm_ffi_header)
target_link_libraries(tvm_ffi_static PUBLIC tvm_ffi_header)
-#----------------------------------------------------------------------------
-# The following code section only is triggered when the project is the root
-# and will be skipped when the project is a subproject.
-#----------------------------------------------------------------------------
+# ----------------------------------------------------------------------------
+# The following code section only is triggered when the project is the root
and will be skipped when
+# the project is a subproject.
+# ----------------------------------------------------------------------------
if (NOT ${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
return()
-endif()
+endif ()
option(TVM_FFI_ATTACH_DEBUG_SYMBOLS "Attach debug symbols even in release
mode" OFF)
option(TVM_FFI_BUILD_TESTS "Adding test targets." OFF)
if (TVM_FFI_ATTACH_DEBUG_SYMBOLS)
- if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(tvm_ffi_objs PRIVATE -g1)
- endif()
-endif()
+ endif ()
+endif ()
include(cmake/Utils/CxxWarning.cmake)
include(cmake/Utils/Sanitizer.cmake)
-# remap the file name to the source directory so we can see the
-# exact file name in backtrace relative to the project source root
+# remap the file name to the source directory so we can see the exact file
name in backtrace
+# relative to the project source root
tvm_ffi_add_prefix_map(tvm_ffi_objs ${CMAKE_SOURCE_DIR})
-########## Adding cpp tests ##########
+# ######### Adding cpp tests ##########
-# logics below are only executed when the project is the root project.
-# but not when the project is a subproject.
+# logics below are only executed when the project is the root project. but not
when the project is a
+# subproject.
if (TVM_FFI_BUILD_TESTS)
enable_testing()
message(STATUS "Enable Testing")
include(cmake/Utils/AddGoogleTest.cmake)
add_subdirectory(tests/cpp/)
tvm_ffi_add_cxx_warning(tvm_ffi_objs)
-endif()
+endif ()
-########## Adding python module ##########
+# ######### Adding python module ##########
option(TVM_FFI_BUILD_PYTHON_MODULE "Adding python module." OFF)
if (TVM_FFI_BUILD_PYTHON_MODULE)
# Helper function to build the cython module
message(STATUS "Building cython module..")
find_package(
- Python COMPONENTS Interpreter Development.Module Development.SABIModule
- REQUIRED)
- set(core_cpp ${CMAKE_CURRENT_BINARY_DIR}/core.cpp)
- set(core_pyx ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/core.pyx)
- set(cython_sources
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/core.pyx
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/base.pxi
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/device.pxi
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/dtype.pxi
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/error.pxi
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/function.pxi
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/tensor.pxi
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/object.pxi
- ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/string.pxi
+ Python
+ COMPONENTS Interpreter Development.Module Development.SABIModule
+ REQUIRED
)
- # set working directory to source so we can see the exact file name in
backtrace
- # relatived to the project source root
+ set(_core_cpp ${CMAKE_CURRENT_BINARY_DIR}/core.cpp)
+ set(_core_pyx ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/core.pyx)
+ set(_cython_sources
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/core.pyx
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/base.pxi
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/device.pxi
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/dtype.pxi
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/error.pxi
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/function.pxi
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/tensor.pxi
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/object.pxi
+ ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/string.pxi
+ )
+ # set working directory to source so we can see the exact file name in
backtrace relatived to the
+ # project source root
add_custom_command(
- OUTPUT ${core_cpp}
- COMMAND ${Python_EXECUTABLE} -m cython --cplus ${core_pyx} -o ${core_cpp}
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
- COMMENT "Transpiling ${core_pyx} to ${core_cpp}"
- DEPENDS ${cython_sources}
- VERBATIM
+ OUTPUT ${_core_cpp}
+ COMMAND ${Python_EXECUTABLE} -m cython --cplus ${_core_pyx} -o ${_core_cpp}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMENT "Transpiling ${_core_pyx} to ${_core_cpp}"
+ DEPENDS ${_cython_sources}
+ VERBATIM
)
- if(Python_VERSION VERSION_GREATER_EQUAL "3.12")
+ if (Python_VERSION VERSION_GREATER_EQUAL "3.12")
# >= Python3.12, use Use_SABI version
- Python_add_library(tvm_ffi_cython MODULE "${core_cpp}" USE_SABI 3.12)
+ python_add_library(tvm_ffi_cython MODULE "${_core_cpp}" USE_SABI 3.12)
set_target_properties(tvm_ffi_cython PROPERTIES OUTPUT_NAME "core")
- if(NOT WIN32)
+ if (NOT WIN32)
set_target_properties(tvm_ffi_cython PROPERTIES SUFFIX ".abi3.so")
- endif()
- else()
+ endif ()
+ else ()
# before Python3.12, use WITH_SOABI version
- Python_add_library(tvm_ffi_cython MODULE "${core_cpp}" WITH_SOABI)
+ python_add_library(tvm_ffi_cython MODULE "${_core_cpp}" WITH_SOABI)
set_target_properties(tvm_ffi_cython PROPERTIES OUTPUT_NAME "core")
- endif()
- target_include_directories(tvm_ffi_cython PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython)
+ endif ()
+ target_include_directories(
+ tvm_ffi_cython PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython
+ )
target_compile_features(tvm_ffi_cython PRIVATE cxx_std_17)
target_link_libraries(tvm_ffi_cython PRIVATE tvm_ffi_header)
target_link_libraries(tvm_ffi_cython PRIVATE tvm_ffi_shared)
# Set RPATH for tvm_ffi_cython to find tvm_ffi_shared.so relatively
- if(APPLE)
+ if (APPLE)
# macOS uses @loader_path
set_target_properties(tvm_ffi_cython PROPERTIES INSTALL_RPATH
"@loader_path/lib")
- elseif(LINUX)
- # Linux uses $ORIGIN
+ elseif (LINUX)
+ # Linux uses $ORIGIN
set_target_properties(tvm_ffi_cython PROPERTIES INSTALL_RPATH
"\$ORIGIN/lib")
- endif()
+ endif ()
install(TARGETS tvm_ffi_cython DESTINATION .)
- ########## Installing the source ##########
- install(
- DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dlpack/include/ DESTINATION
3rdparty/dlpack/include/
+ # ######### Installing the source ##########
+ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dlpack/include/
+ DESTINATION 3rdparty/dlpack/include/
)
install(
- DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libbacktrace/ DESTINATION
3rdparty/libbacktrace/
+ DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/libbacktrace/
+ DESTINATION 3rdparty/libbacktrace/
PATTERN ".git" EXCLUDE
PATTERN ".git*" EXCLUDE
PATTERN "*.tmp" EXCLUDE
@@ -243,20 +243,27 @@ if (TVM_FFI_BUILD_PYTHON_MODULE)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Utils/ DESTINATION
cmake/Utils)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt DESTINATION .)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/tvm_ffi-config.cmake
DESTINATION cmake)
- install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/tvm_ffi_python_helpers.h
DESTINATION include/)
-endif()
+ install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/python/tvm_ffi/cython/tvm_ffi_python_helpers.h
+ DESTINATION include/
+ )
+endif ()
-########## Install the related for normal cmake library ##########
+# ######### Install the related for normal cmake library ##########
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/tvm/ffi/ DESTINATION
include/tvm/ffi/)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/dlpack/include/
DESTINATION include/)
-install(TARGETS tvm_ffi_shared DESTINATION lib)
+install(TARGETS tvm_ffi_shared DESTINATION lib)
# ship additional dSYM files for debugging symbols on if available
if (APPLE)
- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib/ DESTINATION lib
FILES_MATCHING PATTERN "*.dSYM")
-endif()
+ install(
+ DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib/
+ DESTINATION lib
+ FILES_MATCHING
+ PATTERN "*.dSYM"
+ )
+endif ()
if (NOT TVM_FFI_BUILD_PYTHON_MODULE)
# when building wheel, we do not ship static as we already ships source and
dll
install(TARGETS tvm_ffi_static DESTINATION lib)
-endif()
+endif ()
diff --git a/cmake/Utils/AddGoogleTest.cmake b/cmake/Utils/AddGoogleTest.cmake
index 251d713..cd8d093 100644
--- a/cmake/Utils/AddGoogleTest.cmake
+++ b/cmake/Utils/AddGoogleTest.cmake
@@ -16,42 +16,83 @@
# under the License.
include(FetchContent)
-set(gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE)
-set(BUILD_GMOCK ON CACHE BOOL "" FORCE)
-set(BUILD_GTEST ON CACHE BOOL "" FORCE)
+set(gtest_force_shared_crt # cmake-lint: disable=C0103
+ ON
+ CACHE BOOL "Always use msvcrt.dll" FORCE
+)
+set(BUILD_GMOCK
+ ON
+ CACHE BOOL "" FORCE
+)
+set(BUILD_GTEST
+ ON
+ CACHE BOOL "" FORCE
+)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
- GIT_TAG v1.14.0
+ GIT_TAG v1.14.0
)
FetchContent_GetProperties(googletest)
if (NOT googletest_POPULATED)
FetchContent_MakeAvailable(googletest)
include(GoogleTest)
- set_target_properties(gtest PROPERTIES EXPORT_COMPILE_COMMANDS OFF
EXCLUDE_FROM_ALL ON FOLDER 3rdparty)
- set_target_properties(gtest_main PROPERTIES EXPORT_COMPILE_COMMANDS OFF
EXCLUDE_FROM_ALL ON FOLDER 3rdparty)
- set_target_properties(gmock PROPERTIES EXPORT_COMPILE_COMMANDS OFF
EXCLUDE_FROM_ALL ON FOLDER 3rdparty)
- set_target_properties(gmock_main PROPERTIES EXPORT_COMPILE_COMMANDS OFF
EXCLUDE_FROM_ALL ON FOLDER 3rdparty)
+ set_target_properties(
+ gtest
+ PROPERTIES EXPORT_COMPILE_COMMANDS OFF
+ EXCLUDE_FROM_ALL ON
+ FOLDER 3rdparty
+ )
+ set_target_properties(
+ gtest_main
+ PROPERTIES EXPORT_COMPILE_COMMANDS OFF
+ EXCLUDE_FROM_ALL ON
+ FOLDER 3rdparty
+ )
+ set_target_properties(
+ gmock
+ PROPERTIES EXPORT_COMPILE_COMMANDS OFF
+ EXCLUDE_FROM_ALL ON
+ FOLDER 3rdparty
+ )
+ set_target_properties(
+ gmock_main
+ PROPERTIES EXPORT_COMPILE_COMMANDS OFF
+ EXCLUDE_FROM_ALL ON
+ FOLDER 3rdparty
+ )
mark_as_advanced(
- BUILD_GMOCK BUILD_GTEST BUILD_SHARED_LIBS
- gmock_build_tests gtest_build_samples gtest_build_tests
- gtest_disable_pthreads gtest_force_shared_crt gtest_hide_internal_symbols
+ BUILD_GMOCK
+ BUILD_GTEST
+ BUILD_SHARED_LIBS
+ gmock_build_tests
+ gtest_build_samples
+ gtest_build_tests
+ gtest_disable_pthreads
+ gtest_force_shared_crt
+ gtest_hide_internal_symbols
)
-endif()
+endif ()
-macro(tvm_ffi_add_googletest target_name)
+# ~~~
+# TVM_FFI_ADD_GTEST(target_name)
+# Register a GoogleTest executable as a CTest, link it against gtest_main,
+# and configure test discovery and properties.
+#
+# Parameters:
+# target_name: Name of the test executable target
+# ~~~
+macro (TVM_FFI_ADD_GTEST target_name)
add_test(
NAME ${target_name}
COMMAND ${target_name}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
target_link_libraries(${target_name} PRIVATE gtest_main)
- gtest_discover_tests(${target_name}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- TEST_DISCOVERY_TIMEOUT 600
- DISCOVERY_MODE PRE_TEST
- PROPERTIES
- VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
+ gtest_discover_tests(
+ ${target_name}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} TEST_DISCOVERY_TIMEOUT 600
DISCOVERY_MODE PRE_TEST
+ PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
)
set_target_properties(${target_name} PROPERTIES FOLDER tests)
-endmacro()
+endmacro ()
diff --git a/cmake/Utils/AddLibbacktrace.cmake
b/cmake/Utils/AddLibbacktrace.cmake
index e920a1f..31d8088 100644
--- a/cmake/Utils/AddLibbacktrace.cmake
+++ b/cmake/Utils/AddLibbacktrace.cmake
@@ -17,52 +17,56 @@
include(ExternalProject)
-function(_libbacktrace_compile)
- set(_libbacktrace_source
${CMAKE_CURRENT_LIST_DIR}/../../3rdparty/libbacktrace)
- set(_libbacktrace_prefix ${CMAKE_CURRENT_BINARY_DIR}/libbacktrace)
- if(CMAKE_SYSTEM_NAME MATCHES "Darwin" AND (CMAKE_C_COMPILER MATCHES
"^/Library" OR CMAKE_C_COMPILER MATCHES "^/Applications"))
- set(_cmake_c_compiler "/usr/bin/cc")
- else()
- set(_cmake_c_compiler "${CMAKE_C_COMPILER}")
- endif()
-
+# ~~~
+# _libbacktrace_compile()
+# Build and install libbacktrace as an ExternalProject, then add an imported
+# static target `libbacktrace` exposing headers and archive for consumers.
+# ~~~
+function (_libbacktrace_compile)
+ set(libbacktrace_source
${CMAKE_CURRENT_LIST_DIR}/../../3rdparty/libbacktrace)
+ set(libbacktrace_prefix ${CMAKE_CURRENT_BINARY_DIR}/libbacktrace)
+ if (CMAKE_SYSTEM_NAME MATCHES "Darwin" AND (CMAKE_C_COMPILER MATCHES
"^/Library"
+ OR CMAKE_C_COMPILER MATCHES
"^/Applications")
+ )
+ set(cmake_c_compiler "/usr/bin/cc")
+ else ()
+ set(cmake_c_compiler "${CMAKE_C_COMPILER}")
+ endif ()
message(STATUS CMAKC_C_COMPILER="${CMAKE_C_COMPILER}")
- file(MAKE_DIRECTORY ${_libbacktrace_prefix}/include)
- file(MAKE_DIRECTORY ${_libbacktrace_prefix}/lib)
+ file(MAKE_DIRECTORY ${libbacktrace_prefix}/include)
+ file(MAKE_DIRECTORY ${libbacktrace_prefix}/lib)
- ExternalProject_Add(project_libbacktrace
+ ExternalProject_Add(
+ project_libbacktrace
PREFIX libbacktrace
- SOURCE_DIR ${_libbacktrace_source}
- BINARY_DIR ${_libbacktrace_prefix}
+ SOURCE_DIR ${libbacktrace_source}
+ BINARY_DIR ${libbacktrace_prefix}
CONFIGURE_COMMAND
- "sh"
- "${_libbacktrace_source}/configure"
- "--prefix=${_libbacktrace_prefix}"
- --with-pic
- "CC=${_cmake_c_compiler}"
- "CPP=${_cmake_c_compiler} -E"
- "CFLAGS=${CMAKE_C_FLAGS}"
- "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}"
- "NM=${CMAKE_NM}"
- "STRIP=${CMAKE_STRIP}"
+ "sh" "${libbacktrace_source}/configure"
"--prefix=${libbacktrace_prefix}" --with-pic
+ "CC=${cmake_c_compiler}" "CPP=${cmake_c_compiler} -E"
"CFLAGS=${CMAKE_C_FLAGS}"
+ "LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}" "NM=${CMAKE_NM}"
"STRIP=${CMAKE_STRIP}"
"--host=${MACHINE_NAME}"
- INSTALL_DIR ${_libbacktrace_prefix}
- BUILD_COMMAND make
- INSTALL_COMMAND make install
- BUILD_BYPRODUCTS "${_libbacktrace_prefix}/lib/libbacktrace.a"
- "${_libbacktrace_prefix}/include/backtrace.h"
+ INSTALL_DIR ${libbacktrace_prefix}
+ BUILD_COMMAND make
+ INSTALL_COMMAND make install
+ BUILD_BYPRODUCTS "${libbacktrace_prefix}/lib/libbacktrace.a"
+ "${libbacktrace_prefix}/include/backtrace.h"
+ )
+ ExternalProject_Add_Step(
+ project_libbacktrace checkout
+ DEPENDERS configure
+ DEPENDEES download
)
- ExternalProject_Add_Step(project_libbacktrace checkout DEPENDERS configure
DEPENDEES download)
set_target_properties(project_libbacktrace PROPERTIES EXCLUDE_FROM_ALL TRUE)
add_library(libbacktrace STATIC IMPORTED)
add_dependencies(libbacktrace project_libbacktrace)
- set_target_properties(libbacktrace PROPERTIES
- IMPORTED_LOCATION ${_libbacktrace_prefix}/lib/libbacktrace.a
- INTERFACE_INCLUDE_DIRECTORIES ${_libbacktrace_prefix}/include
+ set_target_properties(
+ libbacktrace PROPERTIES IMPORTED_LOCATION
${libbacktrace_prefix}/lib/libbacktrace.a
+ INTERFACE_INCLUDE_DIRECTORIES
${libbacktrace_prefix}/include
)
-endfunction()
+endfunction ()
-if(NOT MSVC)
+if (NOT MSVC)
_libbacktrace_compile()
-endif()
+endif ()
diff --git a/cmake/Utils/CxxWarning.cmake b/cmake/Utils/CxxWarning.cmake
index a85e588..7bc6f18 100644
--- a/cmake/Utils/CxxWarning.cmake
+++ b/cmake/Utils/CxxWarning.cmake
@@ -15,16 +15,24 @@
# specific language governing permissions and limitations
# under the License.
-function(tvm_ffi_add_cxx_warning target_name)
+# ~~~
+# tvm_ffi_add_cxx_warning(target_name)
+# Apply a consistent set of warning flags (or placeholders) depending on the
active compiler family.
+# Parameters:
+# target_name: CMake target to modify
+# ~~~
+function (tvm_ffi_add_cxx_warning target_name)
# GNU, Clang, or AppleClang
- if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
- target_compile_options(${target_name} PRIVATE "-Werror" "-Wall" "-Wextra"
"-Wpedantic" "-Wno-unused-parameter")
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
+ target_compile_options(
+ ${target_name} PRIVATE "-Werror" "-Wall" "-Wextra" "-Wpedantic"
"-Wno-unused-parameter"
+ )
return()
- endif()
+ endif ()
# MSVC
- if(MSVC)
+ if (MSVC)
# target_compile_options(${target_name} PRIVATE "/W4" "/WX")
return()
- endif()
+ endif ()
message(FATAL_ERROR "Unsupported compiler: ${CMAKE_CXX_COMPILER_ID}")
-endfunction()
+endfunction ()
diff --git a/cmake/Utils/Library.cmake b/cmake/Utils/Library.cmake
index 611f972..1a76fa6 100644
--- a/cmake/Utils/Library.cmake
+++ b/cmake/Utils/Library.cmake
@@ -15,74 +15,110 @@
# specific language governing permissions and limitations
# under the License.
-function(tvm_ffi_add_prefix_map target_name prefix_path)
+# ~~~
+# tvm_ffi_add_prefix_map(target_name, prefix_path)
+# Add a compile prefix map so absolute paths under `prefix_path` are remapped
to a stable,
+# relative form for reproducible builds and cleaner diagnostics.
+#
+# Parameters:
+# target_name: CMake target to modify
+# prefix_path: Absolute path prefix to remap
+# ~~~
+function (tvm_ffi_add_prefix_map target_name prefix_path)
# Add prefix map so the path displayed becomes relative to prefix_path
- if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(${target_name} PRIVATE
"-ffile-prefix-map=${prefix_path}/=")
- endif()
-endfunction()
+ endif ()
+endfunction ()
-function(tvm_ffi_add_apple_dsymutil target_name)
+# ~~~
+# tvm_ffi_add_apple_dsymutil(target_name)
+# On Apple platforms, run `dsymutil` post-build to generate debug symbols for
better backtraces.
+# No-ops on non-Apple or when libbacktrace is disabled.
+#
+# Parameters:
+# target_name: CMake target to attach post-build step
+# ~~~
+function (tvm_ffi_add_apple_dsymutil target_name)
# running dsymutil on macos to generate debugging symbols for backtraces
- if(APPLE AND TVM_FFI_USE_LIBBACKTRACE)
+ if (APPLE AND TVM_FFI_USE_LIBBACKTRACE)
find_program(DSYMUTIL dsymutil)
mark_as_advanced(DSYMUTIL)
- add_custom_command(TARGET ${target_name}
- POST_BUILD
- COMMAND ${DSYMUTIL} ARGS $<TARGET_FILE:${target_name}>
- COMMENT "[COMMAND] dsymutil $<TARGET_FILE:${target_name}>"
- VERBATIM
+ add_custom_command(
+ TARGET ${target_name}
+ POST_BUILD
+ COMMAND ${DSYMUTIL} ARGS $<TARGET_FILE:${target_name}>
+ COMMENT "[COMMAND] dsymutil $<TARGET_FILE:${target_name}>"
+ VERBATIM
)
- endif()
-endfunction()
+ endif ()
+endfunction ()
-function(tvm_ffi_add_msvc_flags target_name)
+# ~~~
+# tvm_ffi_add_msvc_flags(target_name)
+# Apply MSVC-specific definitions and flags to improve build compatibility and
warnings behavior
+# on Windows.
+#
+# Parameters:
+# target_name: CMake target to modify
+# ~~~
+function (tvm_ffi_add_msvc_flags target_name)
# running if we are under msvc
- if(MSVC)
+ if (MSVC)
target_compile_definitions(${target_name} PUBLIC -DWIN32_LEAN_AND_MEAN)
target_compile_definitions(${target_name} PUBLIC -D_CRT_SECURE_NO_WARNINGS)
target_compile_definitions(${target_name} PUBLIC -D_SCL_SECURE_NO_WARNINGS)
target_compile_definitions(${target_name} PUBLIC
-D_ENABLE_EXTENDED_ALIGNED_STORAGE)
target_compile_definitions(${target_name} PUBLIC -DNOMINMAX)
target_compile_options(${target_name} PRIVATE "/Zi")
- endif()
-endfunction()
+ endif ()
+endfunction ()
-function(tvm_ffi_add_target_from_obj target_name obj_target_name)
+# ~~~
+# tvm_ffi_add_target_from_obj(target_name, obj_target_name)
+# Create static and shared library targets from an object library and set
output directories
+# consistently across platforms. Also runs dsymutil on Apple for the shared
target.
+#
+# Parameters:
+# target_name: Base name for created targets
+# obj_target_name: Object library to link into the outputs
+# ~~~
+function (tvm_ffi_add_target_from_obj target_name obj_target_name)
add_library(${target_name}_static STATIC
$<TARGET_OBJECTS:${obj_target_name}>)
set_target_properties(
- ${target_name}_static PROPERTIES
- OUTPUT_NAME "${target_name}_static"
- ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
- LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
- )
+ ${target_name}_static
+ PROPERTIES OUTPUT_NAME "${target_name}_static"
+ ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ )
add_library(${target_name}_shared SHARED
$<TARGET_OBJECTS:${obj_target_name}>)
set_target_properties(
- ${target_name}_shared PROPERTIES
- OUTPUT_NAME "${target_name}"
- ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
- LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ ${target_name}_shared
+ PROPERTIES OUTPUT_NAME "${target_name}"
+ ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
)
if (WIN32)
target_compile_definitions(${obj_target_name} PRIVATE TVM_FFI_EXPORTS)
- # set the output directory for each config type so msbuild also get into
lib
- # without appending the config type to the output directory
- # do both Release and RELEASE suffix, since while cmake docs suggest
Release is ok.
- # real runs on MSbuild suggest that we might need RELEASE instead
- foreach(CONFIG_TYPE Release RELEASE)
- set_target_properties(${target_name}_shared PROPERTIES
- RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPE} "${CMAKE_BINARY_DIR}/lib"
- LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPE} "${CMAKE_BINARY_DIR}/lib"
- ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPE} "${CMAKE_BINARY_DIR}/lib"
+ # set the output directory for each config type so msbuild also get into
lib without appending
+ # the config type to the output directory do both Release and RELEASE
suffix, since while cmake
+ # docs suggest Release is ok. real runs on MSbuild suggest that we might
need RELEASE instead
+ foreach (config_type Release RELEASE)
+ set_target_properties(
+ ${target_name}_shared
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${config_type}
"${CMAKE_BINARY_DIR}/lib"
+ LIBRARY_OUTPUT_DIRECTORY_${config_type}
"${CMAKE_BINARY_DIR}/lib"
+ ARCHIVE_OUTPUT_DIRECTORY_${config_type}
"${CMAKE_BINARY_DIR}/lib"
)
- set_target_properties(${target_name}_static PROPERTIES
- RUNTIME_OUTPUT_DIRECTORY_${CONFIG_TYPE} "${CMAKE_BINARY_DIR}/lib"
- LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPE} "${CMAKE_BINARY_DIR}/lib"
- ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPE} "${CMAKE_BINARY_DIR}/lib"
+ set_target_properties(
+ ${target_name}_static
+ PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${config_type}
"${CMAKE_BINARY_DIR}/lib"
+ LIBRARY_OUTPUT_DIRECTORY_${config_type}
"${CMAKE_BINARY_DIR}/lib"
+ ARCHIVE_OUTPUT_DIRECTORY_${config_type}
"${CMAKE_BINARY_DIR}/lib"
)
- endforeach()
- endif()
+ endforeach ()
+ endif ()
tvm_ffi_add_apple_dsymutil(${target_name}_shared)
-endfunction()
+endfunction ()
diff --git a/cmake/Utils/Sanitizer.cmake b/cmake/Utils/Sanitizer.cmake
index a20eead..886a853 100644
--- a/cmake/Utils/Sanitizer.cmake
+++ b/cmake/Utils/Sanitizer.cmake
@@ -15,21 +15,31 @@
# specific language governing permissions and limitations
# under the License.
-function(add_sanitizer_address target_name)
- if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
+# ~~~
+# add_sanitizer_address(target_name)
+# Enable AddressSanitizer (ASan) for the given target when supported by the
+# current compiler. Safe no-op on unsupported compilers.
+#
+# Parameters:
+# target_name: CMake target to instrument with ASan
+# ~~~
+function (add_sanitizer_address target_name)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
include(CheckCXXCompilerFlag)
- set (_saved_CRF ${CMAKE_REQUIRED_FLAGS})
- set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
+ set(saved_crf ${CMAKE_REQUIRED_FLAGS})
+ set(CMAKE_REQUIRED_FLAGS "-fsanitize=address") # cmake-lint: disable=C0103
check_cxx_source_compiles("int main() { return 0; }"
COMPILER_SUPPORTS_ASAN)
- set (CMAKE_REQUIRED_FLAGS ${_saved_CRF})
- get_target_property(_saved_type ${target_name} TYPE)
- if (${_saved_type} STREQUAL "INTERFACE_LIBRARY")
- set(_saved_type INTERFACE)
- else()
- set(_saved_type PRIVATE)
- endif()
- target_link_options(${target_name} ${_saved_type} "-fsanitize=address")
- target_compile_options(${target_name} ${_saved_type} "-fsanitize=address"
"-fno-omit-frame-pointer" "-g")
+ set(CMAKE_REQUIRED_FLAGS ${saved_crf}) # cmake-lint: disable=C0103
+ get_target_property(saved_type ${target_name} TYPE)
+ if (${saved_type} STREQUAL "INTERFACE_LIBRARY")
+ set(saved_type INTERFACE)
+ else ()
+ set(saved_type PRIVATE)
+ endif ()
+ target_link_options(${target_name} ${saved_type} "-fsanitize=address")
+ target_compile_options(
+ ${target_name} ${saved_type} "-fsanitize=address"
"-fno-omit-frame-pointer" "-g"
+ )
return()
- endif()
-endfunction()
+ endif ()
+endfunction ()
diff --git a/cmake/tvm_ffi-config.cmake b/cmake/tvm_ffi-config.cmake
index 01f60ca..b04e8b6 100644
--- a/cmake/tvm_ffi-config.cmake
+++ b/cmake/tvm_ffi-config.cmake
@@ -15,20 +15,30 @@
# specific language governing permissions and limitations
# under the License.
-find_package(Python COMPONENTS Interpreter REQUIRED)
+find_package(
+ Python
+ COMPONENTS Interpreter
+ REQUIRED
+)
# call tvm_ffi.config to get the cmake directory and set it to tvm_ffi_ROOT
execute_process(
- COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --includedir
- OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE tvm_ffi_INCLUDE_DIR)
+ COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --includedir
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE tvm_ffi_INCLUDE_DIR
+)
execute_process(
- COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --dlpack-includedir
- OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE
tvm_ffi_DLPACK_INCLUDE_DIR)
+ COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --dlpack-includedir
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE tvm_ffi_DLPACK_INCLUDE_DIR
+)
execute_process(
- COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --libfiles
- OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE tvm_ffi_LIB_FILES)
+ COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --libfiles
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE tvm_ffi_LIB_FILES
+)
message(STATUS "Finding libfiles ${tvm_ffi_LIB_FILES}")
@@ -40,19 +50,15 @@ target_include_directories(tvm_ffi_header INTERFACE
"${tvm_ffi_DLPACK_INCLUDE_DI
add_library(tvm_ffi_shared SHARED IMPORTED)
target_compile_features(tvm_ffi_shared INTERFACE cxx_std_17)
-if(WIN32)
- set_target_properties(
- tvm_ffi_shared PROPERTIES IMPORTED_IMPLIB "${tvm_ffi_LIB_FILES}"
- )
-else()
- set_target_properties(
- tvm_ffi_shared PROPERTIES IMPORTED_LOCATION "${tvm_ffi_LIB_FILES}"
- )
-endif()
-
+if (WIN32)
+ set_target_properties(tvm_ffi_shared PROPERTIES IMPORTED_IMPLIB
"${tvm_ffi_LIB_FILES}")
+else ()
+ set_target_properties(tvm_ffi_shared PROPERTIES IMPORTED_LOCATION
"${tvm_ffi_LIB_FILES}")
+endif ()
+# cmake-lint: disable=C0307
set_target_properties(
tvm_ffi_shared PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
- "${tvm_ffi_INCLUDE_DIR};${tvm_ffi_DLPACK_INCLUDE_DIR}"
+
"${tvm_ffi_INCLUDE_DIR};${tvm_ffi_DLPACK_INCLUDE_DIR}"
)
-# extra cmake functions
+
include(${CMAKE_CURRENT_LIST_DIR}/Utils/Library.cmake)
diff --git a/examples/packaging/CMakeLists.txt
b/examples/packaging/CMakeLists.txt
index ed55f7c..b577f3a 100644
--- a/examples/packaging/CMakeLists.txt
+++ b/examples/packaging/CMakeLists.txt
@@ -28,30 +28,37 @@ option(TVM_FFI_EXT_SHIP_DEBUG_SYMBOLS "Ship debug symbols"
ON)
#
# This example shows both options, you only need to pick a specific one.
#
-# - For common build cases, using pre-built and link tvm_ffi_shared is
sufficient.
-# - For cases where you may want to cross-compile or bundle part of
tvm_ffi_objects directly
-# into your project, opt for building tvm_ffi from source path.
-# Note that it is always safe to build from source and extra cost of
building tvm_ffi is small.
-# So when in doubt, you can always choose to the building tvm_ffi from
source route.
+# * For common build cases, using pre-built and link tvm_ffi_shared is
sufficient.
+# * For cases where you may want to cross-compile or bundle part of
tvm_ffi_objects directly into
+# your project, opt for building tvm_ffi from source path. Note that it is
always safe to build
+# from source and extra cost of building tvm_ffi is small. So when in doubt,
you can always choose
+# to the building tvm_ffi from source route.
#
-# In python or other cases when we dynamically load libtvm_ffi_shared. Even
when you build
-# from source, you do not need to ship libtvm_ffi.so built here as they are
only
-# used to supply the linking information.
-# first find python related components
-find_package(Python COMPONENTS Interpreter REQUIRED)
+# In python or other cases when we dynamically load libtvm_ffi_shared. Even
when you build from
+# source, you do not need to ship libtvm_ffi.so built here as they are only
used to supply the
+# linking information. first find python related components
+find_package(
+ Python
+ COMPONENTS Interpreter
+ REQUIRED
+)
if (TVM_FFI_BUILD_FROM_SOURCE)
execute_process(
COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --sourcedir
- OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE tvm_ffi_ROOT)
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE tvm_ffi_ROOT
+ )
message(STATUS "Building tvm_ffi from source: ${tvm_ffi_ROOT}")
add_subdirectory(${tvm_ffi_ROOT} tvm_ffi)
-else()
+else ()
# call tvm_ffi.config to get the cmake directory and set it to tvm_ffi_ROOT
execute_process(
COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --cmakedir
- OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE tvm_ffi_ROOT)
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE tvm_ffi_ROOT
+ )
find_package(tvm_ffi CONFIG REQUIRED)
-endif()
+endif ()
# use the projects as usual
add_library(my_ffi_extension SHARED src/extension.cc)
@@ -59,15 +66,18 @@ target_link_libraries(my_ffi_extension tvm_ffi_header)
target_link_libraries(my_ffi_extension tvm_ffi_shared)
# show as my_ffi_extension.so
-set_target_properties(
- my_ffi_extension PROPERTIES PREFIX ""
-)
+set_target_properties(my_ffi_extension PROPERTIES PREFIX "")
if (TVM_FFI_EXT_SHIP_DEBUG_SYMBOLS)
# ship debugging symbols for backtrace on macos
tvm_ffi_add_prefix_map(my_ffi_extension ${CMAKE_CURRENT_SOURCE_DIR})
tvm_ffi_add_apple_dsymutil(my_ffi_extension)
- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ DESTINATION . FILES_MATCHING
PATTERN "*.dSYM")
-endif()
+ install(
+ DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/
+ DESTINATION .
+ FILES_MATCHING
+ PATTERN "*.dSYM"
+ )
+endif ()
install(TARGETS my_ffi_extension DESTINATION .)
diff --git a/examples/quick_start/CMakeLists.txt
b/examples/quick_start/CMakeLists.txt
index d3cd4b2..ed4f771 100644
--- a/examples/quick_start/CMakeLists.txt
+++ b/examples/quick_start/CMakeLists.txt
@@ -18,14 +18,19 @@
cmake_minimum_required(VERSION 3.18)
project(tvm_ffi_example)
-
# Discover the Python interpreter so we can query tvm-ffi for its CMake
package path.
-find_package(Python COMPONENTS Interpreter REQUIRED)
+find_package(
+ Python
+ COMPONENTS Interpreter
+ REQUIRED
+)
# Ask tvm-ffi where it stores its exported CMake files.
execute_process(
COMMAND "${Python_EXECUTABLE}" -m tvm_ffi.config --cmakedir
- OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE tvm_ffi_ROOT)
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ OUTPUT_VARIABLE tvm_ffi_ROOT
+)
# Pull in the tvm-ffi CMake targets so we can link against them below.
find_package(tvm_ffi CONFIG REQUIRED)
@@ -36,45 +41,27 @@ target_link_libraries(add_one_cpu tvm_ffi_header)
target_link_libraries(add_one_cpu tvm_ffi_shared)
target_link_libraries(add_one_c tvm_ffi_shared)
# show as add_one_cpu.so
-set_target_properties(
- add_one_cpu PROPERTIES
- PREFIX ""
- SUFFIX ".so"
-)
-set_target_properties(
- add_one_c PROPERTIES
- PREFIX ""
- SUFFIX ".so"
-)
+set_target_properties(add_one_cpu PROPERTIES PREFIX "" SUFFIX ".so")
+set_target_properties(add_one_c PROPERTIES PREFIX "" SUFFIX ".so")
# Optionally build the CUDA variant if the CUDA toolkit is present.
-if(NOT WIN32)
+if (NOT WIN32)
find_package(CUDAToolkit QUIET)
- if(CUDAToolkit_FOUND)
+ if (CUDAToolkit_FOUND)
enable_language(CUDA)
add_library(add_one_cuda SHARED src/add_one_cuda.cu)
target_link_libraries(add_one_cuda PRIVATE tvm_ffi_shared)
- set_target_properties(
- add_one_cuda PROPERTIES
- PREFIX ""
- SUFFIX ".so"
- )
+ set_target_properties(add_one_cuda PROPERTIES PREFIX "" SUFFIX ".so")
add_executable(run_example_cuda src/run_example_cuda.cc)
- set_target_properties(
- run_example_cuda PROPERTIES
- CXX_STANDARD 17
- )
+ set_target_properties(run_example_cuda PROPERTIES CXX_STANDARD 17)
target_link_libraries(run_example_cuda PRIVATE tvm_ffi_shared CUDA::cudart)
- endif()
-endif()
+ endif ()
+endif ()
# CPU-only C++ driver used in the quick start guide.
add_executable(run_example src/run_example.cc)
-set_target_properties(
- run_example PROPERTIES
- CXX_STANDARD 17
-)
+set_target_properties(run_example PROPERTIES CXX_STANDARD 17)
target_link_libraries(run_example tvm_ffi_shared)
diff --git a/tests/cpp/CMakeLists.txt b/tests/cpp/CMakeLists.txt
index c807fad..069ba4b 100644
--- a/tests/cpp/CMakeLists.txt
+++ b/tests/cpp/CMakeLists.txt
@@ -3,22 +3,18 @@ file(GLOB _test_extra_sources
"${CMAKE_CURRENT_SOURCE_DIR}/extra/test*.cc")
if (TVM_FFI_USE_EXTRA_CXX_API)
list(APPEND _test_sources ${_test_extra_sources})
-endif()
+endif ()
-add_executable(
- tvm_ffi_tests
- EXCLUDE_FROM_ALL
- ${_test_sources}
-)
+add_executable(tvm_ffi_tests EXCLUDE_FROM_ALL ${_test_sources})
set_target_properties(
- tvm_ffi_tests PROPERTIES
- CXX_STANDARD 17
- CXX_STANDARD_REQUIRED ON
- CXX_EXTENSIONS OFF
- ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
- LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ tvm_ffi_tests
+ PROPERTIES CXX_STANDARD 17
+ CXX_STANDARD_REQUIRED ON
+ CXX_EXTENSIONS OFF
+ ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
)
tvm_ffi_add_cxx_warning(tvm_ffi_tests)
@@ -26,8 +22,8 @@ add_sanitizer_address(tvm_ffi_tests)
tvm_ffi_add_apple_dsymutil(tvm_ffi_tests)
tvm_ffi_add_msvc_flags(tvm_ffi_tests)
target_link_libraries(tvm_ffi_tests PRIVATE tvm_ffi_shared)
-tvm_ffi_add_googletest(tvm_ffi_tests)
+tvm_ffi_add_gtest(tvm_ffi_tests)
if (MSVC)
target_link_options(tvm_ffi_tests PRIVATE /DEBUG)
-endif()
+endif ()