xref: /OK3568_Linux_fs/external/linux-rga/Android.go (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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