• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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