Files
wehub-resource-sync 26446540fa
Lint / lint (push) Waiting to run
CI / MacOS (push) Waiting to run
CI / Windows (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 13:36:25 +08:00

87 lines
3.4 KiB
CMake

# 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.
# Helpers for configuring library targets.
# Hide symbols from static archives linked into a shared library. This prevents
# downstream libraries from accidentally binding to private archive symbols such
# as those from libstdc++_nonshared.a.
function(tvm_hide_static_linked_lib_symbols target_name)
if(HIDE_PRIVATE_SYMBOLS
AND CMAKE_SYSTEM_NAME MATCHES "Linux|Android|FreeBSD|NetBSD|OpenBSD"
AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang"
)
target_link_options(${target_name} PRIVATE "-Wl,--exclude-libs,ALL")
endif()
endfunction()
#######################################################
# tvm_configure_target_library(target_name [RUNTIME_MODULE])
#
# Configure a TVM library target. The target always gets a relative rpath
# ($ORIGIN / @loader_path) so that sibling shared libraries in the same
# directory resolve each other regardless of the install location (e.g. inside a
# Python wheel).
#
# For shared libraries and runtime modules, hide symbols that come from linked
# static archives so downstream libraries cannot accidentally bind to private
# archive symbols such as those from libstdc++_nonshared.a.
#
# With the RUNTIME_MODULE option -- used for the optional runtime backend
# libraries (tvm_runtime_cuda, tvm_runtime_vulkan, ...) -- the target is also
# emitted into the build "lib" directory and installed; when building the Python
# module it is additionally installed into the package "lib" directory. Targets
# that manage their own output directory / install rules (tvm_compiler,
# tvm_runtime, ...) omit the option and take only the rpath.
#
# No-op if the target does not exist.
function(tvm_configure_target_library target_name)
if(NOT TARGET ${target_name})
return()
endif()
cmake_parse_arguments(ARG "RUNTIME_MODULE" "" "" ${ARGN})
if(APPLE)
set_target_properties(${target_name} PROPERTIES
BUILD_RPATH "@loader_path"
INSTALL_RPATH "@loader_path"
)
elseif(UNIX)
set_target_properties(${target_name} PROPERTIES
BUILD_RPATH "\$ORIGIN"
INSTALL_RPATH "\$ORIGIN"
)
endif()
get_target_property(TVM_TARGET_TYPE ${target_name} TYPE)
if(TVM_TARGET_TYPE STREQUAL "SHARED_LIBRARY" OR TVM_TARGET_TYPE STREQUAL "MODULE_LIBRARY")
tvm_hide_static_linked_lib_symbols(${target_name})
endif()
if(ARG_RUNTIME_MODULE)
set_target_properties(${target_name} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
)
install(TARGETS ${target_name} DESTINATION lib${LIB_SUFFIX})
if(TVM_BUILD_PYTHON_MODULE)
install(TARGETS ${target_name} DESTINATION "lib")
endif()
endif()
endfunction()