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