1# Copyright 2016 Google Inc. 2# 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6declare_args() { 7 skia_use_system_libjpeg_turbo = is_official_build && !is_wasm 8} 9 10import("../third_party.gni") 11 12if (skia_use_system_libjpeg_turbo) { 13 system("libjpeg") { 14 libs = [ "jpeg" ] 15 } 16} else { 17 source_set("libjpeg_headers") { 18 sources = [ 19 "../externals/libjpeg-turbo/src/jconfig.h", 20 "../externals/libjpeg-turbo/src/jdct.h", 21 "../externals/libjpeg-turbo/src/jinclude.h", 22 "../externals/libjpeg-turbo/src/jmorecfg.h", 23 "../externals/libjpeg-turbo/src/jpeglib.h", 24 "../externals/libjpeg-turbo/src/jpeglibmangler.h", 25 ] 26 } 27 28 # Based on 29 # https://github.com/libjpeg-turbo/libjpeg-turbo/blob/20ade4de/CMakeLists.txt#L605 30 # 31 # Starting in 3.x, libjpeg-turbo supports runtime-selectable precision. 32 # This requires compiling some source sets multiple times, with different 33 # BITS_IN_JSAMPLE defines (16, 12, and the default 8), to generate precision- 34 # specific symbols (e.g. jpeg16_read_scanlines vs jpeg12_read_scanlines vs 35 # jpeg_read_scanlines). 36 37 libjpeg16_sources = [ 38 "../externals/libjpeg-turbo/src/jcapistd.c", 39 "../externals/libjpeg-turbo/src/jccolor.c", 40 "../externals/libjpeg-turbo/src/jcdiffct.c", 41 "../externals/libjpeg-turbo/src/jclossls.c", 42 "../externals/libjpeg-turbo/src/jcmainct.c", 43 "../externals/libjpeg-turbo/src/jcprepct.c", 44 "../externals/libjpeg-turbo/src/jcsample.c", 45 "../externals/libjpeg-turbo/src/jdapistd.c", 46 "../externals/libjpeg-turbo/src/jdcolor.c", 47 "../externals/libjpeg-turbo/src/jddiffct.c", 48 "../externals/libjpeg-turbo/src/jdlossls.c", 49 "../externals/libjpeg-turbo/src/jdmainct.c", 50 "../externals/libjpeg-turbo/src/jdpostct.c", 51 "../externals/libjpeg-turbo/src/jdsample.c", 52 "../externals/libjpeg-turbo/src/jutils.c", 53 ] 54 55 libjpeg12_sources = libjpeg16_sources + [ 56 "../externals/libjpeg-turbo/src/jccoefct.c", 57 "../externals/libjpeg-turbo/src/jcdctmgr.c", 58 "../externals/libjpeg-turbo/src/jdcoefct.c", 59 "../externals/libjpeg-turbo/src/jddctmgr.c", 60 "../externals/libjpeg-turbo/src/jdmerge.c", 61 "../externals/libjpeg-turbo/src/jfdctfst.c", 62 "../externals/libjpeg-turbo/src/jfdctint.c", 63 "../externals/libjpeg-turbo/src/jidctflt.c", 64 "../externals/libjpeg-turbo/src/jidctfst.c", 65 "../externals/libjpeg-turbo/src/jidctint.c", 66 "../externals/libjpeg-turbo/src/jidctred.c", 67 "../externals/libjpeg-turbo/src/jquant1.c", 68 "../externals/libjpeg-turbo/src/jquant2.c", 69 ] 70 71 libjpeg_sources = libjpeg12_sources + [ 72 "../externals/libjpeg-turbo/src/jaricom.c", 73 "../externals/libjpeg-turbo/src/jcapimin.c", 74 "../externals/libjpeg-turbo/src/jcarith.c", 75 "../externals/libjpeg-turbo/src/jchuff.c", 76 "../externals/libjpeg-turbo/src/jcicc.c", 77 "../externals/libjpeg-turbo/src/jcinit.c", 78 "../externals/libjpeg-turbo/src/jclhuff.c", 79 "../externals/libjpeg-turbo/src/jcmarker.c", 80 "../externals/libjpeg-turbo/src/jcmaster.c", 81 "../externals/libjpeg-turbo/src/jcomapi.c", 82 "../externals/libjpeg-turbo/src/jcparam.c", 83 "../externals/libjpeg-turbo/src/jcphuff.c", 84 "../externals/libjpeg-turbo/src/jctrans.c", 85 "../externals/libjpeg-turbo/src/jdapimin.c", 86 "../externals/libjpeg-turbo/src/jdarith.c", 87 "../externals/libjpeg-turbo/src/jdatadst.c", 88 "../externals/libjpeg-turbo/src/jdatasrc.c", 89 "../externals/libjpeg-turbo/src/jdhuff.c", 90 "../externals/libjpeg-turbo/src/jdicc.c", 91 "../externals/libjpeg-turbo/src/jdinput.c", 92 "../externals/libjpeg-turbo/src/jdlhuff.c", 93 "../externals/libjpeg-turbo/src/jdmarker.c", 94 "../externals/libjpeg-turbo/src/jdmaster.c", 95 "../externals/libjpeg-turbo/src/jdphuff.c", 96 "../externals/libjpeg-turbo/src/jdtrans.c", 97 "../externals/libjpeg-turbo/src/jerror.c", 98 "../externals/libjpeg-turbo/src/jfdctflt.c", 99 "../externals/libjpeg-turbo/src/jmemmgr.c", 100 "../externals/libjpeg-turbo/src/jmemnobs.c", 101 "../externals/libjpeg-turbo/src/jpeg_nbits.c", 102 ] 103 104 static_library("libjpeg16") { 105 sources = libjpeg16_sources 106 107 defines = [ 108 "NO_GETENV", 109 "NO_PUTENV", 110 "BITS_IN_JSAMPLE=16", 111 ] 112 113 public_deps = [ ":libjpeg_headers" ] 114 } 115 116 static_library("libjpeg12") { 117 sources = libjpeg12_sources 118 119 defines = [ 120 "NO_GETENV", 121 "NO_PUTENV", 122 "BITS_IN_JSAMPLE=12", 123 ] 124 125 public_deps = [ ":libjpeg_headers" ] 126 } 127 128 third_party("libjpeg") { 129 public_include_dirs = [ 130 ".", 131 "../externals/libjpeg-turbo", 132 "../externals/libjpeg-turbo/src", 133 ] 134 135 defines = [ 136 "TURBO_FOR_WINDOWS", 137 138 # Add support for arithmetic encoding (C_) and decoding (D_). 139 # This matches Android. Note that such JPEGs are likely rare, given lack of 140 # support by major browsers. 141 "C_ARITH_CODING_SUPPORTED=1", 142 "D_ARITH_CODING_SUPPORTED=1", 143 ] 144 145 if (!is_win || is_clang) { 146 defines += [ "USE_CLZ_INTRINSIC" ] # Cuts a 64K table. 147 } 148 149 sources = libjpeg_sources 150 151 public_deps = [ 152 ":libjpeg12", 153 ":libjpeg16", 154 ":libjpeg_headers", 155 ] 156 157 if (!is_win && (current_cpu == "arm" || current_cpu == "arm64")) { 158 defines += [ 159 "NEON_INTRINSICS", 160 "WITH_SIMD", 161 ] 162 sources += [ 163 "../externals/libjpeg-turbo/simd/arm/jccolor-neon.c", 164 "../externals/libjpeg-turbo/simd/arm/jcgray-neon.c", 165 "../externals/libjpeg-turbo/simd/arm/jcphuff-neon.c", 166 "../externals/libjpeg-turbo/simd/arm/jcsample-neon.c", 167 "../externals/libjpeg-turbo/simd/arm/jdcolor-neon.c", 168 "../externals/libjpeg-turbo/simd/arm/jdmerge-neon.c", 169 "../externals/libjpeg-turbo/simd/arm/jdsample-neon.c", 170 "../externals/libjpeg-turbo/simd/arm/jfdctfst-neon.c", 171 "../externals/libjpeg-turbo/simd/arm/jfdctint-neon.c", 172 "../externals/libjpeg-turbo/simd/arm/jidctfst-neon.c", 173 "../externals/libjpeg-turbo/simd/arm/jidctint-neon.c", 174 "../externals/libjpeg-turbo/simd/arm/jidctred-neon.c", 175 "../externals/libjpeg-turbo/simd/arm/jquanti-neon.c", 176 ] 177 include_dirs = [ "../externals/libjpeg-turbo/simd/arm" ] 178 if (current_cpu == "arm") { 179 sources += [ 180 "../externals/libjpeg-turbo/simd/arm/aarch32/jchuff-neon.c", 181 "../externals/libjpeg-turbo/simd/arm/aarch32/jsimd.c", 182 ] 183 } else if (current_cpu == "arm64") { 184 sources += [ 185 "../externals/libjpeg-turbo/simd/arm/aarch64/jchuff-neon.c", 186 "../externals/libjpeg-turbo/simd/arm/aarch64/jsimd.c", 187 ] 188 } 189 } 190 } 191} 192