1# This file will be copied into //third_party/externals/libjpeg-turbo via the new_local_repository 2# rule in WORKSPACE.bazel, so all files should be relative to that path. 3load("@bazel_skylib//lib:selects.bzl", "selects") 4 5config_setting( 6 name = "mac_arm64", 7 constraint_values = [ 8 "@platforms//cpu:arm64", 9 "@platforms//os:macos", 10 ], 11) 12 13selects.config_setting_group( 14 name = "arm_or_arm64", 15 match_any = [ 16 "@platforms//cpu:arm", 17 "@platforms//cpu:arm64", 18 ], 19) 20 21JPEGTURBO_SRCS = [ 22 "jaricom.c", 23 "jcapimin.c", 24 "jcapistd.c", 25 "jcarith.c", 26 "jccoefct.c", 27 "jccolor.c", 28 "jcdctmgr.c", 29 "jchuff.c", 30 "jchuff.h", 31 "jcinit.c", 32 "jcmainct.c", 33 "jcmarker.c", 34 "jcmaster.c", 35 "jcomapi.c", 36 "jconfigint.h", 37 "jcparam.c", 38 "jcphuff.c", 39 "jcprepct.c", 40 "jcsample.c", 41 "jdapimin.c", 42 "jdapistd.c", 43 "jdarith.c", 44 "jdcoefct.c", 45 "jdcoefct.h", 46 "jdcolor.c", 47 "jdct.h", 48 "jddctmgr.c", 49 "jdhuff.c", 50 "jdhuff.h", 51 "jdinput.c", 52 "jdmainct.c", 53 "jdmainct.h", 54 "jdmarker.c", 55 "jdmaster.c", 56 "jdmaster.h", 57 "jdmerge.c", 58 "jdmerge.h", 59 "jdphuff.c", 60 "jdpostct.c", 61 "jdsample.c", 62 "jdsample.h", 63 "jerror.c", 64 "jfdctflt.c", 65 "jfdctfst.c", 66 "jfdctint.c", 67 "jidctflt.c", 68 "jidctfst.c", 69 "jidctint.c", 70 "jidctred.c", 71 "jinclude.h", 72 "jmemmgr.c", 73 "jmemnobs.c", 74 "jmemsys.h", 75 "jpeg_nbits_table.c", 76 "jpeg_nbits_table.h", 77 "jpegcomp.h", 78 "jpegint.h", 79 "jquant1.c", 80 "jquant2.c", 81 "jsimd.h", 82 "jsimddct.h", 83 "jutils.c", 84 "jversion.h", 85] + select({ 86 ":arm_or_arm64": [ 87 "simd/arm/jccolor-neon.c", 88 "simd/arm/jcgray-neon.c", 89 "simd/arm/jchuff.h", 90 "simd/arm/jcphuff-neon.c", 91 "simd/arm/jcsample-neon.c", 92 "simd/arm/jdcolor-neon.c", 93 "simd/arm/jdmerge-neon.c", 94 "simd/arm/jdsample-neon.c", 95 "simd/arm/jfdctfst-neon.c", 96 "simd/arm/jfdctint-neon.c", 97 "simd/arm/jidctfst-neon.c", 98 "simd/arm/jidctint-neon.c", 99 "simd/arm/jidctred-neon.c", 100 "simd/arm/jquanti-neon.c", 101 "simd/arm/neon-compat.h", 102 "simd/jsimd.h", 103 ], 104 "//conditions:default": ["jsimd_none.c"], 105}) + select({ 106 "@platforms//cpu:arm": [ 107 "simd/arm/aarch32/jchuff-neon.c", 108 "simd/arm/aarch32/jsimd.c", 109 ], 110 "@platforms//cpu:arm64": [ 111 "simd/arm/aarch64/jchuff-neon.c", 112 "simd/arm/aarch64/jsimd.c", 113 "simd/arm/align.h", 114 ], 115 "//conditions:default": [], 116}) 117 118JPEGTURBO_TEXT_HDRS = [ 119 "jccolext.c", 120 "jdmrgext.c", 121 "jdcolext.c", 122 "jdcol565.c", 123 "jdmrg565.c", 124 "jstdhuff.c", 125] + select({ 126 ":arm_or_arm64": [ 127 "simd/arm/jdmrgext-neon.c", 128 "simd/arm/jcgryext-neon.c", 129 "simd/arm/jdcolext-neon.c", 130 ], 131 "//conditions:default": [], 132}) + select({ 133 "@platforms//cpu:arm": [ 134 "simd/arm/aarch32/jccolext-neon.c", 135 ], 136 "@platforms//cpu:arm64": [ 137 "simd/arm/aarch64/jccolext-neon.c", 138 ], 139 "//conditions:default": [], 140}) 141 142JPEGTURBO_DEFINES = [ 143 # Add support for arithmetic encoding (C_) and decoding (D_). 144 # This matches Android. Note that such JPEGs are likely rare, given lack of 145 # support by major browsers. 146 "C_ARITH_CODING_SUPPORTED=1", 147 "D_ARITH_CODING_SUPPORTED=1", 148] + select({ 149 ":arm_or_arm64": ["NEON_INTRINSICS"], 150 "//conditions:default": [], 151}) + select({ 152 # Cuts a 64K table. 153 "//conditions:default": ["USE_CLZ_INTRINSIC"], 154 ":mac_arm64": [], # disabled on M1 macs already 155 "@platforms//os:windows": [], 156}) 157 158cc_library( 159 name = "libjpeg_turbo", 160 srcs = JPEGTURBO_SRCS, 161 hdrs = [ 162 "jconfig.h", 163 "jerror.h", 164 "jmorecfg.h", 165 "jpeglib.h", 166 "jpeglibmangler.h", 167 ], 168 copts = [ 169 # There are some #include "neon-compat.h" etc that need this search path 170 "-Iexternal/libjpeg_turbo/simd/arm/", 171 ], 172 local_defines = JPEGTURBO_DEFINES, 173 textual_hdrs = JPEGTURBO_TEXT_HDRS, 174 visibility = ["//visibility:public"], 175) 176