blob: e56dbf33ea0b59a0f3b665df316c520258dc61ce [file] [log] [blame]
package twrp
import (
"android/soong/android"
"android/soong/cc"
"fmt"
"path/filepath"
"strings"
)
func globalFlags(ctx android.BaseContext) []string {
var cflags []string
if ctx.AConfig().Getenv("TW_SUPPORT_INPUT_1_2_HAPTICS") == "true" {
cflags = append(cflags, "-DUSE_QTI_HAPTICS")
}
if ctx.AConfig().Getenv("TW_TARGET_USES_QCOM_BSP") == "true" {
cflags = append(cflags, "-DMSM_BSP")
}
matches, err := filepath.Glob("system/core/adf/Android.*")
_ = matches
if err == nil {
cflags = append(cflags, "-DHAS_ADF")
}
if ctx.AConfig().Getenv("TW_NEW_ION_HEAP") == "true" {
cflags = append(cflags, "-DNEW_ION_HEAP")
}
matches, err = filepath.Glob("external/libdrm/Android.*")
_ = matches
if err == nil {
cflags = append(cflags, "-DHAS_DRM")
}
if ctx.AConfig().Getenv("TW_INCLUDE_JPEG") != "" {
cflags = append(cflags, "-DTW_INCLUDE_JPEG")
}
if ctx.AConfig().Getenv("RECOVERY_TOUCHSCREEN_SWAP_XY") == "true" {
cflags = append(cflags, "-DRECOVERY_TOUCHSCREEN_SWAP_XY")
}
if ctx.AConfig().Getenv("RECOVERY_TOUCHSCREEN_FLIP_X") == "true" {
cflags = append(cflags, "-DRECOVERY_TOUCHSCREEN_FLIP_X")
}
if ctx.AConfig().Getenv("RECOVERY_TOUCHSCREEN_FLIP_Y") == "true" {
cflags = append(cflags, "-DRECOVERY_TOUCHSCREEN_FLIP_Y")
}
if ctx.AConfig().Getenv("RECOVERY_GRAPHICS_FORCE_USE_LINELENGTH") == "true" {
cflags = append(cflags, "-DRECOVERY_GRAPHICS_FORCE_USE_LINELENGTH")
}
if ctx.AConfig().Getenv("RECOVERY_GRAPHICS_FORCE_SINGLE_BUFFER") == "true" {
cflags = append(cflags, "-DRECOVERY_GRAPHICS_FORCE_SINGLE_BUFFER")
}
if ctx.AConfig().Getenv("TWRP_EVENT_LOGGING") == "true" {
cflags = append(cflags, "-D_EVENT_LOGGING")
}
var pixelFormat = strings.Replace(ctx.AConfig().Getenv("TARGET_RECOVERY_FORCE_PIXEL_FORMAT"), "\"", "", -1)
switch pixelFormat {
case "RGBA_8888":
fmt.Println("****************************************************************************)")
fmt.Println("* TARGET_RECOVERY_FORCE_PIXEL_FORMAT := RGBA_8888 not implemented yet *)")
fmt.Println("****************************************************************************)")
cflags = append(cflags, "-DRECOVERY_RGBA")
break
case "RGBX_8888":
fmt.Println("****************************************************************************)")
fmt.Println("* TARGET_RECOVERY_FORCE_PIXEL_FORMAT := RGBX_8888 not implemented yet *)")
fmt.Println("****************************************************************************)")
cflags = append(cflags, "-DRECOVERY_RGBX")
break
case "BGRA_8888":
fmt.Println("****************************************************************************)")
fmt.Println("* TARGET_RECOVERY_FORCE_PIXEL_FORMAT := BGRA_8888 not implemented yet *)")
fmt.Println("****************************************************************************)")
cflags = append(cflags, "-DRECOVERY_BGRA")
break
case "RGB_565":
cflags = append(cflags, "-DRECOVERY_FORCE_RGB_565")
break
}
pixelFormat = strings.Replace(ctx.AConfig().Getenv("TWRP_EVENT_LOGGING"), "\"", "", -1)
switch pixelFormat {
case "ABGR_8888":
cflags = append(cflags, "-DRECOVERY_ABGR")
break
case "RGBX_8888":
cflags = append(cflags, "-DRECOVERY_RGBX")
break
case "BGRA_8888":
cflags = append(cflags, "-DRECOVERY_BGRA")
break
}
if ctx.AConfig().Getenv("TARGET_RECOVERY_OVERSCAN_PERCENT") != "" {
cflags = append(cflags, "-DDOVERSCAN_PERCENT="+ctx.AConfig().Getenv("TARGET_RECOVERY_OVERSCAN_PERCENT"))
} else {
cflags = append(cflags, "-DOVERSCAN_PERCENT=0")
}
if ctx.AConfig().Getenv("TW_SCREEN_BLANK_ON_BOOT") == "true" {
cflags = append(cflags, "-DTW_SCREEN_BLANK_ON_BOOT")
}
if ctx.AConfig().Getenv("TW_FBIOPAN") == "true" {
cflags = append(cflags, "-DTW_FBIOPAN")
}
var tw_rotation = ctx.AConfig().Getenv("TW_ROTATION")
switch tw_rotation {
case "0":
case "90":
case "180":
case "270":
cflags = append(cflags, "-DTW_ROTATION="+tw_rotation)
default:
if ctx.AConfig().Getenv("BOARD_HAS_FLIPPED_SCREEN") == "true" {
cflags = append(cflags, "-DTW_ROTATION=180")
} else {
cflags = append(cflags, "-DTW_ROTATION=0")
}
}
if ctx.AConfig().Getenv("TW_IGNORE_MAJOR_AXIS_0") == "true" {
cflags = append(cflags, "-DTW_IGNORE_MAJOR_AXIS_0")
}
if ctx.AConfig().Getenv("TW_IGNORE_MT_POSITION_0") == "true" {
cflags = append(cflags, "-DTW_IGNORE_MT_POSITION_0")
}
if ctx.AConfig().Getenv("TW_IGNORE_ABS_MT_TRACKING_ID") == "true" {
cflags = append(cflags, "-DTW_IGNORE_ABS_MT_TRACKING_ID")
}
if ctx.AConfig().Getenv("TW_INPUT_BLACKLIST") != "" {
cflags = append(cflags, "-DTW_INPUT_BLACKLIST="+ctx.AConfig().Getenv("TW_INPUT_BLACKLIST"))
}
if ctx.AConfig().Getenv("TW_WHITELIST_INPUT") != "" {
cflags = append(cflags, "-DWHITELIST_INPUT="+ctx.AConfig().Getenv("TW_WHITELIST_INPUT"))
}
if ctx.AConfig().Getenv("TW_HAPTICS_TSPDRV") == "true" {
cflags = append(cflags, "-DTW_HAPTICS_TSPDRV")
}
return cflags
}
func globalSrcs(ctx android.BaseContext) []string {
var srcs []string
if ctx.AConfig().Getenv("TW_TARGET_USES_QCOM_BSP") == "true" {
srcs = append(srcs, "graphics_overlay.cpp")
}
matches, err := filepath.Glob("system/core/adf/Android.*")
_ = matches
if err == nil {
srcs = append(srcs, "graphics_adf.cpp")
}
matches, err = filepath.Glob("external/libdrm/Android.*")
if err == nil {
srcs = append(srcs, "graphics_drm.cpp")
}
if ctx.AConfig().Getenv("TW_HAPTICS_TSPDRV") == "true" {
srcs = append(srcs, "tspdrv.cpp")
}
return srcs
}
func globalIncludes(ctx android.BaseContext) []string {
var includes []string
if ctx.AConfig().Getenv("TW_INCLUDE_CRYPTO") != "" {
includes = append(includes, "bootable/recovery/crypto/fscrypt")
}
if ctx.AConfig().Getenv("TW_TARGET_USES_QCOM_BSP") == "true" {
if ctx.AConfig().Getenv("TARGET_PREBUILT_KERNEL") != "" {
includes = append(includes, ctx.AConfig().Getenv("TARGET_OUT_INTERMEDIATES")+"/KERNEL_OBJ/usr/include")
} else {
if ctx.AConfig().Getenv("TARGET_CUSTOM_KERNEL_HEADERS") != "" {
includes = append(includes, "bootable/recovery/minuitwrp")
} else {
includes = append(includes, ctx.AConfig().Getenv("TARGET_CUSTOM_KERNEL_HEADERS"))
}
}
} else {
includes = append(includes, "bootable/recovery/minuitwrp")
}
if ctx.AConfig().Getenv("TW_INCLUDE_JPEG") != "" {
includes = append(includes, "external/jpeg")
}
return includes
}
func globalStaticLibs(ctx android.BaseContext) []string {
var staticLibs []string
matches, err := filepath.Glob("system/core/adf/Android.*")
_ = matches
if err == nil {
staticLibs = append(staticLibs, "libadf")
}
matches, err = filepath.Glob("external/libdrm/Android.*")
if err == nil {
matches, err = filepath.Glob("external/libdrm/Android.common.mk")
if err != nil {
staticLibs = append(staticLibs, "libdrm_platform")
} else {
staticLibs = append(staticLibs, "libdrm")
}
}
return staticLibs
}
func globalSharedLibs(ctx android.BaseContext) []string {
var sharedLibs []string
if ctx.AConfig().Getenv("TW_SUPPORT_INPUT_1_2_HAPTICS") == "true" {
sharedLibs = append(sharedLibs, "android.hardware.vibrator@1.2")
sharedLibs = append(sharedLibs, "libhidlbase")
}
if ctx.AConfig().Getenv("TW_INCLUDE_JPEG") != "" {
sharedLibs = append(sharedLibs, "libjpeg")
}
return sharedLibs
}
func globalRequiredModules(ctx android.BaseContext) []string {
var requiredModules []string
if ctx.AConfig().Getenv("TARGET_PREBUILT_KERNEL") != "" {
var kernelDir = ctx.AConfig().Getenv("TARGET_OUT_INTERMEDIATES") + ")/KERNEL_OBJ/usr"
requiredModules = append(requiredModules, kernelDir)
}
return requiredModules
}
func libMinuiTwrpDefaults(ctx android.LoadHookContext) {
type props struct {
Target struct {
Android struct {
Cflags []string
Enabled *bool
}
}
Cflags []string
Srcs []string
Include_dirs []string
Static_libs []string
Shared_libs []string
Required []string
}
p := &props{}
p.Cflags = globalFlags(ctx)
s := globalSrcs(ctx)
p.Srcs = s
i := globalIncludes(ctx)
p.Include_dirs = i
staticLibs := globalStaticLibs(ctx)
p.Static_libs = staticLibs
sharedLibs := globalSharedLibs(ctx)
p.Shared_libs = sharedLibs
requiredModules := globalRequiredModules(ctx)
p.Required = requiredModules
ctx.AppendProperties(p)
}
func init() {
android.RegisterModuleType("libminuitwrp_defaults", libMinuiTwrpDefaultsFactory)
}
func libMinuiTwrpDefaultsFactory() android.Module {
module := cc.DefaultsFactory()
android.AddLoadHook(module, libMinuiTwrpDefaults)
return module
}