1*4882a593Smuzhiyunpackage librga 2*4882a593Smuzhiyun 3*4882a593Smuzhiyunimport ( 4*4882a593Smuzhiyun "android/soong/android" 5*4882a593Smuzhiyun "android/soong/cc" 6*4882a593Smuzhiyun "fmt" 7*4882a593Smuzhiyun "strings" 8*4882a593Smuzhiyun "strconv" 9*4882a593Smuzhiyun "unsafe" 10*4882a593Smuzhiyun) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunfunc init() { 13*4882a593Smuzhiyun fmt.Println("librga want to conditional Compile") 14*4882a593Smuzhiyun android.RegisterModuleType("cc_librga", DefaultsFactory) 15*4882a593Smuzhiyun} 16*4882a593Smuzhiyun 17*4882a593Smuzhiyunfunc DefaultsFactory() (android.Module) { 18*4882a593Smuzhiyun module := cc.DefaultsFactory() 19*4882a593Smuzhiyun android.AddLoadHook(module, Defaults) 20*4882a593Smuzhiyun return module 21*4882a593Smuzhiyun} 22*4882a593Smuzhiyun 23*4882a593Smuzhiyunfunc Defaults(ctx android.LoadHookContext) { 24*4882a593Smuzhiyun sdkVersion := ctx.AConfig().PlatformSdkVersion() 25*4882a593Smuzhiyun sdkVersionInt, err := strconv.Atoi(*(*string)(unsafe.Pointer(&sdkVersion))) 26*4882a593Smuzhiyun if err != nil { 27*4882a593Smuzhiyun fmt.Printf("librga cannot get ApiLevel, %q could not be parsed as an integer\n", sdkVersion) 28*4882a593Smuzhiyun panic(1) 29*4882a593Smuzhiyun } 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun if (sdkVersionInt >= 29 ) { 32*4882a593Smuzhiyun type props struct { 33*4882a593Smuzhiyun Srcs []string 34*4882a593Smuzhiyun Cflags []string 35*4882a593Smuzhiyun Shared_libs []string 36*4882a593Smuzhiyun Include_dirs []string 37*4882a593Smuzhiyun Header_libs []string 38*4882a593Smuzhiyun Export_header_lib_headers []string 39*4882a593Smuzhiyun Double_loadable *bool 40*4882a593Smuzhiyun } 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun p := &props{} 43*4882a593Smuzhiyun p.Srcs = getSrcs(ctx, sdkVersionInt) 44*4882a593Smuzhiyun p.Cflags = getCflags(ctx, sdkVersionInt) 45*4882a593Smuzhiyun p.Shared_libs = getSharedLibs(ctx, sdkVersionInt) 46*4882a593Smuzhiyun p.Include_dirs = getIncludeDirs(ctx, sdkVersionInt) 47*4882a593Smuzhiyun p.Header_libs = getHeaders(ctx, sdkVersionInt) 48*4882a593Smuzhiyun p.Export_header_lib_headers = getExportHeaders(ctx, sdkVersionInt) 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun double_loadable := true 51*4882a593Smuzhiyun p.Double_loadable = &double_loadable 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun ctx.AppendProperties(p) 54*4882a593Smuzhiyun } else { 55*4882a593Smuzhiyun type props struct { 56*4882a593Smuzhiyun Srcs []string 57*4882a593Smuzhiyun Cflags []string 58*4882a593Smuzhiyun Shared_libs []string 59*4882a593Smuzhiyun Include_dirs []string 60*4882a593Smuzhiyun } 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun p := &props{} 63*4882a593Smuzhiyun p.Srcs = getSrcs(ctx, sdkVersionInt) 64*4882a593Smuzhiyun p.Cflags = getCflags(ctx, sdkVersionInt) 65*4882a593Smuzhiyun p.Shared_libs = getSharedLibs(ctx, sdkVersionInt) 66*4882a593Smuzhiyun p.Include_dirs = getIncludeDirs(ctx, sdkVersionInt) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun ctx.AppendProperties(p) 69*4882a593Smuzhiyun } 70*4882a593Smuzhiyun} 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun//条件编译主要修改函数 73*4882a593Smuzhiyunfunc getSrcs(ctx android.BaseContext, sdkVersion int) ([]string) { 74*4882a593Smuzhiyun var src []string 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun if (strings.EqualFold(ctx.AConfig().Getenv("TARGET_RK_GRALLOC_VERSION"),"4") ) { 77*4882a593Smuzhiyun if (sdkVersion >= 30 ) { 78*4882a593Smuzhiyun src = append(src, "core/platform_gralloc4.cpp") 79*4882a593Smuzhiyun } 80*4882a593Smuzhiyun } 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun return src 83*4882a593Smuzhiyun} 84*4882a593Smuzhiyun 85*4882a593Smuzhiyunfunc getCflags(ctx android.BaseContext, sdkVersion int) ([]string) { 86*4882a593Smuzhiyun var cppflags []string 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun //该打印输出为: TARGET_PRODUCT:rk3328 fmt.Println("TARGET_PRODUCT:",ctx.AConfig().Getenv("TARGET_PRODUCT")) //通过 strings.EqualFold 比较字符串,可参考go语言字符串对比 89*4882a593Smuzhiyun if (strings.EqualFold(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"),"rk3368") ) { 90*4882a593Smuzhiyun //添加 DEBUG 宏定义 91*4882a593Smuzhiyun cppflags = append(cppflags,"-DRK3368=1") 92*4882a593Smuzhiyun } 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun if (strings.EqualFold(ctx.AConfig().Getenv("TARGET_RK_GRALLOC_VERSION"),"4") ) { 95*4882a593Smuzhiyun if (sdkVersion >= 30 ) { 96*4882a593Smuzhiyun cppflags = append(cppflags,"-DUSE_GRALLOC_4") 97*4882a593Smuzhiyun } 98*4882a593Smuzhiyun } 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun //将需要区分的环境变量在此区域添加 //.... 101*4882a593Smuzhiyun return cppflags 102*4882a593Smuzhiyun} 103*4882a593Smuzhiyun 104*4882a593Smuzhiyunfunc getSharedLibs(ctx android.BaseContext, sdkVersion int) ([]string) { 105*4882a593Smuzhiyun var libs []string 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun if (strings.EqualFold(ctx.AConfig().Getenv("TARGET_RK_GRALLOC_VERSION"),"4") ) { 108*4882a593Smuzhiyun if (sdkVersion >= 30 ) { 109*4882a593Smuzhiyun libs = append(libs, "libgralloctypes") 110*4882a593Smuzhiyun libs = append(libs, "libhidlbase") 111*4882a593Smuzhiyun libs = append(libs, "android.hardware.graphics.mapper@4.0") 112*4882a593Smuzhiyun } 113*4882a593Smuzhiyun } 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun if (sdkVersion < 29 ) { 116*4882a593Smuzhiyun libs = append(libs, "libdrm") 117*4882a593Smuzhiyun } 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun return libs 120*4882a593Smuzhiyun} 121*4882a593Smuzhiyun 122*4882a593Smuzhiyunfunc getIncludeDirs(ctx android.BaseContext, sdkVersion int) ([]string) { 123*4882a593Smuzhiyun var dirs []string 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun if (strings.EqualFold(ctx.AConfig().Getenv("TARGET_RK_GRALLOC_VERSION"),"4") ) { 126*4882a593Smuzhiyun if (sdkVersion >= 30 ) { 127*4882a593Smuzhiyun dirs = append(dirs, "hardware/rockchip/libgralloc/bifrost") 128*4882a593Smuzhiyun dirs = append(dirs, "hardware/rockchip/libgralloc/bifrost/src") 129*4882a593Smuzhiyun } 130*4882a593Smuzhiyun } 131*4882a593Smuzhiyun // Add libion for RK3368 132*4882a593Smuzhiyun if (sdkVersion >= 29) { 133*4882a593Smuzhiyun if (sdkVersion >= 30) { 134*4882a593Smuzhiyun dirs = append(dirs, "system/memory/libion/original-kernel-headers") 135*4882a593Smuzhiyun } else { 136*4882a593Smuzhiyun dirs = append(dirs, "system/core/libion/original-kernel-headers") 137*4882a593Smuzhiyun } 138*4882a593Smuzhiyun } 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun return dirs 141*4882a593Smuzhiyun} 142*4882a593Smuzhiyun 143*4882a593Smuzhiyunfunc getHeaders(ctx android.BaseContext, sdkVersion int) ([]string) { 144*4882a593Smuzhiyun var headers []string 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun if (sdkVersion >= 31 ) { 147*4882a593Smuzhiyun headers = append(headers, "libhardware_rockchip_headers") 148*4882a593Smuzhiyun } 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun return headers 151*4882a593Smuzhiyun} 152*4882a593Smuzhiyun 153*4882a593Smuzhiyunfunc getExportHeaders(ctx android.BaseContext, sdkVersion int) ([]string) { 154*4882a593Smuzhiyun var headers []string 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun if (sdkVersion >= 31 ) { 157*4882a593Smuzhiyun headers = append(headers, "libhardware_rockchip_headers") 158*4882a593Smuzhiyun } 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun return headers 161*4882a593Smuzhiyun} 162