You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
364 lines
8.6 KiB
364 lines
8.6 KiB
# 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" || current_cpu == "arm64") {
|
|
import("//build/config/arm.gni")
|
|
}
|
|
|
|
assert(!is_ios, "This is not used on iOS, don't drag it in unintentionally")
|
|
|
|
source_set("libjpeg_headers") {
|
|
sources = [
|
|
"jconfig.h",
|
|
"jdct.h",
|
|
"jinclude.h",
|
|
"jmorecfg.h",
|
|
"jpeglib.h",
|
|
"jpeglibmangler.h",
|
|
]
|
|
defines = [ "MANGLE_JPEG_NAMES" ]
|
|
}
|
|
|
|
if (current_cpu == "x86" || current_cpu == "x64") {
|
|
import("//third_party/nasm/nasm_assemble.gni")
|
|
|
|
nasm_assemble("simd_asm") {
|
|
defines = []
|
|
include_dirs = [ "simd/nasm/" ]
|
|
|
|
if (current_cpu == "x86") {
|
|
include_dirs += [ "simd/i386/" ]
|
|
sources = [
|
|
"simd/i386/jccolor-avx2.asm",
|
|
"simd/i386/jccolor-mmx.asm",
|
|
"simd/i386/jccolor-sse2.asm",
|
|
"simd/i386/jcgray-avx2.asm",
|
|
"simd/i386/jcgray-mmx.asm",
|
|
"simd/i386/jcgray-sse2.asm",
|
|
"simd/i386/jchuff-sse2.asm",
|
|
"simd/i386/jcphuff-sse2.asm",
|
|
"simd/i386/jcsample-avx2.asm",
|
|
"simd/i386/jcsample-mmx.asm",
|
|
"simd/i386/jcsample-sse2.asm",
|
|
"simd/i386/jdcolor-avx2.asm",
|
|
"simd/i386/jdcolor-mmx.asm",
|
|
"simd/i386/jdcolor-sse2.asm",
|
|
"simd/i386/jdmerge-avx2.asm",
|
|
"simd/i386/jdmerge-mmx.asm",
|
|
"simd/i386/jdmerge-sse2.asm",
|
|
"simd/i386/jdsample-avx2.asm",
|
|
"simd/i386/jdsample-mmx.asm",
|
|
"simd/i386/jdsample-sse2.asm",
|
|
"simd/i386/jfdctflt-3dn.asm",
|
|
"simd/i386/jfdctflt-sse.asm",
|
|
"simd/i386/jfdctfst-mmx.asm",
|
|
"simd/i386/jfdctfst-sse2.asm",
|
|
"simd/i386/jfdctint-avx2.asm",
|
|
"simd/i386/jfdctint-mmx.asm",
|
|
"simd/i386/jfdctint-sse2.asm",
|
|
"simd/i386/jidctflt-3dn.asm",
|
|
"simd/i386/jidctflt-sse.asm",
|
|
"simd/i386/jidctflt-sse2.asm",
|
|
"simd/i386/jidctfst-mmx.asm",
|
|
"simd/i386/jidctfst-sse2.asm",
|
|
"simd/i386/jidctint-avx2.asm",
|
|
"simd/i386/jidctint-mmx.asm",
|
|
"simd/i386/jidctint-sse2.asm",
|
|
"simd/i386/jidctred-mmx.asm",
|
|
"simd/i386/jidctred-sse2.asm",
|
|
"simd/i386/jquant-3dn.asm",
|
|
"simd/i386/jquant-mmx.asm",
|
|
"simd/i386/jquant-sse.asm",
|
|
"simd/i386/jquantf-sse2.asm",
|
|
"simd/i386/jquanti-avx2.asm",
|
|
"simd/i386/jquanti-sse2.asm",
|
|
"simd/i386/jsimdcpu.asm",
|
|
]
|
|
defines += [
|
|
"__x86__",
|
|
"PIC",
|
|
]
|
|
} else if (current_cpu == "x64") {
|
|
include_dirs += [ "simd/x86_64/" ]
|
|
sources = [
|
|
"simd/x86_64/jccolor-avx2.asm",
|
|
"simd/x86_64/jccolor-sse2.asm",
|
|
"simd/x86_64/jcgray-avx2.asm",
|
|
"simd/x86_64/jcgray-sse2.asm",
|
|
"simd/x86_64/jchuff-sse2.asm",
|
|
"simd/x86_64/jcphuff-sse2.asm",
|
|
"simd/x86_64/jcsample-avx2.asm",
|
|
"simd/x86_64/jcsample-sse2.asm",
|
|
"simd/x86_64/jdcolor-avx2.asm",
|
|
"simd/x86_64/jdcolor-sse2.asm",
|
|
"simd/x86_64/jdmerge-avx2.asm",
|
|
"simd/x86_64/jdmerge-sse2.asm",
|
|
"simd/x86_64/jdsample-avx2.asm",
|
|
"simd/x86_64/jdsample-sse2.asm",
|
|
"simd/x86_64/jfdctflt-sse.asm",
|
|
"simd/x86_64/jfdctfst-sse2.asm",
|
|
"simd/x86_64/jfdctint-avx2.asm",
|
|
"simd/x86_64/jfdctint-sse2.asm",
|
|
"simd/x86_64/jidctflt-sse2.asm",
|
|
"simd/x86_64/jidctfst-sse2.asm",
|
|
"simd/x86_64/jidctint-avx2.asm",
|
|
"simd/x86_64/jidctint-sse2.asm",
|
|
"simd/x86_64/jidctred-sse2.asm",
|
|
"simd/x86_64/jquantf-sse2.asm",
|
|
"simd/x86_64/jquanti-avx2.asm",
|
|
"simd/x86_64/jquanti-sse2.asm",
|
|
"simd/x86_64/jsimdcpu.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 || is_chromeos) {
|
|
defines += [ "ELF" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
static_library("simd") {
|
|
include_dirs = [ "." ]
|
|
deps = [
|
|
":libjpeg_headers",
|
|
]
|
|
|
|
if (current_cpu == "x86") {
|
|
deps += [ ":simd_asm" ]
|
|
sources = [
|
|
"simd/i386/jsimd.c",
|
|
]
|
|
} else if (current_cpu == "x64") {
|
|
deps += [ ":simd_asm" ]
|
|
sources = [
|
|
"simd/x86_64/jsimd.c",
|
|
]
|
|
} else if ((current_cpu == "arm" || current_cpu == "arm64") &&
|
|
arm_use_neon) {
|
|
include_dirs += [ "simd/arm/" ]
|
|
|
|
sources = [
|
|
"simd/arm/jccolor-neon.c",
|
|
"simd/arm/jcgray-neon.c",
|
|
"simd/arm/jcphuff-neon.c",
|
|
"simd/arm/jcsample-neon.c",
|
|
"simd/arm/jdcolor-neon.c",
|
|
"simd/arm/jdmerge-neon.c",
|
|
"simd/arm/jdsample-neon.c",
|
|
"simd/arm/jfdctfst-neon.c",
|
|
"simd/arm/jfdctint-neon.c",
|
|
"simd/arm/jidctfst-neon.c",
|
|
"simd/arm/jidctint-neon.c",
|
|
"simd/arm/jidctred-neon.c",
|
|
"simd/arm/jquanti-neon.c",
|
|
]
|
|
if (current_cpu == "arm") {
|
|
sources += [
|
|
"simd/arm/aarch32/jchuff-neon.c",
|
|
"simd/arm/aarch32/jsimd.c",
|
|
]
|
|
} else if (current_cpu == "arm64"){
|
|
sources += [
|
|
"simd/arm/aarch64/jchuff-neon.c",
|
|
"simd/arm/aarch64/jsimd.c",
|
|
]
|
|
}
|
|
|
|
defines = [
|
|
"NEON_INTRINSICS"
|
|
]
|
|
|
|
configs -= [ "//build/config/compiler:default_optimization" ]
|
|
configs += [ "//build/config/compiler:optimize_speed" ]
|
|
} 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",
|
|
"jcicc.c",
|
|
"jcinit.c",
|
|
"jcmainct.c",
|
|
"jcmarker.c",
|
|
"jcmaster.c",
|
|
"jcomapi.c",
|
|
"jcparam.c",
|
|
"jcphuff.c",
|
|
"jcprepct.c",
|
|
"jcsample.c",
|
|
"jctrans.c",
|
|
"jdapimin.c",
|
|
"jdapistd.c",
|
|
"jdatadst.c",
|
|
"jdatasrc.c",
|
|
"jdcoefct.c",
|
|
"jdcolor.c",
|
|
"jddctmgr.c",
|
|
"jdhuff.c",
|
|
"jdicc.c",
|
|
"jdinput.c",
|
|
"jdmainct.c",
|
|
"jdmarker.c",
|
|
"jdmaster.c",
|
|
"jdmerge.c",
|
|
"jdphuff.c",
|
|
"jdpostct.c",
|
|
"jdsample.c",
|
|
"jdtrans.c",
|
|
"jerror.c",
|
|
"jfdctflt.c",
|
|
"jfdctfst.c",
|
|
"jfdctint.c",
|
|
"jidctflt.c",
|
|
"jidctfst.c",
|
|
"jidctint.c",
|
|
"jidctred.c",
|
|
"jmemmgr.c",
|
|
"jmemnobs.c",
|
|
"jpeg_nbits_table.c",
|
|
"jquant1.c",
|
|
"jquant2.c",
|
|
"jutils.c",
|
|
]
|
|
|
|
defines = [
|
|
"WITH_SIMD",
|
|
"NO_GETENV",
|
|
]
|
|
|
|
configs += [ ":libjpeg_config" ]
|
|
|
|
public_configs = [ ":libjpeg_config" ]
|
|
public_deps = [
|
|
":libjpeg_headers",
|
|
]
|
|
|
|
# MemorySanitizer doesn't support assembly code, so keep it disabled in x86
|
|
# and x64 MSan builds for now.
|
|
if (is_msan && (current_cpu == "x86" || current_cpu == "x64")) {
|
|
sources += [ "jsimd_none.c" ]
|
|
} else {
|
|
public_deps += [ ":simd" ]
|
|
|
|
if ((current_cpu == "arm" || current_cpu == "arm64") && arm_use_neon) {
|
|
defines += [ "NEON_INTRINSICS", ]
|
|
}
|
|
}
|
|
}
|
|
|
|
static_library("turbojpeg") {
|
|
sources = [
|
|
"turbojpeg.c",
|
|
"transupp.c",
|
|
"jdatadst-tj.c",
|
|
"jdatasrc-tj.c",
|
|
"rdbmp.c",
|
|
"rdppm.c",
|
|
"wrbmp.c",
|
|
"wrppm.c",
|
|
]
|
|
|
|
defines = [
|
|
"WITH_SIMD",
|
|
"BMP_SUPPORTED",
|
|
"PPM_SUPPORTED",
|
|
]
|
|
|
|
configs += [ ":libjpeg_config" ]
|
|
|
|
public_configs = [ ":libjpeg_config" ]
|
|
public_deps = [
|
|
":libjpeg",
|
|
]
|
|
}
|
|
|
|
if (build_with_chromium) {
|
|
import("//testing/test.gni")
|
|
|
|
test("libjpeg_turbo_unittests") {
|
|
testonly = true
|
|
|
|
sources = [
|
|
"cdjpeg.c",
|
|
"cjpeg.c",
|
|
"djpeg.c",
|
|
"gtest/cjpeg-gtest-wrapper.cpp",
|
|
"gtest/djpeg-gtest-wrapper.cpp",
|
|
"gtest/gtest-utils.cpp",
|
|
"gtest/jpegtran-gtest-wrapper.cpp",
|
|
"gtest/tjbench-gtest-wrapper.cpp",
|
|
"gtest/tjunittest-gtest-wrapper.cpp",
|
|
"jpegtran.c",
|
|
"md5/md5.c",
|
|
"md5/md5hl.c",
|
|
"tjbench.c",
|
|
"tjunittest.c",
|
|
"tjutil.c",
|
|
"rdcolmap.c",
|
|
"rdgif.c",
|
|
"rdswitch.c",
|
|
]
|
|
|
|
deps = [
|
|
":turbojpeg",
|
|
"//base",
|
|
"//testing/gtest",
|
|
"//testing/gtest:gtest_main",
|
|
]
|
|
|
|
data = [
|
|
"testimages/"
|
|
]
|
|
|
|
defines = [
|
|
"GTEST",
|
|
"WITH_SIMD",
|
|
"BMP_SUPPORTED",
|
|
"PPM_SUPPORTED",
|
|
]
|
|
|
|
include_dirs = [
|
|
"//third_party/googletest/src/googletest/include/gtest",
|
|
".",
|
|
]
|
|
|
|
configs -= [ "//build/config/compiler:chromium_code" ]
|
|
configs += [ "//build/config/compiler:no_chromium_code" ]
|
|
}
|
|
}
|