There are two types of integration here. If you are talking about a DSP with a cutomized C dialect backend. Then perhaps directly integrating into target/source would be a better idea.
In the other case where you want to directly compile from a graph, use the bring your own codegen and customized compiler. In both cases, you will likely need a customized runtime.
Note that uTVM itself is quite modular(as a runtime), so it should not be hard to reuse it and combine it with specific runtime module