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