blob: 569ec0b358320453b73cb98564a0c9ff59eb0ad8 [file] [log] [blame]
# 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_use_system_libjpeg_turbo = is_official_build && !is_wasm
}
import("../third_party.gni")
if (skia_use_system_libjpeg_turbo) {
system("libjpeg") {
libs = [ "jpeg" ]
}
} else {
source_set("libjpeg_headers") {
sources = [
"../externals/libjpeg-turbo/src/jconfig.h",
"../externals/libjpeg-turbo/src/jdct.h",
"../externals/libjpeg-turbo/src/jinclude.h",
"../externals/libjpeg-turbo/src/jmorecfg.h",
"../externals/libjpeg-turbo/src/jpeglib.h",
"../externals/libjpeg-turbo/src/jpeglibmangler.h",
]
}
# Based on
# https://github.com/libjpeg-turbo/libjpeg-turbo/blob/20ade4de/CMakeLists.txt#L605
#
# Starting in 3.x, libjpeg-turbo supports runtime-selectable precision.
# This requires compiling some source sets multiple times, with different
# BITS_IN_JSAMPLE defines (16, 12, and the default 8), to generate precision-
# specific symbols (e.g. jpeg16_read_scanlines vs jpeg12_read_scanlines vs
# jpeg_read_scanlines).
libjpeg16_sources = [
"../externals/libjpeg-turbo/src/jcapistd.c",
"../externals/libjpeg-turbo/src/jccolor.c",
"../externals/libjpeg-turbo/src/jcdiffct.c",
"../externals/libjpeg-turbo/src/jclossls.c",
"../externals/libjpeg-turbo/src/jcmainct.c",
"../externals/libjpeg-turbo/src/jcprepct.c",
"../externals/libjpeg-turbo/src/jcsample.c",
"../externals/libjpeg-turbo/src/jdapistd.c",
"../externals/libjpeg-turbo/src/jdcolor.c",
"../externals/libjpeg-turbo/src/jddiffct.c",
"../externals/libjpeg-turbo/src/jdlossls.c",
"../externals/libjpeg-turbo/src/jdmainct.c",
"../externals/libjpeg-turbo/src/jdpostct.c",
"../externals/libjpeg-turbo/src/jdsample.c",
"../externals/libjpeg-turbo/src/jutils.c",
]
libjpeg12_sources = libjpeg16_sources + [
"../externals/libjpeg-turbo/src/jccoefct.c",
"../externals/libjpeg-turbo/src/jcdctmgr.c",
"../externals/libjpeg-turbo/src/jdcoefct.c",
"../externals/libjpeg-turbo/src/jddctmgr.c",
"../externals/libjpeg-turbo/src/jdmerge.c",
"../externals/libjpeg-turbo/src/jfdctfst.c",
"../externals/libjpeg-turbo/src/jfdctint.c",
"../externals/libjpeg-turbo/src/jidctflt.c",
"../externals/libjpeg-turbo/src/jidctfst.c",
"../externals/libjpeg-turbo/src/jidctint.c",
"../externals/libjpeg-turbo/src/jidctred.c",
"../externals/libjpeg-turbo/src/jquant1.c",
"../externals/libjpeg-turbo/src/jquant2.c",
]
libjpeg_sources = libjpeg12_sources + [
"../externals/libjpeg-turbo/src/jaricom.c",
"../externals/libjpeg-turbo/src/jcapimin.c",
"../externals/libjpeg-turbo/src/jcarith.c",
"../externals/libjpeg-turbo/src/jchuff.c",
"../externals/libjpeg-turbo/src/jcicc.c",
"../externals/libjpeg-turbo/src/jcinit.c",
"../externals/libjpeg-turbo/src/jclhuff.c",
"../externals/libjpeg-turbo/src/jcmarker.c",
"../externals/libjpeg-turbo/src/jcmaster.c",
"../externals/libjpeg-turbo/src/jcomapi.c",
"../externals/libjpeg-turbo/src/jcparam.c",
"../externals/libjpeg-turbo/src/jcphuff.c",
"../externals/libjpeg-turbo/src/jctrans.c",
"../externals/libjpeg-turbo/src/jdapimin.c",
"../externals/libjpeg-turbo/src/jdarith.c",
"../externals/libjpeg-turbo/src/jdatadst.c",
"../externals/libjpeg-turbo/src/jdatasrc.c",
"../externals/libjpeg-turbo/src/jdhuff.c",
"../externals/libjpeg-turbo/src/jdicc.c",
"../externals/libjpeg-turbo/src/jdinput.c",
"../externals/libjpeg-turbo/src/jdlhuff.c",
"../externals/libjpeg-turbo/src/jdmarker.c",
"../externals/libjpeg-turbo/src/jdmaster.c",
"../externals/libjpeg-turbo/src/jdphuff.c",
"../externals/libjpeg-turbo/src/jdtrans.c",
"../externals/libjpeg-turbo/src/jerror.c",
"../externals/libjpeg-turbo/src/jfdctflt.c",
"../externals/libjpeg-turbo/src/jmemmgr.c",
"../externals/libjpeg-turbo/src/jmemnobs.c",
"../externals/libjpeg-turbo/src/jpeg_nbits.c",
]
static_library("libjpeg16") {
sources = libjpeg16_sources
defines = [
"NO_GETENV",
"NO_PUTENV",
"BITS_IN_JSAMPLE=16",
]
public_deps = [ ":libjpeg_headers" ]
}
static_library("libjpeg12") {
sources = libjpeg12_sources
defines = [
"NO_GETENV",
"NO_PUTENV",
"BITS_IN_JSAMPLE=12",
]
public_deps = [ ":libjpeg_headers" ]
}
third_party("libjpeg") {
public_include_dirs = [
".",
"../externals/libjpeg-turbo",
"../externals/libjpeg-turbo/src",
]
defines = [
"TURBO_FOR_WINDOWS",
# Add support for arithmetic encoding (C_) and decoding (D_).
# This matches Android. Note that such JPEGs are likely rare, given lack of
# support by major browsers.
"C_ARITH_CODING_SUPPORTED=1",
"D_ARITH_CODING_SUPPORTED=1",
]
if (!is_win || is_clang) {
defines += [ "USE_CLZ_INTRINSIC" ] # Cuts a 64K table.
}
sources = libjpeg_sources
public_deps = [
":libjpeg12",
":libjpeg16",
":libjpeg_headers",
]
if (!is_win && (current_cpu == "arm" || current_cpu == "arm64")) {
defines += [
"NEON_INTRINSICS",
"WITH_SIMD",
]
sources += [
"../externals/libjpeg-turbo/simd/arm/jccolor-neon.c",
"../externals/libjpeg-turbo/simd/arm/jcgray-neon.c",
"../externals/libjpeg-turbo/simd/arm/jcphuff-neon.c",
"../externals/libjpeg-turbo/simd/arm/jcsample-neon.c",
"../externals/libjpeg-turbo/simd/arm/jdcolor-neon.c",
"../externals/libjpeg-turbo/simd/arm/jdmerge-neon.c",
"../externals/libjpeg-turbo/simd/arm/jdsample-neon.c",
"../externals/libjpeg-turbo/simd/arm/jfdctfst-neon.c",
"../externals/libjpeg-turbo/simd/arm/jfdctint-neon.c",
"../externals/libjpeg-turbo/simd/arm/jidctfst-neon.c",
"../externals/libjpeg-turbo/simd/arm/jidctint-neon.c",
"../externals/libjpeg-turbo/simd/arm/jidctred-neon.c",
"../externals/libjpeg-turbo/simd/arm/jquanti-neon.c",
]
include_dirs = [ "../externals/libjpeg-turbo/simd/arm" ]
if (current_cpu == "arm") {
sources += [
"../externals/libjpeg-turbo/simd/arm/aarch32/jchuff-neon.c",
"../externals/libjpeg-turbo/simd/arm/aarch32/jsimd.c",
]
} else if (current_cpu == "arm64") {
sources += [
"../externals/libjpeg-turbo/simd/arm/aarch64/jchuff-neon.c",
"../externals/libjpeg-turbo/simd/arm/aarch64/jsimd.c",
]
}
}
}
}