README.md
1<!--- Licensed to the Apache Software Foundation (ASF) under one -->
2<!--- or more contributor license agreements. See the NOTICE file -->
3<!--- distributed with this work for additional information -->
4<!--- regarding copyright ownership. The ASF licenses this file -->
5<!--- to you under the Apache License, Version 2.0 (the -->
6<!--- "License"); you may not use this file except in compliance -->
7<!--- with the License. You may obtain a copy of the License at -->
8
9<!--- http://www.apache.org/licenses/LICENSE-2.0 -->
10
11<!--- Unless required by applicable law or agreed to in writing, -->
12<!--- software distributed under the License is distributed on an -->
13<!--- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -->
14<!--- KIND, either express or implied. See the License for the -->
15<!--- specific language governing permissions and limitations -->
16<!--- under the License. -->
17
18# Hexagon backend runtime
19
20The Hexagon runtime is a part of the TVM runtime that facilitates communication between a host and a Hexagon device. There are two types of host/device arrangements that are supported:
21- X86/Linux host running Hexagon simulator,
22- Android/AArch64 host running on a physical device containing a Hexagon module (i.e. CSDP or ADSP).
23
24The TVM runtime that contains Hexagon runtime is the one executing on host. In either case, there will need to be a separate TVM runtime (i.e. the `libtvm_runtime.so` library) compiled for execution on Hexagon.
25
26The prerequisite is to have Hexagon SDK installed, preferably version 3.5.0 or later. The Hexagon SDK can be downloaded from https://developer.qualcomm.com/software/hexagon-dsp-sdk.
27
28It is also recommended to use as recent version of LLVM as possible, version 7.0.0 being the minimum (based on community feedback).
29
30### Compiling TVM runtime for x86
31
32This will use Hexagon simulator, which is provided in the Hexagon SDK.
33
34When configuring TVM (cmake), set the following variables:
35```
36USE_LLVM=llvm-config
37USE_HEXAGON_DEVICE=sim
38USE_HEXAGON_SDK=/path/to/sdk
39```
40
41You can then build the entire TVM with the usual command (e.g. `make`).
42
43### Compiling TVM runtime for Android
44
45This will use FastRPC mechanism to communicate between the AArch64 host and Hexagon.
46
47When configuring TVM (cmake), set the following variables:
48```
49USE_LLVM=llvm-config
50USE_HEXAGON_DEVICE=device
51USE_HEXAGON_SDK=/path/to/sdk
52```
53
54You will need Android clang toolchain to compile the runtime. It is provided in Android NDK r19 or newer.
55
56Set the C/C++ compiler to the Android clang for aarch64, and pass `-DCMAKE_CXX_FLAGS='-stdlib=libc++'` to the cmake command.
57
58Only build the `runtime` component of TVM (e.g. `make runtime`), building the entire TVM will not work.
59
60### Compiling TVM runtime for Hexagon
61
62The TVM runtime executing on Hexagon does not need to have support for Hexagon device in it (as it is only for communication between host and Hexagon device). In fact, it's only needed for basic services (like thread control), and so it should not contain support for any devices.
63
64When configuring TVM (cmake), set the following variables:
65```
66USE_RPC=OFF
67USE_LLVM=OFF
68USE_HEXAGON_DEVICE=OFF
69USE_HEXAGON_SDK=/path/to/sdk
70```
71
72Please note that while suport for a Hexagon device is disabled, the Hexagon SDK is still needed and the path to it needs to be passed to cmake.
73
74Set the C/C++ compiler to `hexagon-clang` (included in the Hexagon SDK), and set `CMAKE_CXX_FLAGS='-stdlib=libc++'`.
75
76As in the case of Android, only build the `runtime` component (e.g. `make runtime`).
77
78