Mesonize JPEG Quant Smooth
Now SIMD works on amd64, although the build remains questionable, because it assumes that all of its compiler flags will work. This way we lose an uncomfortable git submodule. Also, add Meson subprojects to .gitignore.
This commit is contained in:
parent
8a656121a3
commit
45238d78cd
|
@ -0,0 +1,3 @@
|
||||||
|
/subprojects/*
|
||||||
|
!/subprojects/*.wrap
|
||||||
|
!/subprojects/packagefiles
|
|
@ -1,6 +1,3 @@
|
||||||
[submodule "wuffs-mirror-release-c"]
|
[submodule "wuffs-mirror-release-c"]
|
||||||
path = wuffs-mirror-release-c
|
path = wuffs-mirror-release-c
|
||||||
url = https://github.com/google/wuffs-mirror-release-c
|
url = https://github.com/google/wuffs-mirror-release-c
|
||||||
[submodule "jpeg-quantsmooth"]
|
|
||||||
path = jpeg-quantsmooth
|
|
||||||
url = https://github.com/ilyakurdyukov/jpeg-quantsmooth.git
|
|
||||||
|
|
5
fiv-io.c
5
fiv-io.c
|
@ -32,10 +32,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <jpeglib.h>
|
#include <jpeglib.h>
|
||||||
// This library is tricky to build, simply make it work at all.
|
#include <libjpegqs.h>
|
||||||
#define NO_SIMD
|
|
||||||
#include <jpeg-quantsmooth/quantsmooth.h>
|
|
||||||
#undef NO_SIMD
|
|
||||||
#endif // HAVE_JPEG_QS
|
#endif // HAVE_JPEG_QS
|
||||||
|
|
||||||
// Colour management must be handled before RGB conversions.
|
// Colour management must be handled before RGB conversions.
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit c86c6418ea6c827513d206694847033f9ca50151
|
|
11
meson.build
11
meson.build
|
@ -17,6 +17,12 @@ add_project_arguments(
|
||||||
# add_project_link_arguments(flags, language : ['c'])
|
# add_project_link_arguments(flags, language : ['c'])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
# The likelihood of this being installed is nearly zero. Enable the wrap.
|
||||||
|
libjpegqs = dependency('libjpegqs',
|
||||||
|
required : get_option('libjpegqs'),
|
||||||
|
allow_fallback : true,
|
||||||
|
)
|
||||||
|
|
||||||
lcms2 = dependency('lcms2', required : get_option('lcms2'))
|
lcms2 = dependency('lcms2', required : get_option('lcms2'))
|
||||||
# Note that only libraw_r is thread-safe, but we'll just run it out-of process.
|
# Note that only libraw_r is thread-safe, but we'll just run it out-of process.
|
||||||
libraw = dependency('libraw', required : get_option('libraw'))
|
libraw = dependency('libraw', required : get_option('libraw'))
|
||||||
|
@ -30,7 +36,6 @@ dependencies = [
|
||||||
dependency('pixman-1'),
|
dependency('pixman-1'),
|
||||||
|
|
||||||
dependency('libturbojpeg'),
|
dependency('libturbojpeg'),
|
||||||
dependency('libjpeg', required : get_option('jpeg-qs')),
|
|
||||||
dependency('libwebp'),
|
dependency('libwebp'),
|
||||||
dependency('libwebpdemux'),
|
dependency('libwebpdemux'),
|
||||||
dependency('libwebpdecoder', required : false),
|
dependency('libwebpdecoder', required : false),
|
||||||
|
@ -42,6 +47,7 @@ dependencies = [
|
||||||
),
|
),
|
||||||
|
|
||||||
lcms2,
|
lcms2,
|
||||||
|
libjpegqs,
|
||||||
libraw,
|
libraw,
|
||||||
librsvg,
|
librsvg,
|
||||||
xcursor,
|
xcursor,
|
||||||
|
@ -54,8 +60,7 @@ dependencies = [
|
||||||
conf = configuration_data()
|
conf = configuration_data()
|
||||||
conf.set_quoted('PROJECT_NAME', meson.project_name())
|
conf.set_quoted('PROJECT_NAME', meson.project_name())
|
||||||
conf.set_quoted('PROJECT_VERSION', meson.project_version())
|
conf.set_quoted('PROJECT_VERSION', meson.project_version())
|
||||||
# TODO(p): Wrap it in a Meson subproject, try to enable SIMD.
|
conf.set('HAVE_JPEG_QS', libjpegqs.found())
|
||||||
conf.set('HAVE_JPEG_QS', get_option('jpeg-qs').enabled())
|
|
||||||
conf.set('HAVE_LCMS2', lcms2.found())
|
conf.set('HAVE_LCMS2', lcms2.found())
|
||||||
conf.set('HAVE_LIBRAW', libraw.found())
|
conf.set('HAVE_LIBRAW', libraw.found())
|
||||||
conf.set('HAVE_LIBRSVG', librsvg.found())
|
conf.set('HAVE_LIBRSVG', librsvg.found())
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
option('lcms2', type : 'feature', value : 'auto',
|
option('lcms2', type : 'feature', value : 'auto',
|
||||||
description : 'Build with Little CMS colour management')
|
description : 'Build with Little CMS colour management')
|
||||||
option('jpeg-qs', type : 'feature', value : 'enabled',
|
option('libjpegqs', type : 'feature', value : 'auto',
|
||||||
description : 'Build with JPEG Quant Smooth integration')
|
description : 'Build with JPEG Quant Smooth integration')
|
||||||
option('libraw', type : 'feature', value : 'auto',
|
option('libraw', type : 'feature', value : 'auto',
|
||||||
description : 'Build with raw photo support, requires LibRaw')
|
description : 'Build with raw photo support, requires LibRaw')
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
[wrap-file]
|
||||||
|
directory = jpeg-quantsmooth-1.20210408
|
||||||
|
source_url = https://github.com/ilyakurdyukov/jpeg-quantsmooth/archive/refs/tags/1.20210408.tar.gz
|
||||||
|
source_filename = jpeg-quantsmooth-1.20210408.tar.gz
|
||||||
|
source_hash = 5937ca26db33888cab8638c1a8dc7a367a953bd0857ceb1290d5abc6febf3116
|
||||||
|
patch_directory = libjpegqs
|
||||||
|
|
||||||
|
[provide]
|
||||||
|
libjpegqs = jpegqs_dep
|
|
@ -0,0 +1,41 @@
|
||||||
|
# vim: noet ts=4 sts=4 sw=4:
|
||||||
|
project('jpeg-qs', 'c')
|
||||||
|
add_project_arguments(meson.get_compiler('c')
|
||||||
|
.get_supported_arguments('-Wno-misleading-indentation'),
|
||||||
|
'-DWITH_LOG', language : 'c')
|
||||||
|
|
||||||
|
deps = [
|
||||||
|
dependency('libjpeg'),
|
||||||
|
meson.get_compiler('c').find_library('m', required : false),
|
||||||
|
]
|
||||||
|
|
||||||
|
if host_machine.cpu_family() == 'x86_64'
|
||||||
|
jpegqs_avx512 = static_library('jpegqs-avx512', 'libjpegqs.c',
|
||||||
|
c_args : ['-DSIMD_SELECT', '-DSIMD_NAME=avx512',
|
||||||
|
'-mavx512f', '-mfma', '-DSIMD_AVX512'],
|
||||||
|
dependencies : deps)
|
||||||
|
jpegqs_avx2 = static_library('jpegqs-avx2', 'libjpegqs.c',
|
||||||
|
c_args : ['-DSIMD_SELECT', '-DSIMD_NAME=avx2',
|
||||||
|
'-mavx2', '-mfma', '-DSIMD_AVX2'],
|
||||||
|
dependencies : deps)
|
||||||
|
jpegqs_sse2 = static_library('jpegqs-sse2', 'libjpegqs.c',
|
||||||
|
c_args : ['-DSIMD_SELECT', '-DSIMD_NAME=sse2', '-msse2', '-DSIMD_SSE2'],
|
||||||
|
dependencies : deps)
|
||||||
|
jpegqs_base = static_library('jpegqs-base', 'libjpegqs.c',
|
||||||
|
c_args : ['-DSIMD_SELECT', '-DSIMD_NAME=base', '-DSIMD_BASE'],
|
||||||
|
dependencies : deps)
|
||||||
|
|
||||||
|
jpegqs_lib = static_library('jpegqs', 'libjpegqs.c',
|
||||||
|
c_args : ['-DSIMD_SELECT'],
|
||||||
|
dependencies : deps,
|
||||||
|
link_with : [jpegqs_base, jpegqs_sse2, jpegqs_avx2, jpegqs_avx512])
|
||||||
|
else
|
||||||
|
jpegqs_lib = static_library('jpegqs', 'libjpegqs.c',
|
||||||
|
c_args : ['-DNO_SIMD'],
|
||||||
|
dependencies : deps)
|
||||||
|
endif
|
||||||
|
|
||||||
|
jpegqs_dep = declare_dependency(
|
||||||
|
link_with : jpegqs_lib,
|
||||||
|
include_directories : include_directories('.'),
|
||||||
|
)
|
Loading…
Reference in New Issue