moz.build (11281B)
1 # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- 2 # vim: set filetype=python: 3 # This Source Code Form is subject to the terms of the Mozilla Public 4 # License, v. 2.0. If a copy of the MPL was not distributed with this 5 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 6 7 with Files("**"): 8 BUG_COMPONENT = ("Core", "Graphics: ImageLib") 9 10 # Not technically necessary, but set for consistency with the 12/16-bit ones. 11 DEFINES['BITS_IN_JSAMPLE'] = 8 12 13 # libjpeg-turbo 3 requires rebuilding some files multiple times in order to 14 # pick up 12-bit and 16-bit support. Failure to do so results in missing 15 # symbols during linking. 16 # 17 # Since we can't build the same files multiple times with different 18 # BITS_IN_JSAMPLE values defined, we instead create separate moz.build files 19 # for each configuration. The files must be kept in sync with JPEG12_SOURCES 20 # and JPEG16_SOURCES from the upstream CMakeLists.txt. 21 DIRS += [ 22 "jpeg12", 23 "jpeg16", 24 ] 25 26 EXPORTS += [ 27 'jconfig.h', 28 'jerror.h', 29 'jinclude.h', 30 'jmorecfg.h', 31 'jpegint.h', 32 'jpeglib.h', 33 ] 34 35 SOURCES += [ 36 'jcomapi.c', 37 'jdapimin.c', 38 'jdapistd.c', 39 'jdatadst.c', 40 'jdatasrc.c', 41 'jdcoefct.c', 42 'jdcolor.c', 43 'jddctmgr.c', 44 'jddiffct.c', 45 'jdhuff.c', 46 'jdicc.c', 47 'jdinput.c', 48 'jdlhuff.c', 49 'jdlossls.c', 50 'jdmainct.c', 51 'jdmarker.c', 52 'jdmaster.c', 53 'jdmerge.c', 54 'jdphuff.c', 55 'jdpostct.c', 56 'jdsample.c', 57 'jdtrans.c', 58 'jerror.c', 59 'jfdctflt.c', 60 'jfdctfst.c', 61 'jfdctint.c', 62 'jidctflt.c', 63 'jidctfst.c', 64 'jidctint.c', 65 'jidctred.c', 66 'jmemmgr.c', 67 'jmemnobs.c', 68 'jpeg_nbits.c', 69 'jquant1.c', 70 'jquant2.c', 71 'jutils.c', 72 ] 73 74 # These files enable support for writing JPEGs 75 SOURCES += [ 76 'jcapimin.c', 77 'jcapistd.c', 78 'jccoefct.c', 79 'jccolor.c', 80 'jcdctmgr.c', 81 'jcdiffct.c', 82 'jchuff.c', 83 'jcicc.c', 84 'jcinit.c', 85 'jclhuff.c', 86 'jclossls.c', 87 'jcmainct.c', 88 'jcmarker.c', 89 'jcmaster.c', 90 'jcparam.c', 91 'jcphuff.c', 92 'jcprepct.c', 93 'jcsample.c', 94 'jctrans.c', 95 ] 96 97 if CONFIG['LIBJPEG_TURBO_HAVE_VLD1_S16_X3']: 98 DEFINES['HAVE_VLD1_S16_X3'] = True 99 100 if CONFIG['LIBJPEG_TURBO_HAVE_VLD1_U16_X2']: 101 DEFINES['HAVE_VLD1_U16_X2'] = True 102 103 if CONFIG['LIBJPEG_TURBO_HAVE_VLD1Q_U8_X4']: 104 DEFINES['HAVE_VLD1Q_U8_X4'] = True 105 106 if CONFIG['LIBJPEG_TURBO_NEON_INTRINSICS']: 107 DEFINES['NEON_INTRINSICS'] = True 108 109 if CONFIG['LIBJPEG_TURBO_USE_NASM']: 110 USE_NASM = True 111 112 if CONFIG['LIBJPEG_TURBO_SIMD_FLAGS']: 113 DEFINES['MOZ_WITH_SIMD'] = 1 114 if CONFIG['TARGET_CPU'] == 'arm': 115 LOCAL_INCLUDES += [ 116 '/media/libjpeg/simd/arm', 117 '/media/libjpeg/simd/arm/aarch32', 118 ] 119 SOURCES += [ 120 'simd/arm/aarch32/jsimd.c', 121 ] 122 123 simd_sources = [ 124 'simd/arm/aarch32/jchuff-neon.c', 125 'simd/arm/jcgray-neon.c', 126 'simd/arm/jcphuff-neon.c', 127 'simd/arm/jcsample-neon.c', 128 'simd/arm/jdcolor-neon.c', 129 'simd/arm/jdmerge-neon.c', 130 'simd/arm/jdsample-neon.c', 131 'simd/arm/jfdctfst-neon.c', 132 'simd/arm/jfdctint-neon.c', 133 'simd/arm/jidctred-neon.c', 134 'simd/arm/jquanti-neon.c', 135 ] 136 SOURCES += simd_sources 137 138 if CONFIG['LIBJPEG_TURBO_NEON_INTRINSICS']: 139 simd_sources_intrinsics = [ 140 'simd/arm/jccolor-neon.c', 141 'simd/arm/jidctfst-neon.c', 142 'simd/arm/jidctint-neon.c', 143 ] 144 SOURCES += simd_sources_intrinsics 145 simd_sources += simd_sources_intrinsics 146 else: 147 SOURCES += [ 148 'simd/arm/aarch32/jsimd_neon.S', 149 ] 150 151 for srcfile in simd_sources: 152 SOURCES[srcfile].flags += CONFIG['LIBJPEG_TURBO_SIMD_FLAGS'] 153 elif CONFIG['TARGET_CPU'] == 'aarch64': 154 LOCAL_INCLUDES += [ 155 '/media/libjpeg/simd/arm', 156 '/media/libjpeg/simd/arm/aarch64', 157 ] 158 SOURCES += [ 159 'simd/arm/aarch64/jsimd.c', 160 ] 161 162 simd_sources = [ 163 'simd/arm/jcgray-neon.c', 164 'simd/arm/jcphuff-neon.c', 165 'simd/arm/jcsample-neon.c', 166 'simd/arm/jdmerge-neon.c', 167 'simd/arm/jdsample-neon.c', 168 'simd/arm/jfdctfst-neon.c', 169 'simd/arm/jidctfst-neon.c', 170 'simd/arm/jidctred-neon.c', 171 'simd/arm/jquanti-neon.c', 172 ] 173 SOURCES += simd_sources 174 175 if CONFIG['LIBJPEG_TURBO_NEON_INTRINSICS']: 176 simd_sources_intrinsics = [ 177 'simd/arm/aarch64/jchuff-neon.c', 178 'simd/arm/jccolor-neon.c', 179 'simd/arm/jdcolor-neon.c', 180 'simd/arm/jfdctint-neon.c', 181 'simd/arm/jidctint-neon.c', 182 ] 183 SOURCES += simd_sources_intrinsics 184 simd_sources += simd_sources_intrinsics 185 else: 186 SOURCES += [ 187 'simd/arm/aarch64/jsimd_neon.S', 188 ] 189 190 for srcfile in simd_sources: 191 SOURCES[srcfile].flags += CONFIG['LIBJPEG_TURBO_SIMD_FLAGS'] 192 elif CONFIG['TARGET_CPU'] == 'mips32': 193 SOURCES += [ 194 'simd/mips/jsimd.c', 195 'simd/mips/jsimd_dspr2.S', 196 ] 197 if CONFIG['CC_TYPE'] == 'clang': 198 SOURCES['simd/mips/jsimd_dspr2.S'].flags += [ 199 '-fno-integrated-as', 200 ] 201 elif CONFIG['TARGET_CPU'] == 'mips64': 202 LOCAL_INCLUDES += ['/media/libjpeg/simd/mips64'] 203 simd_sources = [ 204 'simd/mips64/jccolor-mmi.c', 205 'simd/mips64/jcgray-mmi.c', 206 'simd/mips64/jcsample-mmi.c', 207 'simd/mips64/jdcolor-mmi.c', 208 'simd/mips64/jdmerge-mmi.c', 209 'simd/mips64/jdsample-mmi.c', 210 'simd/mips64/jfdctfst-mmi.c', 211 'simd/mips64/jfdctint-mmi.c', 212 'simd/mips64/jidctfst-mmi.c', 213 'simd/mips64/jidctint-mmi.c', 214 'simd/mips64/jquanti-mmi.c', 215 ] 216 SOURCES += simd_sources 217 SOURCES += [ 218 'simd/mips64/jsimd.c' 219 ] 220 for srcfile in simd_sources: 221 SOURCES[srcfile].flags += CONFIG['LIBJPEG_TURBO_SIMD_FLAGS'] 222 elif CONFIG['TARGET_CPU'] == 'x86_64': 223 SOURCES += [ 224 'simd/x86_64/jccolor-avx2.asm', 225 'simd/x86_64/jccolor-sse2.asm', 226 'simd/x86_64/jcgray-avx2.asm', 227 'simd/x86_64/jcgray-sse2.asm', 228 'simd/x86_64/jchuff-sse2.asm', 229 'simd/x86_64/jcphuff-sse2.asm', 230 'simd/x86_64/jcsample-avx2.asm', 231 'simd/x86_64/jcsample-sse2.asm', 232 'simd/x86_64/jdcolor-avx2.asm', 233 'simd/x86_64/jdcolor-sse2.asm', 234 'simd/x86_64/jdmerge-avx2.asm', 235 'simd/x86_64/jdmerge-sse2.asm', 236 'simd/x86_64/jdsample-avx2.asm', 237 'simd/x86_64/jdsample-sse2.asm', 238 'simd/x86_64/jfdctflt-sse.asm', 239 'simd/x86_64/jfdctfst-sse2.asm', 240 'simd/x86_64/jfdctint-avx2.asm', 241 'simd/x86_64/jfdctint-sse2.asm', 242 'simd/x86_64/jidctflt-sse2.asm', 243 'simd/x86_64/jidctfst-sse2.asm', 244 'simd/x86_64/jidctint-avx2.asm', 245 'simd/x86_64/jidctint-sse2.asm', 246 'simd/x86_64/jidctred-sse2.asm', 247 'simd/x86_64/jquantf-sse2.asm', 248 'simd/x86_64/jquanti-avx2.asm', 249 'simd/x86_64/jquanti-sse2.asm', 250 'simd/x86_64/jsimd.c', 251 'simd/x86_64/jsimdcpu.asm', 252 ] 253 elif CONFIG['TARGET_CPU'] == 'x86': 254 SOURCES += [ 255 'simd/i386/jccolor-avx2.asm', 256 'simd/i386/jccolor-mmx.asm', 257 'simd/i386/jccolor-sse2.asm', 258 'simd/i386/jcgray-avx2.asm', 259 'simd/i386/jcgray-mmx.asm', 260 'simd/i386/jcgray-sse2.asm', 261 'simd/i386/jchuff-sse2.asm', 262 'simd/i386/jcphuff-sse2.asm', 263 'simd/i386/jcsample-avx2.asm', 264 'simd/i386/jcsample-mmx.asm', 265 'simd/i386/jcsample-sse2.asm', 266 'simd/i386/jdcolor-avx2.asm', 267 'simd/i386/jdcolor-mmx.asm', 268 'simd/i386/jdcolor-sse2.asm', 269 'simd/i386/jdmerge-avx2.asm', 270 'simd/i386/jdmerge-mmx.asm', 271 'simd/i386/jdmerge-sse2.asm', 272 'simd/i386/jdsample-avx2.asm', 273 'simd/i386/jdsample-mmx.asm', 274 'simd/i386/jdsample-sse2.asm', 275 'simd/i386/jfdctflt-3dn.asm', 276 'simd/i386/jfdctflt-sse.asm', 277 'simd/i386/jfdctfst-mmx.asm', 278 'simd/i386/jfdctfst-sse2.asm', 279 'simd/i386/jfdctint-avx2.asm', 280 'simd/i386/jfdctint-mmx.asm', 281 'simd/i386/jfdctint-sse2.asm', 282 'simd/i386/jidctflt-3dn.asm', 283 'simd/i386/jidctflt-sse.asm', 284 'simd/i386/jidctflt-sse2.asm', 285 'simd/i386/jidctfst-mmx.asm', 286 'simd/i386/jidctfst-sse2.asm', 287 'simd/i386/jidctint-avx2.asm', 288 'simd/i386/jidctint-mmx.asm', 289 'simd/i386/jidctint-sse2.asm', 290 'simd/i386/jidctred-mmx.asm', 291 'simd/i386/jidctred-sse2.asm', 292 'simd/i386/jquant-3dn.asm', 293 'simd/i386/jquant-mmx.asm', 294 'simd/i386/jquant-sse.asm', 295 'simd/i386/jquantf-sse2.asm', 296 'simd/i386/jquanti-avx2.asm', 297 'simd/i386/jquanti-sse2.asm', 298 'simd/i386/jsimd.c', 299 'simd/i386/jsimdcpu.asm', 300 ] 301 elif CONFIG['TARGET_CPU'].startswith('ppc'): 302 DEFINES['MOZ_WITH_SIMD'] = 1 303 # PowerPC has no assembly files, but still needs its own headers. 304 LOCAL_INCLUDES += ['/media/libjpeg/simd/powerpc'] 305 306 # For libjpeg's internal runtime detection to work, jsimd.c must NOT 307 # be compiled with -maltivec (otherwise it gets statically set), 308 # but everything else should be. If -maltivec was already 309 # specified in .mozconfig, though, then this won't harm anything. 310 ppc_vmx_sources = [ 311 'simd/powerpc/jccolor-altivec.c', 312 'simd/powerpc/jcgray-altivec.c', 313 'simd/powerpc/jcsample-altivec.c', 314 'simd/powerpc/jdcolor-altivec.c', 315 'simd/powerpc/jdmerge-altivec.c', 316 'simd/powerpc/jdsample-altivec.c', 317 'simd/powerpc/jfdctfst-altivec.c', 318 'simd/powerpc/jfdctint-altivec.c', 319 'simd/powerpc/jidctfst-altivec.c', 320 'simd/powerpc/jidctint-altivec.c', 321 'simd/powerpc/jquanti-altivec.c', 322 ] 323 SOURCES += ppc_vmx_sources 324 SOURCES += [ 325 'simd/powerpc/jsimd.c', 326 ] 327 for srcfile in ppc_vmx_sources: 328 SOURCES[srcfile].flags += CONFIG['PPC_VMX_FLAGS'] 329 330 ASFLAGS += CONFIG['LIBJPEG_TURBO_SIMD_FLAGS'] 331 332 # Make sure the x86 & x86-64 ASM files can see the necessary includes. 333 if CONFIG['TARGET_CPU'] == 'x86': 334 ASFLAGS += ['-I%s/media/libjpeg/simd/nasm/' % TOPSRCDIR] 335 ASFLAGS += ['-I%s/media/libjpeg/simd/i386/' % TOPSRCDIR] 336 if CONFIG['TARGET_CPU'] == 'x86_64': 337 ASFLAGS += ['-I%s/media/libjpeg/simd/nasm/' % TOPSRCDIR] 338 ASFLAGS += ['-I%s/media/libjpeg/simd/x86_64/' % TOPSRCDIR] 339 340 # We allow warnings for third-party code that can be updated from upstream. 341 AllowCompilerWarnings() 342 343 FINAL_LIBRARY = 'xul' 344