87 lines
3.4 KiB
CMake
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()
|