blob: 62ab7900737e9e3bfb56627b08689177fefd4e0b [file] [log] [blame]
cc_defaults {
name: "hwui_defaults",
defaults: [
"hwui_static_deps",
"skia_deps",
//"hwui_bugreport_font_cache_usage",
//"hwui_compile_for_perf",
"hwui_pgo",
"hwui_lto",
],
cpp_std: "c++17",
cflags: [
"-DEGL_EGLEXT_PROTOTYPES",
"-DGL_GLEXT_PROTOTYPES",
"-DATRACE_TAG=ATRACE_TAG_VIEW",
"-DLOG_TAG=\"OpenGLRenderer\"",
"-Wall",
"-Wno-unused-parameter",
"-Wunreachable-code",
"-Werror",
"-fvisibility=hidden",
// GCC false-positives on this warning, and since we -Werror that's
// a problem
"-Wno-free-nonheap-object",
// clang's warning is broken, see: https://llvm.org/bugs/show_bug.cgi?id=21629
"-Wno-missing-braces",
// TODO: Linear blending should be enabled by default, but we are
// TODO: making it an opt-in while it's a work in progress
//"-DANDROID_ENABLE_LINEAR_BLENDING",
],
include_dirs: [
"external/skia/include/private",
"external/skia/src/core",
"external/skia/src/effects",
"external/skia/src/image",
"external/skia/src/utils",
"external/skia/src/gpu",
"external/skia/src/shaders",
],
product_variables: {
device_uses_hwc2: {
cflags: ["-DUSE_HWC2"],
},
eng: {
lto: {
never: true,
},
},
},
}
cc_defaults {
name: "hwui_static_deps",
shared_libs: [
"liblog",
"libcutils",
"libutils",
"libEGL",
"libGLESv2",
"libvulkan",
"libui",
"libgui",
"libprotobuf-cpp-lite",
"libharfbuzz_ng",
"libft2",
"libminikin",
"libandroidfw",
],
static_libs: [
"libEGL_blobCache",
],
}
cc_defaults {
name: "hwui_bugreport_font_cache_usage",
cflags: ["-DBUGREPORT_FONT_CACHE_USAGE"],
}
cc_defaults {
name: "hwui_compile_for_perf",
// TODO: Non-arm?
cflags: [
"-fno-omit-frame-pointer",
"-marm",
"-mapcs",
],
}
cc_defaults {
name: "hwui_debug",
cflags: ["-include debug/wrap_gles.h"],
srcs: [
"debug/wrap_gles.cpp",
"debug/DefaultGlesDriver.cpp",
"debug/GlesErrorCheckWrapper.cpp",
"debug/GlesDriver.cpp",
"debug/FatalBaseDriver.cpp",
"debug/NullGlesDriver.cpp",
],
include_dirs: ["frameworks/native/opengl/libs/GLES2"],
}
cc_defaults {
name: "hwui_enable_opengl_validation",
defaults: ["hwui_debug"],
cflags: ["-DDEBUG_OPENGL=3"],
include_dirs: ["frameworks/native/opengl/libs/GLES2"],
}
// Build libhwui with PGO by default.
// Location of PGO profile data is defined in build/soong/cc/pgo.go
// and is separate from hwui.
// To turn it off, set ANDROID_PGO_NO_PROFILE_USE environment variable
// or set enable_profile_use property to false.
cc_defaults {
name: "hwui_pgo",
pgo: {
instrumentation: true,
profile_file: "hwui/hwui.profdata",
benchmarks: ["hwui"],
enable_profile_use: true,
},
}
// Build hwui library with ThinLTO by default.
cc_defaults {
name: "hwui_lto",
target: {
android: {
lto: {
thin: true,
},
},
},
}
// ------------------------
// library
// ------------------------
cc_defaults {
name: "libhwui_defaults",
defaults: ["hwui_defaults"],
whole_static_libs: ["libskia"],
srcs: [
"hwui/AnimatedImageDrawable.cpp",
"hwui/AnimatedImageThread.cpp",
"hwui/Bitmap.cpp",
"hwui/Canvas.cpp",
"hwui/MinikinSkia.cpp",
"hwui/MinikinUtils.cpp",
"hwui/PaintImpl.cpp",
"hwui/Typeface.cpp",
"pipeline/skia/GLFunctorDrawable.cpp",
"pipeline/skia/LayerDrawable.cpp",
"pipeline/skia/RenderNodeDrawable.cpp",
"pipeline/skia/ReorderBarrierDrawables.cpp",
"pipeline/skia/ShaderCache.cpp",
"pipeline/skia/SkiaDisplayList.cpp",
"pipeline/skia/SkiaMemoryTracer.cpp",
"pipeline/skia/SkiaOpenGLPipeline.cpp",
"pipeline/skia/SkiaOpenGLReadback.cpp",
"pipeline/skia/SkiaPipeline.cpp",
"pipeline/skia/SkiaProfileRenderer.cpp",
"pipeline/skia/SkiaRecordingCanvas.cpp",
"pipeline/skia/SkiaVulkanPipeline.cpp",
"pipeline/skia/VectorDrawableAtlas.cpp",
"renderstate/RenderState.cpp",
"renderthread/CacheManager.cpp",
"renderthread/CanvasContext.cpp",
"renderthread/DrawFrameTask.cpp",
"renderthread/EglManager.cpp",
"renderthread/VulkanManager.cpp",
"renderthread/RenderProxy.cpp",
"renderthread/RenderTask.cpp",
"renderthread/RenderThread.cpp",
"renderthread/TimeLord.cpp",
"renderthread/Frame.cpp",
"service/GraphicsStatsService.cpp",
"surfacetexture/EGLConsumer.cpp",
"surfacetexture/ImageConsumer.cpp",
"surfacetexture/SurfaceTexture.cpp",
"thread/TaskManager.cpp",
"utils/Blur.cpp",
"utils/Color.cpp",
"utils/GLUtils.cpp",
"utils/LinearAllocator.cpp",
"utils/StringUtils.cpp",
"utils/TestWindowContext.cpp",
"utils/VectorDrawableUtils.cpp",
"AnimationContext.cpp",
"Animator.cpp",
"AnimatorManager.cpp",
"CanvasState.cpp",
"CanvasTransform.cpp",
"ClipArea.cpp",
"DamageAccumulator.cpp",
"DeferredLayerUpdater.cpp",
"DeviceInfo.cpp",
"FrameInfo.cpp",
"FrameInfoVisualizer.cpp",
"GpuMemoryTracker.cpp",
"HardwareBitmapUploader.cpp",
"Interpolator.cpp",
"JankTracker.cpp",
"Layer.cpp",
"LayerUpdateQueue.cpp",
"Matrix.cpp",
"EglReadback.cpp",
"PathParser.cpp",
"ProfileData.cpp",
"ProfileDataContainer.cpp",
"Properties.cpp",
"PropertyValuesAnimatorSet.cpp",
"PropertyValuesHolder.cpp",
"RenderNode.cpp",
"RenderProperties.cpp",
"ResourceCache.cpp",
"SkiaCanvas.cpp",
"Snapshot.cpp",
"VectorDrawable.cpp",
"protos/graphicsstats.proto",
],
proto: {
export_proto_headers: true,
},
export_include_dirs: ["."],
}
cc_library {
name: "libhwui",
defaults: [
"libhwui_defaults",
// Enables fine-grained GLES error checking
// If enabled, every GLES call is wrapped & error checked
// Has moderate overhead
"hwui_enable_opengl_validation",
],
}
// ------------------------
// static library null gpu
// ------------------------
cc_library_static {
name: "libhwui_static_debug",
defaults: [
"libhwui_defaults",
"hwui_debug",
],
cflags: ["-DHWUI_NULL_GPU"],
srcs: [
"debug/nullegl.cpp",
],
}
cc_defaults {
name: "hwui_test_defaults",
defaults: ["hwui_defaults"],
test_suites: ["device-tests"],
srcs: [
"tests/common/scenes/*.cpp",
"tests/common/LeakChecker.cpp",
"tests/common/TestListViewSceneBase.cpp",
"tests/common/TestContext.cpp",
"tests/common/TestScene.cpp",
"tests/common/TestUtils.cpp",
],
}
// ------------------------
// unit tests
// ------------------------
cc_test {
name: "hwui_unit_tests",
defaults: ["hwui_test_defaults"],
static_libs: [
"libgmock",
"libhwui_static_debug",
],
shared_libs: [
"libmemunreachable",
],
cflags: [
"-include debug/wrap_gles.h",
"-DHWUI_NULL_GPU",
],
srcs: [
"tests/unit/main.cpp",
"tests/unit/CacheManagerTests.cpp",
"tests/unit/CanvasContextTests.cpp",
"tests/unit/CanvasStateTests.cpp",
"tests/unit/ClipAreaTests.cpp",
"tests/unit/DamageAccumulatorTests.cpp",
"tests/unit/DeferredLayerUpdaterTests.cpp",
"tests/unit/FatVectorTests.cpp",
"tests/unit/GpuMemoryTrackerTests.cpp",
"tests/unit/GraphicsStatsServiceTests.cpp",
"tests/unit/LayerUpdateQueueTests.cpp",
"tests/unit/LinearAllocatorTests.cpp",
"tests/unit/MatrixTests.cpp",
"tests/unit/PathInterpolatorTests.cpp",
"tests/unit/RenderNodeDrawableTests.cpp",
"tests/unit/RenderNodeTests.cpp",
"tests/unit/RenderPropertiesTests.cpp",
"tests/unit/ShaderCacheTests.cpp",
"tests/unit/SkiaBehaviorTests.cpp",
"tests/unit/SkiaDisplayListTests.cpp",
"tests/unit/SkiaPipelineTests.cpp",
"tests/unit/SkiaRenderPropertiesTests.cpp",
"tests/unit/SkiaCanvasTests.cpp",
"tests/unit/SnapshotTests.cpp",
"tests/unit/StringUtilsTests.cpp",
"tests/unit/TestUtilsTests.cpp",
"tests/unit/ThreadBaseTests.cpp",
"tests/unit/TypefaceTests.cpp",
"tests/unit/VectorDrawableTests.cpp",
"tests/unit/VectorDrawableAtlasTests.cpp",
],
}
// ------------------------
// Macro-bench app
// ------------------------
cc_benchmark {
name: "hwuimacro",
defaults: ["hwui_test_defaults"],
// set to libhwui_static_debug to skip actual GL commands
whole_static_libs: ["libhwui"],
shared_libs: [
"libmemunreachable",
],
srcs: [
"tests/macrobench/TestSceneRunner.cpp",
"tests/macrobench/main.cpp",
],
}
// ------------------------
// Micro-bench app
// ---------------------
cc_benchmark {
name: "hwuimicro",
defaults: ["hwui_test_defaults"],
cflags: [
"-include debug/wrap_gles.h",
"-DHWUI_NULL_GPU",
],
whole_static_libs: ["libhwui_static_debug"],
shared_libs: [
"libmemunreachable",
],
srcs: [
"tests/microbench/main.cpp",
"tests/microbench/DisplayListCanvasBench.cpp",
"tests/microbench/LinearAllocatorBench.cpp",
"tests/microbench/PathParserBench.cpp",
"tests/microbench/RenderNodeBench.cpp",
"tests/microbench/TaskManagerBench.cpp",
],
}
// ----------------------------------------
// Phony target to build benchmarks for PGO
// ----------------------------------------
phony {
name: "pgo-targets-hwui",
required: [
"hwuimicro",
"hwuimacro",
]
}