aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--.gitmodules3
-rw-r--r--fiv-io.c5
m---------jpeg-quantsmooth0
-rw-r--r--meson.build11
-rw-r--r--meson_options.txt2
-rw-r--r--subprojects/libjpegqs.wrap9
-rw-r--r--subprojects/packagefiles/libjpegqs/meson.build41
8 files changed, 63 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8e22552
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/subprojects/*
+!/subprojects/*.wrap
+!/subprojects/packagefiles
diff --git a/.gitmodules b/.gitmodules
index e8c4d71..c6b083b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,3 @@
[submodule "wuffs-mirror-release-c"]
path = 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
diff --git a/fiv-io.c b/fiv-io.c
index a666230..48f862c 100644
--- a/fiv-io.c
+++ b/fiv-io.c
@@ -32,10 +32,7 @@
#include <stdio.h>
#include <jpeglib.h>
-// This library is tricky to build, simply make it work at all.
-#define NO_SIMD
-#include <jpeg-quantsmooth/quantsmooth.h>
-#undef NO_SIMD
+#include <libjpegqs.h>
#endif // HAVE_JPEG_QS
// Colour management must be handled before RGB conversions.
diff --git a/jpeg-quantsmooth b/jpeg-quantsmooth
deleted file mode 160000
-Subproject c86c6418ea6c827513d206694847033f9ca5015
diff --git a/meson.build b/meson.build
index cab46ad..0ccc8cd 100644
--- a/meson.build
+++ b/meson.build
@@ -17,6 +17,12 @@ add_project_arguments(
# add_project_link_arguments(flags, language : ['c'])
#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'))
# Note that only libraw_r is thread-safe, but we'll just run it out-of process.
libraw = dependency('libraw', required : get_option('libraw'))
@@ -30,7 +36,6 @@ dependencies = [
dependency('pixman-1'),
dependency('libturbojpeg'),
- dependency('libjpeg', required : get_option('jpeg-qs')),
dependency('libwebp'),
dependency('libwebpdemux'),
dependency('libwebpdecoder', required : false),
@@ -42,6 +47,7 @@ dependencies = [
),
lcms2,
+ libjpegqs,
libraw,
librsvg,
xcursor,
@@ -54,8 +60,7 @@ dependencies = [
conf = configuration_data()
conf.set_quoted('PROJECT_NAME', meson.project_name())
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', get_option('jpeg-qs').enabled())
+conf.set('HAVE_JPEG_QS', libjpegqs.found())
conf.set('HAVE_LCMS2', lcms2.found())
conf.set('HAVE_LIBRAW', libraw.found())
conf.set('HAVE_LIBRSVG', librsvg.found())
diff --git a/meson_options.txt b/meson_options.txt
index 1ecc87b..d59a568 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,6 +1,6 @@
option('lcms2', type : 'feature', value : 'auto',
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')
option('libraw', type : 'feature', value : 'auto',
description : 'Build with raw photo support, requires LibRaw')
diff --git a/subprojects/libjpegqs.wrap b/subprojects/libjpegqs.wrap
new file mode 100644
index 0000000..c6a8f6f
--- /dev/null
+++ b/subprojects/libjpegqs.wrap
@@ -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
diff --git a/subprojects/packagefiles/libjpegqs/meson.build b/subprojects/packagefiles/libjpegqs/meson.build
new file mode 100644
index 0000000..9755f59
--- /dev/null
+++ b/subprojects/packagefiles/libjpegqs/meson.build
@@ -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('.'),
+)