github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/third_party/jpeg/BUILD.bazel (about)

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