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