Merge latest Skia into master (3 commits)

https://skia.googlesource.com/skia.git/+log/7215283..0c0da2b

Test: Presubmit checks will test this change.
Change-Id: Ibb132f5c3ec1c216c63e1bc904c93efc8618c330
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..2506aaf
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,838 @@
+// This file is autogenerated by gn_to_bp.py.
+
+cc_library {
+    name: "libskia",
+    cflags: [
+        "-fexceptions",
+        "-Wno-unused-parameter",
+        "-U_FORTIFY_SOURCE",
+        "-D_FORTIFY_SOURCE=1",
+        "-DSKIA_IMPLEMENTATION=1",
+    ],
+
+    export_include_dirs: [
+        "include/android/",
+        "include/c/",
+        "include/codec/",
+        "include/config/",
+        "include/core/",
+        "include/effects/",
+        "include/gpu/",
+        "include/gpu/gl/",
+        "include/pathops/",
+        "include/ports/",
+        "include/svg/",
+        "include/utils/",
+        "include/utils/mac/",
+        "include/xml/",
+    ],
+
+    local_include_dirs: [
+        "include/android/",
+        "include/c/",
+        "include/codec/",
+        "include/config/",
+        "include/core/",
+        "include/effects/",
+        "include/gpu/",
+        "include/gpu/gl/",
+        "include/pathops/",
+        "include/ports/",
+        "include/private/",
+        "include/svg/",
+        "include/utils/",
+        "include/utils/mac/",
+        "include/xml/",
+        "src/c/",
+        "src/codec/",
+        "src/core/",
+        "src/effects/",
+        "src/effects/gradients/",
+        "src/fonts/",
+        "src/gpu/",
+        "src/image/",
+        "src/images/",
+        "src/lazy/",
+        "src/opts/",
+        "src/pathops/",
+        "src/pdf/",
+        "src/ports/",
+        "src/sfnt/",
+        "src/sksl/",
+        "src/utils/",
+        "src/utils/win/",
+        "third_party/etc1/",
+        "third_party/gif/",
+        "third_party/ktx/",
+    ],
+
+    srcs: [
+        "src/android/SkBitmapRegionCodec.cpp",
+        "src/android/SkBitmapRegionDecoder.cpp",
+        "src/c/sk_paint.cpp",
+        "src/c/sk_surface.cpp",
+        "src/codec/SkAndroidCodec.cpp",
+        "src/codec/SkBmpCodec.cpp",
+        "src/codec/SkBmpMaskCodec.cpp",
+        "src/codec/SkBmpRLECodec.cpp",
+        "src/codec/SkBmpStandardCodec.cpp",
+        "src/codec/SkCodec.cpp",
+        "src/codec/SkCodecImageGenerator.cpp",
+        "src/codec/SkGifCodec.cpp",
+        "src/codec/SkIcoCodec.cpp",
+        "src/codec/SkJpegCodec.cpp",
+        "src/codec/SkJpegDecoderMgr.cpp",
+        "src/codec/SkJpegUtility.cpp",
+        "src/codec/SkMaskSwizzler.cpp",
+        "src/codec/SkMasks.cpp",
+        "src/codec/SkPngCodec.cpp",
+        "src/codec/SkRawAdapterCodec.cpp",
+        "src/codec/SkRawCodec.cpp",
+        "src/codec/SkSampledCodec.cpp",
+        "src/codec/SkSampler.cpp",
+        "src/codec/SkStreamBuffer.cpp",
+        "src/codec/SkSwizzler.cpp",
+        "src/codec/SkWbmpCodec.cpp",
+        "src/codec/SkWebpAdapterCodec.cpp",
+        "src/codec/SkWebpCodec.cpp",
+        "src/core/SkAAClip.cpp",
+        "src/core/SkATrace.cpp",
+        "src/core/SkAlphaRuns.cpp",
+        "src/core/SkAnalyticEdge.cpp",
+        "src/core/SkAnnotation.cpp",
+        "src/core/SkArenaAlloc.cpp",
+        "src/core/SkAutoPixmapStorage.cpp",
+        "src/core/SkBBHFactory.cpp",
+        "src/core/SkBigPicture.cpp",
+        "src/core/SkBitmap.cpp",
+        "src/core/SkBitmapCache.cpp",
+        "src/core/SkBitmapController.cpp",
+        "src/core/SkBitmapDevice.cpp",
+        "src/core/SkBitmapProcShader.cpp",
+        "src/core/SkBitmapProcState.cpp",
+        "src/core/SkBitmapProcState_matrixProcs.cpp",
+        "src/core/SkBitmapProvider.cpp",
+        "src/core/SkBitmapScaler.cpp",
+        "src/core/SkBlitMask_D32.cpp",
+        "src/core/SkBlitRow_D16.cpp",
+        "src/core/SkBlitRow_D32.cpp",
+        "src/core/SkBlitter.cpp",
+        "src/core/SkBlitter_A8.cpp",
+        "src/core/SkBlitter_ARGB32.cpp",
+        "src/core/SkBlitter_PM4f.cpp",
+        "src/core/SkBlitter_RGB16.cpp",
+        "src/core/SkBlitter_Sprite.cpp",
+        "src/core/SkBlurImageFilter.cpp",
+        "src/core/SkBuffer.cpp",
+        "src/core/SkCachedData.cpp",
+        "src/core/SkCanvas.cpp",
+        "src/core/SkChunkAlloc.cpp",
+        "src/core/SkClipStack.cpp",
+        "src/core/SkColor.cpp",
+        "src/core/SkColorFilter.cpp",
+        "src/core/SkColorFilterShader.cpp",
+        "src/core/SkColorLookUpTable.cpp",
+        "src/core/SkColorMatrixFilterRowMajor255.cpp",
+        "src/core/SkColorShader.cpp",
+        "src/core/SkColorSpace.cpp",
+        "src/core/SkColorSpaceXform.cpp",
+        "src/core/SkColorSpaceXform_A2B.cpp",
+        "src/core/SkColorSpace_A2B.cpp",
+        "src/core/SkColorSpace_ICC.cpp",
+        "src/core/SkColorSpace_XYZ.cpp",
+        "src/core/SkColorTable.cpp",
+        "src/core/SkComposeShader.cpp",
+        "src/core/SkConfig8888.cpp",
+        "src/core/SkConvolver.cpp",
+        "src/core/SkCpu.cpp",
+        "src/core/SkCubicClipper.cpp",
+        "src/core/SkData.cpp",
+        "src/core/SkDataTable.cpp",
+        "src/core/SkDebug.cpp",
+        "src/core/SkDeque.cpp",
+        "src/core/SkDevice.cpp",
+        "src/core/SkDeviceLooper.cpp",
+        "src/core/SkDeviceProfile.cpp",
+        "src/core/SkDistanceFieldGen.cpp",
+        "src/core/SkDither.cpp",
+        "src/core/SkDocument.cpp",
+        "src/core/SkDraw.cpp",
+        "src/core/SkDrawLooper.cpp",
+        "src/core/SkDrawable.cpp",
+        "src/core/SkEdge.cpp",
+        "src/core/SkEdgeBuilder.cpp",
+        "src/core/SkEdgeClipper.cpp",
+        "src/core/SkFilterProc.cpp",
+        "src/core/SkFlattenable.cpp",
+        "src/core/SkFlattenableSerialization.cpp",
+        "src/core/SkFont.cpp",
+        "src/core/SkFontDescriptor.cpp",
+        "src/core/SkFontLCDConfig.cpp",
+        "src/core/SkFontMgr.cpp",
+        "src/core/SkFontStream.cpp",
+        "src/core/SkFontStyle.cpp",
+        "src/core/SkGeometry.cpp",
+        "src/core/SkGlobalInitialization_core.cpp",
+        "src/core/SkGlyphCache.cpp",
+        "src/core/SkGpuBlurUtils.cpp",
+        "src/core/SkGraphics.cpp",
+        "src/core/SkHalf.cpp",
+        "src/core/SkICC.cpp",
+        "src/core/SkImageCacherator.cpp",
+        "src/core/SkImageFilter.cpp",
+        "src/core/SkImageFilterCache.cpp",
+        "src/core/SkImageGenerator.cpp",
+        "src/core/SkImageInfo.cpp",
+        "src/core/SkLatticeIter.cpp",
+        "src/core/SkLightingShader.cpp",
+        "src/core/SkLights.cpp",
+        "src/core/SkLineClipper.cpp",
+        "src/core/SkLinearBitmapPipeline.cpp",
+        "src/core/SkLiteDL.cpp",
+        "src/core/SkLiteRecorder.cpp",
+        "src/core/SkLocalMatrixImageFilter.cpp",
+        "src/core/SkLocalMatrixShader.cpp",
+        "src/core/SkMD5.cpp",
+        "src/core/SkMallocPixelRef.cpp",
+        "src/core/SkMask.cpp",
+        "src/core/SkMaskCache.cpp",
+        "src/core/SkMaskFilter.cpp",
+        "src/core/SkMaskGamma.cpp",
+        "src/core/SkMath.cpp",
+        "src/core/SkMatrix.cpp",
+        "src/core/SkMatrix44.cpp",
+        "src/core/SkMatrixImageFilter.cpp",
+        "src/core/SkMetaData.cpp",
+        "src/core/SkMiniRecorder.cpp",
+        "src/core/SkMipMap.cpp",
+        "src/core/SkModeColorFilter.cpp",
+        "src/core/SkMultiPictureDraw.cpp",
+        "src/core/SkNormalBevelSource.cpp",
+        "src/core/SkNormalFlatSource.cpp",
+        "src/core/SkNormalMapSource.cpp",
+        "src/core/SkNormalSource.cpp",
+        "src/core/SkOpts.cpp",
+        "src/core/SkOverdrawCanvas.cpp",
+        "src/core/SkPaint.cpp",
+        "src/core/SkPaintPriv.cpp",
+        "src/core/SkPath.cpp",
+        "src/core/SkPathEffect.cpp",
+        "src/core/SkPathMeasure.cpp",
+        "src/core/SkPathRef.cpp",
+        "src/core/SkPicture.cpp",
+        "src/core/SkPictureAnalyzer.cpp",
+        "src/core/SkPictureContentInfo.cpp",
+        "src/core/SkPictureData.cpp",
+        "src/core/SkPictureFlat.cpp",
+        "src/core/SkPictureImageGenerator.cpp",
+        "src/core/SkPicturePlayback.cpp",
+        "src/core/SkPictureRecord.cpp",
+        "src/core/SkPictureRecorder.cpp",
+        "src/core/SkPictureShader.cpp",
+        "src/core/SkPixelRef.cpp",
+        "src/core/SkPixmap.cpp",
+        "src/core/SkPoint.cpp",
+        "src/core/SkPoint3.cpp",
+        "src/core/SkPtrRecorder.cpp",
+        "src/core/SkQuadClipper.cpp",
+        "src/core/SkRRect.cpp",
+        "src/core/SkRTree.cpp",
+        "src/core/SkRWBuffer.cpp",
+        "src/core/SkRadialShadowMapShader.cpp",
+        "src/core/SkRasterClip.cpp",
+        "src/core/SkRasterPipeline.cpp",
+        "src/core/SkRasterPipelineBlitter.cpp",
+        "src/core/SkRasterizer.cpp",
+        "src/core/SkReadBuffer.cpp",
+        "src/core/SkRecord.cpp",
+        "src/core/SkRecordDraw.cpp",
+        "src/core/SkRecordOpts.cpp",
+        "src/core/SkRecordedDrawable.cpp",
+        "src/core/SkRecorder.cpp",
+        "src/core/SkRecords.cpp",
+        "src/core/SkRect.cpp",
+        "src/core/SkRefDict.cpp",
+        "src/core/SkRegion.cpp",
+        "src/core/SkRegion_path.cpp",
+        "src/core/SkResourceCache.cpp",
+        "src/core/SkSRGB.cpp",
+        "src/core/SkScalar.cpp",
+        "src/core/SkScalerContext.cpp",
+        "src/core/SkScan.cpp",
+        "src/core/SkScan_AAAPath.cpp",
+        "src/core/SkScan_AntiPath.cpp",
+        "src/core/SkScan_Antihair.cpp",
+        "src/core/SkScan_Hairline.cpp",
+        "src/core/SkScan_Path.cpp",
+        "src/core/SkSemaphore.cpp",
+        "src/core/SkShader.cpp",
+        "src/core/SkShadowShader.cpp",
+        "src/core/SkSharedMutex.cpp",
+        "src/core/SkSpanProcs.cpp",
+        "src/core/SkSpecialImage.cpp",
+        "src/core/SkSpecialSurface.cpp",
+        "src/core/SkSpinlock.cpp",
+        "src/core/SkSpriteBlitter4f.cpp",
+        "src/core/SkSpriteBlitter_ARGB32.cpp",
+        "src/core/SkSpriteBlitter_RGB16.cpp",
+        "src/core/SkStream.cpp",
+        "src/core/SkString.cpp",
+        "src/core/SkStringUtils.cpp",
+        "src/core/SkStroke.cpp",
+        "src/core/SkStrokeRec.cpp",
+        "src/core/SkStrokerPriv.cpp",
+        "src/core/SkSwizzle.cpp",
+        "src/core/SkTLS.cpp",
+        "src/core/SkTSearch.cpp",
+        "src/core/SkTaskGroup.cpp",
+        "src/core/SkTextBlob.cpp",
+        "src/core/SkThreadID.cpp",
+        "src/core/SkTime.cpp",
+        "src/core/SkTypeface.cpp",
+        "src/core/SkTypefaceCache.cpp",
+        "src/core/SkUnPreMultiply.cpp",
+        "src/core/SkUtils.cpp",
+        "src/core/SkValidatingReadBuffer.cpp",
+        "src/core/SkVarAlloc.cpp",
+        "src/core/SkVertState.cpp",
+        "src/core/SkWriteBuffer.cpp",
+        "src/core/SkWriter32.cpp",
+        "src/core/SkXfermode.cpp",
+        "src/core/SkXfermode4f.cpp",
+        "src/core/SkXfermodeF16.cpp",
+        "src/core/SkXfermodeInterpretation.cpp",
+        "src/core/SkYUVPlanesCache.cpp",
+        "src/effects/GrAlphaThresholdFragmentProcessor.cpp",
+        "src/effects/GrCircleBlurFragmentProcessor.cpp",
+        "src/effects/Sk1DPathEffect.cpp",
+        "src/effects/Sk2DPathEffect.cpp",
+        "src/effects/SkAlphaThresholdFilter.cpp",
+        "src/effects/SkArcToPathEffect.cpp",
+        "src/effects/SkArithmeticImageFilter.cpp",
+        "src/effects/SkArithmeticMode.cpp",
+        "src/effects/SkBlurDrawLooper.cpp",
+        "src/effects/SkBlurMask.cpp",
+        "src/effects/SkBlurMaskFilter.cpp",
+        "src/effects/SkColorFilterImageFilter.cpp",
+        "src/effects/SkColorMatrix.cpp",
+        "src/effects/SkColorMatrixFilter.cpp",
+        "src/effects/SkComposeImageFilter.cpp",
+        "src/effects/SkCornerPathEffect.cpp",
+        "src/effects/SkDashPathEffect.cpp",
+        "src/effects/SkDiscretePathEffect.cpp",
+        "src/effects/SkDisplacementMapEffect.cpp",
+        "src/effects/SkDropShadowImageFilter.cpp",
+        "src/effects/SkEmbossMask.cpp",
+        "src/effects/SkEmbossMaskFilter.cpp",
+        "src/effects/SkGaussianEdgeShader.cpp",
+        "src/effects/SkImageSource.cpp",
+        "src/effects/SkLayerDrawLooper.cpp",
+        "src/effects/SkLayerRasterizer.cpp",
+        "src/effects/SkLightingImageFilter.cpp",
+        "src/effects/SkLumaColorFilter.cpp",
+        "src/effects/SkMagnifierImageFilter.cpp",
+        "src/effects/SkMatrixConvolutionImageFilter.cpp",
+        "src/effects/SkMergeImageFilter.cpp",
+        "src/effects/SkMorphologyImageFilter.cpp",
+        "src/effects/SkOffsetImageFilter.cpp",
+        "src/effects/SkOverdrawColorFilter.cpp",
+        "src/effects/SkPackBits.cpp",
+        "src/effects/SkPaintFlagsDrawFilter.cpp",
+        "src/effects/SkPaintImageFilter.cpp",
+        "src/effects/SkPerlinNoiseShader.cpp",
+        "src/effects/SkPictureImageFilter.cpp",
+        "src/effects/SkRRectsGaussianEdgeMaskFilter.cpp",
+        "src/effects/SkTableColorFilter.cpp",
+        "src/effects/SkTableMaskFilter.cpp",
+        "src/effects/SkTileImageFilter.cpp",
+        "src/effects/SkXfermodeImageFilter.cpp",
+        "src/effects/gradients/Sk4fGradientBase.cpp",
+        "src/effects/gradients/Sk4fLinearGradient.cpp",
+        "src/effects/gradients/SkClampRange.cpp",
+        "src/effects/gradients/SkGradientBitmapCache.cpp",
+        "src/effects/gradients/SkGradientShader.cpp",
+        "src/effects/gradients/SkLinearGradient.cpp",
+        "src/effects/gradients/SkRadialGradient.cpp",
+        "src/effects/gradients/SkSweepGradient.cpp",
+        "src/effects/gradients/SkTwoPointConicalGradient.cpp",
+        "src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp",
+        "src/effects/shadows/SkAmbientShadowMaskFilter.cpp",
+        "src/effects/shadows/SkSpotShadowMaskFilter.cpp",
+        "src/fonts/SkGScalerContext.cpp",
+        "src/fonts/SkRandomScalerContext.cpp",
+        "src/fonts/SkTestScalerContext.cpp",
+        "src/gpu/GrAuditTrail.cpp",
+        "src/gpu/GrBitmapTextureMaker.cpp",
+        "src/gpu/GrBlend.cpp",
+        "src/gpu/GrBlurUtils.cpp",
+        "src/gpu/GrBuffer.cpp",
+        "src/gpu/GrBufferAllocPool.cpp",
+        "src/gpu/GrCaps.cpp",
+        "src/gpu/GrClipStackClip.cpp",
+        "src/gpu/GrColorSpaceXform.cpp",
+        "src/gpu/GrContext.cpp",
+        "src/gpu/GrCoordTransform.cpp",
+        "src/gpu/GrDefaultGeoProcFactory.cpp",
+        "src/gpu/GrDistanceFieldGenFromVector.cpp",
+        "src/gpu/GrDrawOpAtlas.cpp",
+        "src/gpu/GrDrawOpTest.cpp",
+        "src/gpu/GrDrawingManager.cpp",
+        "src/gpu/GrFixedClip.cpp",
+        "src/gpu/GrFragmentProcessor.cpp",
+        "src/gpu/GrGpu.cpp",
+        "src/gpu/GrGpuCommandBuffer.cpp",
+        "src/gpu/GrGpuFactory.cpp",
+        "src/gpu/GrGpuResource.cpp",
+        "src/gpu/GrGpuResourceRef.cpp",
+        "src/gpu/GrImageTextureMaker.cpp",
+        "src/gpu/GrMemoryPool.cpp",
+        "src/gpu/GrOpFlushState.cpp",
+        "src/gpu/GrOpList.cpp",
+        "src/gpu/GrPaint.cpp",
+        "src/gpu/GrPath.cpp",
+        "src/gpu/GrPathProcessor.cpp",
+        "src/gpu/GrPathRange.cpp",
+        "src/gpu/GrPathRenderer.cpp",
+        "src/gpu/GrPathRendererChain.cpp",
+        "src/gpu/GrPathRendering.cpp",
+        "src/gpu/GrPathRenderingRenderTargetContext.cpp",
+        "src/gpu/GrPathUtils.cpp",
+        "src/gpu/GrPipeline.cpp",
+        "src/gpu/GrPipelineBuilder.cpp",
+        "src/gpu/GrPrimitiveProcessor.cpp",
+        "src/gpu/GrProcOptInfo.cpp",
+        "src/gpu/GrProcessor.cpp",
+        "src/gpu/GrProcessorSet.cpp",
+        "src/gpu/GrProcessorUnitTest.cpp",
+        "src/gpu/GrProgramDesc.cpp",
+        "src/gpu/GrRectanizer_pow2.cpp",
+        "src/gpu/GrRectanizer_skyline.cpp",
+        "src/gpu/GrReducedClip.cpp",
+        "src/gpu/GrRenderTarget.cpp",
+        "src/gpu/GrRenderTargetContext.cpp",
+        "src/gpu/GrRenderTargetOpList.cpp",
+        "src/gpu/GrRenderTargetProxy.cpp",
+        "src/gpu/GrResourceCache.cpp",
+        "src/gpu/GrResourceProvider.cpp",
+        "src/gpu/GrSWMaskHelper.cpp",
+        "src/gpu/GrShaderCaps.cpp",
+        "src/gpu/GrShaderVar.cpp",
+        "src/gpu/GrShape.cpp",
+        "src/gpu/GrSoftwarePathRenderer.cpp",
+        "src/gpu/GrStencilAttachment.cpp",
+        "src/gpu/GrStencilSettings.cpp",
+        "src/gpu/GrStyle.cpp",
+        "src/gpu/GrSurface.cpp",
+        "src/gpu/GrSurfaceContext.cpp",
+        "src/gpu/GrSurfaceProxy.cpp",
+        "src/gpu/GrTessellator.cpp",
+        "src/gpu/GrTestUtils.cpp",
+        "src/gpu/GrTexture.cpp",
+        "src/gpu/GrTextureAdjuster.cpp",
+        "src/gpu/GrTextureContext.cpp",
+        "src/gpu/GrTextureMaker.cpp",
+        "src/gpu/GrTextureOpList.cpp",
+        "src/gpu/GrTextureProducer.cpp",
+        "src/gpu/GrTextureProvider.cpp",
+        "src/gpu/GrTextureProxy.cpp",
+        "src/gpu/GrTextureRenderTargetProxy.cpp",
+        "src/gpu/GrTextureToYUVPlanes.cpp",
+        "src/gpu/GrTraceMarker.cpp",
+        "src/gpu/GrXferProcessor.cpp",
+        "src/gpu/GrYUVProvider.cpp",
+        "src/gpu/SkGpuDevice.cpp",
+        "src/gpu/SkGpuDevice_drawTexture.cpp",
+        "src/gpu/SkGr.cpp",
+        "src/gpu/effects/GrBezierEffect.cpp",
+        "src/gpu/effects/GrBicubicEffect.cpp",
+        "src/gpu/effects/GrBitmapTextGeoProc.cpp",
+        "src/gpu/effects/GrConfigConversionEffect.cpp",
+        "src/gpu/effects/GrConstColorProcessor.cpp",
+        "src/gpu/effects/GrConvexPolyEffect.cpp",
+        "src/gpu/effects/GrCoverageSetOpXP.cpp",
+        "src/gpu/effects/GrCustomXfermode.cpp",
+        "src/gpu/effects/GrDisableColorXP.cpp",
+        "src/gpu/effects/GrDistanceFieldGeoProc.cpp",
+        "src/gpu/effects/GrDitherEffect.cpp",
+        "src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp",
+        "src/gpu/effects/GrMatrixConvolutionEffect.cpp",
+        "src/gpu/effects/GrOvalEffect.cpp",
+        "src/gpu/effects/GrPorterDuffXferProcessor.cpp",
+        "src/gpu/effects/GrRRectEffect.cpp",
+        "src/gpu/effects/GrSRGBEffect.cpp",
+        "src/gpu/effects/GrShadowGeoProc.cpp",
+        "src/gpu/effects/GrShadowTessellator.cpp",
+        "src/gpu/effects/GrSimpleTextureEffect.cpp",
+        "src/gpu/effects/GrSingleTextureEffect.cpp",
+        "src/gpu/effects/GrTextureDomain.cpp",
+        "src/gpu/effects/GrTextureStripAtlas.cpp",
+        "src/gpu/effects/GrXfermodeFragmentProcessor.cpp",
+        "src/gpu/effects/GrYUVEffect.cpp",
+        "src/gpu/gl/GrGLAssembleInterface.cpp",
+        "src/gpu/gl/GrGLBuffer.cpp",
+        "src/gpu/gl/GrGLCaps.cpp",
+        "src/gpu/gl/GrGLContext.cpp",
+        "src/gpu/gl/GrGLCreateNullInterface.cpp",
+        "src/gpu/gl/GrGLDefaultInterface_native.cpp",
+        "src/gpu/gl/GrGLExtensions.cpp",
+        "src/gpu/gl/GrGLGLSL.cpp",
+        "src/gpu/gl/GrGLGpu.cpp",
+        "src/gpu/gl/GrGLGpuProgramCache.cpp",
+        "src/gpu/gl/GrGLInterface.cpp",
+        "src/gpu/gl/GrGLPath.cpp",
+        "src/gpu/gl/GrGLPathRange.cpp",
+        "src/gpu/gl/GrGLPathRendering.cpp",
+        "src/gpu/gl/GrGLProgram.cpp",
+        "src/gpu/gl/GrGLProgramDataManager.cpp",
+        "src/gpu/gl/GrGLRenderTarget.cpp",
+        "src/gpu/gl/GrGLStencilAttachment.cpp",
+        "src/gpu/gl/GrGLTestInterface.cpp",
+        "src/gpu/gl/GrGLTexture.cpp",
+        "src/gpu/gl/GrGLTextureRenderTarget.cpp",
+        "src/gpu/gl/GrGLUniformHandler.cpp",
+        "src/gpu/gl/GrGLUtil.cpp",
+        "src/gpu/gl/GrGLVaryingHandler.cpp",
+        "src/gpu/gl/GrGLVertexArray.cpp",
+        "src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp",
+        "src/gpu/gl/builders/GrGLProgramBuilder.cpp",
+        "src/gpu/gl/builders/GrGLSLPrettyPrint.cpp",
+        "src/gpu/gl/builders/GrGLShaderStringBuilder.cpp",
+        "src/gpu/glsl/GrGLSL.cpp",
+        "src/gpu/glsl/GrGLSLBlend.cpp",
+        "src/gpu/glsl/GrGLSLFragmentProcessor.cpp",
+        "src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp",
+        "src/gpu/glsl/GrGLSLGeometryProcessor.cpp",
+        "src/gpu/glsl/GrGLSLGeometryShaderBuilder.cpp",
+        "src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp",
+        "src/gpu/glsl/GrGLSLProgramBuilder.cpp",
+        "src/gpu/glsl/GrGLSLProgramDataManager.cpp",
+        "src/gpu/glsl/GrGLSLShaderBuilder.cpp",
+        "src/gpu/glsl/GrGLSLUtil.cpp",
+        "src/gpu/glsl/GrGLSLVarying.cpp",
+        "src/gpu/glsl/GrGLSLVertexShaderBuilder.cpp",
+        "src/gpu/glsl/GrGLSLXferProcessor.cpp",
+        "src/gpu/instanced/GLInstancedRendering.cpp",
+        "src/gpu/instanced/InstanceProcessor.cpp",
+        "src/gpu/instanced/InstancedRendering.cpp",
+        "src/gpu/ops/GrAAConvexPathRenderer.cpp",
+        "src/gpu/ops/GrAAConvexTessellator.cpp",
+        "src/gpu/ops/GrAADistanceFieldPathRenderer.cpp",
+        "src/gpu/ops/GrAAFillRectOp.cpp",
+        "src/gpu/ops/GrAAHairLinePathRenderer.cpp",
+        "src/gpu/ops/GrAALinearizingConvexPathRenderer.cpp",
+        "src/gpu/ops/GrAAStrokeRectOp.cpp",
+        "src/gpu/ops/GrAnalyticRectOp.cpp",
+        "src/gpu/ops/GrAtlasTextOp.cpp",
+        "src/gpu/ops/GrCopySurfaceOp.cpp",
+        "src/gpu/ops/GrDashLinePathRenderer.cpp",
+        "src/gpu/ops/GrDashOp.cpp",
+        "src/gpu/ops/GrDefaultPathRenderer.cpp",
+        "src/gpu/ops/GrDrawAtlasOp.cpp",
+        "src/gpu/ops/GrDrawOp.cpp",
+        "src/gpu/ops/GrDrawPathOp.cpp",
+        "src/gpu/ops/GrDrawVerticesOp.cpp",
+        "src/gpu/ops/GrLatticeOp.cpp",
+        "src/gpu/ops/GrMSAAPathRenderer.cpp",
+        "src/gpu/ops/GrMeshDrawOp.cpp",
+        "src/gpu/ops/GrNonAAFillRectOp.cpp",
+        "src/gpu/ops/GrNonAAFillRectPerspectiveOp.cpp",
+        "src/gpu/ops/GrNonAAStrokeRectOp.cpp",
+        "src/gpu/ops/GrOp.cpp",
+        "src/gpu/ops/GrOvalOpFactory.cpp",
+        "src/gpu/ops/GrPLSPathRenderer.cpp",
+        "src/gpu/ops/GrRectOpFactory.cpp",
+        "src/gpu/ops/GrRegionOp.cpp",
+        "src/gpu/ops/GrShadowRRectOp.cpp",
+        "src/gpu/ops/GrStencilAndCoverPathRenderer.cpp",
+        "src/gpu/ops/GrTessellatingPathRenderer.cpp",
+        "src/gpu/text/GrAtlasGlyphCache.cpp",
+        "src/gpu/text/GrAtlasTextBlob.cpp",
+        "src/gpu/text/GrAtlasTextBlob_regenInOp.cpp",
+        "src/gpu/text/GrAtlasTextContext.cpp",
+        "src/gpu/text/GrDistanceFieldAdjustTable.cpp",
+        "src/gpu/text/GrStencilAndCoverTextContext.cpp",
+        "src/gpu/text/GrTextBlobCache.cpp",
+        "src/gpu/text/GrTextUtils.cpp",
+        "src/gpu/vk/GrVkBackendContext.cpp",
+        "src/gpu/vk/GrVkBuffer.cpp",
+        "src/gpu/vk/GrVkCaps.cpp",
+        "src/gpu/vk/GrVkCommandBuffer.cpp",
+        "src/gpu/vk/GrVkCopyManager.cpp",
+        "src/gpu/vk/GrVkCopyPipeline.cpp",
+        "src/gpu/vk/GrVkDescriptorPool.cpp",
+        "src/gpu/vk/GrVkDescriptorSet.cpp",
+        "src/gpu/vk/GrVkDescriptorSetManager.cpp",
+        "src/gpu/vk/GrVkExtensions.cpp",
+        "src/gpu/vk/GrVkFramebuffer.cpp",
+        "src/gpu/vk/GrVkGpu.cpp",
+        "src/gpu/vk/GrVkGpuCommandBuffer.cpp",
+        "src/gpu/vk/GrVkImage.cpp",
+        "src/gpu/vk/GrVkImageView.cpp",
+        "src/gpu/vk/GrVkIndexBuffer.cpp",
+        "src/gpu/vk/GrVkInterface.cpp",
+        "src/gpu/vk/GrVkMemory.cpp",
+        "src/gpu/vk/GrVkPipeline.cpp",
+        "src/gpu/vk/GrVkPipelineState.cpp",
+        "src/gpu/vk/GrVkPipelineStateBuilder.cpp",
+        "src/gpu/vk/GrVkPipelineStateCache.cpp",
+        "src/gpu/vk/GrVkPipelineStateDataManager.cpp",
+        "src/gpu/vk/GrVkRenderPass.cpp",
+        "src/gpu/vk/GrVkRenderTarget.cpp",
+        "src/gpu/vk/GrVkResourceProvider.cpp",
+        "src/gpu/vk/GrVkSampler.cpp",
+        "src/gpu/vk/GrVkStencilAttachment.cpp",
+        "src/gpu/vk/GrVkTexture.cpp",
+        "src/gpu/vk/GrVkTextureRenderTarget.cpp",
+        "src/gpu/vk/GrVkTransferBuffer.cpp",
+        "src/gpu/vk/GrVkUniformBuffer.cpp",
+        "src/gpu/vk/GrVkUniformHandler.cpp",
+        "src/gpu/vk/GrVkUtil.cpp",
+        "src/gpu/vk/GrVkVaryingHandler.cpp",
+        "src/gpu/vk/GrVkVertexBuffer.cpp",
+        "src/image/SkImage.cpp",
+        "src/image/SkImageShader.cpp",
+        "src/image/SkImage_Generator.cpp",
+        "src/image/SkImage_Gpu.cpp",
+        "src/image/SkImage_Raster.cpp",
+        "src/image/SkSurface.cpp",
+        "src/image/SkSurface_Gpu.cpp",
+        "src/image/SkSurface_Raster.cpp",
+        "src/images/SkImageEncoder.cpp",
+        "src/images/SkJPEGImageEncoder.cpp",
+        "src/images/SkJPEGWriteUtility.cpp",
+        "src/images/SkPNGImageEncoder.cpp",
+        "src/images/SkWEBPImageEncoder.cpp",
+        "src/lazy/SkDiscardableMemoryPool.cpp",
+        "src/pathops/SkAddIntersections.cpp",
+        "src/pathops/SkDConicLineIntersection.cpp",
+        "src/pathops/SkDCubicLineIntersection.cpp",
+        "src/pathops/SkDCubicToQuads.cpp",
+        "src/pathops/SkDLineIntersection.cpp",
+        "src/pathops/SkDQuadLineIntersection.cpp",
+        "src/pathops/SkIntersections.cpp",
+        "src/pathops/SkOpAngle.cpp",
+        "src/pathops/SkOpBuilder.cpp",
+        "src/pathops/SkOpCoincidence.cpp",
+        "src/pathops/SkOpContour.cpp",
+        "src/pathops/SkOpCubicHull.cpp",
+        "src/pathops/SkOpEdgeBuilder.cpp",
+        "src/pathops/SkOpSegment.cpp",
+        "src/pathops/SkOpSpan.cpp",
+        "src/pathops/SkPathOpsCommon.cpp",
+        "src/pathops/SkPathOpsConic.cpp",
+        "src/pathops/SkPathOpsCubic.cpp",
+        "src/pathops/SkPathOpsCurve.cpp",
+        "src/pathops/SkPathOpsDebug.cpp",
+        "src/pathops/SkPathOpsLine.cpp",
+        "src/pathops/SkPathOpsOp.cpp",
+        "src/pathops/SkPathOpsPoint.cpp",
+        "src/pathops/SkPathOpsQuad.cpp",
+        "src/pathops/SkPathOpsRect.cpp",
+        "src/pathops/SkPathOpsSimplify.cpp",
+        "src/pathops/SkPathOpsTSect.cpp",
+        "src/pathops/SkPathOpsTightBounds.cpp",
+        "src/pathops/SkPathOpsTypes.cpp",
+        "src/pathops/SkPathOpsWinding.cpp",
+        "src/pathops/SkPathWriter.cpp",
+        "src/pathops/SkReduceOrder.cpp",
+        "src/pdf/SkDeflate.cpp",
+        "src/pdf/SkJpegInfo.cpp",
+        "src/pdf/SkPDFBitmap.cpp",
+        "src/pdf/SkPDFCanon.cpp",
+        "src/pdf/SkPDFCanvas.cpp",
+        "src/pdf/SkPDFConvertType1FontStream.cpp",
+        "src/pdf/SkPDFDevice.cpp",
+        "src/pdf/SkPDFDocument.cpp",
+        "src/pdf/SkPDFFont.cpp",
+        "src/pdf/SkPDFFormXObject.cpp",
+        "src/pdf/SkPDFGraphicState.cpp",
+        "src/pdf/SkPDFMakeCIDGlyphWidthsArray.cpp",
+        "src/pdf/SkPDFMakeToUnicodeCmap.cpp",
+        "src/pdf/SkPDFMetadata.cpp",
+        "src/pdf/SkPDFResourceDict.cpp",
+        "src/pdf/SkPDFShader.cpp",
+        "src/pdf/SkPDFTypes.cpp",
+        "src/pdf/SkPDFUtils.cpp",
+        "src/pipe/SkPipeCanvas.cpp",
+        "src/pipe/SkPipeReader.cpp",
+        "src/ports/SkDebug_android.cpp",
+        "src/ports/SkDiscardableMemory_none.cpp",
+        "src/ports/SkFontHost_FreeType.cpp",
+        "src/ports/SkFontHost_FreeType_common.cpp",
+        "src/ports/SkFontMgr_android.cpp",
+        "src/ports/SkFontMgr_android_factory.cpp",
+        "src/ports/SkFontMgr_android_parser.cpp",
+        "src/ports/SkGlobalInitialization_default.cpp",
+        "src/ports/SkImageGenerator_skia.cpp",
+        "src/ports/SkMemory_malloc.cpp",
+        "src/ports/SkOSFile_posix.cpp",
+        "src/ports/SkOSFile_stdio.cpp",
+        "src/ports/SkOSLibrary_posix.cpp",
+        "src/ports/SkTLS_pthread.cpp",
+        "src/sfnt/SkOTTable_name.cpp",
+        "src/sfnt/SkOTUtils.cpp",
+        "src/sksl/SkSLCFGGenerator.cpp",
+        "src/sksl/SkSLCompiler.cpp",
+        "src/sksl/SkSLGLSLCodeGenerator.cpp",
+        "src/sksl/SkSLIRGenerator.cpp",
+        "src/sksl/SkSLParser.cpp",
+        "src/sksl/SkSLSPIRVCodeGenerator.cpp",
+        "src/sksl/SkSLUtil.cpp",
+        "src/sksl/ir/SkSLSymbolTable.cpp",
+        "src/sksl/ir/SkSLType.cpp",
+        "src/svg/SkSVGCanvas.cpp",
+        "src/svg/SkSVGDevice.cpp",
+        "src/utils/SkBase64.cpp",
+        "src/utils/SkBitmapSourceDeserializer.cpp",
+        "src/utils/SkBoundaryPatch.cpp",
+        "src/utils/SkCamera.cpp",
+        "src/utils/SkCanvasStack.cpp",
+        "src/utils/SkCanvasStateUtils.cpp",
+        "src/utils/SkCurveMeasure.cpp",
+        "src/utils/SkDashPath.cpp",
+        "src/utils/SkDeferredCanvas.cpp",
+        "src/utils/SkDumpCanvas.cpp",
+        "src/utils/SkEventTracer.cpp",
+        "src/utils/SkFrontBufferedStream.cpp",
+        "src/utils/SkInterpolator.cpp",
+        "src/utils/SkLayer.cpp",
+        "src/utils/SkMatrix22.cpp",
+        "src/utils/SkMeshUtils.cpp",
+        "src/utils/SkMultiPictureDocument.cpp",
+        "src/utils/SkNWayCanvas.cpp",
+        "src/utils/SkNullCanvas.cpp",
+        "src/utils/SkOSPath.cpp",
+        "src/utils/SkPaintFilterCanvas.cpp",
+        "src/utils/SkParse.cpp",
+        "src/utils/SkParseColor.cpp",
+        "src/utils/SkParsePath.cpp",
+        "src/utils/SkPatchGrid.cpp",
+        "src/utils/SkPatchUtils.cpp",
+        "src/utils/SkRGBAToYUV.cpp",
+        "src/utils/SkShadowPaintFilterCanvas.cpp",
+        "src/utils/SkShadowUtils.cpp",
+        "src/utils/SkTextBox.cpp",
+        "src/utils/SkTextureCompressor.cpp",
+        "src/utils/SkTextureCompressor_ASTC.cpp",
+        "src/utils/SkTextureCompressor_LATC.cpp",
+        "src/utils/SkTextureCompressor_R11EAC.cpp",
+        "src/utils/SkThreadUtils_pthread.cpp",
+        "src/utils/SkThreadUtils_win.cpp",
+        "src/utils/SkWhitelistTypefaces.cpp",
+        "src/utils/mac/SkCreateCGImageRef.cpp",
+        "src/utils/mac/SkStream_mac.cpp",
+        "src/utils/win/SkAutoCoInitialize.cpp",
+        "src/utils/win/SkDWrite.cpp",
+        "src/utils/win/SkDWriteFontFileStream.cpp",
+        "src/utils/win/SkDWriteGeometrySink.cpp",
+        "src/utils/win/SkHRESULT.cpp",
+        "src/utils/win/SkIStream.cpp",
+        "src/utils/win/SkWGL_win.cpp",
+        "src/xml/SkDOM.cpp",
+        "src/xml/SkXMLParser.cpp",
+        "src/xml/SkXMLWriter.cpp",
+        "src/xps/SkDocument_XPS.cpp",
+        "src/xps/SkDocument_XPS_None.cpp",
+        "src/xps/SkXPSDevice.cpp",
+        "third_party/etc1/etc1.cpp",
+        "third_party/gif/SkGifImageReader.cpp",
+        "third_party/ktx/ktx.cpp",
+    ],
+
+    arch: {
+        arm: {
+            srcs: [
+                "src/opts/SkBitmapProcState_opts_none.cpp",
+                "src/opts/SkBlitMask_opts_arm.cpp",
+                "src/opts/SkBlitRow_opts_arm.cpp",
+            ],
+
+            armv7_a_neon: {
+                srcs: [
+                    "src/opts/SkBitmapProcState_arm_neon.cpp",
+                    "src/opts/SkBitmapProcState_matrixProcs_neon.cpp",
+                    "src/opts/SkBlitMask_opts_arm_neon.cpp",
+                    "src/opts/SkBlitRow_opts_arm_neon.cpp",
+                ],
+            },
+        },
+
+        arm64: {
+            srcs: [
+                "src/opts/SkBitmapProcState_arm_neon.cpp",
+                "src/opts/SkBitmapProcState_matrixProcs_neon.cpp",
+                "src/opts/SkBitmapProcState_opts_none.cpp",
+                "src/opts/SkBlitMask_opts_arm.cpp",
+                "src/opts/SkBlitMask_opts_arm_neon.cpp",
+                "src/opts/SkBlitRow_opts_arm.cpp",
+                "src/opts/SkBlitRow_opts_arm_neon.cpp",
+                "src/opts/SkOpts_crc32.cpp",
+            ],
+        },
+
+        mips: {
+            srcs: [
+                "src/opts/SkBitmapProcState_opts_none.cpp",
+                "src/opts/SkBlitMask_opts_none.cpp",
+                "src/opts/SkBlitRow_opts_none.cpp",
+            ],
+        },
+
+        mips64: {
+            srcs: [
+                "src/opts/SkBitmapProcState_opts_none.cpp",
+                "src/opts/SkBlitMask_opts_none.cpp",
+                "src/opts/SkBlitRow_opts_none.cpp",
+            ],
+        },
+
+        x86: {
+            srcs: [
+                "src/opts/SkBitmapProcState_opts_SSE2.cpp",
+                "src/opts/SkBitmapProcState_opts_SSSE3.cpp",
+                "src/opts/SkBlitRow_opts_SSE2.cpp",
+                "src/opts/SkOpts_avx.cpp",
+                "src/opts/SkOpts_hsw.cpp",
+                "src/opts/SkOpts_sse41.cpp",
+                "src/opts/SkOpts_sse42.cpp",
+                "src/opts/SkOpts_ssse3.cpp",
+                "src/opts/opts_check_x86.cpp",
+            ],
+        },
+
+        x86_64: {
+            srcs: [
+                "src/opts/SkBitmapProcState_opts_SSE2.cpp",
+                "src/opts/SkBitmapProcState_opts_SSSE3.cpp",
+                "src/opts/SkBlitRow_opts_SSE2.cpp",
+                "src/opts/SkOpts_avx.cpp",
+                "src/opts/SkOpts_hsw.cpp",
+                "src/opts/SkOpts_sse41.cpp",
+                "src/opts/SkOpts_sse42.cpp",
+                "src/opts/SkOpts_ssse3.cpp",
+                "src/opts/opts_check_x86.cpp",
+            ],
+        },
+    },
+
+    shared_libs: [
+        "libEGL",
+        "libGLESv2",
+        "libdng_sdk",
+        "libexpat",
+        "libft2",
+        "libicui18n",
+        "libicuuc",
+        "libjpeg",
+        "liblog",
+        "libpiex",
+        "libpng",
+        "libvulkan",
+        "libz",
+    ],
+    static_libs: [
+        "libsfntly",
+        "libwebp-decode",
+        "libwebp-encode",
+    ],
+}
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000..b84e1b6
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,49 @@
+# Copyright (C) 2007 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list.  These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+#     $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+#     $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list.  E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
diff --git a/DATA/skia_resources b/DATA/skia_resources
new file mode 120000
index 0000000..35a4f7a
--- /dev/null
+++ b/DATA/skia_resources
@@ -0,0 +1 @@
+../resources
\ No newline at end of file
diff --git a/MODULE_LICENSE_BSD b/MODULE_LICENSE_BSD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/MODULE_LICENSE_BSD
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..3106369
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,68 @@
+// Copyright (c) 2011 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+=========================================================================
+
+The SKIA library also includes a third-party dependency on a nearly
+verbatim copy of the GLU tessellator source code from SGI's OpenGL Sample
+Implementation at http://oss.sgi.com/projects/ogl-sample/. Per
+http://oss.sgi.com/projects/FreeB/, the code is covered under the SGI
+Free Software License B, version 2.0, a copy of which is included below.
+
+SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) 
+
+Copyright (C) [dates of first publication] Silicon Graphics, Inc. All
+Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice including the dates of first publication
+and either this permission notice or a reference to HYPERLINK
+"http://oss.sgi.com/projects/FreeB/"http://oss.sgi.com/projects/FreeB/
+shall be included in all copies or substantial portions of the
+Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Silicon Graphics,
+Inc. shall not be used in advertising or otherwise to promote the
+sale, use or other dealings in this Software without prior written
+authorization from Silicon Graphics, Inc.
+
diff --git a/README.android b/README.android
new file mode 100644
index 0000000..fece98e
--- /dev/null
+++ b/README.android
@@ -0,0 +1,13 @@
+The Skia library is a cross-platform 2D-based renderer. The
+key places to look are in the folders:
+
+  include/  : contains public header files
+  src/      : contains src code
+
+The top level makefile is at the root: Android.mk
+
+These files originate from an upstream repository
+(skia.googlesource.com) where the project is actively developed
+and maintained. As a result some files are not relevant to
+Android, but make the merging process smoother.
+
diff --git a/bench/Android.mk b/bench/Android.mk
new file mode 100644
index 0000000..e698870
--- /dev/null
+++ b/bench/Android.mk
@@ -0,0 +1,578 @@
+
+###############################################################################
+#
+# THIS FILE IS AUTOGENERATED BY GYP_TO_ANDROID.PY. DO NOT EDIT.
+#
+# For bugs, please contact scroggo@google.com or djsollen@google.com
+#
+###############################################################################
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_CFLAGS += \
+	-fPIC \
+	-Wvla \
+	-Wno-unused-parameter \
+	-U_FORTIFY_SOURCE \
+	-D_FORTIFY_SOURCE=1 \
+	-DSKIA_IMPLEMENTATION=1 \
+	-O2
+
+LOCAL_CPPFLAGS := \
+	-std=c++11 \
+	-fno-threadsafe-statics
+
+LOCAL_SRC_FILES := \
+	../gm/gm.cpp \
+	../tools/LsanSuppressions.cpp \
+	AAClipBench.cpp \
+	AlternatingColorPatternBench.cpp \
+	AndroidCodecBench.cpp \
+	BenchLogger.cpp \
+	Benchmark.cpp \
+	BezierBench.cpp \
+	BigPathBench.cpp \
+	BitmapBench.cpp \
+	BitmapRectBench.cpp \
+	BitmapRegionDecoderBench.cpp \
+	BitmapScaleBench.cpp \
+	BlurBench.cpp \
+	BlurImageFilterBench.cpp \
+	BlurOccludedRRectBench.cpp \
+	BlurRectBench.cpp \
+	BlurRectsBench.cpp \
+	BlurRoundRectBench.cpp \
+	ChartBench.cpp \
+	ChecksumBench.cpp \
+	ChromeBench.cpp \
+	CmapBench.cpp \
+	CodecBench.cpp \
+	ColorCodecBench.cpp \
+	ColorFilterBench.cpp \
+	ColorPrivBench.cpp \
+	ControlBench.cpp \
+	CoverageBench.cpp \
+	DashBench.cpp \
+	DisplacementBench.cpp \
+	DrawBitmapAABench.cpp \
+	DrawLatticeBench.cpp \
+	EncoderBench.cpp \
+	FSRectBench.cpp \
+	FontCacheBench.cpp \
+	FontScalerBench.cpp \
+	GLBench.cpp \
+	GLInstancedArraysBench.cpp \
+	GLVec4ScalarBench.cpp \
+	GLVertexAttributesBench.cpp \
+	GMBench.cpp \
+	GameBench.cpp \
+	GeometryBench.cpp \
+	GrMemoryPoolBench.cpp \
+	GrMipMapBench.cpp \
+	GrResourceCacheBench.cpp \
+	GradientBench.cpp \
+	HairlinePathBench.cpp \
+	HardStopGradientBench_ScaleNumColors.cpp \
+	HardStopGradientBench_ScaleNumHardStops.cpp \
+	HardStopGradientBench_SpecialHardStops.cpp \
+	ImageBench.cpp \
+	ImageCacheBench.cpp \
+	ImageCacheBudgetBench.cpp \
+	ImageFilterCollapse.cpp \
+	ImageFilterDAGBench.cpp \
+	InterpBench.cpp \
+	LightingBench.cpp \
+	LineBench.cpp \
+	MagnifierBench.cpp \
+	MathBench.cpp \
+	Matrix44Bench.cpp \
+	MatrixBench.cpp \
+	MatrixConvolutionBench.cpp \
+	MeasureBench.cpp \
+	MemoryBench.cpp \
+	MemsetBench.cpp \
+	MergeBench.cpp \
+	MipMapBench.cpp \
+	MorphologyBench.cpp \
+	MutexBench.cpp \
+	PDFBench.cpp \
+	PatchBench.cpp \
+	PatchGridBench.cpp \
+	PathBench.cpp \
+	PathIterBench.cpp \
+	PerlinNoiseBench.cpp \
+	PictureNestingBench.cpp \
+	PictureOverheadBench.cpp \
+	PicturePlaybackBench.cpp \
+	PremulAndUnpremulAlphaOpsBench.cpp \
+	QuickRejectBench.cpp \
+	RTreeBench.cpp \
+	ReadPixBench.cpp \
+	RecordingBench.cpp \
+	RectBench.cpp \
+	RectanizerBench.cpp \
+	RectoriBench.cpp \
+	RefCntBench.cpp \
+	RegionBench.cpp \
+	RegionContainBench.cpp \
+	RepeatTileBench.cpp \
+	RotatedRectBench.cpp \
+	SKPAnimationBench.cpp \
+	SKPBench.cpp \
+	ScalarBench.cpp \
+	ShaderMaskBench.cpp \
+	ShapesBench.cpp \
+	Sk4fBench.cpp \
+	SkBlend_optsBench.cpp \
+	SkGlyphCacheBench.cpp \
+	SkLinearBitmapPipelineBench.cpp \
+	SkRasterPipelineBench.cpp \
+	SortBench.cpp \
+	StreamBench.cpp \
+	StrokeBench.cpp \
+	SwizzleBench.cpp \
+	TableBench.cpp \
+	TextBench.cpp \
+	TextBlobBench.cpp \
+	TileBench.cpp \
+	TileImageFilterBench.cpp \
+	TopoSortBench.cpp \
+	VertBench.cpp \
+	WritePixelsBench.cpp \
+	WriterBench.cpp \
+	Xfer4fBench.cpp \
+	XferF16Bench.cpp \
+	XfermodeBench.cpp \
+	nanobench.cpp \
+	nanobenchAndroid.cpp \
+	pack_int_uint16_t_Bench.cpp \
+	../gm/OverStroke.cpp \
+	../gm/SkLinearBitmapPipelineGM.cpp \
+	../gm/aaa.cpp \
+	../gm/aaclip.cpp \
+	../gm/aarectmodes.cpp \
+	../gm/aaxfermodes.cpp \
+	../gm/addarc.cpp \
+	../gm/all_bitmap_configs.cpp \
+	../gm/alphagradients.cpp \
+	../gm/animatedGif.cpp \
+	../gm/animatedimageblurs.cpp \
+	../gm/anisotropic.cpp \
+	../gm/annotated_text.cpp \
+	../gm/arcofzorro.cpp \
+	../gm/arcto.cpp \
+	../gm/arithmode.cpp \
+	../gm/badpaint.cpp \
+	../gm/beziereffects.cpp \
+	../gm/beziers.cpp \
+	../gm/bigblurs.cpp \
+	../gm/bigmatrix.cpp \
+	../gm/bigrrectaaeffect.cpp \
+	../gm/bigtext.cpp \
+	../gm/bigtileimagefilter.cpp \
+	../gm/bitmapcopy.cpp \
+	../gm/bitmapfilters.cpp \
+	../gm/bitmapimage.cpp \
+	../gm/bitmappremul.cpp \
+	../gm/bitmaprect.cpp \
+	../gm/bitmaprecttest.cpp \
+	../gm/bitmapshader.cpp \
+	../gm/bleed.cpp \
+	../gm/blend.cpp \
+	../gm/blurcircles.cpp \
+	../gm/blurcircles2.cpp \
+	../gm/blurquickreject.cpp \
+	../gm/blurrect.cpp \
+	../gm/blurredclippedcircle.cpp \
+	../gm/blurroundrect.cpp \
+	../gm/blurs.cpp \
+	../gm/bmpfilterqualityrepeat.cpp \
+	../gm/bug5252.cpp \
+	../gm/bug530095.cpp \
+	../gm/bug615686.cpp \
+	../gm/cgm.c \
+	../gm/cgms.cpp \
+	../gm/circles.cpp \
+	../gm/circulararcs.cpp \
+	../gm/circularclips.cpp \
+	../gm/clip_error.cpp \
+	../gm/clip_strokerect.cpp \
+	../gm/clipdrawdraw.cpp \
+	../gm/clippedbitmapshaders.cpp \
+	../gm/color4f.cpp \
+	../gm/coloremoji.cpp \
+	../gm/colorfilteralpha8.cpp \
+	../gm/colorfilterimagefilter.cpp \
+	../gm/colorfilters.cpp \
+	../gm/colormatrix.cpp \
+	../gm/colorspacexform.cpp \
+	../gm/colortype.cpp \
+	../gm/colortypexfermode.cpp \
+	../gm/colorwheel.cpp \
+	../gm/complexclip.cpp \
+	../gm/complexclip2.cpp \
+	../gm/complexclip3.cpp \
+	../gm/complexclip4.cpp \
+	../gm/complexclip_blur_tiled.cpp \
+	../gm/composeshader.cpp \
+	../gm/concavepaths.cpp \
+	../gm/conicpaths.cpp \
+	../gm/constcolorprocessor.cpp \
+	../gm/convex_all_line_paths.cpp \
+	../gm/convexpaths.cpp \
+	../gm/convexpolyclip.cpp \
+	../gm/convexpolyeffect.cpp \
+	../gm/copyTo4444.cpp \
+	../gm/croppedrects.cpp \
+	../gm/cubicpaths.cpp \
+	../gm/dashcircle.cpp \
+	../gm/dashcubics.cpp \
+	../gm/dashing.cpp \
+	../gm/deferredtextureimage.cpp \
+	../gm/degeneratesegments.cpp \
+	../gm/dftext.cpp \
+	../gm/discard.cpp \
+	../gm/displacement.cpp \
+	../gm/distantclip.cpp \
+	../gm/downsamplebitmap.cpp \
+	../gm/draw_bitmap_rect_skbug4374.cpp \
+	../gm/drawable.cpp \
+	../gm/drawatlas.cpp \
+	../gm/drawatlascolor.cpp \
+	../gm/drawbitmaprect.cpp \
+	../gm/drawfilter.cpp \
+	../gm/drawlooper.cpp \
+	../gm/drawminibitmaprect.cpp \
+	../gm/drawregion.cpp \
+	../gm/drawregionmodes.cpp \
+	../gm/dropshadowimagefilter.cpp \
+	../gm/drrect.cpp \
+	../gm/dstreadshuffle.cpp \
+	../gm/emboss.cpp \
+	../gm/emptypath.cpp \
+	../gm/encode-platform.cpp \
+	../gm/encode.cpp \
+	../gm/extractbitmap.cpp \
+	../gm/fadefilter.cpp \
+	../gm/fatpathfill.cpp \
+	../gm/filltypes.cpp \
+	../gm/filltypespersp.cpp \
+	../gm/filterbitmap.cpp \
+	../gm/filterbug.cpp \
+	../gm/filterfastbounds.cpp \
+	../gm/filterindiabox.cpp \
+	../gm/fontcache.cpp \
+	../gm/fontmgr.cpp \
+	../gm/fontscaler.cpp \
+	../gm/fontscalerdistortable.cpp \
+	../gm/gamma.cpp \
+	../gm/gammacolorfilter.cpp \
+	../gm/gammatext.cpp \
+	../gm/gamut.cpp \
+	../gm/gaussianedge.cpp \
+	../gm/getpostextpath.cpp \
+	../gm/giantbitmap.cpp \
+	../gm/glyph_pos.cpp \
+	../gm/glyph_pos_align.cpp \
+	../gm/gradientDirtyLaundry.cpp \
+	../gm/gradient_matrix.cpp \
+	../gm/gradients.cpp \
+	../gm/gradients_2pt_conical.cpp \
+	../gm/gradients_no_texture.cpp \
+	../gm/gradtext.cpp \
+	../gm/grayscalejpg.cpp \
+	../gm/hairlines.cpp \
+	../gm/hairmodes.cpp \
+	../gm/hardstop_gradients.cpp \
+	../gm/hittestpath.cpp \
+	../gm/image.cpp \
+	../gm/image_pict.cpp \
+	../gm/image_shader.cpp \
+	../gm/imagealphathreshold.cpp \
+	../gm/imageblur.cpp \
+	../gm/imageblur2.cpp \
+	../gm/imageblurtiled.cpp \
+	../gm/imagefilters.cpp \
+	../gm/imagefiltersbase.cpp \
+	../gm/imagefiltersclipped.cpp \
+	../gm/imagefilterscropexpand.cpp \
+	../gm/imagefilterscropped.cpp \
+	../gm/imagefiltersgraph.cpp \
+	../gm/imagefiltersscaled.cpp \
+	../gm/imagefiltersstroked.cpp \
+	../gm/imagefilterstransformed.cpp \
+	../gm/imagefromyuvtextures.cpp \
+	../gm/imagegeneratorexternal.cpp \
+	../gm/imagemagnifier.cpp \
+	../gm/imagemakewithfilter.cpp \
+	../gm/imagemasksubset.cpp \
+	../gm/imageresizetiled.cpp \
+	../gm/imagescalealigned.cpp \
+	../gm/imagesource.cpp \
+	../gm/imagesource2.cpp \
+	../gm/imagetoyuvplanes.cpp \
+	../gm/internal_links.cpp \
+	../gm/inversepaths.cpp \
+	../gm/largeglyphblur.cpp \
+	../gm/lattice.cpp \
+	../gm/lcdblendmodes.cpp \
+	../gm/lcdoverlap.cpp \
+	../gm/lcdtext.cpp \
+	../gm/lighting.cpp \
+	../gm/lightingshader.cpp \
+	../gm/lightingshader2.cpp \
+	../gm/lightingshaderbevel.cpp \
+	../gm/linepaths.cpp \
+	../gm/localmatriximagefilter.cpp \
+	../gm/lumafilter.cpp \
+	../gm/matrixconvolution.cpp \
+	../gm/matriximagefilter.cpp \
+	../gm/megalooper.cpp \
+	../gm/mipmap.cpp \
+	../gm/mixedtextblobs.cpp \
+	../gm/modecolorfilters.cpp \
+	../gm/morphology.cpp \
+	../gm/multipicturedraw.cpp \
+	../gm/nested.cpp \
+	../gm/ninepatchstretch.cpp \
+	../gm/nonclosedpaths.cpp \
+	../gm/occludedrrectblur.cpp \
+	../gm/offsetimagefilter.cpp \
+	../gm/ovals.cpp \
+	../gm/overdrawcolorfilter.cpp \
+	../gm/patch.cpp \
+	../gm/patchgrid.cpp \
+	../gm/path_stroke_with_zero_length.cpp \
+	../gm/pathcontourstart.cpp \
+	../gm/patheffects.cpp \
+	../gm/pathfill.cpp \
+	../gm/pathinterior.cpp \
+	../gm/pathmaskcache.cpp \
+	../gm/pathopsinverse.cpp \
+	../gm/pathopsskpclip.cpp \
+	../gm/pathreverse.cpp \
+	../gm/pdf_never_embed.cpp \
+	../gm/perlinnoise.cpp \
+	../gm/perspshaders.cpp \
+	../gm/picture.cpp \
+	../gm/pictureimagefilter.cpp \
+	../gm/pictureimagegenerator.cpp \
+	../gm/pictureshader.cpp \
+	../gm/pictureshadertile.cpp \
+	../gm/pixelsnap.cpp \
+	../gm/plus.cpp \
+	../gm/points.cpp \
+	../gm/poly2poly.cpp \
+	../gm/polygons.cpp \
+	../gm/quadpaths.cpp \
+	../gm/recordopts.cpp \
+	../gm/rectangletexture.cpp \
+	../gm/rects.cpp \
+	../gm/repeated_bitmap.cpp \
+	../gm/resizeimagefilter.cpp \
+	../gm/reveal.cpp \
+	../gm/roundrects.cpp \
+	../gm/rrect.cpp \
+	../gm/rrectclipdrawpaint.cpp \
+	../gm/rrects.cpp \
+	../gm/samplerstress.cpp \
+	../gm/scaledstrokes.cpp \
+	../gm/shaderbounds.cpp \
+	../gm/shadertext.cpp \
+	../gm/shadertext2.cpp \
+	../gm/shadertext3.cpp \
+	../gm/shadowmaps.cpp \
+	../gm/shadows.cpp \
+	../gm/shallowgradient.cpp \
+	../gm/shapes.cpp \
+	../gm/showmiplevels.cpp \
+	../gm/simpleaaclip.cpp \
+	../gm/simplerect.cpp \
+	../gm/skbug1719.cpp \
+	../gm/skbug_257.cpp \
+	../gm/skbug_4868.cpp \
+	../gm/skbug_5321.cpp \
+	../gm/smallarc.cpp \
+	../gm/smallimage.cpp \
+	../gm/smallpaths.cpp \
+	../gm/spritebitmap.cpp \
+	../gm/srcmode.cpp \
+	../gm/stlouisarch.cpp \
+	../gm/stringart.cpp \
+	../gm/stroke_rect_shader.cpp \
+	../gm/strokedlines.cpp \
+	../gm/strokefill.cpp \
+	../gm/strokerect.cpp \
+	../gm/strokerects.cpp \
+	../gm/strokes.cpp \
+	../gm/stroketext.cpp \
+	../gm/subsetshader.cpp \
+	../gm/surface.cpp \
+	../gm/tablecolorfilter.cpp \
+	../gm/tallstretchedbitmaps.cpp \
+	../gm/texdata.cpp \
+	../gm/textblob.cpp \
+	../gm/textblobblockreordering.cpp \
+	../gm/textblobcolortrans.cpp \
+	../gm/textblobgeometrychange.cpp \
+	../gm/textbloblooper.cpp \
+	../gm/textblobmixedsizes.cpp \
+	../gm/textblobrandomfont.cpp \
+	../gm/textblobshader.cpp \
+	../gm/textblobtransforms.cpp \
+	../gm/textblobuseaftergpufree.cpp \
+	../gm/texteffects.cpp \
+	../gm/texturedomaineffect.cpp \
+	../gm/thinrects.cpp \
+	../gm/thinstrokedrects.cpp \
+	../gm/tiledscaledbitmap.cpp \
+	../gm/tileimagefilter.cpp \
+	../gm/tilemodes.cpp \
+	../gm/tilemodes_scaled.cpp \
+	../gm/tinybitmap.cpp \
+	../gm/transparency.cpp \
+	../gm/typeface.cpp \
+	../gm/variedtext.cpp \
+	../gm/vertices.cpp \
+	../gm/verttext.cpp \
+	../gm/verttext2.cpp \
+	../gm/verylargebitmap.cpp \
+	../gm/windowrectangles.cpp \
+	../gm/xfermodeimagefilter.cpp \
+	../gm/xfermodes.cpp \
+	../gm/xfermodes2.cpp \
+	../gm/xfermodes3.cpp \
+	../gm/yuvtorgbeffect.cpp \
+	../tools/debugger/SkDrawCommand.cpp \
+	../tools/debugger/SkDebugCanvas.cpp \
+	../tools/debugger/SkJsonWriteBuffer.cpp \
+	../tools/debugger/SkObjectParser.cpp \
+	../tools/AndroidSkDebugToStdOut.cpp \
+	../tools/flags/SkCommonFlags.cpp \
+	../tools/flags/SkCommonFlagsConfig.cpp \
+	../tools/CrashHandler.cpp \
+	../tools/ProcStats.cpp \
+	../tools/ThermalManager.cpp \
+	../tools/timer/Timer.cpp \
+	../experimental/svg/model/SkSVGAttribute.cpp \
+	../experimental/svg/model/SkSVGAttributeParser.cpp \
+	../experimental/svg/model/SkSVGCircle.cpp \
+	../experimental/svg/model/SkSVGClipPath.cpp \
+	../experimental/svg/model/SkSVGContainer.cpp \
+	../experimental/svg/model/SkSVGDOM.cpp \
+	../experimental/svg/model/SkSVGEllipse.cpp \
+	../experimental/svg/model/SkSVGLine.cpp \
+	../experimental/svg/model/SkSVGLinearGradient.cpp \
+	../experimental/svg/model/SkSVGNode.cpp \
+	../experimental/svg/model/SkSVGPath.cpp \
+	../experimental/svg/model/SkSVGPoly.cpp \
+	../experimental/svg/model/SkSVGRect.cpp \
+	../experimental/svg/model/SkSVGRenderContext.cpp \
+	../experimental/svg/model/SkSVGShape.cpp \
+	../experimental/svg/model/SkSVGStop.cpp \
+	../experimental/svg/model/SkSVGSVG.cpp \
+	../experimental/svg/model/SkSVGTransformableNode.cpp \
+	../experimental/svg/model/SkSVGValue.cpp \
+	../tools/Resources.cpp \
+	../tools/sk_tool_utils.cpp \
+	../tools/sk_tool_utils_font.cpp \
+	../tools/random_parse_path.cpp \
+	../tools/UrlDataManager.cpp \
+	../tools/android/SkAndroidSDKCanvas.cpp \
+	../tools/gpu/GrContextFactory.cpp \
+	../tools/gpu/GrTest.cpp \
+	../tools/gpu/TestContext.cpp \
+	../tools/gpu/gl/GLTestContext.cpp \
+	../tools/gpu/gl/command_buffer/GLTestContext_command_buffer.cpp \
+	../tools/gpu/gl/debug/DebugGLTestContext.cpp \
+	../tools/gpu/gl/debug/GrBufferObj.cpp \
+	../tools/gpu/gl/debug/GrFrameBufferObj.cpp \
+	../tools/gpu/gl/debug/GrProgramObj.cpp \
+	../tools/gpu/gl/debug/GrShaderObj.cpp \
+	../tools/gpu/gl/debug/GrTextureObj.cpp \
+	../tools/gpu/gl/debug/GrTextureUnitObj.cpp \
+	../tools/gpu/gl/null/NullGLTestContext.cpp \
+	../tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp \
+	../tools/gpu/vk/VkTestContext.cpp \
+	../tools/picture_utils.cpp \
+	../tools/flags/SkCommandLineFlags.cpp \
+	../src/xml/SkDOM.cpp \
+	../src/xml/SkXMLParser.cpp \
+	../src/xml/SkXMLWriter.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+	liblog \
+	libhwui \
+	libpng \
+	libGLESv2 \
+	libEGL \
+	libvulkan \
+	libz \
+	libexpat
+
+LOCAL_STATIC_LIBRARIES := \
+	libskia \
+	libjsoncpp
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/../src/sksl \
+	$(LOCAL_PATH)/../include/c \
+	$(LOCAL_PATH)/../include/config \
+	$(LOCAL_PATH)/../include/core \
+	$(LOCAL_PATH)/../include/pathops \
+	$(LOCAL_PATH)/../include/codec \
+	$(LOCAL_PATH)/../include/android \
+	$(LOCAL_PATH)/../include/effects \
+	$(LOCAL_PATH)/../include/client/android \
+	$(LOCAL_PATH)/../include/images \
+	$(LOCAL_PATH)/../include/ports \
+	$(LOCAL_PATH)/../src/sfnt \
+	$(LOCAL_PATH)/../include/utils \
+	$(LOCAL_PATH)/../src/utils \
+	$(LOCAL_PATH)/../include/gpu \
+	frameworks/native/vulkan/include \
+	$(LOCAL_PATH)/../tools/viewer/sk_app \
+	$(LOCAL_PATH)/../tools/viewer/sk_app/android \
+	$(LOCAL_PATH)/../include/private \
+	$(LOCAL_PATH)/../src/core \
+	$(LOCAL_PATH)/../src/gpu \
+	$(LOCAL_PATH)/../tools/gpu \
+	$(LOCAL_PATH)/../tools/flags \
+	$(LOCAL_PATH)/../experimental/svg/model \
+	$(LOCAL_PATH)/../include/xml \
+	$(LOCAL_PATH)/../src/fonts \
+	$(LOCAL_PATH)/../tools \
+	external/expat/lib \
+	$(LOCAL_PATH)/../src/codec \
+	$(LOCAL_PATH)/../src/image \
+	$(LOCAL_PATH)/subset \
+	$(LOCAL_PATH)/../src/effects \
+	$(LOCAL_PATH)/../src/pdf \
+	$(LOCAL_PATH)/../gm \
+	$(LOCAL_PATH)/../tools/debugger \
+	$(LOCAL_PATH)/../src/effects/gradients \
+	$(LOCAL_PATH)/../src/images \
+	$(LOCAL_PATH)/../src/lazy \
+	$(LOCAL_PATH)/../../../frameworks/base/libs/hwui \
+	$(LOCAL_PATH)/../tools/timer \
+	$(LOCAL_PATH)/../third_party/etc1 \
+	$(LOCAL_PATH)/../tools/android \
+	external/libpng
+
+LOCAL_CFLAGS += \
+	-DSK_CRASH_HANDLER
+
+LOCAL_MODULE_TAGS := \
+	tests
+
+LOCAL_MODULE := \
+	skia_nanobench
+
+
+# Store skia's resources in the directory structure that the Android testing
+# infrastructure expects.  This requires that Skia maintain a symlinked
+# subdirectory in the DATA folder that points to the top level skia resources...
+#  i.e. external/skia/DATA/skia_resources --> ../resources
+LOCAL_PICKUP_FILES := $(LOCAL_PATH)/../DATA
+include $(LOCAL_PATH)/../skia_static_deps.mk
+include $(BUILD_NATIVE_TEST)
diff --git a/dm/Android.mk b/dm/Android.mk
new file mode 100644
index 0000000..b94617e
--- /dev/null
+++ b/dm/Android.mk
@@ -0,0 +1,767 @@
+
+###############################################################################
+#
+# THIS FILE IS AUTOGENERATED BY GYP_TO_ANDROID.PY. DO NOT EDIT.
+#
+# For bugs, please contact scroggo@google.com or djsollen@google.com
+#
+###############################################################################
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+LOCAL_CFLAGS += \
+	-fPIC \
+	-Wvla \
+	-Wno-unused-parameter \
+	-U_FORTIFY_SOURCE \
+	-D_FORTIFY_SOURCE=1 \
+	-DSKIA_IMPLEMENTATION=1 \
+	-O2
+
+LOCAL_CPPFLAGS := \
+	-std=c++11 \
+	-fno-threadsafe-statics
+
+LOCAL_SRC_FILES := \
+	DM.cpp \
+	DMSrcSink.cpp \
+	DMJsonWriter.cpp \
+	../gm/gm.cpp \
+	../src/utils/SkMultiPictureDocumentReader.cpp \
+	../tools/LsanSuppressions.cpp \
+	../tools/debugger/SkDebugCanvas.cpp \
+	../tools/debugger/SkDrawCommand.cpp \
+	../tools/debugger/SkJsonWriteBuffer.cpp \
+	../tools/debugger/SkObjectParser.cpp \
+	../tests/Test.cpp \
+	../tests/PathOpsAngleTest.cpp \
+	../tests/PathOpsBoundsTest.cpp \
+	../tests/PathOpsBuilderConicTest.cpp \
+	../tests/PathOpsBuilderTest.cpp \
+	../tests/PathOpsBuildUseTest.cpp \
+	../tests/PathOpsChalkboardTest.cpp \
+	../tests/PathOpsConicIntersectionTest.cpp \
+	../tests/PathOpsConicLineIntersectionTest.cpp \
+	../tests/PathOpsConicQuadIntersectionTest.cpp \
+	../tests/PathOpsCubicConicIntersectionTest.cpp \
+	../tests/PathOpsCubicIntersectionTest.cpp \
+	../tests/PathOpsCubicIntersectionTestData.cpp \
+	../tests/PathOpsCubicLineIntersectionTest.cpp \
+	../tests/PathOpsCubicQuadIntersectionTest.cpp \
+	../tests/PathOpsCubicReduceOrderTest.cpp \
+	../tests/PathOpsDCubicTest.cpp \
+	../tests/PathOpsDLineTest.cpp \
+	../tests/PathOpsDPointTest.cpp \
+	../tests/PathOpsDRectTest.cpp \
+	../tests/PathOpsDVectorTest.cpp \
+	../tests/PathOpsExtendedTest.cpp \
+	../tests/PathOpsFuzz763Test.cpp \
+	../tests/PathOpsInverseTest.cpp \
+	../tests/PathOpsIssue3651.cpp \
+	../tests/PathOpsLineIntersectionTest.cpp \
+	../tests/PathOpsLineParametetersTest.cpp \
+	../tests/PathOpsOpCircleThreadedTest.cpp \
+	../tests/PathOpsOpCubicThreadedTest.cpp \
+	../tests/PathOpsOpRectThreadedTest.cpp \
+	../tests/PathOpsOpTest.cpp \
+	../tests/PathOpsQuadIntersectionTest.cpp \
+	../tests/PathOpsQuadIntersectionTestData.cpp \
+	../tests/PathOpsQuadLineIntersectionTest.cpp \
+	../tests/PathOpsQuadLineIntersectionThreadedTest.cpp \
+	../tests/PathOpsQuadReduceOrderTest.cpp \
+	../tests/PathOpsSimplifyDegenerateThreadedTest.cpp \
+	../tests/PathOpsSimplifyFailTest.cpp \
+	../tests/PathOpsSimplifyQuadralateralsThreadedTest.cpp \
+	../tests/PathOpsSimplifyQuadThreadedTest.cpp \
+	../tests/PathOpsSimplifyRectThreadedTest.cpp \
+	../tests/PathOpsSimplifyTest.cpp \
+	../tests/PathOpsSimplifyTrianglesThreadedTest.cpp \
+	../tests/PathOpsSkpTest.cpp \
+	../tests/PathOpsTestCommon.cpp \
+	../tests/PathOpsThreadedCommon.cpp \
+	../tests/PathOpsThreeWayTest.cpp \
+	../tests/PathOpsTigerTest.cpp \
+	../tests/PathOpsTightBoundsTest.cpp \
+	../tests/PathOpsTypesTest.cpp \
+	../tests/SubsetPath.cpp \
+	../tests/AAClipTest.cpp \
+	../tests/AnnotationTest.cpp \
+	../tests/ApplyGammaTest.cpp \
+	../tests/AsADashTest.cpp \
+	../tests/BadIcoTest.cpp \
+	../tests/BitSetTest.cpp \
+	../tests/BitmapCopyTest.cpp \
+	../tests/BitmapGetColorTest.cpp \
+	../tests/BitmapTest.cpp \
+	../tests/BlendTest.cpp \
+	../tests/BlitMaskClip.cpp \
+	../tests/BlitRowTest.cpp \
+	../tests/BlurTest.cpp \
+	../tests/CPlusPlusEleven.cpp \
+	../tests/CTest.cpp \
+	../tests/CachedDataTest.cpp \
+	../tests/CachedDecodingPixelRefTest.cpp \
+	../tests/CanvasStateHelpers.cpp \
+	../tests/CanvasStateTest.cpp \
+	../tests/CanvasTest.cpp \
+	../tests/ChecksumTest.cpp \
+	../tests/ClampRangeTest.cpp \
+	../tests/ClearTest.cpp \
+	../tests/ClipBoundsTest.cpp \
+	../tests/ClipCubicTest.cpp \
+	../tests/ClipStackTest.cpp \
+	../tests/ClipperTest.cpp \
+	../tests/CodecAnimTest.cpp \
+	../tests/CodecPartialTest.cpp \
+	../tests/CodecTest.cpp \
+	../tests/ColorFilterTest.cpp \
+	../tests/ColorMatrixTest.cpp \
+	../tests/ColorPrivTest.cpp \
+	../tests/ColorSpaceTest.cpp \
+	../tests/ColorSpaceXformTest.cpp \
+	../tests/ColorTest.cpp \
+	../tests/CopySurfaceTest.cpp \
+	../tests/DFPathRendererTest.cpp \
+	../tests/DashPathEffectTest.cpp \
+	../tests/DataRefTest.cpp \
+	../tests/DequeTest.cpp \
+	../tests/DeviceLooperTest.cpp \
+	../tests/DeviceTest.cpp \
+	../tests/DiscardableMemoryPoolTest.cpp \
+	../tests/DiscardableMemoryTest.cpp \
+	../tests/DrawBitmapRectTest.cpp \
+	../tests/DrawFilterTest.cpp \
+	../tests/DrawPathTest.cpp \
+	../tests/DrawTextTest.cpp \
+	../tests/DynamicHashTest.cpp \
+	../tests/EGLImageTest.cpp \
+	../tests/EmptyPathTest.cpp \
+	../tests/ExifTest.cpp \
+	../tests/FillPathTest.cpp \
+	../tests/FitsInTest.cpp \
+	../tests/FixedAllocTest.cpp \
+	../tests/FlattenDrawableTest.cpp \
+	../tests/FlattenableCustomFactory.cpp \
+	../tests/FlattenableFactoryToName.cpp \
+	../tests/Float16Test.cpp \
+	../tests/FloatingPointTextureTest.cpp \
+	../tests/FontHostStreamTest.cpp \
+	../tests/FontHostTest.cpp \
+	../tests/FontMgrAndroidParserTest.cpp \
+	../tests/FontMgrTest.cpp \
+	../tests/FontNamesTest.cpp \
+	../tests/FontObjTest.cpp \
+	../tests/FrontBufferedStreamTest.cpp \
+	../tests/GLProgramsTest.cpp \
+	../tests/GeometryTest.cpp \
+	../tests/GifTest.cpp \
+	../tests/GpuColorFilterTest.cpp \
+	../tests/GpuDrawPathTest.cpp \
+	../tests/GpuLayerCacheTest.cpp \
+	../tests/GpuRectanizerTest.cpp \
+	../tests/GpuSampleLocationsTest.cpp \
+	../tests/GrAllocatorTest.cpp \
+	../tests/GrContextAbandonTest.cpp \
+	../tests/GrContextFactoryTest.cpp \
+	../tests/GrDrawTargetTest.cpp \
+	../tests/GrGLSLPrettyPrintTest.cpp \
+	../tests/GrGetCoeffBlendKnownComponentsTest.cpp \
+	../tests/GrMemoryPoolTest.cpp \
+	../tests/GrPorterDuffTest.cpp \
+	../tests/GrShapeTest.cpp \
+	../tests/GrSurfaceTest.cpp \
+	../tests/GrTRecorderTest.cpp \
+	../tests/GrTextureMipMapInvalidationTest.cpp \
+	../tests/GrTextureStripAtlasTest.cpp \
+	../tests/GradientTest.cpp \
+	../tests/HashTest.cpp \
+	../tests/ImageCacheTest.cpp \
+	../tests/ImageFilterCacheTest.cpp \
+	../tests/ImageFilterTest.cpp \
+	../tests/ImageFrom565Bitmap.cpp \
+	../tests/ImageGeneratorTest.cpp \
+	../tests/ImageIsOpaqueTest.cpp \
+	../tests/ImageNewShaderTest.cpp \
+	../tests/ImageStorageTest.cpp \
+	../tests/ImageTest.cpp \
+	../tests/IndexedPngOverflowTest.cpp \
+	../tests/InfRectTest.cpp \
+	../tests/IntTextureTest.cpp \
+	../tests/InterpolatorTest.cpp \
+	../tests/InvalidIndexedPngTest.cpp \
+	../tests/IsClosedSingleContourTest.cpp \
+	../tests/LListTest.cpp \
+	../tests/LRUCacheTest.cpp \
+	../tests/LayerDrawLooperTest.cpp \
+	../tests/LayerRasterizerTest.cpp \
+	../tests/MD5Test.cpp \
+	../tests/MallocPixelRefTest.cpp \
+	../tests/MaskCacheTest.cpp \
+	../tests/MathTest.cpp \
+	../tests/Matrix44Test.cpp \
+	../tests/MatrixClipCollapseTest.cpp \
+	../tests/MatrixTest.cpp \
+	../tests/MemoryTest.cpp \
+	../tests/MemsetTest.cpp \
+	../tests/MessageBusTest.cpp \
+	../tests/MetaDataTest.cpp \
+	../tests/MipMapTest.cpp \
+	../tests/OSPathTest.cpp \
+	../tests/OnceTest.cpp \
+	../tests/OverAlignedTest.cpp \
+	../tests/PDFDeflateWStreamTest.cpp \
+	../tests/PDFDocumentTest.cpp \
+	../tests/PDFGlyphsToUnicodeTest.cpp \
+	../tests/PDFInvalidBitmapTest.cpp \
+	../tests/PDFJpegEmbedTest.cpp \
+	../tests/PDFMetadataAttributeTest.cpp \
+	../tests/PDFOpaqueSrcModeToSrcOverTest.cpp \
+	../tests/PDFPrimitivesTest.cpp \
+	../tests/PackBitsTest.cpp \
+	../tests/PackedConfigsTextureTest.cpp \
+	../tests/PaintBreakTextTest.cpp \
+	../tests/PaintImageFilterTest.cpp \
+	../tests/PaintTest.cpp \
+	../tests/ParsePathTest.cpp \
+	../tests/PathCoverageTest.cpp \
+	../tests/PathMeasureTest.cpp \
+	../tests/PathTest.cpp \
+	../tests/PictureBBHTest.cpp \
+	../tests/PictureShaderTest.cpp \
+	../tests/PictureTest.cpp \
+	../tests/PipeTest.cpp \
+	../tests/PixelRefTest.cpp \
+	../tests/Point3Test.cpp \
+	../tests/PointTest.cpp \
+	../tests/PremulAlphaRoundTripTest.cpp \
+	../tests/PrimitiveProcessorTest.cpp \
+	../tests/ProxyConversionTest.cpp \
+	../tests/ProxyRefTest.cpp \
+	../tests/ProxyTest.cpp \
+	../tests/QuickRejectTest.cpp \
+	../tests/RRectInPathTest.cpp \
+	../tests/RTreeTest.cpp \
+	../tests/RandomTest.cpp \
+	../tests/ReadPixelsTest.cpp \
+	../tests/ReadWriteAlphaTest.cpp \
+	../tests/Reader32Test.cpp \
+	../tests/RecordDrawTest.cpp \
+	../tests/RecordOptsTest.cpp \
+	../tests/RecordPatternTest.cpp \
+	../tests/RecordTest.cpp \
+	../tests/RecorderTest.cpp \
+	../tests/RecordingXfermodeTest.cpp \
+	../tests/RectTest.cpp \
+	../tests/RectangleTextureTest.cpp \
+	../tests/RefCntTest.cpp \
+	../tests/RefDictTest.cpp \
+	../tests/RegionTest.cpp \
+	../tests/RenderTargetContextTest.cpp \
+	../tests/ResourceCacheTest.cpp \
+	../tests/RoundRectTest.cpp \
+	../tests/SRGBMipMapTest.cpp \
+	../tests/SRGBReadWritePixelsTest.cpp \
+	../tests/SRGBTest.cpp \
+	../tests/SVGDeviceTest.cpp \
+	../tests/ScalarTest.cpp \
+	../tests/ScaleToSidesTest.cpp \
+	../tests/SerializationTest.cpp \
+	../tests/ShaderOpacityTest.cpp \
+	../tests/ShaderTest.cpp \
+	../tests/SizeTest.cpp \
+	../tests/Sk4x4fTest.cpp \
+	../tests/SkBase64Test.cpp \
+	../tests/SkBlend_optsTest.cpp \
+	../tests/SkColor4fTest.cpp \
+	../tests/SkDOMTest.cpp \
+	../tests/SkFixed15Test.cpp \
+	../tests/SkImageTest.cpp \
+	../tests/SkLinearBitmapPipelineTest.cpp \
+	../tests/SkLiteDLTest.cpp \
+	../tests/SkNxTest.cpp \
+	../tests/SkPEGTest.cpp \
+	../tests/SkRasterPipelineTest.cpp \
+	../tests/SkResourceCacheTest.cpp \
+	../tests/SkSLErrorTest.cpp \
+	../tests/SkSLGLSLTest.cpp \
+	../tests/SkSLMemoryLayoutTest.cpp \
+	../tests/SkSharedMutexTest.cpp \
+	../tests/SmallAllocatorTest.cpp \
+	../tests/SortTest.cpp \
+	../tests/SpecialImageTest.cpp \
+	../tests/SpecialSurfaceTest.cpp \
+	../tests/SrcOverTest.cpp \
+	../tests/StreamTest.cpp \
+	../tests/StringTest.cpp \
+	../tests/StrokeTest.cpp \
+	../tests/StrokerTest.cpp \
+	../tests/SurfaceTest.cpp \
+	../tests/SwizzlerTest.cpp \
+	../tests/TArrayTest.cpp \
+	../tests/TDPQueueTest.cpp \
+	../tests/TLSTest.cpp \
+	../tests/TemplatesTest.cpp \
+	../tests/TessellatingPathRendererTests.cpp \
+	../tests/TestConfigParsing.cpp \
+	../tests/TestTest.cpp \
+	../tests/TextBlobCacheTest.cpp \
+	../tests/TextBlobTest.cpp \
+	../tests/TextureCompressionTest.cpp \
+	../tests/Time.cpp \
+	../tests/TopoSortTest.cpp \
+	../tests/TraceMemoryDumpTest.cpp \
+	../tests/TracingTest.cpp \
+	../tests/TypefaceTest.cpp \
+	../tests/UnicodeTest.cpp \
+	../tests/UtilsTest.cpp \
+	../tests/VarAllocTest.cpp \
+	../tests/VkClearTests.cpp \
+	../tests/VkHeapTests.cpp \
+	../tests/VkUploadPixelsTests.cpp \
+	../tests/VkWrapTests.cpp \
+	../tests/WindowRectanglesTest.cpp \
+	../tests/WritePixelsTest.cpp \
+	../tests/Writer32Test.cpp \
+	../tests/YUVCacheTest.cpp \
+	../tests/YUVTest.cpp \
+	../tests/image-bitmap.cpp \
+	../tests/skbug5221.cpp \
+	../gm/OverStroke.cpp \
+	../gm/SkLinearBitmapPipelineGM.cpp \
+	../gm/aaa.cpp \
+	../gm/aaclip.cpp \
+	../gm/aarectmodes.cpp \
+	../gm/aaxfermodes.cpp \
+	../gm/addarc.cpp \
+	../gm/all_bitmap_configs.cpp \
+	../gm/alphagradients.cpp \
+	../gm/animatedGif.cpp \
+	../gm/animatedimageblurs.cpp \
+	../gm/anisotropic.cpp \
+	../gm/annotated_text.cpp \
+	../gm/arcofzorro.cpp \
+	../gm/arcto.cpp \
+	../gm/arithmode.cpp \
+	../gm/badpaint.cpp \
+	../gm/beziereffects.cpp \
+	../gm/beziers.cpp \
+	../gm/bigblurs.cpp \
+	../gm/bigmatrix.cpp \
+	../gm/bigrrectaaeffect.cpp \
+	../gm/bigtext.cpp \
+	../gm/bigtileimagefilter.cpp \
+	../gm/bitmapcopy.cpp \
+	../gm/bitmapfilters.cpp \
+	../gm/bitmapimage.cpp \
+	../gm/bitmappremul.cpp \
+	../gm/bitmaprect.cpp \
+	../gm/bitmaprecttest.cpp \
+	../gm/bitmapshader.cpp \
+	../gm/bleed.cpp \
+	../gm/blend.cpp \
+	../gm/blurcircles.cpp \
+	../gm/blurcircles2.cpp \
+	../gm/blurquickreject.cpp \
+	../gm/blurrect.cpp \
+	../gm/blurredclippedcircle.cpp \
+	../gm/blurroundrect.cpp \
+	../gm/blurs.cpp \
+	../gm/bmpfilterqualityrepeat.cpp \
+	../gm/bug5252.cpp \
+	../gm/bug530095.cpp \
+	../gm/bug615686.cpp \
+	../gm/cgm.c \
+	../gm/cgms.cpp \
+	../gm/circles.cpp \
+	../gm/circulararcs.cpp \
+	../gm/circularclips.cpp \
+	../gm/clip_error.cpp \
+	../gm/clip_strokerect.cpp \
+	../gm/clipdrawdraw.cpp \
+	../gm/clippedbitmapshaders.cpp \
+	../gm/color4f.cpp \
+	../gm/coloremoji.cpp \
+	../gm/colorfilteralpha8.cpp \
+	../gm/colorfilterimagefilter.cpp \
+	../gm/colorfilters.cpp \
+	../gm/colormatrix.cpp \
+	../gm/colorspacexform.cpp \
+	../gm/colortype.cpp \
+	../gm/colortypexfermode.cpp \
+	../gm/colorwheel.cpp \
+	../gm/complexclip.cpp \
+	../gm/complexclip2.cpp \
+	../gm/complexclip3.cpp \
+	../gm/complexclip4.cpp \
+	../gm/complexclip_blur_tiled.cpp \
+	../gm/composeshader.cpp \
+	../gm/concavepaths.cpp \
+	../gm/conicpaths.cpp \
+	../gm/constcolorprocessor.cpp \
+	../gm/convex_all_line_paths.cpp \
+	../gm/convexpaths.cpp \
+	../gm/convexpolyclip.cpp \
+	../gm/convexpolyeffect.cpp \
+	../gm/copyTo4444.cpp \
+	../gm/croppedrects.cpp \
+	../gm/cubicpaths.cpp \
+	../gm/dashcircle.cpp \
+	../gm/dashcubics.cpp \
+	../gm/dashing.cpp \
+	../gm/deferredtextureimage.cpp \
+	../gm/degeneratesegments.cpp \
+	../gm/dftext.cpp \
+	../gm/discard.cpp \
+	../gm/displacement.cpp \
+	../gm/distantclip.cpp \
+	../gm/downsamplebitmap.cpp \
+	../gm/draw_bitmap_rect_skbug4374.cpp \
+	../gm/drawable.cpp \
+	../gm/drawatlas.cpp \
+	../gm/drawatlascolor.cpp \
+	../gm/drawbitmaprect.cpp \
+	../gm/drawfilter.cpp \
+	../gm/drawlooper.cpp \
+	../gm/drawminibitmaprect.cpp \
+	../gm/drawregion.cpp \
+	../gm/drawregionmodes.cpp \
+	../gm/dropshadowimagefilter.cpp \
+	../gm/drrect.cpp \
+	../gm/dstreadshuffle.cpp \
+	../gm/emboss.cpp \
+	../gm/emptypath.cpp \
+	../gm/encode-platform.cpp \
+	../gm/encode.cpp \
+	../gm/extractbitmap.cpp \
+	../gm/fadefilter.cpp \
+	../gm/fatpathfill.cpp \
+	../gm/filltypes.cpp \
+	../gm/filltypespersp.cpp \
+	../gm/filterbitmap.cpp \
+	../gm/filterbug.cpp \
+	../gm/filterfastbounds.cpp \
+	../gm/filterindiabox.cpp \
+	../gm/fontcache.cpp \
+	../gm/fontmgr.cpp \
+	../gm/fontscaler.cpp \
+	../gm/fontscalerdistortable.cpp \
+	../gm/gamma.cpp \
+	../gm/gammacolorfilter.cpp \
+	../gm/gammatext.cpp \
+	../gm/gamut.cpp \
+	../gm/gaussianedge.cpp \
+	../gm/getpostextpath.cpp \
+	../gm/giantbitmap.cpp \
+	../gm/glyph_pos.cpp \
+	../gm/glyph_pos_align.cpp \
+	../gm/gradientDirtyLaundry.cpp \
+	../gm/gradient_matrix.cpp \
+	../gm/gradients.cpp \
+	../gm/gradients_2pt_conical.cpp \
+	../gm/gradients_no_texture.cpp \
+	../gm/gradtext.cpp \
+	../gm/grayscalejpg.cpp \
+	../gm/hairlines.cpp \
+	../gm/hairmodes.cpp \
+	../gm/hardstop_gradients.cpp \
+	../gm/hittestpath.cpp \
+	../gm/image.cpp \
+	../gm/image_pict.cpp \
+	../gm/image_shader.cpp \
+	../gm/imagealphathreshold.cpp \
+	../gm/imageblur.cpp \
+	../gm/imageblur2.cpp \
+	../gm/imageblurtiled.cpp \
+	../gm/imagefilters.cpp \
+	../gm/imagefiltersbase.cpp \
+	../gm/imagefiltersclipped.cpp \
+	../gm/imagefilterscropexpand.cpp \
+	../gm/imagefilterscropped.cpp \
+	../gm/imagefiltersgraph.cpp \
+	../gm/imagefiltersscaled.cpp \
+	../gm/imagefiltersstroked.cpp \
+	../gm/imagefilterstransformed.cpp \
+	../gm/imagefromyuvtextures.cpp \
+	../gm/imagegeneratorexternal.cpp \
+	../gm/imagemagnifier.cpp \
+	../gm/imagemakewithfilter.cpp \
+	../gm/imagemasksubset.cpp \
+	../gm/imageresizetiled.cpp \
+	../gm/imagescalealigned.cpp \
+	../gm/imagesource.cpp \
+	../gm/imagesource2.cpp \
+	../gm/imagetoyuvplanes.cpp \
+	../gm/internal_links.cpp \
+	../gm/inversepaths.cpp \
+	../gm/largeglyphblur.cpp \
+	../gm/lattice.cpp \
+	../gm/lcdblendmodes.cpp \
+	../gm/lcdoverlap.cpp \
+	../gm/lcdtext.cpp \
+	../gm/lighting.cpp \
+	../gm/lightingshader.cpp \
+	../gm/lightingshader2.cpp \
+	../gm/lightingshaderbevel.cpp \
+	../gm/linepaths.cpp \
+	../gm/localmatriximagefilter.cpp \
+	../gm/lumafilter.cpp \
+	../gm/matrixconvolution.cpp \
+	../gm/matriximagefilter.cpp \
+	../gm/megalooper.cpp \
+	../gm/mipmap.cpp \
+	../gm/mixedtextblobs.cpp \
+	../gm/modecolorfilters.cpp \
+	../gm/morphology.cpp \
+	../gm/multipicturedraw.cpp \
+	../gm/nested.cpp \
+	../gm/ninepatchstretch.cpp \
+	../gm/nonclosedpaths.cpp \
+	../gm/occludedrrectblur.cpp \
+	../gm/offsetimagefilter.cpp \
+	../gm/ovals.cpp \
+	../gm/overdrawcolorfilter.cpp \
+	../gm/patch.cpp \
+	../gm/patchgrid.cpp \
+	../gm/path_stroke_with_zero_length.cpp \
+	../gm/pathcontourstart.cpp \
+	../gm/patheffects.cpp \
+	../gm/pathfill.cpp \
+	../gm/pathinterior.cpp \
+	../gm/pathmaskcache.cpp \
+	../gm/pathopsinverse.cpp \
+	../gm/pathopsskpclip.cpp \
+	../gm/pathreverse.cpp \
+	../gm/pdf_never_embed.cpp \
+	../gm/perlinnoise.cpp \
+	../gm/perspshaders.cpp \
+	../gm/picture.cpp \
+	../gm/pictureimagefilter.cpp \
+	../gm/pictureimagegenerator.cpp \
+	../gm/pictureshader.cpp \
+	../gm/pictureshadertile.cpp \
+	../gm/pixelsnap.cpp \
+	../gm/plus.cpp \
+	../gm/points.cpp \
+	../gm/poly2poly.cpp \
+	../gm/polygons.cpp \
+	../gm/quadpaths.cpp \
+	../gm/recordopts.cpp \
+	../gm/rectangletexture.cpp \
+	../gm/rects.cpp \
+	../gm/repeated_bitmap.cpp \
+	../gm/resizeimagefilter.cpp \
+	../gm/reveal.cpp \
+	../gm/roundrects.cpp \
+	../gm/rrect.cpp \
+	../gm/rrectclipdrawpaint.cpp \
+	../gm/rrects.cpp \
+	../gm/samplerstress.cpp \
+	../gm/scaledstrokes.cpp \
+	../gm/shaderbounds.cpp \
+	../gm/shadertext.cpp \
+	../gm/shadertext2.cpp \
+	../gm/shadertext3.cpp \
+	../gm/shadowmaps.cpp \
+	../gm/shadows.cpp \
+	../gm/shallowgradient.cpp \
+	../gm/shapes.cpp \
+	../gm/showmiplevels.cpp \
+	../gm/simpleaaclip.cpp \
+	../gm/simplerect.cpp \
+	../gm/skbug1719.cpp \
+	../gm/skbug_257.cpp \
+	../gm/skbug_4868.cpp \
+	../gm/skbug_5321.cpp \
+	../gm/smallarc.cpp \
+	../gm/smallimage.cpp \
+	../gm/smallpaths.cpp \
+	../gm/spritebitmap.cpp \
+	../gm/srcmode.cpp \
+	../gm/stlouisarch.cpp \
+	../gm/stringart.cpp \
+	../gm/stroke_rect_shader.cpp \
+	../gm/strokedlines.cpp \
+	../gm/strokefill.cpp \
+	../gm/strokerect.cpp \
+	../gm/strokerects.cpp \
+	../gm/strokes.cpp \
+	../gm/stroketext.cpp \
+	../gm/subsetshader.cpp \
+	../gm/surface.cpp \
+	../gm/tablecolorfilter.cpp \
+	../gm/tallstretchedbitmaps.cpp \
+	../gm/texdata.cpp \
+	../gm/textblob.cpp \
+	../gm/textblobblockreordering.cpp \
+	../gm/textblobcolortrans.cpp \
+	../gm/textblobgeometrychange.cpp \
+	../gm/textbloblooper.cpp \
+	../gm/textblobmixedsizes.cpp \
+	../gm/textblobrandomfont.cpp \
+	../gm/textblobshader.cpp \
+	../gm/textblobtransforms.cpp \
+	../gm/textblobuseaftergpufree.cpp \
+	../gm/texteffects.cpp \
+	../gm/texturedomaineffect.cpp \
+	../gm/thinrects.cpp \
+	../gm/thinstrokedrects.cpp \
+	../gm/tiledscaledbitmap.cpp \
+	../gm/tileimagefilter.cpp \
+	../gm/tilemodes.cpp \
+	../gm/tilemodes_scaled.cpp \
+	../gm/tinybitmap.cpp \
+	../gm/transparency.cpp \
+	../gm/typeface.cpp \
+	../gm/variedtext.cpp \
+	../gm/vertices.cpp \
+	../gm/verttext.cpp \
+	../gm/verttext2.cpp \
+	../gm/verylargebitmap.cpp \
+	../gm/windowrectangles.cpp \
+	../gm/xfermodeimagefilter.cpp \
+	../gm/xfermodes.cpp \
+	../gm/xfermodes2.cpp \
+	../gm/xfermodes3.cpp \
+	../gm/yuvtorgbeffect.cpp \
+	../tools/AndroidSkDebugToStdOut.cpp \
+	../tools/flags/SkCommandLineFlags.cpp \
+	../src/svg/SkSVGCanvas.cpp \
+	../src/svg/SkSVGDevice.cpp \
+	../experimental/svg/model/SkSVGAttribute.cpp \
+	../experimental/svg/model/SkSVGAttributeParser.cpp \
+	../experimental/svg/model/SkSVGCircle.cpp \
+	../experimental/svg/model/SkSVGClipPath.cpp \
+	../experimental/svg/model/SkSVGContainer.cpp \
+	../experimental/svg/model/SkSVGDOM.cpp \
+	../experimental/svg/model/SkSVGEllipse.cpp \
+	../experimental/svg/model/SkSVGLine.cpp \
+	../experimental/svg/model/SkSVGLinearGradient.cpp \
+	../experimental/svg/model/SkSVGNode.cpp \
+	../experimental/svg/model/SkSVGPath.cpp \
+	../experimental/svg/model/SkSVGPoly.cpp \
+	../experimental/svg/model/SkSVGRect.cpp \
+	../experimental/svg/model/SkSVGRenderContext.cpp \
+	../experimental/svg/model/SkSVGShape.cpp \
+	../experimental/svg/model/SkSVGStop.cpp \
+	../experimental/svg/model/SkSVGSVG.cpp \
+	../experimental/svg/model/SkSVGTransformableNode.cpp \
+	../experimental/svg/model/SkSVGValue.cpp \
+	../tools/CrashHandler.cpp \
+	../tools/picture_utils.cpp \
+	../tools/ProcStats.cpp \
+	../tools/sk_tool_utils.cpp \
+	../tools/sk_tool_utils_font.cpp \
+	../tools/random_parse_path.cpp \
+	../tools/UrlDataManager.cpp \
+	../tools/timer/Timer.cpp \
+	../src/xml/SkDOM.cpp \
+	../src/xml/SkXMLParser.cpp \
+	../src/xml/SkXMLWriter.cpp \
+	../src/xps/SkDocument_XPS_None.cpp \
+	../tools/Resources.cpp \
+	../experimental/SkSetPoly3To3.cpp \
+	../experimental/SkSetPoly3To3_A.cpp \
+	../experimental/SkSetPoly3To3_D.cpp \
+	../tools/flags/SkCommonFlags.cpp \
+	../tools/flags/SkCommonFlagsConfig.cpp \
+	../tools/android/SkAndroidSDKCanvas.cpp \
+	../tools/gpu/GrContextFactory.cpp \
+	../tools/gpu/GrTest.cpp \
+	../tools/gpu/TestContext.cpp \
+	../tools/gpu/gl/GLTestContext.cpp \
+	../tools/gpu/gl/command_buffer/GLTestContext_command_buffer.cpp \
+	../tools/gpu/gl/debug/DebugGLTestContext.cpp \
+	../tools/gpu/gl/debug/GrBufferObj.cpp \
+	../tools/gpu/gl/debug/GrFrameBufferObj.cpp \
+	../tools/gpu/gl/debug/GrProgramObj.cpp \
+	../tools/gpu/gl/debug/GrShaderObj.cpp \
+	../tools/gpu/gl/debug/GrTextureObj.cpp \
+	../tools/gpu/gl/debug/GrTextureUnitObj.cpp \
+	../tools/gpu/gl/null/NullGLTestContext.cpp \
+	../tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp \
+	../tools/gpu/vk/VkTestContext.cpp
+
+LOCAL_SHARED_LIBRARIES := \
+	liblog \
+	libpng \
+	libz \
+	libGLESv2 \
+	libEGL \
+	libvulkan \
+	libexpat
+
+LOCAL_STATIC_LIBRARIES := \
+	libskia \
+	libjsoncpp
+
+LOCAL_C_INCLUDES := \
+	$(LOCAL_PATH)/../src/sksl \
+	$(LOCAL_PATH)/../include/c \
+	$(LOCAL_PATH)/../include/config \
+	$(LOCAL_PATH)/../include/core \
+	$(LOCAL_PATH)/../include/pathops \
+	$(LOCAL_PATH)/../include/codec \
+	$(LOCAL_PATH)/../include/android \
+	$(LOCAL_PATH)/../include/effects \
+	$(LOCAL_PATH)/../include/client/android \
+	$(LOCAL_PATH)/../include/images \
+	$(LOCAL_PATH)/../include/ports \
+	$(LOCAL_PATH)/../src/sfnt \
+	$(LOCAL_PATH)/../include/utils \
+	$(LOCAL_PATH)/../src/utils \
+	$(LOCAL_PATH)/../include/gpu \
+	frameworks/native/vulkan/include \
+	$(LOCAL_PATH)/../tools/viewer/sk_app \
+	$(LOCAL_PATH)/../tools/viewer/sk_app/android \
+	$(LOCAL_PATH)/../include/private \
+	$(LOCAL_PATH)/../src/core \
+	$(LOCAL_PATH)/../tools/gpu \
+	$(LOCAL_PATH)/../include/svg \
+	$(LOCAL_PATH)/../include/xml \
+	$(LOCAL_PATH)/../experimental/svg/model \
+	$(LOCAL_PATH)/../src/fonts \
+	$(LOCAL_PATH)/../tools \
+	$(LOCAL_PATH)/../tools/flags \
+	$(LOCAL_PATH)/../src/gpu \
+	external/expat/lib \
+	$(LOCAL_PATH)/../gm \
+	$(LOCAL_PATH)/../src/effects \
+	$(LOCAL_PATH)/../src/images \
+	$(LOCAL_PATH)/../src/lazy \
+	$(LOCAL_PATH)/../tools/debugger \
+	$(LOCAL_PATH)/../tests \
+	$(LOCAL_PATH)/../src/effects/gradients \
+	$(LOCAL_PATH)/../src/pathops \
+	$(LOCAL_PATH)/../src/pipe/utils \
+	$(LOCAL_PATH)/../src/codec \
+	$(LOCAL_PATH)/../src/image \
+	$(LOCAL_PATH)/../src/pdf \
+	$(LOCAL_PATH)/../src/ports \
+	$(LOCAL_PATH)/../third_party/etc1 \
+	external/libpng \
+	$(LOCAL_PATH)/../tools/timer \
+	$(LOCAL_PATH)/../experimental \
+	external/zlib \
+	$(LOCAL_PATH)/../tools/android
+
+LOCAL_CFLAGS += \
+	-DSK_CRASH_HANDLER
+
+LOCAL_MODULE_TAGS := \
+	tests
+
+LOCAL_MODULE := \
+	skia_dm
+
+
+ifneq ($(TARGET_BUILD_PDK),true)
+
+# Store skia's resources in the directory structure that the Android testing
+# infrastructure expects.  This requires that Skia maintain a symlinked
+# subdirectory in the DATA folder that points to the top level skia resources...
+#  i.e. external/skia/DATA/skia_resources --> ../resources
+LOCAL_PICKUP_FILES := $(LOCAL_PATH)/../DATA
+include $(LOCAL_PATH)/../skia_static_deps.mk
+include $(BUILD_NATIVE_TEST)
+
+endif
diff --git a/gm/DATA/skia_resources b/gm/DATA/skia_resources
new file mode 120000
index 0000000..81bd1c5
--- /dev/null
+++ b/gm/DATA/skia_resources
@@ -0,0 +1 @@
+../../resources/
\ No newline at end of file
diff --git a/include/config/SkUserConfig.h b/include/config/SkUserConfig.h
index 0729447..c397f31 100644
--- a/include/config/SkUserConfig.h
+++ b/include/config/SkUserConfig.h
@@ -1,142 +1,35 @@
-
-/*
- * Copyright 2006 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-
+// This file is autogenerated by gn_to_bp.py.
 #ifndef SkUserConfig_DEFINED
 #define SkUserConfig_DEFINED
-
-/*  SkTypes.h, the root of the public header files, does the following trick:
-
-    #include "SkPreConfig.h"
-    #include "SkUserConfig.h"
-    #include "SkPostConfig.h"
-
-    SkPreConfig.h runs first, and it is responsible for initializing certain
-    skia defines.
-
-    SkPostConfig.h runs last, and its job is to just check that the final
-    defines are consistent (i.e. that we don't have mutually conflicting
-    defines).
-
-    SkUserConfig.h (this file) runs in the middle. It gets to change or augment
-    the list of flags initially set in preconfig, and then postconfig checks
-    that everything still makes sense.
-
-    Below are optional defines that add, subtract, or change default behavior
-    in Skia. Your port can locally edit this file to enable/disable flags as
-    you choose, or these can be delared on your command line (i.e. -Dfoo).
-
-    By default, this include file will always default to having all of the flags
-    commented out, so including it will have no effect.
-*/
-
-///////////////////////////////////////////////////////////////////////////////
-
-/*  Skia has lots of debug-only code. Often this is just null checks or other
-    parameter checking, but sometimes it can be quite intrusive (e.g. check that
-    each 32bit pixel is in premultiplied form). This code can be very useful
-    during development, but will slow things down in a shipping product.
-
-    By default, these mutually exclusive flags are defined in SkPreConfig.h,
-    based on the presence or absence of NDEBUG, but that decision can be changed
-    here.
- */
-//#define SK_DEBUG
-//#define SK_RELEASE
-
-/*  Skia has certain debug-only code that is extremely intensive even for debug
-    builds.  This code is useful for diagnosing specific issues, but is not
-    generally applicable, therefore it must be explicitly enabled to avoid
-    the performance impact. By default these flags are undefined, but can be
-    enabled by uncommenting them below.
- */
-//#define SK_DEBUG_GLYPH_CACHE
-//#define SK_DEBUG_PATH
-
-/*  preconfig will have attempted to determine the endianness of the system,
-    but you can change these mutually exclusive flags here.
- */
-//#define SK_CPU_BENDIAN
-//#define SK_CPU_LENDIAN
-
-/*  Most compilers use the same bit endianness for bit flags in a byte as the
-    system byte endianness, and this is the default. If for some reason this
-    needs to be overridden, specify which of the mutually exclusive flags to
-    use. For example, some atom processors in certain configurations have big
-    endian byte order but little endian bit orders.
-*/
-//#define SK_UINT8_BITFIELD_BENDIAN
-//#define SK_UINT8_BITFIELD_LENDIAN
-
-
-/*  To write debug messages to a console, skia will call SkDebugf(...) following
-    printf conventions (e.g. const char* format, ...). If you want to redirect
-    this to something other than printf, define yours here
- */
-//#define SkDebugf(...)  MyFunction(__VA_ARGS__)
-
-/*
- *  To specify a different default font cache limit, define this. If this is
- *  undefined, skia will use a built-in value.
- */
-//#define SK_DEFAULT_FONT_CACHE_LIMIT   (1024 * 1024)
-
-/*
- *  To specify the default size of the image cache, undefine this and set it to
- *  the desired value (in bytes). SkGraphics.h as a runtime API to set this
- *  value as well. If this is undefined, a built-in value will be used.
- */
-//#define SK_DEFAULT_IMAGE_CACHE_LIMIT (1024 * 1024)
-
-/*  Define this to provide font subsetter in PDF generation.
- */
-//#define SK_SFNTLY_SUBSETTER "sample/chromium/font_subsetter.h"
-
-/*  Define this to set the upper limit for text to support LCD. Values that
-    are very large increase the cost in the font cache and draw slower, without
-    improving readability. If this is undefined, Skia will use its default
-    value (e.g. 48)
- */
-//#define SK_MAX_SIZE_FOR_LCDTEXT     48
-
-/*  If SK_DEBUG is defined, then you can optionally define SK_SUPPORT_UNITTEST
-    which will run additional self-tests at startup. These can take a long time,
-    so this flag is optional.
- */
-#ifdef SK_DEBUG
-//#define SK_SUPPORT_UNITTEST
-#endif
-
-/*  Change the ordering to work in X windows.
- */
-#ifdef SK_SAMPLES_FOR_X
-        #define SK_R32_SHIFT    16
-        #define SK_G32_SHIFT    8
-        #define SK_B32_SHIFT    0
-        #define SK_A32_SHIFT    24
-#endif
-
-
-/* Determines whether to build code that supports the GPU backend. Some classes
-   that are not GPU-specific, such as SkShader subclasses, have optional code
-   that is used allows them to interact with the GPU backend. If you'd like to
-   omit this code set SK_SUPPORT_GPU to 0. This also allows you to omit the gpu
-   directories from your include search path when you're not building the GPU
-   backend. Defaults to 1 (build the GPU code).
- */
-//#define SK_SUPPORT_GPU 1
-
-/* Skia makes use of histogram logging macros to trace the frequency of
- * events. By default, Skia provides no-op versions of these macros.
- * Skia consumers can provide their own definitions of these macros to
- * integrate with their histogram collection backend.
- */
-//#define SK_HISTOGRAM_BOOLEAN(name, value)
-//#define SK_HISTOGRAM_ENUMERATION(name, value, boundary_value)
-
-#endif
+  #define GR_GL_CUSTOM_SETUP_HEADER "gl/GrGLConfig_chrome.h"
+  #define SKIA_DLL
+  #define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 0
+  #define SK_BUILD_FOR_ANDROID_FRAMEWORK
+  #define SK_CODEC_DECODES_RAW
+  #define SK_DEFAULT_FONT_CACHE_LIMIT   (768 * 1024)
+  #define SK_DEFAULT_GLOBAL_DISCARDABLE_MEMORY_POOL_SIZE (512 * 1024)
+  #define SK_ENABLE_DISCRETE_GPU
+  #define SK_GAMMA_APPLY_TO_A8
+  #define SK_GAMMA_CONTRAST 0.0
+  #define SK_GAMMA_EXPONENT 1.4
+  #define SK_HAS_JPEG_LIBRARY
+  #define SK_HAS_PNG_LIBRARY
+  #define SK_HAS_WEBP_LIBRARY
+  #define SK_IGNORE_ETC1_SUPPORT
+  #define SK_IGNORE_GPU_DITHER
+  #define SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS
+  #define SK_INTERNAL
+  #define SK_PDF_USE_SFNTLY
+  #define SK_SUPPORT_EXOTIC_CLIPOPS
+  #define SK_SUPPORT_LEGACY_BITMAP_SETPIXELREF
+  #define SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
+  #define SK_SUPPORT_LEGACY_DRAWFILTER
+  #define SK_SUPPORT_LEGACY_EMBOSSMASKFILTER
+  #define SK_SUPPORT_LEGACY_GRADIENT_DITHERING
+  #define SK_SUPPORT_LEGACY_SHADER_ISABITMAP
+  #define SK_SUPPORT_LEGACY_UNBALANCED_PIXELREF_LOCKCOUNT
+  #define SK_SUPPORT_PDF
+  #define SK_USE_FREETYPE_EMBOLDEN
+  #define SK_VULKAN
+  #define SK_XML
+#endif//SkUserConfig_DEFINED
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h
index aca6c2b..04670e8 100644
--- a/include/core/SkRefCnt.h
+++ b/include/core/SkRefCnt.h
@@ -137,6 +137,28 @@
     null in on each side of the assignment, and ensuring that ref() is called
     before unref(), in case the two pointers point to the same object.
  */
+
+#if defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) || defined(SK_DEBUG)
+// This version heuristically detects data races, since those otherwise result
+// in redundant reference count decrements, which are exceedingly
+// difficult to debug.
+
+#define SkRefCnt_SafeAssign(dst, src)   \
+    do {                                \
+        typedef typename std::remove_reference<decltype(dst)>::type \
+                SkRefCntPtrT;  \
+        SkRefCntPtrT old_dst = *const_cast<SkRefCntPtrT volatile *>(&dst); \
+        if (src) src->ref();            \
+        if (old_dst) old_dst->unref();          \
+        if (old_dst != *const_cast<SkRefCntPtrT volatile *>(&dst)) { \
+            SkDebugf("Detected racing Skia calls at %s:%d\n", \
+                    __FILE__, __LINE__); \
+        } \
+        dst = src;                      \
+    } while (0)
+
+#else /* !(SK_BUILD_FOR_ANDROID_FRAMEWORK || SK_DEBUG) */
+
 #define SkRefCnt_SafeAssign(dst, src)   \
     do {                                \
         if (src) src->ref();            \
@@ -144,6 +166,8 @@
         dst = src;                      \
     } while (0)
 
+#endif
+
 
 /** Call obj->ref() and return obj. The obj must not be nullptr.
  */
diff --git a/skia_static_deps.mk b/skia_static_deps.mk
new file mode 100644
index 0000000..9bf3d25
--- /dev/null
+++ b/skia_static_deps.mk
@@ -0,0 +1,40 @@
+
+###############################################################################
+#
+# THIS FILE IS AUTOGENERATED BY GYP_TO_ANDROID.PY. DO NOT EDIT.
+#
+# For bugs, please contact scroggo@google.com or djsollen@google.com
+#
+###############################################################################
+
+
+###############################################################################
+# 
+# This file contains the shared and static dependencies needed by any target 
+# that attempts to statically link Skia (i.e. libskia_static build target).
+#
+# This is a workaround for the fact that the build system does not add these
+# transitive dependencies when it attempts to link libskia_static into another
+# library.
+#
+###############################################################################
+LOCAL_SHARED_LIBRARIES += \
+	liblog \
+	libGLESv2 \
+	libEGL \
+	libvulkan \
+	libz \
+	libjpeg \
+	libpng \
+	libicuuc \
+	libicui18n \
+	libexpat \
+	libft2 \
+	libdng_sdk \
+	libpiex
+
+LOCAL_STATIC_LIBRARIES += \
+	libwebp-decode \
+	libwebp-encode \
+	libsfntly
+