| <!--- 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. --> |
| |
| # Hexagon backend runtime |
| |
| The Hexagon runtime implements the functionality necessary for executing ML |
| models on Hexagon hardware (or emulation). |
| |
| The prerequisite is to have Hexagon SDK installed, version 4.0.0 or later. |
| |
| It is also recommended to use as recent version of LLVM as possible, version |
| 7.0.0 being the minimum (based on community feedback). |
| |
| ### Compiling TVM with support for Hexagon for host (x86) |
| |
| TVM running on host can serve as a cross-compiler that produces machine code |
| for Hexagon. To enable that, certain elements of both, the compiler and the |
| runtime need to include Hexagon-specific functionality. For the compiler, it |
| is code generation, and for the runtime, it is the ability to represent |
| modules with Hexagon code. Since Hexagon codegen is based on LLVM, LLVM |
| codegen needs to be enabled as well. The set of CMake options to enable |
| Hexagon support is |
| ``` |
| USE_LLVM=llvm-config |
| USE_HEXAGON=ON |
| USE_HEXAGON_SDK=/path/to/sdk |
| ``` |
| |
| ### Compiling TVM runtime for non-x86 |
| |
| Aside from x86, there are two other platforms where support for Hexagon may |
| be relevant. One of them is obviously Hexagon itself, the other one is |
| Android. Neither of these platforms supports the compiler side of TVM, only |
| runtime, and so the only compiler-related CMake option from the x86 build |
| above can be omitted: `USE_LLVM`. |
| |
| Additionally, for Android, set the toolchain and target flags: |
| ``` |
| ANDROID_ABI=aarch64-v8a |
| ANDROID_PLATFORM=android-28 |
| CMAKE_TOOLCHAIN_FILE=/path/to/android-ndk/build/cmake/android.toolchain.cmake |
| USE_HEXAGON=ON |
| USE_HEXAGON_ARCH=v65|v66|v68|v69|v73|v75 |
| USE_HEXAGON_SDK=/path/to/sdk |
| ``` |
| |
| Building for Hexagon requires setting the C/C++ compiler to `hexagon-clang/++`: |
| ``` |
| CMAKE_C_COMPILER=hexagon-clang |
| CMAKE_CXX_COMPILER=hexagon-clang++ |
| USE_HEXAGON=ON |
| USE_HEXAGON_ARCH=v65|v66|v68|v69|v73|v75 |
| USE_HEXAGON_SDK=/path/to/sdk |
| USE_RPC=OFF |
| ``` |
| |
| As mentioned before, only build the `runtime` component (e.g. `make runtime`). |
| |
| Please note that the Hexagon SDK version needs to support the architecture |
| specified in `USE_HEXAGON_ARCH`. |