android13/device/rockchip/common/scripts/soong_rockchip_prebuilt/prebuilt_lib.go

228 lines
7.0 KiB
Go

package rockchip_prebuilts
import (
"android/soong/android"
"android/soong/cc"
"fmt"
"strings"
)
func isContain(items []string, item string) bool {
for _, eachItem := range items {
if eachItem == item {
return true
}
}
return false
}
func getOpteePrefix(platform string) string {
var optee_v2_list = []string{"rk3326", "rk3528", "rk356x","rk3562","rk3588"}
if isContain(optee_v2_list, platform) {
return "v2/"
} else {
return "v1/"
}
}
func getVpuPrefix(platform string) string {
var vpu_v1_list = []string{"rk3126c", "rk3288", "rk3368"}
if isContain(vpu_v1_list, platform) {
return ""
} else {
return "mpp_dev/"
}
}
func init() {
fmt.Println("Rockchip conditional compile")
android.RegisterModuleType("cc_rockchip_prebuilt_library_shared", RockchipPrebuiltLibsFactory)
android.RegisterModuleType("cc_rockchip_prebuilt_library_static", RockchipPrebuiltLibsStaticFactory)
}
func RockchipPrebuiltLibsFactory() (android.Module) {
// Register rockchip_prebuilt_libs factory as PrebuiltSharedLibraryFactory
module := cc.PrebuiltSharedLibraryFactory()
// Add new props for rockchip conditional compile
addon_props := &soongRockchipPrebuiltProperties{}
module.AddProperties(addon_props)
// Add Hook for PrebuiltSharedLibraryFactory
android.AddLoadHook(module, AppendMultilibs)
return module
}
func RockchipPrebuiltLibsStaticFactory() (android.Module) {
// Register rockchip_prebuilt_libs factory as PrebuiltStaticLibraryFactory
module := cc.PrebuiltStaticLibraryFactory()
// Add new props for rockchip conditional compile
addon_props := &soongRockchipPrebuiltProperties{}
module.AddProperties(addon_props)
// Add Hook for PrebuiltStaticLibraryFactory
//android.AddLoadHook(module, AppendArchStaticLibs)
android.AddLoadHook(module, AppendArchStaticLibs)
return module
}
/* *
* For prebuilt binary and object
* optee --> srcs: v1(2)/arm(64)/$(name)
* optee --> srcs: arm(64)/$(name)
*/
func ChangeSrcsPath(ctx android.LoadHookContext) {
var prefix string = ""
var module_name string = ctx.ModuleName()[9:]
type props struct {
Srcs []string
}
p := &props{}
if (ctx.ContainsProperty("optee")) {
prefix = getOpteePrefix(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
}
if (strings.EqualFold(ctx.AConfig().DevicePrimaryArchType().String(),"arm64")) {
prefix += "arm64/"
} else {
prefix += "arm/"
}
if (ctx.ContainsProperty("vpu")) {
prefix += getVpuPrefix(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
}
p.Srcs = append(p.Srcs, prefix + module_name)
//fmt.Println("srcs: ", p.Srcs)
ctx.AppendProperties(p)
}
type Ex_srcs struct {
Srcs []string
}
type Ex_multilibType struct {
Lib32 Ex_srcs
Lib64 Ex_srcs
}
type soongRockchipPrebuiltProperties struct {
Optee bool
Vpu bool
Aiq bool
}
func AppendMultilibs(ctx android.LoadHookContext) {
if (strings.EqualFold(ctx.AConfig().DevicePrimaryArchType().String(),"arm64")) {
type props struct {
Compile_multilib *string
Multilib Ex_multilibType
}
p := &props{}
p.Compile_multilib = peferCompileMultilib(ctx)
p.Multilib = configArm64Lib(ctx)
ctx.AppendProperties(p)
} else {
type props struct {
Compile_multilib *string
Srcs []string
}
p := &props{}
p.Compile_multilib = peferCompileMultilib(ctx)
p.Srcs = configArmLib(ctx)
ctx.AppendProperties(p)
}
}
func AppendArchStaticLibs(ctx android.LoadHookContext) {
type props struct {
Compile_multilib *string
Multilib Ex_multilibType
}
p := &props{}
p.Compile_multilib = peferCompileMultilib(ctx)
p.Multilib = configArm64LibStatic(ctx)
ctx.AppendProperties(p)
}
// Change the lib path, chose lib/lib64
func peferCompileMultilib(ctx android.LoadHookContext) (*string) {
/*fmt.Println("TARGET_PRODUCT:", ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
fmt.Println("TARGET_ARCH:", ctx.AConfig().DevicePrimaryArchType().String())
fmt.Println("MODULE NAME:", ctx.ModuleName()[9:]) // Skip 'prebuilt_'
fmt.Println("isOptee:", ctx.ContainsProperty("optee"))*/
var compile_multilib string
target_arch := ctx.AConfig().DevicePrimaryArchType().String()
if (strings.EqualFold(target_arch,"arm64")) {
compile_multilib = "both"
} else {
compile_multilib = "32"
}
//fmt.Println("compile_multilib:", compile_multilib)
return &compile_multilib
}
func configArm64Lib(ctx android.LoadHookContext) (Ex_multilibType) {
var srcs []string
var module_name string = ctx.ModuleName()[9:] + ".so"
var multilib Ex_multilibType
var prefix64 string = ""
var prefix32 string = ""
if (ctx.ContainsProperty("optee")) {
prefix64 = getOpteePrefix(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
prefix32 = prefix64
}
prefix64 += "arm64/"
prefix32 += "arm/"
if (ctx.ContainsProperty("vpu")) {
prefix64 += getVpuPrefix(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
prefix32 += getVpuPrefix(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
}
multilib.Lib32.Srcs = append(srcs, prefix32 + module_name)
multilib.Lib64.Srcs = append(srcs, prefix64 + module_name)
//fmt.Println("multilib.lib32.srcs:", multilib.Lib32.Srcs )
//fmt.Println("multilib.lib64.srcs:", multilib.Lib64.Srcs)
return multilib
}
func configArmLib(ctx android.LoadHookContext) ([]string) {
var srcs []string
//fmt.Println("TARGET_PRODUCT:", ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
var prefix string = ""
var module_name string = ctx.ModuleName()[9:] + ".so"
if (ctx.ContainsProperty("optee")) {
prefix = getOpteePrefix(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
}
prefix += "arm/"
if (ctx.ContainsProperty("vpu")) {
prefix += getVpuPrefix(ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM"))
}
srcs = append(srcs, prefix + module_name)
//fmt.Println("srcs:", srcs)
return srcs
}
func configArm64LibStatic(ctx android.LoadHookContext) (Ex_multilibType) {
var srcs []string
var module_name string = ctx.ModuleName()[9:] + ".a"
var arch Ex_multilibType
var prefix64 string = ""
var prefix32 string = ""
var suffix string = "."
if (ctx.ContainsProperty("aiq")) {
var platform = ctx.AConfig().Getenv("TARGET_BOARD_PLATFORM")
var rkaiq_list = []string{"rk356x", "rk3588", "rk3562"}
if isContain(rkaiq_list, platform) {
suffix += platform[2:]
} else {
suffix += "356x"
}
}
prefix64 += "android/arm64/"
prefix32 += "android/arm/"
arch.Lib32.Srcs = append(srcs, prefix32 + module_name + suffix)
arch.Lib64.Srcs = append(srcs, prefix64 + module_name + suffix)
//fmt.Println("arch.arm.srcs:", arch.Lib32.Srcs )
//fmt.Println("arch.arm64.srcs:", arch.Lib64.Srcs)
return arch
}