# 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. import("//build/config/sanitizers/sanitizers.gni") if (current_cpu == "arm") { import("//build/config/arm.gni") } assert(!is_ios, "This is not used on iOS, don't drag it in unintentionally") if (current_cpu == "x86" || current_cpu == "x64") { import("//third_party/yasm/yasm_assemble.gni") yasm_assemble("simd_asm") { defines = [] if (current_cpu == "x86") { sources = [ "simd/jccolor-mmx.asm", "simd/jccolor-sse2.asm", "simd/jcgray-mmx.asm", "simd/jcgray-sse2.asm", "simd/jchuff-sse2.asm", "simd/jcsample-mmx.asm", "simd/jcsample-sse2.asm", "simd/jdcolor-mmx.asm", "simd/jdcolor-sse2.asm", "simd/jdmerge-mmx.asm", "simd/jdmerge-sse2.asm", "simd/jdsample-mmx.asm", "simd/jdsample-sse2.asm", "simd/jfdctflt-3dn.asm", "simd/jfdctflt-sse.asm", "simd/jfdctfst-mmx.asm", "simd/jfdctfst-sse2.asm", "simd/jfdctint-mmx.asm", "simd/jfdctint-sse2.asm", "simd/jidctflt-3dn.asm", "simd/jidctflt-sse.asm", "simd/jidctflt-sse2.asm", "simd/jidctfst-mmx.asm", "simd/jidctfst-sse2.asm", "simd/jidctint-mmx.asm", "simd/jidctint-sse2.asm", "simd/jidctred-mmx.asm", "simd/jidctred-sse2.asm", "simd/jquant-3dn.asm", "simd/jquant-mmx.asm", "simd/jquant-sse.asm", "simd/jquantf-sse2.asm", "simd/jquanti-sse2.asm", "simd/jsimdcpu.asm", ] defines += [ "__x86__", "PIC", ] } else if (current_cpu == "x64") { sources = [ "simd/jccolor-sse2-64.asm", "simd/jcgray-sse2-64.asm", "simd/jchuff-sse2-64.asm", "simd/jcsample-sse2-64.asm", "simd/jdcolor-sse2-64.asm", "simd/jdmerge-sse2-64.asm", "simd/jdsample-sse2-64.asm", "simd/jfdctflt-sse-64.asm", "simd/jfdctfst-sse2-64.asm", "simd/jfdctint-sse2-64.asm", "simd/jidctflt-sse2-64.asm", "simd/jidctfst-sse2-64.asm", "simd/jidctint-sse2-64.asm", "simd/jidctred-sse2-64.asm", "simd/jquantf-sse2-64.asm", "simd/jquanti-sse2-64.asm", ] defines += [ "__x86_64__", "PIC", ] } if (is_win) { defines += [ "MSVC" ] if (current_cpu == "x86") { defines += [ "WIN32" ] } else { defines += [ "WIN64" ] } } else if (is_mac || is_ios) { defines += [ "MACHO" ] } else if (is_linux || is_android || is_fuchsia) { defines += [ "ELF" ] } } } static_library("simd") { if (current_cpu == "x86") { deps = [ ":simd_asm", ] sources = [ "simd/jsimd_i386.c", ] } else if (current_cpu == "x64") { deps = [ ":simd_asm", ] sources = [ "simd/jsimd_x86_64.c", ] } else if (current_cpu == "arm" && arm_version >= 7 && (arm_use_neon || arm_optionally_use_neon)) { sources = [ "simd/jsimd_arm.c", "simd/jsimd_arm_neon.S", ] } else if (current_cpu == "arm64") { sources = [ "simd/jsimd_arm64.c", "simd/jsimd_arm64_neon.S", ] } else { sources = [ "jsimd_none.c", ] } if (is_win) { cflags = [ "/wd4245" ] } } config("libjpeg_config") { include_dirs = [ "." ] } static_library("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", "NO_GETENV", ] configs += [ ":libjpeg_config" ] public_configs = [ ":libjpeg_config" ] # MemorySanitizer doesn't support assembly code, so keep it disabled in # MSan builds for now. if (is_msan) { sources += [ "jsimd_none.c" ] } else { deps = [ ":simd", ] } }