1# Description: 2# libjpeg-turbo is a drop in replacement for jpeglib optimized with SIMD. 3 4load("@org_tensorflow//third_party:common.bzl", "template_rule") 5 6licenses(["notice"]) # custom notice-style license, see LICENSE.md 7 8exports_files(["LICENSE.md"]) 9 10WIN_COPTS = [ 11 "/Ox", 12 "-DWITH_SIMD", 13 "-wd4996", 14] 15 16libjpegturbo_copts = select({ 17 ":android": [ 18 "-O3", 19 "-fPIC", 20 "-w", 21 ], 22 ":windows": WIN_COPTS, 23 "//conditions:default": [ 24 "-O3", 25 "-w", 26 ], 27}) + select({ 28 ":armeabi-v7a": [ 29 "-D__ARM_NEON__", 30 "-DNEON_INTRINSICS", 31 "-march=armv7-a", 32 "-mfpu=neon", 33 "-mfloat-abi=softfp", 34 "-fprefetch-loop-arrays", 35 ], 36 ":arm64-v8a": [ 37 "-DNEON_INTRINSICS", 38 ], 39 ":linux_ppc64le": [ 40 "-mcpu=power8", 41 "-mtune=power8", 42 ], 43 "//conditions:default": [], 44}) 45 46cc_library( 47 name = "jpeg", 48 srcs = [ 49 "jaricom.c", 50 "jcapimin.c", 51 "jcapistd.c", 52 "jcarith.c", 53 "jccoefct.c", 54 "jccolor.c", 55 "jcdctmgr.c", 56 "jchuff.c", 57 "jchuff.h", 58 "jcinit.c", 59 "jcmainct.c", 60 "jcmarker.c", 61 "jcmaster.c", 62 "jcomapi.c", 63 "jconfig.h", 64 "jconfigint.h", 65 "jcparam.c", 66 "jcphuff.c", 67 "jcprepct.c", 68 "jcsample.c", 69 "jctrans.c", 70 "jdapimin.c", 71 "jdapistd.c", 72 "jdarith.c", 73 "jdatadst.c", 74 "jdatasrc.c", 75 "jdcoefct.c", 76 "jdcoefct.h", 77 "jdcolor.c", 78 "jdct.h", 79 "jddctmgr.c", 80 "jdhuff.c", 81 "jdhuff.h", 82 "jdinput.c", 83 "jdmainct.c", 84 "jdmainct.h", 85 "jdmarker.c", 86 "jdmaster.c", 87 "jdmaster.h", 88 "jdmerge.c", 89 "jdmerge.h", 90 "jdphuff.c", 91 "jdpostct.c", 92 "jdsample.c", 93 "jdsample.h", 94 "jdtrans.c", 95 "jerror.c", 96 "jfdctflt.c", 97 "jfdctfst.c", 98 "jfdctint.c", 99 "jidctflt.c", 100 "jidctfst.c", 101 "jidctint.c", 102 "jidctred.c", 103 "jinclude.h", 104 "jmemmgr.c", 105 "jmemnobs.c", 106 "jmemsys.h", 107 "jpeg_nbits_table.h", 108 "jpegcomp.h", 109 "jquant1.c", 110 "jquant2.c", 111 "jutils.c", 112 "jversion.h", 113 ], 114 hdrs = [ 115 "jccolext.c", # should have been named .inc 116 "jdcol565.c", # should have been named .inc 117 "jdcolext.c", # should have been named .inc 118 "jdmrg565.c", # should have been named .inc 119 "jdmrgext.c", # should have been named .inc 120 "jerror.h", 121 "jmorecfg.h", 122 "jpegint.h", 123 "jpeglib.h", 124 "jstdhuff.c", # should have been named .inc 125 ], 126 copts = libjpegturbo_copts, 127 visibility = ["//visibility:public"], 128 deps = select({ 129 ":k8": [":simd_x86_64"], 130 ":armeabi-v7a": [":simd_armv7a"], 131 ":arm64-v8a": [":simd_armv8a"], 132 ":linux_ppc64le": [":simd_altivec"], 133 ":windows": [":simd_win_x86_64"], 134 "//conditions:default": [":simd_none"], 135 }), 136) 137 138cc_library( 139 name = "simd_altivec", 140 srcs = [ 141 "jchuff.h", 142 "jconfig.h", 143 "jdct.h", 144 "jerror.h", 145 "jinclude.h", 146 "jmorecfg.h", 147 "jpegint.h", 148 "jpeglib.h", 149 "jsimd.h", 150 "jsimddct.h", 151 "simd/jsimd.h", 152 "simd/powerpc/jccolor-altivec.c", 153 "simd/powerpc/jcgray-altivec.c", 154 "simd/powerpc/jcsample-altivec.c", 155 "simd/powerpc/jdcolor-altivec.c", 156 "simd/powerpc/jdmerge-altivec.c", 157 "simd/powerpc/jdsample-altivec.c", 158 "simd/powerpc/jfdctfst-altivec.c", 159 "simd/powerpc/jfdctint-altivec.c", 160 "simd/powerpc/jidctfst-altivec.c", 161 "simd/powerpc/jidctint-altivec.c", 162 "simd/powerpc/jquanti-altivec.c", 163 "simd/powerpc/jsimd.c", 164 ], 165 hdrs = [ 166 "simd/powerpc/jccolext-altivec.c", 167 "simd/powerpc/jcgryext-altivec.c", 168 "simd/powerpc/jcsample.h", 169 "simd/powerpc/jdcolext-altivec.c", 170 "simd/powerpc/jdmrgext-altivec.c", 171 "simd/powerpc/jsimd_altivec.h", 172 ], 173 copts = libjpegturbo_copts, 174) 175 176SRCS_SIMD_COMMON = [ 177 "jchuff.h", 178 "jconfig.h", 179 "jconfigint.h", 180 "jdct.h", 181 "jerror.h", 182 "jinclude.h", 183 "jmorecfg.h", 184 "jpegint.h", 185 "jpeglib.h", 186 "jsimddct.h", 187 "jsimd.h", 188 "simd/jsimd.h", 189] 190 191cc_library( 192 name = "simd_x86_64", 193 srcs = [ 194 "simd/x86_64/jccolor-avx2.o", 195 "simd/x86_64/jccolor-sse2.o", 196 "simd/x86_64/jcgray-avx2.o", 197 "simd/x86_64/jcgray-sse2.o", 198 "simd/x86_64/jchuff-sse2.o", 199 "simd/x86_64/jcphuff-sse2.o", 200 "simd/x86_64/jcsample-avx2.o", 201 "simd/x86_64/jcsample-sse2.o", 202 "simd/x86_64/jdcolor-avx2.o", 203 "simd/x86_64/jdcolor-sse2.o", 204 "simd/x86_64/jdmerge-avx2.o", 205 "simd/x86_64/jdmerge-sse2.o", 206 "simd/x86_64/jdsample-avx2.o", 207 "simd/x86_64/jdsample-sse2.o", 208 "simd/x86_64/jfdctflt-sse.o", 209 "simd/x86_64/jfdctfst-sse2.o", 210 "simd/x86_64/jfdctint-avx2.o", 211 "simd/x86_64/jfdctint-sse2.o", 212 "simd/x86_64/jidctflt-sse2.o", 213 "simd/x86_64/jidctfst-sse2.o", 214 "simd/x86_64/jidctint-avx2.o", 215 "simd/x86_64/jidctint-sse2.o", 216 "simd/x86_64/jidctred-sse2.o", 217 "simd/x86_64/jquantf-sse2.o", 218 "simd/x86_64/jquanti-avx2.o", 219 "simd/x86_64/jquanti-sse2.o", 220 "simd/x86_64/jsimd.c", 221 "simd/x86_64/jsimdcpu.o", 222 ] + SRCS_SIMD_COMMON, 223 copts = libjpegturbo_copts, 224 linkstatic = 1, 225) 226 227genrule( 228 name = "simd_x86_64_assemblage23", 229 srcs = [ 230 "jconfig.h", 231 "jconfigint.h", 232 "simd/x86_64/jccolext-avx2.asm", 233 "simd/x86_64/jccolext-sse2.asm", 234 "simd/x86_64/jccolor-avx2.asm", 235 "simd/x86_64/jccolor-sse2.asm", 236 "simd/x86_64/jcgray-avx2.asm", 237 "simd/x86_64/jcgray-sse2.asm", 238 "simd/x86_64/jcgryext-avx2.asm", 239 "simd/x86_64/jcgryext-sse2.asm", 240 "simd/x86_64/jchuff-sse2.asm", 241 "simd/x86_64/jcphuff-sse2.asm", 242 "simd/x86_64/jcsample-avx2.asm", 243 "simd/x86_64/jcsample-sse2.asm", 244 "simd/x86_64/jdcolext-avx2.asm", 245 "simd/x86_64/jdcolext-sse2.asm", 246 "simd/x86_64/jdcolor-avx2.asm", 247 "simd/x86_64/jdcolor-sse2.asm", 248 "simd/x86_64/jdmerge-avx2.asm", 249 "simd/x86_64/jdmerge-sse2.asm", 250 "simd/x86_64/jdmrgext-avx2.asm", 251 "simd/x86_64/jdmrgext-sse2.asm", 252 "simd/x86_64/jdsample-avx2.asm", 253 "simd/x86_64/jdsample-sse2.asm", 254 "simd/x86_64/jfdctflt-sse.asm", 255 "simd/x86_64/jfdctfst-sse2.asm", 256 "simd/x86_64/jfdctint-avx2.asm", 257 "simd/x86_64/jfdctint-sse2.asm", 258 "simd/x86_64/jidctflt-sse2.asm", 259 "simd/x86_64/jidctfst-sse2.asm", 260 "simd/x86_64/jidctint-avx2.asm", 261 "simd/x86_64/jidctint-sse2.asm", 262 "simd/x86_64/jidctred-sse2.asm", 263 "simd/x86_64/jquantf-sse2.asm", 264 "simd/x86_64/jquanti-avx2.asm", 265 "simd/x86_64/jquanti-sse2.asm", 266 "simd/x86_64/jsimdcpu.asm", 267 "simd/nasm/jcolsamp.inc", 268 "simd/nasm/jdct.inc", 269 "simd/nasm/jsimdcfg.inc", 270 "simd/nasm/jsimdcfg.inc.h", 271 "simd/nasm/jsimdext.inc", 272 ], 273 outs = [ 274 "simd/x86_64/jccolor-avx2.o", 275 "simd/x86_64/jccolor-sse2.o", 276 "simd/x86_64/jcgray-avx2.o", 277 "simd/x86_64/jcgray-sse2.o", 278 "simd/x86_64/jchuff-sse2.o", 279 "simd/x86_64/jcphuff-sse2.o", 280 "simd/x86_64/jcsample-avx2.o", 281 "simd/x86_64/jcsample-sse2.o", 282 "simd/x86_64/jdcolor-avx2.o", 283 "simd/x86_64/jdcolor-sse2.o", 284 "simd/x86_64/jdmerge-avx2.o", 285 "simd/x86_64/jdmerge-sse2.o", 286 "simd/x86_64/jdsample-avx2.o", 287 "simd/x86_64/jdsample-sse2.o", 288 "simd/x86_64/jfdctflt-sse.o", 289 "simd/x86_64/jfdctfst-sse2.o", 290 "simd/x86_64/jfdctint-avx2.o", 291 "simd/x86_64/jfdctint-sse2.o", 292 "simd/x86_64/jidctflt-sse2.o", 293 "simd/x86_64/jidctfst-sse2.o", 294 "simd/x86_64/jidctint-avx2.o", 295 "simd/x86_64/jidctint-sse2.o", 296 "simd/x86_64/jidctred-sse2.o", 297 "simd/x86_64/jquantf-sse2.o", 298 "simd/x86_64/jquanti-avx2.o", 299 "simd/x86_64/jquanti-sse2.o", 300 "simd/x86_64/jsimdcpu.o", 301 ], 302 cmd = "for out in $(OUTS); do\n" + 303 " $(location @nasm//:nasm) -f elf64" + 304 " -DELF -DPIC -D__x86_64__" + 305 " -I $$(dirname $(location jconfig.h))/" + 306 " -I $$(dirname $(location jconfigint.h))/" + 307 " -I $$(dirname $(location simd/nasm/jsimdcfg.inc.h))/" + 308 " -I $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/" + 309 " -o $$out" + 310 " $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/$$(basename $${out%.o}.asm)\n" + 311 "done", 312 tools = ["@nasm"], 313) 314 315template_rule( 316 name = "neon-compat_gen", 317 src = "simd/arm/neon-compat.h.in", 318 out = "simd/arm/neon-compat.h", 319 substitutions = { 320 "#cmakedefine HAVE_VLD1_S16_X3": "#define HAVE_VLD1_S16_X3", 321 "#cmakedefine HAVE_VLD1_U16_X2": "#define HAVE_VLD1_U16_X2", 322 "#cmakedefine HAVE_VLD1Q_U8_X4": "#define HAVE_VLD1Q_U8_X4", 323 }, 324) 325 326genrule( 327 name = "neon-compat_hdr_src", 328 srcs = ["simd/arm/neon-compat.h"], 329 outs = ["neon-compat.h"], 330 cmd = "cp $(location simd/arm/neon-compat.h) $@", 331) 332 333cc_library( 334 name = "neon-compat_hdr", 335 hdrs = ["neon-compat.h"], 336 copts = libjpegturbo_copts, 337) 338 339SRCS_SIMD_ARM = [ 340 "simd/arm/jccolor-neon.c", 341 "simd/arm/jcgray-neon.c", 342 "simd/arm/jcphuff-neon.c", 343 "simd/arm/jcsample-neon.c", 344 "simd/arm/jdcolor-neon.c", 345 "simd/arm/jdmerge-neon.c", 346 "simd/arm/jdsample-neon.c", 347 "simd/arm/jfdctfst-neon.c", 348 "simd/arm/jfdctint-neon.c", 349 "simd/arm/jidctfst-neon.c", 350 "simd/arm/jidctint-neon.c", 351 "simd/arm/jidctred-neon.c", 352 "simd/arm/jquanti-neon.c", 353] 354 355# .c files in the following list are used like .h files in that they are 356# "#include"-ed in the actual .c files. So, treat them like normal headers, and 357# they *should not* be compiled into individual objects. 358HDRS_SIMD_ARM = [ 359 "simd/arm/align.h", 360 "simd/arm/jchuff.h", 361 "simd/arm/jcgryext-neon.c", 362 "simd/arm/jdcolext-neon.c", 363 "simd/arm/jdmrgext-neon.c", 364] 365 366cc_library( 367 name = "simd_armv7a", 368 srcs = [ 369 "simd/arm/aarch32/jsimd.c", 370 "simd/arm/aarch32/jchuff-neon.c", 371 ] + SRCS_SIMD_COMMON + SRCS_SIMD_ARM, 372 hdrs = [ 373 "simd/arm/aarch32/jccolext-neon.c", 374 ] + HDRS_SIMD_ARM, 375 copts = libjpegturbo_copts, 376 visibility = ["//visibility:private"], 377 deps = [":neon-compat_hdr"], 378) 379 380cc_library( 381 name = "simd_armv8a", 382 srcs = [ 383 "simd/arm/aarch64/jsimd.c", 384 "simd/arm/aarch64/jchuff-neon.c", 385 ] + SRCS_SIMD_COMMON + SRCS_SIMD_ARM, 386 hdrs = [ 387 "simd/arm/aarch64/jccolext-neon.c", 388 ] + HDRS_SIMD_ARM, 389 copts = libjpegturbo_copts, 390 visibility = ["//visibility:private"], 391 deps = [":neon-compat_hdr"], 392) 393 394cc_library( 395 name = "simd_win_x86_64", 396 srcs = [ 397 "simd/x86_64/jccolor-avx2.obj", 398 "simd/x86_64/jccolor-sse2.obj", 399 "simd/x86_64/jcgray-avx2.obj", 400 "simd/x86_64/jcgray-sse2.obj", 401 "simd/x86_64/jchuff-sse2.obj", 402 "simd/x86_64/jcphuff-sse2.obj", 403 "simd/x86_64/jcsample-avx2.obj", 404 "simd/x86_64/jcsample-sse2.obj", 405 "simd/x86_64/jdcolor-avx2.obj", 406 "simd/x86_64/jdcolor-sse2.obj", 407 "simd/x86_64/jdmerge-avx2.obj", 408 "simd/x86_64/jdmerge-sse2.obj", 409 "simd/x86_64/jdsample-avx2.obj", 410 "simd/x86_64/jdsample-sse2.obj", 411 "simd/x86_64/jfdctflt-sse.obj", 412 "simd/x86_64/jfdctfst-sse2.obj", 413 "simd/x86_64/jfdctint-avx2.obj", 414 "simd/x86_64/jfdctint-sse2.obj", 415 "simd/x86_64/jidctflt-sse2.obj", 416 "simd/x86_64/jidctfst-sse2.obj", 417 "simd/x86_64/jidctint-avx2.obj", 418 "simd/x86_64/jidctint-sse2.obj", 419 "simd/x86_64/jidctred-sse2.obj", 420 "simd/x86_64/jquantf-sse2.obj", 421 "simd/x86_64/jquanti-avx2.obj", 422 "simd/x86_64/jquanti-sse2.obj", 423 "simd/x86_64/jsimd.c", 424 "simd/x86_64/jsimdcpu.obj", 425 ] + SRCS_SIMD_COMMON, 426 copts = libjpegturbo_copts, 427) 428 429genrule( 430 name = "simd_win_x86_64_assemble", 431 srcs = [ 432 "jconfig.h", 433 "jconfigint.h", 434 "simd/x86_64/jccolext-avx2.asm", 435 "simd/x86_64/jccolext-sse2.asm", 436 "simd/x86_64/jccolor-avx2.asm", 437 "simd/x86_64/jccolor-sse2.asm", 438 "simd/x86_64/jcgray-avx2.asm", 439 "simd/x86_64/jcgray-sse2.asm", 440 "simd/x86_64/jcgryext-avx2.asm", 441 "simd/x86_64/jcgryext-sse2.asm", 442 "simd/x86_64/jchuff-sse2.asm", 443 "simd/x86_64/jcphuff-sse2.asm", 444 "simd/x86_64/jcsample-avx2.asm", 445 "simd/x86_64/jcsample-sse2.asm", 446 "simd/x86_64/jdcolext-avx2.asm", 447 "simd/x86_64/jdcolext-sse2.asm", 448 "simd/x86_64/jdcolor-avx2.asm", 449 "simd/x86_64/jdcolor-sse2.asm", 450 "simd/x86_64/jdmerge-avx2.asm", 451 "simd/x86_64/jdmerge-sse2.asm", 452 "simd/x86_64/jdmrgext-avx2.asm", 453 "simd/x86_64/jdmrgext-sse2.asm", 454 "simd/x86_64/jdsample-avx2.asm", 455 "simd/x86_64/jdsample-sse2.asm", 456 "simd/x86_64/jfdctflt-sse.asm", 457 "simd/x86_64/jfdctfst-sse2.asm", 458 "simd/x86_64/jfdctint-avx2.asm", 459 "simd/x86_64/jfdctint-sse2.asm", 460 "simd/x86_64/jidctflt-sse2.asm", 461 "simd/x86_64/jidctfst-sse2.asm", 462 "simd/x86_64/jidctint-avx2.asm", 463 "simd/x86_64/jidctint-sse2.asm", 464 "simd/x86_64/jidctred-sse2.asm", 465 "simd/x86_64/jquantf-sse2.asm", 466 "simd/x86_64/jquanti-avx2.asm", 467 "simd/x86_64/jquanti-sse2.asm", 468 "simd/x86_64/jsimdcpu.asm", 469 "simd/nasm/jcolsamp.inc", 470 "simd/nasm/jdct.inc", 471 "simd/nasm/jsimdcfg.inc", 472 "simd/nasm/jsimdcfg.inc.h", 473 "simd/nasm/jsimdext.inc", 474 ], 475 outs = [ 476 "simd/x86_64/jccolor-avx2.obj", 477 "simd/x86_64/jccolor-sse2.obj", 478 "simd/x86_64/jcgray-avx2.obj", 479 "simd/x86_64/jcgray-sse2.obj", 480 "simd/x86_64/jchuff-sse2.obj", 481 "simd/x86_64/jcphuff-sse2.obj", 482 "simd/x86_64/jcsample-avx2.obj", 483 "simd/x86_64/jcsample-sse2.obj", 484 "simd/x86_64/jdcolor-avx2.obj", 485 "simd/x86_64/jdcolor-sse2.obj", 486 "simd/x86_64/jdmerge-avx2.obj", 487 "simd/x86_64/jdmerge-sse2.obj", 488 "simd/x86_64/jdsample-avx2.obj", 489 "simd/x86_64/jdsample-sse2.obj", 490 "simd/x86_64/jfdctflt-sse.obj", 491 "simd/x86_64/jfdctfst-sse2.obj", 492 "simd/x86_64/jfdctint-avx2.obj", 493 "simd/x86_64/jfdctint-sse2.obj", 494 "simd/x86_64/jidctflt-sse2.obj", 495 "simd/x86_64/jidctfst-sse2.obj", 496 "simd/x86_64/jidctint-avx2.obj", 497 "simd/x86_64/jidctint-sse2.obj", 498 "simd/x86_64/jidctred-sse2.obj", 499 "simd/x86_64/jquantf-sse2.obj", 500 "simd/x86_64/jquanti-avx2.obj", 501 "simd/x86_64/jquanti-sse2.obj", 502 "simd/x86_64/jsimdcpu.obj", 503 ], 504 cmd = "for out in $(OUTS); do\n" + 505 " $(location @nasm//:nasm) -fwin64 -DWIN64 -D__x86_64__" + 506 " -I $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/" + 507 " -I $$(dirname $(location simd/nasm/jdct.inc))/" + 508 " -I $$(dirname $(location simd/nasm/jdct.inc))/../../win/" + 509 " -o $$out" + 510 " $$(dirname $(location simd/x86_64/jccolext-sse2.asm))/$$(basename $${out%.obj}.asm)\n" + 511 "done", 512 tools = ["@nasm"], 513) 514 515cc_library( 516 name = "simd_none", 517 srcs = [ 518 "jchuff.h", 519 "jconfig.h", 520 "jdct.h", 521 "jerror.h", 522 "jinclude.h", 523 "jmorecfg.h", 524 "jpegint.h", 525 "jpeglib.h", 526 "jsimd.h", 527 "jsimd_none.c", 528 "jsimddct.h", 529 ], 530 copts = libjpegturbo_copts, 531) 532 533template_rule( 534 name = "jconfig_win", 535 src = "win/jconfig.h.in", 536 out = "jconfig_win.h", 537 substitutions = { 538 "@JPEG_LIB_VERSION@": "62", 539 "@VERSION@": "2.0.0", 540 "@LIBJPEG_TURBO_VERSION_NUMBER@": "2000000", 541 "@BITS_IN_JSAMPLE@": "8", 542 "#cmakedefine C_ARITH_CODING_SUPPORTED": "#define C_ARITH_CODING_SUPPORTED", 543 "#cmakedefine D_ARITH_CODING_SUPPORTED": "#define D_ARITH_CODING_SUPPORTED", 544 "#cmakedefine MEM_SRCDST_SUPPORTED": "#define MEM_SRCDST_SUPPORTED", 545 "#cmakedefine WITH_SIMD": "", 546 }, 547) 548 549JCONFIG_NOWIN_COMMON_SUBSTITUTIONS = { 550 "@JPEG_LIB_VERSION@": "62", 551 "@VERSION@": "2.0.0", 552 "@LIBJPEG_TURBO_VERSION_NUMBER@": "2000000", 553 "#cmakedefine C_ARITH_CODING_SUPPORTED 1": "#define C_ARITH_CODING_SUPPORTED 1", 554 "#cmakedefine D_ARITH_CODING_SUPPORTED 1": "#define D_ARITH_CODING_SUPPORTED 1", 555 "#cmakedefine MEM_SRCDST_SUPPORTED 1": "#define MEM_SRCDST_SUPPORTED 1", 556 "@BITS_IN_JSAMPLE@": "8", 557 "#cmakedefine HAVE_LOCALE_H 1": "#define HAVE_LOCALE_H 1", 558 "#cmakedefine HAVE_STDDEF_H 1": "#define HAVE_STDDEF_H 1", 559 "#cmakedefine HAVE_STDLIB_H 1": "#define HAVE_STDLIB_H 1", 560 "#cmakedefine NEED_SYS_TYPES_H 1": "#define NEED_SYS_TYPES_H 1", 561 "#cmakedefine NEED_BSD_STRINGS 1": "", 562 "#cmakedefine HAVE_UNSIGNED_CHAR 1": "#define HAVE_UNSIGNED_CHAR 1", 563 "#cmakedefine HAVE_UNSIGNED_SHORT 1": "#define HAVE_UNSIGNED_SHORT 1", 564 "#cmakedefine INCOMPLETE_TYPES_BROKEN 1": "", 565 "#cmakedefine RIGHT_SHIFT_IS_UNSIGNED 1": "", 566 "#cmakedefine __CHAR_UNSIGNED__ 1": "", 567 "#undef const": "", 568 "#undef size_t": "", 569} 570 571JCONFIG_NOWIN_SIMD_SUBSTITUTIONS = { 572 "#cmakedefine WITH_SIMD 1": "#define WITH_SIMD 1", 573} 574 575JCONFIG_NOWIN_NOSIMD_SUBSTITUTIONS = { 576 "#cmakedefine WITH_SIMD 1": "", 577} 578 579JCONFIG_NOWIN_SIMD_SUBSTITUTIONS.update(JCONFIG_NOWIN_COMMON_SUBSTITUTIONS) 580 581JCONFIG_NOWIN_NOSIMD_SUBSTITUTIONS.update(JCONFIG_NOWIN_COMMON_SUBSTITUTIONS) 582 583template_rule( 584 name = "jconfig_nowin_nosimd", 585 src = "jconfig.h.in", 586 out = "jconfig_nowin_nosimd.h", 587 substitutions = JCONFIG_NOWIN_NOSIMD_SUBSTITUTIONS, 588) 589 590template_rule( 591 name = "jconfig_nowin_simd", 592 src = "jconfig.h.in", 593 out = "jconfig_nowin_simd.h", 594 substitutions = JCONFIG_NOWIN_SIMD_SUBSTITUTIONS, 595) 596 597JCONFIGINT_COMMON_SUBSTITUTIONS = { 598 "@BUILD@": "20210424", 599 "@VERSION@": "2.1.0", 600 "@CMAKE_PROJECT_NAME@": "libjpeg-turbo", 601 "#undef inline": "", 602 "#cmakedefine HAVE_INTRIN_H": "", 603} 604 605JCONFIGINT_NOWIN_SUBSTITUTIONS = { 606 "#cmakedefine HAVE_BUILTIN_CTZL": "#define HAVE_BUILTIN_CTZL", 607 "@INLINE@": "inline __attribute__((always_inline))", 608 "#define SIZEOF_SIZE_T @SIZE_T@": "#if (__WORDSIZE==64 && !defined(__native_client__))\n" + 609 "#define SIZEOF_SIZE_T 8\n" + 610 "#else\n" + 611 "#define SIZEOF_SIZE_T 4\n" + 612 "#endif\n", 613} 614 615JCONFIGINT_WIN_SUBSTITUTIONS = { 616 "#cmakedefine HAVE_BUILTIN_CTZL": "", 617 "#define INLINE @INLINE@": "#if defined(__GNUC__)\n" + 618 "#define INLINE inline __attribute__((always_inline))\n" + 619 "#elif defined(_MSC_VER)\n" + 620 "#define INLINE __forceinline\n" + 621 "#else\n" + 622 "#define INLINE\n" + 623 "#endif\n", 624 "#define SIZEOF_SIZE_T @SIZE_T@": "#if (__WORDSIZE==64)\n" + 625 "#define SIZEOF_SIZE_T 8\n" + 626 "#else\n" + 627 "#define SIZEOF_SIZE_T 4\n" + 628 "#endif\n", 629} 630 631JCONFIGINT_NOWIN_SUBSTITUTIONS.update(JCONFIGINT_COMMON_SUBSTITUTIONS) 632 633JCONFIGINT_WIN_SUBSTITUTIONS.update(JCONFIGINT_COMMON_SUBSTITUTIONS) 634 635template_rule( 636 name = "jconfigint_nowin", 637 src = "jconfigint.h.in", 638 out = "jconfigint_nowin.h", 639 substitutions = JCONFIGINT_NOWIN_SUBSTITUTIONS, 640) 641 642template_rule( 643 name = "jconfigint_win", 644 src = "jconfigint.h.in", 645 out = "jconfigint_win.h", 646 substitutions = JCONFIGINT_WIN_SUBSTITUTIONS, 647) 648 649genrule( 650 name = "configure", 651 srcs = [ 652 "jconfig_win.h", 653 "jconfig_nowin_nosimd.h", 654 "jconfig_nowin_simd.h", 655 ], 656 outs = ["jconfig.h"], 657 cmd = select({ 658 ":windows": "cp $(location jconfig_win.h) $@", 659 ":k8": "cp $(location jconfig_nowin_simd.h) $@", 660 ":armeabi-v7a": "cp $(location jconfig_nowin_simd.h) $@", 661 ":arm64-v8a": "cp $(location jconfig_nowin_simd.h) $@", 662 ":linux_ppc64le": "cp $(location jconfig_nowin_simd.h) $@", 663 "//conditions:default": "cp $(location jconfig_nowin_nosimd.h) $@", 664 }), 665) 666 667genrule( 668 name = "configure_internal", 669 srcs = [ 670 "jconfigint_win.h", 671 "jconfigint_nowin.h", 672 ], 673 outs = ["jconfigint.h"], 674 cmd = select({ 675 ":windows": "cp $(location jconfigint_win.h) $@", 676 "//conditions:default": "cp $(location jconfigint_nowin.h) $@", 677 }), 678) 679 680# jiminy cricket the way this file is generated is completely outrageous 681genrule( 682 name = "configure_simd", 683 outs = ["simd/jsimdcfg.inc"], 684 cmd = "cat <<'EOF' >$@\n" + 685 "%define DCTSIZE 8\n" + 686 "%define DCTSIZE2 64\n" + 687 "%define RGB_RED 0\n" + 688 "%define RGB_GREEN 1\n" + 689 "%define RGB_BLUE 2\n" + 690 "%define RGB_PIXELSIZE 3\n" + 691 "%define EXT_RGB_RED 0\n" + 692 "%define EXT_RGB_GREEN 1\n" + 693 "%define EXT_RGB_BLUE 2\n" + 694 "%define EXT_RGB_PIXELSIZE 3\n" + 695 "%define EXT_RGBX_RED 0\n" + 696 "%define EXT_RGBX_GREEN 1\n" + 697 "%define EXT_RGBX_BLUE 2\n" + 698 "%define EXT_RGBX_PIXELSIZE 4\n" + 699 "%define EXT_BGR_RED 2\n" + 700 "%define EXT_BGR_GREEN 1\n" + 701 "%define EXT_BGR_BLUE 0\n" + 702 "%define EXT_BGR_PIXELSIZE 3\n" + 703 "%define EXT_BGRX_RED 2\n" + 704 "%define EXT_BGRX_GREEN 1\n" + 705 "%define EXT_BGRX_BLUE 0\n" + 706 "%define EXT_BGRX_PIXELSIZE 4\n" + 707 "%define EXT_XBGR_RED 3\n" + 708 "%define EXT_XBGR_GREEN 2\n" + 709 "%define EXT_XBGR_BLUE 1\n" + 710 "%define EXT_XBGR_PIXELSIZE 4\n" + 711 "%define EXT_XRGB_RED 1\n" + 712 "%define EXT_XRGB_GREEN 2\n" + 713 "%define EXT_XRGB_BLUE 3\n" + 714 "%define EXT_XRGB_PIXELSIZE 4\n" + 715 "%define RGBX_FILLER_0XFF 1\n" + 716 "%define JSAMPLE byte ; unsigned char\n" + 717 "%define SIZEOF_JSAMPLE SIZEOF_BYTE ; sizeof(JSAMPLE)\n" + 718 "%define CENTERJSAMPLE 128\n" + 719 "%define JCOEF word ; short\n" + 720 "%define SIZEOF_JCOEF SIZEOF_WORD ; sizeof(JCOEF)\n" + 721 "%define JDIMENSION dword ; unsigned int\n" + 722 "%define SIZEOF_JDIMENSION SIZEOF_DWORD ; sizeof(JDIMENSION)\n" + 723 "%define JSAMPROW POINTER ; JSAMPLE * (jpeglib.h)\n" + 724 "%define JSAMPARRAY POINTER ; JSAMPROW * (jpeglib.h)\n" + 725 "%define JSAMPIMAGE POINTER ; JSAMPARRAY * (jpeglib.h)\n" + 726 "%define JCOEFPTR POINTER ; JCOEF * (jpeglib.h)\n" + 727 "%define SIZEOF_JSAMPROW SIZEOF_POINTER ; sizeof(JSAMPROW)\n" + 728 "%define SIZEOF_JSAMPARRAY SIZEOF_POINTER ; sizeof(JSAMPARRAY)\n" + 729 "%define SIZEOF_JSAMPIMAGE SIZEOF_POINTER ; sizeof(JSAMPIMAGE)\n" + 730 "%define SIZEOF_JCOEFPTR SIZEOF_POINTER ; sizeof(JCOEFPTR)\n" + 731 "%define DCTELEM word ; short\n" + 732 "%define SIZEOF_DCTELEM SIZEOF_WORD ; sizeof(DCTELEM)\n" + 733 "%define float FP32 ; float\n" + 734 "%define SIZEOF_FAST_FLOAT SIZEOF_FP32 ; sizeof(float)\n" + 735 "%define ISLOW_MULT_TYPE word ; must be short\n" + 736 "%define SIZEOF_ISLOW_MULT_TYPE SIZEOF_WORD ; sizeof(ISLOW_MULT_TYPE)\n" + 737 "%define IFAST_MULT_TYPE word ; must be short\n" + 738 "%define SIZEOF_IFAST_MULT_TYPE SIZEOF_WORD ; sizeof(IFAST_MULT_TYPE)\n" + 739 "%define IFAST_SCALE_BITS 2 ; fractional bits in scale factors\n" + 740 "%define FLOAT_MULT_TYPE FP32 ; must be float\n" + 741 "%define SIZEOF_FLOAT_MULT_TYPE SIZEOF_FP32 ; sizeof(FLOAT_MULT_TYPE)\n" + 742 "%define JSIMD_NONE 0x00\n" + 743 "%define JSIMD_MMX 0x01\n" + 744 "%define JSIMD_3DNOW 0x02\n" + 745 "%define JSIMD_SSE 0x04\n" + 746 "%define JSIMD_SSE2 0x08\n" + 747 "EOF", 748) 749 750config_setting( 751 name = "k8", 752 values = {"cpu": "k8"}, 753) 754 755config_setting( 756 name = "android", 757 values = {"crosstool_top": "//external:android/crosstool"}, 758) 759 760config_setting( 761 name = "armeabi-v7a", 762 values = {"cpu": "armeabi-v7a"}, 763) 764 765config_setting( 766 name = "arm64-v8a", 767 values = {"cpu": "arm64-v8a"}, 768) 769 770config_setting( 771 name = "windows", 772 values = {"cpu": "x64_windows"}, 773) 774 775config_setting( 776 name = "linux_ppc64le", 777 values = {"cpu": "ppc"}, 778) 779