228 lines
7.0 KiB
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
|
|
}
|