blob: 32c1fdce2cc08d8b6bfbd70475a48d3ab81b603d [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.
"""Utils to path."""
import os
from tvm._ffi import libinfo
from tvm.contrib import cc
def find_minrpc_server_libpath(server="posix_popen_server"):
"""Get the path of minrpc server libary.
Parameters
----------
server : str
The kind of built in minrpc server.
Returns
-------
path : str
The path to the min server library.
"""
curr_dir = os.path.dirname(os.path.realpath(os.path.expanduser(__file__)))
source_dir = os.path.abspath(os.path.join(curr_dir, "..", "..", ".."))
minrpc_dir = os.path.join(source_dir, "src", "runtime", "minrpc")
path = os.path.join(minrpc_dir, server, ("%s.cc" % server))
candidates = [path]
if not os.path.isfile(path):
raise RuntimeError("Cannot find minserver %s, in candidates %s" % (server, candidates))
return minrpc_dir, path
def with_minrpc(compile_func, server="posix_popen_server", runtime="libtvm"):
"""Attach the compiler function with minrpc related options.
Parameters
----------
compile_func : Union[str, Callable[[str, str, Optional[str]], None]]
The compilation function to decorate.
server : str
The server type.
runtime : str
The runtime library.
Returns
-------
fcompile : function
The return compilation.
"""
minrpc_dir, server_path = find_minrpc_server_libpath(server)
runtime_path = libinfo.find_lib_path([runtime, runtime + ".so", runtime + ".dylib"])[0]
runtime_dir = os.path.abspath(os.path.dirname(runtime_path))
options = ["-std=c++17"]
# Make sure the rpath to the libtvm is set so we can do local tests.
# Note that however, this approach won't work on remote.
# Always recommend to link statically.
options += ["-Wl,-rpath=" + runtime_dir]
options += ["-I" + path for path in libinfo.find_include_path()]
options += ["-I" + minrpc_dir]
fcompile = cc.cross_compiler(
compile_func, options=options, add_files=[server_path, runtime_path]
)
fcompile.__name__ = "with_minrpc"
fcompile.need_system_lib = True
return fcompile