Roll libjpeg-turbo to latest in Chromium

This indirectly addresses an use-of-uninitialized value error discovered by MSAN fuzzer. We are updating libjpeg-turbo to 3.1.0 and this CL is based off of these rolls into chromium:
- Compiling some source sets multiple times with different precision symbols [1]
- jsimd_none.c was removed so now we control WITH_SIMD via defines [2]

[1] https://chromium-review.googlesource.com/c/chromium/deps/libjpeg_turbo/+/6264683
[2] https://chromium-review.googlesource.com/c/chromium/deps/libjpeg_turbo/+/6318439

Bug: 388319486
Bug: 398911117
Change-Id: I4c12ee6416789d6be334ee38540beb6d55a562b1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/959936
Reviewed-by: Florin Malita <fmalita@google.com>
Commit-Queue: Daniel Dilan <danieldilan@google.com>
diff --git a/DEPS b/DEPS
index b13dda6..5704aad 100644
--- a/DEPS
+++ b/DEPS
@@ -54,7 +54,7 @@
   "third_party/externals/libavif"                : "https://skia.googlesource.com/external/github.com/AOMediaCodec/libavif.git@55aab4ac0607ab651055d354d64c4615cf3d8000",
   "third_party/externals/libgav1"                : "https://chromium.googlesource.com/codecs/libgav1.git@5cf722e659014ebaf2f573a6dd935116d36eadf1",
   "third_party/externals/libgrapheme"            : "https://skia.googlesource.com/external/github.com/FRIGN/libgrapheme/@c0cab63c5300fa12284194fbef57aa2ed62a94c0",
-  "third_party/externals/libjpeg-turbo"          : "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@ccfbe1c82a3b6dbe8647ceb36a3f9ee711fba3cf",
+  "third_party/externals/libjpeg-turbo"          : "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git@e14cbfaa85529d47f9f55b0f104a579c1061f9ad",
   "third_party/externals/libjxl"                 : "https://chromium.googlesource.com/external/gitlab.com/wg1/jpeg-xl.git@a205468bc5d3a353fb15dae2398a101dff52f2d3",
   "third_party/externals/libpng"                 : "https://skia.googlesource.com/third_party/libpng.git@ed217e3e601d8e462f7fd1e04bed43ac42212429",
   "third_party/externals/libwebp"                : "https://chromium.googlesource.com/webm/libwebp.git@845d5476a866141ba35ac133f856fa62f0b7445f",
diff --git a/bazel/deps.bzl b/bazel/deps.bzl
index b51e50e..54f145f 100644
--- a/bazel/deps.bzl
+++ b/bazel/deps.bzl
@@ -129,7 +129,7 @@
     new_git_repository(
         name = "libjpeg_turbo",
         build_file = ws + "//bazel/external/libjpeg_turbo:BUILD.bazel",
-        commit = "ccfbe1c82a3b6dbe8647ceb36a3f9ee711fba3cf",
+        commit = "e14cbfaa85529d47f9f55b0f104a579c1061f9ad",
         remote = "https://chromium.googlesource.com/chromium/deps/libjpeg_turbo.git",
     )
 
diff --git a/bazel/external/libjpeg_turbo/BUILD.bazel b/bazel/external/libjpeg_turbo/BUILD.bazel
index c7abc01..a5d48a2 100644
--- a/bazel/external/libjpeg_turbo/BUILD.bazel
+++ b/bazel/external/libjpeg_turbo/BUILD.bazel
@@ -18,110 +18,117 @@
     ],
 )
 
-JPEGTURBO_SRCS = [
-    "jaricom.c",
-    "jcapimin.c",
-    "jcapistd.c",
-    "jcarith.c",
-    "jccoefct.c",
-    "jccolor.c",
-    "jcdctmgr.c",
-    "jchuff.c",
-    "jchuff.h",
-    "jcinit.c",
-    "jcmainct.c",
-    "jcmarker.c",
-    "jcmaster.c",
-    "jcomapi.c",
-    "jconfigint.h",
-    "jcparam.c",
-    "jcphuff.c",
-    "jcprepct.c",
-    "jcsample.c",
-    "jdapimin.c",
-    "jdapistd.c",
-    "jdarith.c",
-    "jdcoefct.c",
-    "jdcoefct.h",
-    "jdcolor.c",
-    "jdct.h",
-    "jddctmgr.c",
-    "jdhuff.c",
-    "jdhuff.h",
-    "jdinput.c",
-    "jdmainct.c",
-    "jdmainct.h",
-    "jdmarker.c",
-    "jdmaster.c",
-    "jdmaster.h",
-    "jdmerge.c",
-    "jdmerge.h",
-    "jdphuff.c",
-    "jdpostct.c",
-    "jdsample.c",
-    "jdsample.h",
-    "jerror.c",
-    "jfdctflt.c",
-    "jfdctfst.c",
-    "jfdctint.c",
-    "jidctflt.c",
-    "jidctfst.c",
-    "jidctint.c",
-    "jidctred.c",
-    "jinclude.h",
-    "jmemmgr.c",
-    "jmemnobs.c",
-    "jmemsys.h",
-    "jpeg_nbits_table.c",
-    "jpeg_nbits_table.h",
-    "jpegcomp.h",
-    "jpegint.h",
-    "jquant1.c",
-    "jquant2.c",
-    "jsimd.h",
-    "jsimddct.h",
-    "jutils.c",
-    "jversion.h",
-] + select({
-    ":arm_or_arm64": [
-        "simd/arm/jccolor-neon.c",
-        "simd/arm/jcgray-neon.c",
-        "simd/arm/jchuff.h",
-        "simd/arm/jcphuff-neon.c",
-        "simd/arm/jcsample-neon.c",
-        "simd/arm/jdcolor-neon.c",
-        "simd/arm/jdmerge-neon.c",
-        "simd/arm/jdsample-neon.c",
-        "simd/arm/jfdctfst-neon.c",
-        "simd/arm/jfdctint-neon.c",
-        "simd/arm/jidctfst-neon.c",
-        "simd/arm/jidctint-neon.c",
-        "simd/arm/jidctred-neon.c",
-        "simd/arm/jquanti-neon.c",
-        "simd/arm/neon-compat.h",
-        "simd/jsimd.h",
-    ],
-    "//conditions:default": ["jsimd_none.c"],
-}) + select({
-    "@platforms//cpu:arm": [
-        "simd/arm/aarch32/jchuff-neon.c",
-        "simd/arm/aarch32/jsimd.c",
-    ],
-    "@platforms//cpu:arm64": [
-        "simd/arm/aarch64/jchuff-neon.c",
-        "simd/arm/aarch64/jsimd.c",
-        "simd/arm/align.h",
-    ],
-    "//conditions:default": [],
-})
+LIBJPEG_HEADERS = [
+    "src/jconfig.h",
+    "src/jerror.h",
+    "src/jdct.h",
+    "src/jinclude.h",
+    "src/jpeglib.h",
+    "src/jpeglibmangler.h",
+    "src/jmorecfg.h",
+    "src/jconfigint.h",
+    "src/jpegint.h",
+    "src/jpegapicomp.h",
+    "src/jpeg_nbits.h",
+    "src/jsimddct.h",
+    "src/jversion.h",
+    "src/jdhuff.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).
+
+JPEG16_SRCS = [
+    "src/jcapistd.c",
+    "src/jccolor.c",
+    "src/jcdiffct.c",
+    "src/jclossls.c",
+    "src/jcmainct.c",
+    "src/jcprepct.c",
+    "src/jcsample.c",
+    "src/jdapistd.c",
+    "src/jdcolor.c",
+    "src/jddiffct.c",
+    "src/jdlossls.c",
+    "src/jdmainct.c",
+    "src/jdmainct.h",
+    "src/jdpostct.c",
+    "src/jdsample.c",
+    "src/jdsample.h",
+    "src/jutils.c",
+    "src/jsimd.h",
+    "src/jlossls.h",
+    "src/jdmaster.c",
+    "src/jdmaster.h",
+    "src/jdmerge.h",
+    "src/jmemsys.h",
+]
+
+JPEG12_SRCS = JPEG16_SRCS + [
+    "src/jccoefct.c",
+    "src/jcdctmgr.c",
+    "src/jdcoefct.c",
+    "src/jddctmgr.c",
+    "src/jdmerge.c",
+    "src/jfdctfst.c",
+    "src/jfdctint.c",
+    "src/jidctflt.c",
+    "src/jidctfst.c",
+    "src/jidctint.c",
+    "src/jidctred.c",
+    "src/jquant1.c",
+    "src/jquant2.c",
+    "src/jdcoefct.h",
+]
+
+JPEGTURBO_SRCS = JPEG12_SRCS + [
+    "src/jchuff.c",
+    "src/jchuff.h",
+    "src/jaricom.c",
+    "src/jcapimin.c",
+    "src/jcarith.c",
+    "src/jcicc.c",
+    "src/jcinit.c",
+    "src/jclhuff.c",
+    "src/jcmarker.c",
+    "src/jcmaster.c",
+    "src/jcmaster.h",
+    "src/jcomapi.c",
+    "src/jcparam.c",
+    "src/jcphuff.c",
+    "src/jctrans.c",
+    "src/jdapimin.c",
+    "src/jdarith.c",
+    "src/jdatadst.c",
+    "src/jdatasrc.c",
+    "src/jdhuff.c",
+    "src/jdicc.c",
+    "src/jdinput.c",
+    "src/jdlhuff.c",
+    "src/jdmarker.c",
+    "src/jdphuff.c",
+    "src/jdtrans.c",
+    "src/jerror.c",
+    "src/jfdctflt.c",
+    "src/jmemmgr.c",
+    "src/jmemnobs.c",
+    "src/jpeg_nbits.c",
+]
 
 JPEGTURBO_TEXT_HDRS = [
-    "jccolext.c",
-    "jdmrgext.c",
-    "jdcolext.c",
-    "jdcol565.c",
-    "jdmrg565.c",
-    "jstdhuff.c",
+    "src/jccolext.c",
+    "src/jdmrgext.c",
+    "src/jdcolext.c",
+    "src/jdcol565.c",
+    "src/jdmrg565.c",
+    "src/jstdhuff.c",
+    "src/jsamplecomp.h",
 ] + select({
     ":arm_or_arm64": [
         "simd/arm/jdmrgext-neon.c",
@@ -146,7 +153,10 @@
     "C_ARITH_CODING_SUPPORTED=1",
     "D_ARITH_CODING_SUPPORTED=1",
 ] + select({
-    ":arm_or_arm64": ["NEON_INTRINSICS"],
+    ":arm_or_arm64": [
+        "NEON_INTRINSICS",
+        "WITH_SIMD",
+    ],
     "//conditions:default": [],
 }) + select({
     # Cuts a 64K table.
@@ -156,20 +166,80 @@
 })
 
 cc_library(
-    name = "libjpeg_turbo",
-    srcs = JPEGTURBO_SRCS,
-    hdrs = [
-        "jconfig.h",
-        "jerror.h",
-        "jmorecfg.h",
-        "jpeglib.h",
-        "jpeglibmangler.h",
+    name = "libjpeg16",
+    srcs = JPEG16_SRCS,
+    hdrs = LIBJPEG_HEADERS,
+    includes = ["src"],
+    local_defines = [
+        "NO_GETENV",
+        "NO_PUTENV",
+        "BITS_IN_JSAMPLE=16",
+        "C_ARITH_CODING_SUPPORTED=1",
+        "D_ARITH_CODING_SUPPORTED=1",
     ],
+    textual_hdrs = JPEGTURBO_TEXT_HDRS,
+)
+
+cc_library(
+    name = "libjpeg12",
+    srcs = JPEG12_SRCS,
+    hdrs = LIBJPEG_HEADERS,
+    includes = ["src"],
+    local_defines = [
+        "NO_GETENV",
+        "NO_PUTENV",
+        "BITS_IN_JSAMPLE=12",
+        "C_ARITH_CODING_SUPPORTED=1",
+        "D_ARITH_CODING_SUPPORTED=1",
+    ],
+    textual_hdrs = JPEGTURBO_TEXT_HDRS,
+)
+
+cc_library(
+    name = "libjpeg_turbo",
+    srcs = JPEGTURBO_SRCS + select({
+        ":arm_or_arm64": [
+            "simd/arm/jccolor-neon.c",
+            "simd/arm/jcgray-neon.c",
+            "simd/arm/jchuff.h",
+            "simd/arm/jcphuff-neon.c",
+            "simd/arm/jcsample-neon.c",
+            "simd/arm/jdcolor-neon.c",
+            "simd/arm/jdmerge-neon.c",
+            "simd/arm/jdsample-neon.c",
+            "simd/arm/jfdctfst-neon.c",
+            "simd/arm/jfdctint-neon.c",
+            "simd/arm/jidctfst-neon.c",
+            "simd/arm/jidctint-neon.c",
+            "simd/arm/jidctred-neon.c",
+            "simd/arm/jquanti-neon.c",
+            "simd/arm/neon-compat.h",
+            "simd/jsimd.h",
+        ],
+        "//conditions:default": [],
+    }) + select({
+        "@platforms//cpu:arm": [
+            "simd/arm/aarch32/jchuff-neon.c",
+            "simd/arm/aarch32/jsimd.c",
+        ],
+        "@platforms//cpu:arm64": [
+            "simd/arm/aarch64/jchuff-neon.c",
+            "simd/arm/aarch64/jsimd.c",
+            "simd/arm/align.h",
+        ],
+        "//conditions:default": [],
+    }),
+    hdrs = LIBJPEG_HEADERS,
     copts = [
         # There are some #include "neon-compat.h" etc that need this search path
         "-Iexternal/libjpeg_turbo/simd/arm/",
     ],
+    includes = ["src"],
     local_defines = JPEGTURBO_DEFINES,
     textual_hdrs = JPEGTURBO_TEXT_HDRS,
     visibility = ["//visibility:public"],
+    deps = [
+        ":libjpeg12",
+        ":libjpeg16",
+    ],
 )
diff --git a/infra/bots/deps/deps_gen.go b/infra/bots/deps/deps_gen.go
index cd7cf65..5ab53f3 100644
--- a/infra/bots/deps/deps_gen.go
+++ b/infra/bots/deps/deps_gen.go
@@ -34,7 +34,7 @@
 	},
 	"chromium.googlesource.com/chromium/deps/libjpeg_turbo": {
 		Id:      "chromium.googlesource.com/chromium/deps/libjpeg_turbo",
-		Version: "ccfbe1c82a3b6dbe8647ceb36a3f9ee711fba3cf",
+		Version: "e14cbfaa85529d47f9f55b0f104a579c1061f9ad",
 		Path:    "third_party/externals/libjpeg-turbo",
 	},
 	"chromium.googlesource.com/chromium/src/base/allocator/partition_allocator": {
diff --git a/src/codec/SkJpegDecoderMgr.cpp b/src/codec/SkJpegDecoderMgr.cpp
index 5ae9573..817f039 100644
--- a/src/codec/SkJpegDecoderMgr.cpp
+++ b/src/codec/SkJpegDecoderMgr.cpp
@@ -15,6 +15,7 @@
     #include "include/android/SkAndroidFrameworkUtils.h"
 #endif
 
+#include <jpeglib.h>
 #include <cstddef>
 #include <utility>
 
diff --git a/third_party/libjpeg-turbo/BUILD.gn b/third_party/libjpeg-turbo/BUILD.gn
index a997082..569ec0b 100644
--- a/third_party/libjpeg-turbo/BUILD.gn
+++ b/third_party/libjpeg-turbo/BUILD.gn
@@ -14,10 +14,122 @@
     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 = [
@@ -34,57 +146,19 @@
       defines += [ "USE_CLZ_INTRINSIC" ]  # Cuts a 64K table.
     }
 
-    sources = [
-      "../externals/libjpeg-turbo/jaricom.c",
-      "../externals/libjpeg-turbo/jcapimin.c",
-      "../externals/libjpeg-turbo/jcapistd.c",
-      "../externals/libjpeg-turbo/jcarith.c",
-      "../externals/libjpeg-turbo/jccoefct.c",
-      "../externals/libjpeg-turbo/jccolor.c",
-      "../externals/libjpeg-turbo/jcdctmgr.c",
-      "../externals/libjpeg-turbo/jchuff.c",
-      "../externals/libjpeg-turbo/jcinit.c",
-      "../externals/libjpeg-turbo/jcmainct.c",
-      "../externals/libjpeg-turbo/jcmarker.c",
-      "../externals/libjpeg-turbo/jcmaster.c",
-      "../externals/libjpeg-turbo/jcomapi.c",
-      "../externals/libjpeg-turbo/jcparam.c",
-      "../externals/libjpeg-turbo/jcphuff.c",
-      "../externals/libjpeg-turbo/jcprepct.c",
-      "../externals/libjpeg-turbo/jcsample.c",
-      "../externals/libjpeg-turbo/jdapimin.c",
-      "../externals/libjpeg-turbo/jdapistd.c",
-      "../externals/libjpeg-turbo/jdarith.c",
-      "../externals/libjpeg-turbo/jdcoefct.c",
-      "../externals/libjpeg-turbo/jdcolor.c",
-      "../externals/libjpeg-turbo/jddctmgr.c",
-      "../externals/libjpeg-turbo/jdhuff.c",
-      "../externals/libjpeg-turbo/jdinput.c",
-      "../externals/libjpeg-turbo/jdmainct.c",
-      "../externals/libjpeg-turbo/jdmarker.c",
-      "../externals/libjpeg-turbo/jdmaster.c",
-      "../externals/libjpeg-turbo/jdmerge.c",
-      "../externals/libjpeg-turbo/jdphuff.c",
-      "../externals/libjpeg-turbo/jdpostct.c",
-      "../externals/libjpeg-turbo/jdsample.c",
-      "../externals/libjpeg-turbo/jerror.c",
-      "../externals/libjpeg-turbo/jfdctflt.c",
-      "../externals/libjpeg-turbo/jfdctfst.c",
-      "../externals/libjpeg-turbo/jfdctint.c",
-      "../externals/libjpeg-turbo/jidctflt.c",
-      "../externals/libjpeg-turbo/jidctfst.c",
-      "../externals/libjpeg-turbo/jidctint.c",
-      "../externals/libjpeg-turbo/jidctred.c",
-      "../externals/libjpeg-turbo/jmemmgr.c",
-      "../externals/libjpeg-turbo/jmemnobs.c",
-      "../externals/libjpeg-turbo/jpeg_nbits_table.c",
-      "../externals/libjpeg-turbo/jquant1.c",
-      "../externals/libjpeg-turbo/jquant2.c",
-      "../externals/libjpeg-turbo/jutils.c",
+    sources = libjpeg_sources
+
+    public_deps = [
+      ":libjpeg12",
+      ":libjpeg16",
+      ":libjpeg_headers",
     ]
 
     if (!is_win && (current_cpu == "arm" || current_cpu == "arm64")) {
-      defines += [ "NEON_INTRINSICS" ]
+      defines += [
+        "NEON_INTRINSICS",
+        "WITH_SIMD",
+      ]
       sources += [
         "../externals/libjpeg-turbo/simd/arm/jccolor-neon.c",
         "../externals/libjpeg-turbo/simd/arm/jcgray-neon.c",
@@ -112,8 +186,6 @@
           "../externals/libjpeg-turbo/simd/arm/aarch64/jsimd.c",
         ]
       }
-    } else {
-      sources += [ "../externals/libjpeg-turbo/jsimd_none.c" ]
     }
   }
 }
diff --git a/toolchain/linux_trampolines/IWYU_mapping.imp b/toolchain/linux_trampolines/IWYU_mapping.imp
index dca1b9d..060af94 100644
--- a/toolchain/linux_trampolines/IWYU_mapping.imp
+++ b/toolchain/linux_trampolines/IWYU_mapping.imp
@@ -636,6 +636,7 @@
   { include: ["\"modules/skcms/src/skcms_public.h\"", "private", "\"modules/skcms/skcms.h\"", "public"] },
 
   { include: ["\"jmorecfg.h\"", "private", "\"jpeglib.h\"", "public"] },
+  { include: ["<jmorecfg.h>", "private", "\"jpeglib.h\"", "public"] },
 
   { include: ["\"chromeconf.h\"", "private", "\"zlib.h\"", "public"] },
 ]