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