xref: /OK3568_Linux_fs/external/rknpu2/runtime/Android.go (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1package librknnrt
2
3import (
4    "android/soong/android"
5    "android/soong/cc"
6    "fmt"
7    "strings"
8)
9
10var SUPPORT_TARGET_PLATFORM = [...]string{
11    "rk356x",
12    "rk3588",
13}
14
15func init() {
16    fmt.Println("librknnrt want to conditional Compile")
17    android.RegisterModuleType("cc_librknnrt_prebuilt_library_shared", LibrknnrtFactory)
18    // android.RegisterModuleType("librknnrt_headers", LibrknnrtHeadersFactory)
19}
20
21func LibrknnrtFactory() (android.Module) {
22    module := cc.PrebuiltSharedLibraryFactory()
23    android.AddLoadHook(module, LibrknnrtPrebuiltLibrary)
24    return module
25}
26
27func LibrknnrtPrebuiltLibrary(ctx android.LoadHookContext) {
28
29    type props struct {
30        Multilib struct {
31            Lib64 struct {
32                Srcs []string
33            }
34            Lib32 struct {
35                Srcs []string
36            }
37        }
38        Export_include_dirs []string
39    }
40    p := &props{}
41
42    p.Multilib.Lib64.Srcs = getLibrknnrtLibrary(ctx, "arm64-v8a")
43    p.Multilib.Lib32.Srcs = getLibrknnrtLibrary(ctx, "armeabi-v7a")
44    p.Export_include_dirs = getLibrknnrtHeader(ctx)
45    ctx.AppendProperties(p)
46}
47
48// func LibrknnrtHeadersFactory() (android.Module) {
49//     module := cc.prebuiltLibraryHeaderFactory()
50//     android.AddLoadHook(module, LibrknnrtHeaders)
51//     return module
52// }
53
54// func LibrknnrtHeaders(ctx android.LoadHookContext) {
55
56//     type props struct {
57//         Export_include_dirs []string
58//     }
59//     p := &props{}
60
61//     p.Export_include_dirs = getLibrknnrtHeader(ctx)
62//     ctx.AppendProperties(p)
63// }
64
65func checkEnabled(ctx android.LoadHookContext) bool {
66    var soc string = getTargetSoc(ctx)
67    for i := 0; i < len(SUPPORT_TARGET_PLATFORM); i++ {
68        if (strings.EqualFold(SUPPORT_TARGET_PLATFORM[i], soc)) {
69            fmt.Println("librknnrt enabled on " + soc)
70            return true
71        }
72    }
73    fmt.Println("librknnrt disabled on " + soc)
74    return false
75}
76
77func getLibrknnrtLibrary(ctx android.LoadHookContext, arch string) ([]string) {
78    var src []string
79    var soc string = getTargetSoc(ctx)
80    var prefix string = soc
81
82    if (!checkEnabled(ctx)) {
83        prefix = "RK356X"
84    }
85
86    // fmt.Println("soc=" + soc + " arch=" + arch)
87
88    src = append(src, prefix + "/Android/librknn_api/" + arch + "/librknnrt.so")
89
90    return src
91}
92
93func getLibrknnrtHeader(ctx android.LoadHookContext) ([]string) {
94    var src []string
95    var soc string = getTargetSoc(ctx)
96    var prefix string = soc
97
98    if (!checkEnabled(ctx)) {
99        prefix = "RK356X"
100    }
101
102    src = append(src, prefix + "/Android/librknn_api/include/")
103
104    return src
105}
106
107func getTargetSoc(ctx android.LoadHookContext) (string) {
108    var target_board_platform string = strings.ToUpper(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
109    return target_board_platform
110}
111