summaryrefslogtreecommitdiff
path: root/lib/BUILD
diff options
context:
space:
mode:
Diffstat (limited to 'lib/BUILD')
-rw-r--r--lib/BUILD310
1 files changed, 310 insertions, 0 deletions
diff --git a/lib/BUILD b/lib/BUILD
new file mode 100644
index 0000000..d835ca1
--- /dev/null
+++ b/lib/BUILD
@@ -0,0 +1,310 @@
+# Copyright (c) the JPEG XL Project Authors. All rights reserved.
+#
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+# Load sources/headers/tests lists.
+load(
+ "jxl_lists.bzl",
+ "libjxl_base_sources",
+ "libjxl_cms_sources",
+ "libjxl_codec_apng_sources",
+ "libjxl_codec_exr_sources",
+ "libjxl_codec_gif_sources",
+ "libjxl_codec_jpegli_sources",
+ "libjxl_codec_jpg_sources",
+ "libjxl_codec_jxl_sources",
+ "libjxl_codec_npy_sources",
+ "libjxl_codec_pgx_sources",
+ "libjxl_codec_pnm_sources",
+ "libjxl_dec_box_sources",
+ "libjxl_dec_jpeg_sources",
+ "libjxl_dec_sources",
+ "libjxl_enc_sources",
+ "libjxl_extras_for_tools_sources",
+ "libjxl_extras_sources",
+ #'libjxl_gbench_sources',
+ "libjxl_jpegli_lib_version",
+ "libjxl_jpegli_libjpeg_helper_files",
+ "libjxl_jpegli_sources",
+ "libjxl_jpegli_testlib_files",
+ "libjxl_jpegli_tests",
+ "libjxl_major_version",
+ "libjxl_minor_version",
+ "libjxl_patch_version",
+ "libjxl_public_headers",
+ "libjxl_testlib_files",
+ "libjxl_tests",
+ "libjxl_threads_public_headers",
+ "libjxl_threads_sources",
+)
+load(
+ "jxl_vars.bzl",
+ "libjxl_deps_brotli",
+ "libjxl_deps_exr",
+ "libjxl_deps_gif",
+ "libjxl_deps_gtest",
+ "libjxl_deps_hwy",
+ "libjxl_deps_hwy_nanobenchmark",
+ "libjxl_deps_hwy_test_util",
+ "libjxl_deps_jpeg",
+ "libjxl_deps_png",
+ "libjxl_deps_runfiles",
+ "libjxl_deps_skcms",
+ "libjxl_deps_testdata",
+ "libjxl_root_package",
+ "libjxl_test_shards",
+ "libjxl_test_timeouts",
+)
+load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
+load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
+
+DEFAULT_VISIBILITY = ["//:__subpackages__"]
+
+DEFAULT_COMPATIBILITY = []
+
+INCLUDES_DIR = "include"
+
+package(
+ default_visibility = ["//:__subpackages__"],
+)
+
+licenses(["notice"])
+
+exports_files(["LICENSE"])
+
+EXPORT_TEMPLATE = """
+#ifndef @_EXPORT_H
+#define @_EXPORT_H
+
+#define @_EXPORT
+#define @_NO_EXPORT
+
+#ifndef @_DEPRECATED
+# define @_DEPRECATED __attribute__ ((__deprecated__))
+#endif
+
+#endif
+"""
+
+JXL_EXPORT_H = INCLUDES_DIR + "/jxl/jxl_export.h"
+
+genrule(
+ name = "create_jxl_export",
+ outs = [JXL_EXPORT_H],
+ cmd = "echo '" + EXPORT_TEMPLATE.replace("@", "JXL") + "' > $@",
+ compatible_with = DEFAULT_COMPATIBILITY,
+)
+
+JXL_CMS_EXPORT_H = INCLUDES_DIR + "/jxl/jxl_cms_export.h"
+
+genrule(
+ name = "create_jxl_cms_export",
+ outs = [JXL_CMS_EXPORT_H],
+ cmd = "echo '" + EXPORT_TEMPLATE.replace("@", "JXL_CMS") + "' > $@",
+ compatible_with = DEFAULT_COMPATIBILITY,
+)
+
+JXL_THREADS_EXPORT_H = INCLUDES_DIR + "/jxl/jxl_threads_export.h"
+
+genrule(
+ name = "create_jxl_threads_export",
+ outs = [JXL_THREADS_EXPORT_H],
+ cmd = "echo '" + EXPORT_TEMPLATE.replace("@", "JXL_THREADS") + "' > $@",
+ compatible_with = DEFAULT_COMPATIBILITY,
+)
+
+JXL_VERSION_H = INCLUDES_DIR + "/jxl/version.h"
+
+expand_template(
+ name = "expand_jxl_version",
+ out = JXL_VERSION_H,
+ compatible_with = DEFAULT_COMPATIBILITY,
+ substitutions = {
+ "@JPEGXL_MAJOR_VERSION@": str(libjxl_major_version),
+ "@JPEGXL_MINOR_VERSION@": str(libjxl_minor_version),
+ "@JPEGXL_PATCH_VERSION@": str(libjxl_patch_version),
+ },
+ template = "jxl/version.h.in",
+)
+
+cc_library(
+ name = "jxl_version",
+ hdrs = [JXL_VERSION_H],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ strip_include_prefix = INCLUDES_DIR,
+)
+
+JPEGLI_JCONFIG_H = INCLUDES_DIR + "/jpegli/jconfig.h"
+
+JPEGLI_JMORECFG_H = INCLUDES_DIR + "/jpegli/jmorecfg.h"
+
+JPEGLI_JPEGLIB_H = INCLUDES_DIR + "/jpegli/jpeglib.h"
+
+copy_file(
+ name = "expand_jconfig",
+ src = "@libjpeg_turbo//:jconfig.h",
+ out = JPEGLI_JCONFIG_H,
+ compatible_with = DEFAULT_COMPATIBILITY,
+)
+
+copy_file(
+ name = "copy_jmorecfg",
+ src = "@libjpeg_turbo//:jmorecfg.h",
+ out = JPEGLI_JMORECFG_H,
+ compatible_with = DEFAULT_COMPATIBILITY,
+)
+
+copy_file(
+ name = "copy_jpeglib",
+ src = "@libjpeg_turbo//:jpeglib.h",
+ out = JPEGLI_JPEGLIB_H,
+ compatible_with = DEFAULT_COMPATIBILITY,
+)
+
+cc_library(
+ name = "includes",
+ hdrs = libjxl_public_headers + [
+ JXL_EXPORT_H,
+ JXL_CMS_EXPORT_H,
+ ],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ strip_include_prefix = INCLUDES_DIR,
+ deps = [":jxl_version"],
+)
+
+cc_library(
+ name = "libjpeg_includes",
+ hdrs = [
+ JPEGLI_JCONFIG_H,
+ JPEGLI_JMORECFG_H,
+ JPEGLI_JPEGLIB_H,
+ ],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ strip_include_prefix = INCLUDES_DIR + "/jpegli",
+)
+
+cc_library(
+ name = "base",
+ srcs = [path for path in libjxl_base_sources if path.endswith(".cc")],
+ hdrs = [path for path in libjxl_base_sources if path.endswith(".h")],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ deps = [
+ ":includes",
+ ] + libjxl_deps_hwy,
+)
+
+cc_library(
+ name = "jpegxl",
+ srcs = libjxl_dec_sources + libjxl_dec_box_sources + libjxl_dec_jpeg_sources + libjxl_enc_sources + libjxl_cms_sources,
+ compatible_with = DEFAULT_COMPATIBILITY,
+ defines = ["JPEGXL_ENABLE_SKCMS=1"],
+ deps = [
+ ":base",
+ ":includes",
+ ] + libjxl_deps_brotli + libjxl_deps_hwy + libjxl_deps_skcms,
+)
+
+cc_library(
+ name = "jpegxl_private",
+ hdrs = [
+ path
+ for path in libjxl_dec_sources + libjxl_dec_box_sources + libjxl_dec_jpeg_sources + libjxl_enc_sources + libjxl_cms_sources
+ if path.endswith(".h") and not path.endswith("-inl.h")
+ ],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ deps = [":jpegxl"],
+)
+
+cc_library(
+ name = "jpegxl_threads",
+ srcs = libjxl_threads_sources,
+ hdrs = libjxl_threads_public_headers + [JXL_THREADS_EXPORT_H],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ strip_include_prefix = INCLUDES_DIR,
+ deps = [
+ ":base",
+ ":includes",
+ ],
+)
+
+CODEC_FILES = libjxl_codec_apng_sources + libjxl_codec_exr_sources + libjxl_codec_gif_sources + libjxl_codec_jpegli_sources + libjxl_codec_jpg_sources + libjxl_codec_jxl_sources + libjxl_codec_npy_sources + libjxl_codec_pgx_sources + libjxl_codec_pnm_sources
+
+CODEC_SRCS = [path for path in CODEC_FILES if path.endswith(".cc")]
+
+CODEC_HDRS = [path for path in CODEC_FILES if path.endswith(".h")]
+
+cc_library(
+ name = "jpegli",
+ srcs = libjxl_jpegli_sources,
+ hdrs = [
+ "jpegli/common_internal.h", # TODO(eustas): should not be here
+ ],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ deps = [
+ ":jpegxl_private",
+ ":libjpeg_includes",
+ ] + libjxl_deps_hwy,
+)
+
+# TODO(eustas): build codecs separately?
+cc_library(
+ name = "jpegxl_extras",
+ srcs = libjxl_extras_sources + libjxl_extras_for_tools_sources + CODEC_SRCS,
+ hdrs = CODEC_HDRS,
+ compatible_with = DEFAULT_COMPATIBILITY,
+ defines = [
+ "JPEGXL_ENABLE_APNG=1",
+ "JPEGXL_ENABLE_EXR=1",
+ "JPEGXL_ENABLE_GIF=1",
+ "JPEGXL_ENABLE_JPEG=1",
+ "JPEGXL_ENABLE_JPEGLI=1",
+ ],
+ deps = [
+ ":jpegli",
+ ":jpegxl_private",
+ ":jpegxl_threads",
+ ":jxl_version",
+ ] + libjxl_deps_exr + libjxl_deps_gif + libjxl_deps_jpeg + libjxl_deps_png,
+)
+
+TESTLIB_FILES = libjxl_testlib_files + libjxl_jpegli_testlib_files + libjxl_jpegli_libjpeg_helper_files
+
+cc_library(
+ name = "test_utils",
+ testonly = 1,
+ srcs = [path for path in TESTLIB_FILES if not path.endswith(".h")],
+ hdrs = [path for path in TESTLIB_FILES if path.endswith(".h")],
+ compatible_with = DEFAULT_COMPATIBILITY,
+ defines = [
+ 'JPEGXL_ROOT_PACKAGE=\'"' + libjxl_root_package + '"\'',
+ ],
+ deps = [
+ ":jpegli",
+ ":jpegxl_extras",
+ ":jpegxl_private",
+ ] + libjxl_deps_runfiles,
+)
+
+TESTS = [path.partition(".")[0] for path in libjxl_tests + libjxl_jpegli_tests]
+
+[
+ cc_test(
+ name = test,
+ timeout = libjxl_test_timeouts.get(test, "moderate"),
+ srcs = [
+ test + ".cc",
+ "jpegli/testing.h",
+ "jxl/testing.h",
+ ],
+ data = ["//:testdata"],
+ shard_count = libjxl_test_shards.get(test, 1),
+ deps = [
+ ":jpegxl_extras",
+ ":jpegxl_private",
+ ":jpegxl_threads",
+ ":test_utils",
+ ] + libjxl_deps_gtest + libjxl_deps_hwy_test_util + libjxl_deps_hwy_nanobenchmark,
+ )
+ for test in TESTS
+]