|  | # Copyright 2016 Google Inc. | 
|  | # | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | declare_args() { | 
|  | } | 
|  |  | 
|  | skia_public_includes = [ | 
|  | "include/android", | 
|  | "include/c", | 
|  | "include/codec", | 
|  | "include/config", | 
|  | "include/core", | 
|  | "include/effects", | 
|  | "include/gpu", | 
|  | "include/gpu/gl", | 
|  | "include/images", | 
|  | "include/pathops", | 
|  | "include/ports", | 
|  | "include/svg", | 
|  | "include/utils", | 
|  | "include/utils/mac", | 
|  | "include/xml", | 
|  | ] | 
|  |  | 
|  | # Skia public API, generally provided by :skia. | 
|  | config("skia_public") { | 
|  | include_dirs = skia_public_includes | 
|  | defines = [ "SKIA_DLL" ] | 
|  | } | 
|  |  | 
|  | # Skia internal APIs, used by Skia itself and a few test tools. | 
|  | config("skia_private") { | 
|  | visibility = [ ":*" ] | 
|  |  | 
|  | include_dirs = [ | 
|  | "include/private", | 
|  | "src/c", | 
|  | "src/codec", | 
|  | "src/config", | 
|  | "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/utils", | 
|  | "src/utils/win", | 
|  | "third_party/etc1", | 
|  | "third_party/ktx", | 
|  | ] | 
|  |  | 
|  | defines = [ | 
|  | "SK_GAMMA_APPLY_TO_A8", | 
|  |  | 
|  | "SK_HAS_GIF_LIBRARY", | 
|  | "SK_HAS_JPEG_LIBRARY", | 
|  | "SK_HAS_PNG_LIBRARY", | 
|  | "SK_HAS_WEBP_LIBRARY", | 
|  |  | 
|  | # TODO(halcanary): make this the default; this is the value Android uses. | 
|  | "SK_SFNTLY_SUBSETTER=\"sample/chromium/font_subsetter.h\"", | 
|  |  | 
|  | "TURBO_HAS_565", | 
|  | "TURBO_HAS_CROP", | 
|  | "TURBO_HAS_SKIP", | 
|  | ] | 
|  | if (is_linux) { | 
|  | defines += [ "SK_SAMPLES_FOR_X" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # Any code that's linked into Skia-the-library should use this config via += skia_library_configs. | 
|  | config("skia_library") { | 
|  | visibility = [ ":*" ] | 
|  | defines = [ "SKIA_IMPLEMENTATION=1" ] | 
|  | } | 
|  |  | 
|  | skia_library_configs = [ | 
|  | ":skia_public", | 
|  | ":skia_private", | 
|  | ":skia_library", | 
|  | ] | 
|  |  | 
|  | core_gypi = exec_script("gn/gypi_to_gn.py", | 
|  | [ | 
|  | rebase_path("gyp/core.gypi"), | 
|  | "--replace=<(skia_include_path)=include", | 
|  | "--replace=<(skia_src_path)=src", | 
|  | ], | 
|  | "scope", | 
|  | [ "gyp/core.gypi" ]) | 
|  |  | 
|  | effects_gypi = exec_script("gn/gypi_to_gn.py", | 
|  | [ | 
|  | rebase_path("gyp/effects.gypi"), | 
|  | "--replace=<(skia_include_path)=include", | 
|  | "--replace=<(skia_src_path)=src", | 
|  | ], | 
|  | "scope", | 
|  | [ "gyp/effects.gypi" ]) | 
|  |  | 
|  | gpu_gypi = exec_script("gn/gypi_to_gn.py", | 
|  | [ | 
|  | rebase_path("gyp/gpu.gypi"), | 
|  | "--replace=<(skia_include_path)=include", | 
|  | "--replace=<(skia_src_path)=src", | 
|  | ], | 
|  | "scope", | 
|  | [ "gyp/gpu.gypi" ]) | 
|  |  | 
|  | opts_gypi = exec_script("gn/gypi_to_gn.py", | 
|  | [ | 
|  | rebase_path("gyp/opts.gypi"), | 
|  | "--replace=<(skia_include_path)=include", | 
|  | "--replace=<(skia_src_path)=src", | 
|  | ], | 
|  | "scope", | 
|  | [ "gyp/opts.gypi" ]) | 
|  |  | 
|  | pdf_gypi = exec_script("gn/gypi_to_gn.py", | 
|  | [ | 
|  | rebase_path("gyp/pdf.gypi"), | 
|  | "--replace=<(skia_include_path)=include", | 
|  | "--replace=<(skia_src_path)=src", | 
|  | ], | 
|  | "scope", | 
|  | [ "gyp/pdf.gypi" ]) | 
|  |  | 
|  | utils_gypi = exec_script("gn/gypi_to_gn.py", | 
|  | [ | 
|  | rebase_path("gyp/utils.gypi"), | 
|  | "--replace=<(skia_include_path)=include", | 
|  | "--replace=<(skia_src_path)=src", | 
|  | ], | 
|  | "scope", | 
|  | [ "gyp/utils.gypi" ]) | 
|  |  | 
|  | source_set("opts_ssse3") { | 
|  | configs += skia_library_configs | 
|  |  | 
|  | sources = opts_gypi.ssse3_sources | 
|  | cflags = [ "-mssse3" ] | 
|  | } | 
|  |  | 
|  | source_set("opts_sse41") { | 
|  | configs += skia_library_configs | 
|  |  | 
|  | sources = opts_gypi.sse41_sources | 
|  | cflags = [ "-msse4.1" ] | 
|  | } | 
|  |  | 
|  | source_set("opts_sse42") { | 
|  | configs += skia_library_configs | 
|  |  | 
|  | sources = opts_gypi.sse42_sources | 
|  | cflags = [ "-msse4.2" ] | 
|  | } | 
|  |  | 
|  | source_set("opts_avx") { | 
|  | configs += skia_library_configs | 
|  |  | 
|  | sources = opts_gypi.avx_sources | 
|  | cflags = [ "-mavx" ] | 
|  | } | 
|  |  | 
|  | component("skia") { | 
|  | public_configs = [ ":skia_public" ] | 
|  | configs += skia_library_configs | 
|  |  | 
|  | deps = [ | 
|  | ":opts_avx", | 
|  | ":opts_sse41", | 
|  | ":opts_sse42", | 
|  | ":opts_ssse3", | 
|  | "//third_party/expat", | 
|  | "//third_party/giflib", | 
|  | "//third_party/libjpeg_turbo", | 
|  | "//third_party/libpng", | 
|  | "//third_party/libwebp", | 
|  | "//third_party/sfntly", | 
|  | "//third_party/zlib", | 
|  | ] | 
|  |  | 
|  | if (!is_win) { | 
|  | libs = [ "pthread" ] | 
|  | } | 
|  |  | 
|  | sources = [] | 
|  | sources += core_gypi.sources | 
|  | sources += effects_gypi.sources | 
|  | sources += gpu_gypi.skgpu_sources | 
|  | sources += opts_gypi.sse2_sources | 
|  | sources += pdf_gypi.sources | 
|  | sources += utils_gypi.sources | 
|  | sources += [ | 
|  | "src/android/SkBitmapRegionCodec.cpp", | 
|  | "src/android/SkBitmapRegionDecoder.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/SkSampledCodec.cpp", | 
|  | "src/codec/SkSampler.cpp", | 
|  | "src/codec/SkSwizzler.cpp", | 
|  | "src/codec/SkWbmpCodec.cpp", | 
|  | "src/codec/SkWebpAdapterCodec.cpp", | 
|  | "src/codec/SkWebpCodec.cpp", | 
|  | "src/images/SkImageEncoder.cpp", | 
|  | "src/images/SkImageEncoder_Factory.cpp", | 
|  | "src/images/SkJPEGImageEncoder.cpp", | 
|  | "src/images/SkJPEGWriteUtility.cpp", | 
|  | "src/images/SkKTXImageEncoder.cpp", | 
|  | "src/images/SkPNGImageEncoder.cpp", | 
|  | "src/images/SkWEBPImageEncoder.cpp", | 
|  | "src/ports/SkDiscardableMemory_none.cpp", | 
|  | "src/ports/SkGlobalInitialization_default.cpp", | 
|  | "src/ports/SkImageGenerator_skia.cpp", | 
|  | "src/ports/SkMemory_malloc.cpp", | 
|  | "src/ports/SkOSFile_stdio.cpp", | 
|  | "src/sfnt/SkOTTable_name.cpp", | 
|  | "src/sfnt/SkOTUtils.cpp", | 
|  | "src/svg/SkSVGCanvas.cpp", | 
|  | "src/svg/SkSVGDevice.cpp", | 
|  | "src/utils/mac/SkStream_mac.cpp", | 
|  | "src/xml/SkDOM.cpp", | 
|  | "src/xml/SkXMLParser.cpp", | 
|  | "src/xml/SkXMLWriter.cpp", | 
|  | "third_party/etc1/etc1.cpp", | 
|  | "third_party/ktx/ktx.cpp", | 
|  | ] | 
|  |  | 
|  | if (is_win) { | 
|  | sources += [ | 
|  | "src/ports/SkDebug_win.cpp", | 
|  | "src/ports/SkFontHost_win.cpp", | 
|  | "src/ports/SkFontMgr_win_dw.cpp", | 
|  | "src/ports/SkFontMgr_win_dw_factory.cpp", | 
|  | "src/ports/SkImageEncoder_WIC.cpp", | 
|  | "src/ports/SkImageGeneratorWIC.cpp", | 
|  | "src/ports/SkOSFile_win.cpp", | 
|  | "src/ports/SkScalerContext_win_dw.cpp", | 
|  | "src/ports/SkTLS_win.cpp", | 
|  | "src/ports/SkTypeface_win_dw.cpp", | 
|  | "src/xps/SkDocument_XPS.cpp", | 
|  | ] | 
|  | sources -= [ "src/utils/SkThreadUtils_pthread.cpp" ] | 
|  | } else { | 
|  | sources += [ | 
|  | "src/ports/SkDebug_stdio.cpp", | 
|  | "src/ports/SkOSFile_posix.cpp", | 
|  | "src/ports/SkTLS_pthread.cpp", | 
|  | "src/xps/SkDocument_XPS_None.cpp", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (is_linux) { | 
|  | deps += [ | 
|  | "third_party:fontconfig", | 
|  | "third_party:freetype2", | 
|  | ] | 
|  | sources += [ | 
|  | "src/ports/SkFontConfigInterface_direct.cpp", | 
|  | "src/ports/SkFontConfigInterface_direct_factory.cpp", | 
|  | "src/ports/SkFontHost_FreeType.cpp", | 
|  | "src/ports/SkFontHost_FreeType_common.cpp", | 
|  | "src/ports/SkFontMgr_FontConfigInterface.cpp", | 
|  | "src/ports/SkFontMgr_fontconfig.cpp", | 
|  | "src/ports/SkFontMgr_fontconfig_factory.cpp", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (is_mac) { | 
|  | sources += [ | 
|  | "src/ports/SkFontHost_mac.cpp", | 
|  | "src/ports/SkImageEncoder_CG.cpp", | 
|  | "src/ports/SkImageGeneratorCG.cpp", | 
|  | ] | 
|  | libs += [ "ApplicationServices.framework" ] | 
|  | } | 
|  |  | 
|  | if (is_fuchsia) { | 
|  | sources += [ "src/ports/SkFontMgr_empty_factory.cpp" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | skia_h_headers = exec_script("gyp/find.py", | 
|  | [ "*.h" ] + rebase_path(skia_public_includes), | 
|  | "list lines", | 
|  | []) - | 
|  | [ | 
|  | rebase_path("include/gpu/gl/GrGLConfig_chrome.h"), | 
|  | rebase_path("include/gpu/vk/GrVkBackendContext.h"), | 
|  | rebase_path("include/gpu/vk/GrVkDefines.h"), | 
|  | rebase_path("include/gpu/vk/GrVkInterface.h"), | 
|  | rebase_path("include/gpu/vk/GrVkTypes.h"), | 
|  | rebase_path("include/ports/SkFontMgr_fontconfig.h"), | 
|  | ] | 
|  |  | 
|  | action("skia.h") { | 
|  | script = "gn/echo_headers.py" | 
|  | args = [ rebase_path("$target_gen_dir/skia.h", root_build_dir) ] + | 
|  | rebase_path(skia_h_headers, root_build_dir) | 
|  | outputs = [ | 
|  | "$target_gen_dir/skia.h", | 
|  | ] | 
|  | } | 
|  |  | 
|  | executable("fiddle") { | 
|  | include_dirs = [ "$target_gen_dir" ] | 
|  | libs = [] | 
|  | if (is_linux) { | 
|  | libs += [ "OSMesa" ] | 
|  | } | 
|  |  | 
|  | sources = [ | 
|  | "tools/fiddle/draw.cpp", | 
|  | "tools/fiddle/fiddle_main.cpp", | 
|  | ] | 
|  | deps = [ | 
|  | ":skia", | 
|  | ":skia.h", | 
|  | ":tool_utils", | 
|  | ] | 
|  | testonly = true | 
|  | } | 
|  |  | 
|  | template("test_lib") { | 
|  | config(target_name + "_config") { | 
|  | include_dirs = invoker.public_include_dirs | 
|  | } | 
|  | source_set(target_name) { | 
|  | forward_variables_from(invoker, "*", [ "public_include_dirs" ]) | 
|  | public_configs = [ | 
|  | ":" + target_name + "_config", | 
|  | ":skia_private", | 
|  | ] | 
|  |  | 
|  | if (!defined(deps)) { | 
|  | deps = [] | 
|  | } | 
|  | deps += [ ":skia" ] | 
|  | testonly = true | 
|  | } | 
|  | } | 
|  |  | 
|  | test_lib("gpu_tool_utils") { | 
|  | public_include_dirs = [ "tools/gpu" ] | 
|  | sources = [ | 
|  | "tools/gpu/GrContextFactory.cpp", | 
|  | "tools/gpu/GrTest.cpp", | 
|  | "tools/gpu/TestContext.cpp", | 
|  | "tools/gpu/gl/GLTestContext.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", | 
|  | ] | 
|  | libs = [] | 
|  |  | 
|  | if (is_linux) { | 
|  | sources += [ | 
|  | "src/gpu/gl/glx/GrGLCreateNativeInterface_glx.cpp", | 
|  | "tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp", | 
|  | ] | 
|  | libs += [ | 
|  | "GL", | 
|  | "GLU", | 
|  | "X11", | 
|  | ] | 
|  | } else if (is_mac) { | 
|  | sources += [ | 
|  | "src/gpu/gl/mac/GrGLCreateNativeInterface_mac.cpp", | 
|  | "tools/gpu/gl/mac/CreatePlatformGLTestContext_mac.cpp", | 
|  | ] | 
|  | libs += [ "OpenGL.framework" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | test_lib("flags") { | 
|  | public_include_dirs = [ "tools/flags" ] | 
|  | sources = [ | 
|  | "tools/flags/SkCommandLineFlags.cpp", | 
|  | "tools/flags/SkCommonFlags.cpp", | 
|  | "tools/flags/SkCommonFlagsConfig.cpp", | 
|  | ] | 
|  | deps = [ | 
|  | ":gpu_tool_utils", | 
|  | ] | 
|  | } | 
|  |  | 
|  | test_lib("tool_utils") { | 
|  | public_include_dirs = [ | 
|  | "tools", | 
|  | "tools/debugger", | 
|  | "tools/timer", | 
|  | ] | 
|  | sources = [ | 
|  | "src/images/SkForceLinking.cpp", | 
|  | "src/utils/SkMultiPictureDocumentReader.cpp",  # TODO(halcanary): move to tools? | 
|  | "tools/CrashHandler.cpp", | 
|  | "tools/ProcStats.cpp", | 
|  | "tools/Resources.cpp", | 
|  | "tools/ThermalManager.cpp", | 
|  | "tools/UrlDataManager.cpp", | 
|  | "tools/debugger/SkDebugCanvas.cpp", | 
|  | "tools/debugger/SkDrawCommand.cpp", | 
|  | "tools/debugger/SkJsonWriteBuffer.cpp", | 
|  | "tools/debugger/SkObjectParser.cpp", | 
|  | "tools/debugger/SkOverdrawMode.cpp", | 
|  | "tools/picture_utils.cpp", | 
|  | "tools/random_parse_path.cpp", | 
|  | "tools/sk_tool_utils.cpp", | 
|  | "tools/sk_tool_utils_font.cpp", | 
|  | "tools/timer/Timer.cpp", | 
|  | ] | 
|  | deps = [ | 
|  | ":flags", | 
|  | "//third_party/libpng", | 
|  | ] | 
|  | public_deps = [ | 
|  | "//third_party/jsoncpp", | 
|  | ] | 
|  | } | 
|  |  | 
|  | gm_sources = exec_script("gyp/find.py", | 
|  | [ | 
|  | "*.c*", | 
|  | rebase_path("gm"), | 
|  | ], | 
|  | "list lines", | 
|  | []) | 
|  | test_lib("gm") { | 
|  | public_include_dirs = [ "gm" ] | 
|  | sources = gm_sources | 
|  | deps = [ | 
|  | ":gpu_tool_utils", | 
|  | ":skia", | 
|  | ":tool_utils", | 
|  | ] | 
|  | } | 
|  |  | 
|  | tests_sources = exec_script("gyp/find.py", | 
|  | [ | 
|  | "*.c*", | 
|  | rebase_path("tests"), | 
|  | ], | 
|  | "list lines", | 
|  | []) | 
|  |  | 
|  | test_lib("tests") { | 
|  | public_include_dirs = [ "tests" ] | 
|  | sources = tests_sources - [ | 
|  | rebase_path("tests/FontMgrAndroidParserTest.cpp"),  # Android only | 
|  | rebase_path("tests/PathOpsSkpClipTest.cpp"),  # alternate main | 
|  | rebase_path("tests/SkSLErrorTest.cpp"),  # TODO: make work | 
|  | rebase_path("tests/SkSLGLSLTest.cpp"),  # TODO: make work | 
|  | rebase_path("tests/SkpSkGrTest.cpp"),  # doesn't compile | 
|  | rebase_path("tests/skia_test.cpp"),  # alternate main | 
|  | ] | 
|  | deps = [ | 
|  | ":flags", | 
|  | ":gpu_tool_utils", | 
|  | ":skia", | 
|  | ":tool_utils", | 
|  | "//third_party/libpng", | 
|  | "//third_party/zlib", | 
|  | ] | 
|  | } | 
|  |  | 
|  | bench_sources = exec_script("gyp/find.py", | 
|  | [ | 
|  | "*.c*", | 
|  | rebase_path("bench"), | 
|  | ], | 
|  | "list lines", | 
|  | []) | 
|  |  | 
|  | test_lib("bench") { | 
|  | public_include_dirs = [ "bench" ] | 
|  | sources = bench_sources | 
|  | sources -= [ | 
|  | rebase_path("bench/nanobench.cpp"), | 
|  | rebase_path("bench/nanobenchAndroid.cpp"), | 
|  | ] | 
|  | deps = [ | 
|  | ":flags", | 
|  | ":gm", | 
|  | ":gpu_tool_utils", | 
|  | ":skia", | 
|  | ":tool_utils", | 
|  | ] | 
|  | } | 
|  |  | 
|  | test_lib("experimental_svg_model") { | 
|  | public_include_dirs = [ "experimental/svg/model" ] | 
|  | sources = [ | 
|  | "experimental/svg/model/SkSVGAttribute.cpp", | 
|  | "experimental/svg/model/SkSVGAttributeParser.cpp", | 
|  | "experimental/svg/model/SkSVGContainer.cpp", | 
|  | "experimental/svg/model/SkSVGDOM.cpp", | 
|  | "experimental/svg/model/SkSVGNode.cpp", | 
|  | "experimental/svg/model/SkSVGPath.cpp", | 
|  | "experimental/svg/model/SkSVGRect.cpp", | 
|  | "experimental/svg/model/SkSVGRenderContext.cpp", | 
|  | "experimental/svg/model/SkSVGSVG.cpp", | 
|  | "experimental/svg/model/SkSVGShape.cpp", | 
|  | "experimental/svg/model/SkSVGTransformableNode.cpp", | 
|  | "experimental/svg/model/SkSVGValue.cpp", | 
|  | ] | 
|  | deps = [ | 
|  | ":skia", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (!is_component_build) {  # Our test tools use many non-SK_API APIs... | 
|  | executable("dm") { | 
|  | sources = [ | 
|  | "dm/DM.cpp", | 
|  | "dm/DMJsonWriter.cpp", | 
|  | "dm/DMSrcSink.cpp", | 
|  | ] | 
|  | include_dirs = [ "tests" ] | 
|  | deps = [ | 
|  | ":experimental_svg_model", | 
|  | ":flags", | 
|  | ":gm", | 
|  | ":gpu_tool_utils", | 
|  | ":skia", | 
|  | ":tests", | 
|  | ":tool_utils", | 
|  | "//third_party/jsoncpp", | 
|  | "//third_party/libpng", | 
|  | ] | 
|  | testonly = true | 
|  | } | 
|  |  | 
|  | executable("monobench") { | 
|  | sources = [ | 
|  | "tools/monobench.cpp", | 
|  | ] | 
|  | deps = [ | 
|  | ":bench", | 
|  | ":skia", | 
|  | ] | 
|  | testonly = true | 
|  | } | 
|  |  | 
|  | executable("nanobench") { | 
|  | sources = [ | 
|  | "bench/nanobench.cpp", | 
|  | ] | 
|  | deps = [ | 
|  | ":bench", | 
|  | ":flags", | 
|  | ":gm", | 
|  | ":gpu_tool_utils", | 
|  | ":skia", | 
|  | ":tool_utils", | 
|  | "//third_party/jsoncpp", | 
|  | ] | 
|  | testonly = true | 
|  | } | 
|  |  | 
|  | executable("sktexttopdf") { | 
|  | sources = [ | 
|  | "tools/SkShaper_harfbuzz.cpp", | 
|  | "tools/using_skia_and_harfbuzz.cpp", | 
|  | ] | 
|  | deps = [ | 
|  | ":skia", | 
|  | "//third_party/harfbuzz", | 
|  | ] | 
|  | testonly = true | 
|  | } | 
|  | } |