# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Do not use the targets in this file unless you need a certain libjpeg # implementation. Use the meta target //third_party:jpeg instead. if (cpu_arch == "arm") { import("//build/config/arm.gni") } if (cpu_arch == "x86" || cpu_arch == "x64") { import("//third_party/yasm/yasm_assemble.gni") yasm_assemble("simd_asm") { defines = [] if (cpu_arch == "x86") { sources = [ "simd/jccolmmx.asm", "simd/jccolss2.asm", "simd/jcgrammx.asm", "simd/jcgrass2.asm", "simd/jcqnt3dn.asm", "simd/jcqntmmx.asm", "simd/jcqnts2f.asm", "simd/jcqnts2i.asm", "simd/jcqntsse.asm", "simd/jcsammmx.asm", "simd/jcsamss2.asm", "simd/jdcolmmx.asm", "simd/jdcolss2.asm", "simd/jdmermmx.asm", "simd/jdmerss2.asm", "simd/jdsammmx.asm", "simd/jdsamss2.asm", "simd/jf3dnflt.asm", "simd/jfmmxfst.asm", "simd/jfmmxint.asm", "simd/jfss2fst.asm", "simd/jfss2int.asm", "simd/jfsseflt.asm", "simd/ji3dnflt.asm", "simd/jimmxfst.asm", "simd/jimmxint.asm", "simd/jimmxred.asm", "simd/jiss2flt.asm", "simd/jiss2fst.asm", "simd/jiss2int.asm", "simd/jiss2red.asm", "simd/jisseflt.asm", "simd/jsimdcpu.asm", ] defines += [ "__x86__", ] } else if (cpu_arch == "x64") { sources = [ "simd/jccolss2-64.asm", "simd/jcgrass2-64.asm", "simd/jcqnts2f-64.asm", "simd/jcqnts2i-64.asm", "simd/jcsamss2-64.asm", "simd/jdcolss2-64.asm", "simd/jdmerss2-64.asm", "simd/jdsamss2-64.asm", "simd/jfss2fst-64.asm", "simd/jfss2int-64.asm", "simd/jfsseflt-64.asm", "simd/jiss2flt-64.asm", "simd/jiss2fst-64.asm", "simd/jiss2int-64.asm", "simd/jiss2red-64.asm", ] defines += [ "__x86_64__", ] } if (is_win) { defines += [ "MSVC", ] include_dirs = [ "win" ] if (cpu_arch == "x86") { defines += [ "WIN32", ] } else { defines += [ "WIN64", ] } } else if (is_mac) { defines += [ "MACHO", ] include_dirs = [ "mac" ] } else if (is_linux) { defines += [ "ELF", ] include_dirs = [ "linux" ] } } } source_set("simd") { if (cpu_arch == "x86") { deps = [ ":simd_asm" ] sources = [ "simd/jsimd_i386.c", ] } else if (cpu_arch == "x64") { deps = [ ":simd_asm" ] sources = [ "simd/jsimd_x86_64.c", ] } else if (cpu_arch == "arm" && arm_version >= 7 && (arm_use_neon || arm_optionally_use_neon)) { sources = [ "simd/jsimd_arm.c", "simd/jsimd_arm_neon.S", ] } else { sources = [ "jsimd_none.c" ] } } config("libjpeg_config") { include_dirs = [ "." ] } source_set("libjpeg") { sources = [ "jcapimin.c", "jcapistd.c", "jccoefct.c", "jccolor.c", "jcdctmgr.c", "jchuff.c", "jchuff.h", "jcinit.c", "jcmainct.c", "jcmarker.c", "jcmaster.c", "jcomapi.c", "jconfig.h", "jcparam.c", "jcphuff.c", "jcprepct.c", "jcsample.c", "jdapimin.c", "jdapistd.c", "jdatadst.c", "jdatasrc.c", "jdcoefct.c", "jdcolor.c", "jdct.h", "jddctmgr.c", "jdhuff.c", "jdhuff.h", "jdinput.c", "jdmainct.c", "jdmarker.c", "jdmaster.c", "jdmerge.c", "jdphuff.c", "jdpostct.c", "jdsample.c", "jerror.c", "jerror.h", "jfdctflt.c", "jfdctfst.c", "jfdctint.c", "jidctflt.c", "jidctfst.c", "jidctint.c", "jidctred.c", "jinclude.h", "jmemmgr.c", "jmemnobs.c", "jmemsys.h", "jmorecfg.h", "jpegint.h", "jpeglib.h", "jpeglibmangler.h", "jquant1.c", "jquant2.c", "jutils.c", "jversion.h", ] defines = [ "WITH_SIMD", "MOTION_JPEG_SUPPORTED", "NO_GETENV", ] configs += [ ":libjpeg_config" ] direct_dependent_configs = [ ":libjpeg_config" ] # MemorySanitizer doesn't support assembly code, so keep it disabled in # MSan builds for now. # TODO: Enable on Linux when .asm files are recognized. if (is_msan || is_linux) { sources += [ "jsimd_none.c" ] } else { deps = [ ":simd" ] } # TODO(GYP): Compile the .asm files with YASM as GYP does. }