const SKIA_FILES: &[&str] = &[
"skia/src/core/SkAAClip.cpp",
"skia/src/core/SkAlphaRuns.cpp",
"skia/src/core/SkAnalyticEdge.cpp",
"skia/src/core/SkArenaAlloc.cpp",
"skia/src/core/SkBitmapCache.cpp",
"skia/src/core/SkBitmapController.cpp",
"skia/src/core/SkBitmap.cpp",
"skia/src/core/SkBitmapDevice.cpp",
"skia/src/core/SkBitmapProcState.cpp",
"skia/src/core/SkBitmapProcState_matrixProcs.cpp",
"skia/src/core/SkBlendMode.cpp",
"skia/src/core/SkBlitRow_D32.cpp",
"skia/src/core/SkBlitter_A8.cpp",
"skia/src/core/SkBlitter_ARGB32.cpp",
"skia/src/core/SkBlitter.cpp",
"skia/src/core/SkBlitter_RGB565.cpp",
"skia/src/core/SkBlitter_Sprite.cpp",
"skia/src/core/SkBlurMask.cpp",
"skia/src/core/SkBlurMF.cpp",
"skia/src/core/SkBuffer.cpp",
"skia/src/core/SkCachedData.cpp",
"skia/src/core/SkCanvas.cpp",
"skia/src/core/SkCanvasPriv.cpp",
"skia/src/core/SkClipStack.cpp",
"skia/src/core/SkClipStackDevice.cpp",
"skia/src/core/SkColor.cpp",
"skia/src/core/SkColorFilter.cpp",
"skia/src/core/SkColorFilter_Matrix.cpp",
"skia/src/core/SkColorSpace.cpp",
"skia/src/core/SkColorSpaceXformSteps.cpp",
"skia/src/core/SkContourMeasure.cpp",
"skia/src/core/SkConvertPixels.cpp",
"skia/src/core/SkCpu.cpp",
"skia/src/core/SkData.cpp",
"skia/src/core/SkDeque.cpp",
"skia/src/core/SkDevice.cpp",
"skia/src/core/SkDraw.cpp",
"skia/src/core/SkEdgeBuilder.cpp",
"skia/src/core/SkEdgeClipper.cpp",
"skia/src/core/SkEdge.cpp",
"skia/src/core/SkGaussFilter.cpp",
"skia/src/core/SkGeometry.cpp",
"skia/src/core/SkGraphics.cpp",
"skia/src/core/SkHalf.cpp",
"skia/src/core/SkIDChangeListener.cpp",
"skia/src/core/SkImageFilterCache.cpp",
"skia/src/core/SkImageFilter.cpp",
"skia/src/core/SkImageFilterTypes.cpp",
"skia/src/core/SkImageInfo.cpp",
"skia/src/core/SkLatticeIter.cpp",
"skia/src/core/SkLineClipper.cpp",
"skia/src/core/SkLocalMatrixImageFilter.cpp",
"skia/src/core/SkM44.cpp",
"skia/src/core/SkMalloc.cpp",
"skia/src/core/SkMallocPixelRef.cpp",
"skia/src/core/SkMarkerStack.cpp",
"skia/src/core/SkMaskBlurFilter.cpp",
"skia/src/core/SkMaskCache.cpp",
"skia/src/core/SkMask.cpp",
"skia/src/core/SkMaskFilter.cpp",
"skia/src/core/SkMath.cpp",
"skia/src/core/SkMatrix44.cpp",
"skia/src/core/SkMatrix.cpp",
"skia/src/core/SkMatrixImageFilter.cpp",
"skia/src/core/SkMipMap.cpp",
"skia/src/core/SkModeColorFilter.cpp",
"skia/src/core/SkOpts.cpp",
"skia/src/core/SkPaint.cpp",
"skia/src/core/SkPaintPriv.cpp",
"skia/src/core/SkPath.cpp",
"skia/src/core/SkPathEffect.cpp",
"skia/src/core/SkPathMeasure.cpp",
"skia/src/core/SkPathRef.cpp",
"skia/src/core/SkPixelRef.cpp",
"skia/src/core/SkPixmap.cpp",
"skia/src/core/SkPoint3.cpp",
"skia/src/core/SkPoint.cpp",
"skia/src/core/SkQuadClipper.cpp",
"skia/src/core/SkRasterClip.cpp",
"skia/src/core/SkRasterPipelineBlitter.cpp",
"skia/src/core/SkRasterPipeline.cpp",
"skia/src/core/SkRect.cpp",
"skia/src/core/SkRegion.cpp",
"skia/src/core/SkRegion_path.cpp",
"skia/src/core/SkResourceCache.cpp",
"skia/src/core/SkRRect.cpp",
"skia/src/core/SkScalar.cpp",
"skia/src/core/SkScan_AAAPath.cpp",
"skia/src/core/SkScan_Antihair.cpp",
"skia/src/core/SkScan_AntiPath.cpp",
"skia/src/core/SkScan.cpp",
"skia/src/core/SkScan_Hairline.cpp",
"skia/src/core/SkScan_Path.cpp",
"skia/src/core/SkSemaphore.cpp",
"skia/src/core/SkSpecialImage.cpp",
"skia/src/core/SkSpecialSurface.cpp",
"skia/src/core/SkSpriteBlitter_ARGB32.cpp",
"skia/src/core/SkSpriteBlitter_RGB565.cpp",
"skia/src/core/SkString.cpp",
"skia/src/core/SkStroke.cpp",
"skia/src/core/SkStrokeRec.cpp",
"skia/src/core/SkStrokerPriv.cpp",
"skia/src/core/SkThreadID.cpp",
"skia/src/core/SkUnPreMultiply.cpp",
"skia/src/core/SkVMBlitter.cpp",
"skia/src/core/SkVM.cpp",
"skia/src/core/SkXfermode.cpp",
"skia/src/core/SkXfermodeInterpretation.cpp",
"skia/src/core/SkYUVASizeInfo.cpp",
"skia/src/effects/SkDashPathEffect.cpp",
"skia/src/image/SkImage.cpp",
"skia/src/image/SkImage_Raster.cpp",
"skia/src/image/SkSurface.cpp",
"skia/src/image/SkSurface_Raster.cpp",
"skia/src/opts/SkOpts_avx.cpp",
"skia/src/opts/SkOpts_crc32.cpp",
"skia/src/opts/SkOpts_hsw.cpp",
"skia/src/opts/SkOpts_skx.cpp",
"skia/src/opts/SkOpts_sse41.cpp",
"skia/src/opts/SkOpts_sse42.cpp",
"skia/src/opts/SkOpts_ssse3.cpp",
"skia/src/pathops/SkDCubicLineIntersection.cpp",
"skia/src/pathops/SkPathOpsCubic.cpp",
"skia/src/pathops/SkPathOpsQuad.cpp",
"skia/src/pathops/SkPathOpsTypes.cpp",
"skia/src/ports/SkDebug_stdio.cpp",
"skia/src/ports/SkDebug_win.cpp",
"skia/src/ports/SkMemory_malloc.cpp",
"skia/src/shaders/gradients/Sk4fGradientBase.cpp",
"skia/src/shaders/gradients/Sk4fLinearGradient.cpp",
"skia/src/shaders/gradients/SkGradientShader.cpp",
"skia/src/shaders/gradients/SkLinearGradient.cpp",
"skia/src/shaders/gradients/SkRadialGradient.cpp",
"skia/src/shaders/gradients/SkSweepGradient.cpp",
"skia/src/shaders/gradients/SkTwoPointConicalGradient.cpp",
"skia/src/shaders/SkColorFilterShader.cpp",
"skia/src/shaders/SkColorShader.cpp",
"skia/src/shaders/SkComposeShader.cpp",
"skia/src/shaders/SkImageShader.cpp",
"skia/src/shaders/SkLocalMatrixShader.cpp",
"skia/src/shaders/SkShader.cpp",
"skia/src/utils/SkDashPath.cpp",
"skia/third_party/skcms/skcms.cc",
"skia-c/skia_c.cpp",
];
fn main() {
println!("cargo:rerun-if-env-changed=SKIA_DIR");
println!("cargo:rerun-if-env-changed=SKIA_LIB_DIR");
if std::env::var("CC").is_err() {
#[cfg(target_os = "windows")]
{
std::env::set_var("CC", "clang-cl");
std::env::set_var("CXX", "clang-cl");
}
#[cfg(not(target_os = "windows"))]
{
std::env::set_var("CC", "clang");
std::env::set_var("CXX", "clang++");
}
}
if std::env::var("SKIA_DIR").is_ok() {
build_external();
} else {
build_embedded();
}
}
fn build_embedded() {
let mut build = cc::Build::new();
build.cpp(true);
build.files(SKIA_FILES);
build.include("skia");
build.include("skia/include/third_party/skcms");
build.include("skia-c");
#[cfg(target_os = "windows")]
{
build.define("SK_BUILD_FOR_WIN", "1");
}
if std::env::var("DEBUG").is_ok() {
build.define("SK_DEBUG", "1");
} else {
build.define("SK_RELEASE", "1");
}
#[cfg(target_os = "windows")]
{
build.flag("/std:c++17");
build.flag("-Wno-unused-function");
build.flag("-Wno-unused-parameter");
}
#[cfg(not(target_os = "windows"))]
{
build.flag("-std=c++17");
build.flag("-fPIC");
build.flag("-fno-exceptions");
build.flag("-fno-rtti");
build.flag("-fstrict-aliasing");
build.flag("-fvisibility=hidden");
build.flag("-fdata-sections");
build.flag("-ffunction-sections");
build.flag("-fvisibility-inlines-hidden");
build.flag("-Wno-unused-function");
build.flag("-Wno-unused-parameter");
build.flag("-Wno-unused-private-field");
}
build.compile("libskiac.a");
}
fn build_external() {
use std::env;
use std::path::Path;
let skia_dir = env::var("SKIA_DIR").unwrap();
let skia_path = Path::new(&skia_dir);
let mut build = cc::Build::new();
build.cpp(true);
build.file("skia-c/skia_c.cpp");
build.include("skia-c");
build.include(skia_path);
build.compile("libskiac.a");
let skia_lib_dir = env::var("SKIA_LIB_DIR").expect("SKIA_LIB_DIR is not set");
println!("cargo:rustc-link-search={}", skia_lib_dir);
println!("cargo:rustc-link-lib=skia");
}