mirror of
https://pdfium.googlesource.com/pdfium
synced 2026-07-30 10:21:46 +08:00
Declare the pdf_enable_rust_bmp build argument, its override pdf_enable_rust_bmp_override, and define the PDF_ENABLE_RUST_BMP preprocessor macro when pdf_use_skia && pdf_enable_rust_bmp is active. This allows external build recipes to configure the GN argument prior to activating the Rust-based BMP decoder in a follow-up change. TAG=agy CONV=f457c92a-036e-44c5-89eb-1caaf0d672f5 Bug: 537855738 Change-Id: Ia44c2b798b5c26cac89a8025b83d8244e1978655 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/152810 Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
486 lines
11 KiB
Plaintext
486 lines
11 KiB
Plaintext
# Copyright 2016 The PDFium Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import("//build/config/clang/clang.gni")
|
|
import("//build/config/gclient_args.gni")
|
|
import("//testing/test.gni")
|
|
import("pdfium.gni")
|
|
|
|
group("default") {
|
|
testonly = true
|
|
deps = [ ":pdfium" ]
|
|
if (pdf_is_standalone) {
|
|
deps += [ ":pdfium_all" ]
|
|
}
|
|
}
|
|
|
|
group("freetype_common") {
|
|
public_deps = []
|
|
if (pdf_bundle_freetype) {
|
|
public_deps += [ "third_party:fx_freetype" ]
|
|
} else {
|
|
public_deps += [ "//build/config/freetype" ]
|
|
}
|
|
}
|
|
|
|
config("pdfium_common_config") {
|
|
cflags = []
|
|
cflags_cc = []
|
|
ldflags = []
|
|
include_dirs = [ "." ]
|
|
defines = []
|
|
|
|
if (!use_system_libopenjpeg2) {
|
|
defines += [ "OPJ_STATIC" ]
|
|
}
|
|
|
|
if (pdf_enable_click_logging) {
|
|
defines += [ "PDF_ENABLE_CLICK_LOGGING" ]
|
|
}
|
|
|
|
if (pdf_use_skia && pdf_enable_fontations) {
|
|
defines += [ "PDF_ENABLE_FONTATIONS" ]
|
|
}
|
|
|
|
if (pdf_use_skia && pdf_enable_skia_typeface_checks) {
|
|
defines += [ "PDF_ENABLE_SKIA_TYPEFACE_CHECKS" ]
|
|
}
|
|
|
|
if (pdf_use_skia && pdf_enable_rust_bmp) {
|
|
defines += [ "PDF_ENABLE_RUST_BMP" ]
|
|
}
|
|
|
|
if (pdf_use_skia && pdf_enable_rust_png) {
|
|
defines += [ "PDF_ENABLE_RUST_PNG" ]
|
|
}
|
|
|
|
if (pdf_use_partition_alloc) {
|
|
defines += [ "PDF_USE_PARTITION_ALLOC" ]
|
|
}
|
|
|
|
if (is_win) {
|
|
# Assume UTF-8 by default to avoid code page dependencies.
|
|
cflags += [ "/utf-8" ]
|
|
}
|
|
|
|
if (is_clang) {
|
|
# May flag some issues when converting int to size_t.
|
|
cflags += [ "-Wtautological-unsigned-zero-compare" ]
|
|
|
|
# Enforce style guide decision regarding CTAD usage:
|
|
# https://google.github.io/styleguide/cppguide.html#CTAD
|
|
cflags += [ "-Wctad-maybe-unsupported" ]
|
|
}
|
|
|
|
if (!is_win && !is_clang) {
|
|
cflags += [
|
|
# GCC assumes that control can get past an exhaustive switch and then
|
|
# warns if there's no return there.
|
|
"-Wno-return-type",
|
|
]
|
|
}
|
|
|
|
if (clang_use_chrome_plugins) {
|
|
# Catch misuse of C-style pointers.
|
|
# TODO(crbug.com/1320670): enable for non-debug builds once this stops
|
|
# interfering with code generation.
|
|
# TODO(tsepez): enable for windows, too.
|
|
if (is_debug && pdf_use_partition_alloc && !is_win) {
|
|
cflags += [
|
|
"-Xclang",
|
|
"-plugin-arg-raw-ptr-plugin",
|
|
"-Xclang",
|
|
"check-raw-ptr-fields",
|
|
|
|
"-Xclang",
|
|
"-plugin-arg-raw-ptr-plugin",
|
|
"-Xclang",
|
|
"raw-ptr-exclude-path=public",
|
|
|
|
"-Xclang",
|
|
"-plugin-arg-raw-ptr-plugin",
|
|
"-Xclang",
|
|
"raw-ptr-exclude-path=test",
|
|
|
|
# TODO(tsepez): enforce raw_ref<> as well.
|
|
# "-Xclang",
|
|
# "-plugin-arg-raw-ptr-plugin",
|
|
# "-Xclang",
|
|
# "check-raw-ref-fields",
|
|
]
|
|
defines += [ "PDF_ENABLE_UNOWNED_PTR_EXCLUSION" ]
|
|
}
|
|
|
|
# Catch misuse of cppgc in XFA.
|
|
if (pdf_enable_xfa) {
|
|
cflags += [
|
|
"-Xclang",
|
|
"-add-plugin",
|
|
"-Xclang",
|
|
"blink-gc-plugin",
|
|
]
|
|
|
|
# Disable GC plugin forbidding off-heap collections of GCed:
|
|
cflags += [
|
|
"-Xclang",
|
|
"-plugin-arg-blink-gc-plugin",
|
|
"-Xclang",
|
|
"disable-off-heap-collections-of-gced-check",
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
config("pdfium_implementation_config") {
|
|
defines = [ "FPDF_IMPLEMENTATION" ]
|
|
visibility = [ ":pdfium_public_headers" ]
|
|
}
|
|
|
|
config("pdfium_public_config") {
|
|
defines = []
|
|
|
|
if (pdf_enable_brotli) {
|
|
defines += [ "PDF_ENABLE_BROTLI" ]
|
|
}
|
|
|
|
if (pdf_enable_v8) {
|
|
defines += [ "PDF_ENABLE_V8" ]
|
|
|
|
if (pdf_enable_xfa) {
|
|
defines += [ "PDF_ENABLE_XFA" ]
|
|
if (pdf_enable_xfa_bmp) {
|
|
defines += [ "PDF_ENABLE_XFA_BMP" ]
|
|
}
|
|
if (pdf_enable_xfa_gif) {
|
|
defines += [ "PDF_ENABLE_XFA_GIF" ]
|
|
}
|
|
if (pdf_enable_xfa_png) {
|
|
defines += [ "PDF_ENABLE_XFA_PNG" ]
|
|
}
|
|
if (pdf_enable_xfa_tiff) {
|
|
defines += [ "PDF_ENABLE_XFA_TIFF" ]
|
|
}
|
|
}
|
|
}
|
|
|
|
if (pdf_use_agg) {
|
|
defines += [ "PDF_USE_AGG" ]
|
|
}
|
|
if (pdf_use_skia) {
|
|
defines += [ "PDF_USE_SKIA" ]
|
|
}
|
|
}
|
|
|
|
config("pdfium_core_config") {
|
|
cflags = []
|
|
configs = [
|
|
":pdfium_common_config",
|
|
":pdfium_public_config",
|
|
"//build/config/compiler:noshadowing",
|
|
]
|
|
defines = []
|
|
if (is_clang) {
|
|
cflags += [
|
|
"-Wcovered-switch-default",
|
|
"-Wlifetime-safety-permissive",
|
|
]
|
|
}
|
|
}
|
|
|
|
config("pdfium_strict_config") {
|
|
configs = [
|
|
":pdfium_core_config",
|
|
"//build/config/compiler:wexit_time_destructors",
|
|
"//build/config/compiler:wglobal_constructors",
|
|
]
|
|
}
|
|
|
|
config("pdfium_noshorten_config") {
|
|
cflags = []
|
|
if (is_clang) {
|
|
cflags += [ "-Wshorten-64-to-32" ]
|
|
}
|
|
}
|
|
|
|
source_set("pdfium_public_headers_impl") {
|
|
sources = [
|
|
"public/cpp/fpdf_deleters.h",
|
|
"public/cpp/fpdf_scopers.h",
|
|
"public/fpdf_annot.h",
|
|
"public/fpdf_attachment.h",
|
|
"public/fpdf_catalog.h",
|
|
"public/fpdf_dataavail.h",
|
|
"public/fpdf_doc.h",
|
|
"public/fpdf_edit.h",
|
|
"public/fpdf_ext.h",
|
|
"public/fpdf_flatten.h",
|
|
"public/fpdf_formfill.h",
|
|
"public/fpdf_fwlevent.h",
|
|
"public/fpdf_javascript.h",
|
|
"public/fpdf_ppo.h",
|
|
"public/fpdf_progressive.h",
|
|
"public/fpdf_save.h",
|
|
"public/fpdf_searchex.h",
|
|
"public/fpdf_signature.h",
|
|
"public/fpdf_structtree.h",
|
|
"public/fpdf_sysfontinfo.h",
|
|
"public/fpdf_text.h",
|
|
"public/fpdf_transformpage.h",
|
|
"public/fpdfview.h",
|
|
]
|
|
}
|
|
|
|
group("pdfium_public_headers") {
|
|
public_deps = [ ":pdfium_public_headers_impl" ]
|
|
public_configs = [
|
|
":pdfium_public_config",
|
|
":pdfium_implementation_config",
|
|
]
|
|
}
|
|
|
|
component("pdfium") {
|
|
output_name = "pdfium"
|
|
libs = []
|
|
configs += [ ":pdfium_strict_config" ]
|
|
public_configs = [ ":pdfium_public_config" ]
|
|
|
|
deps = [
|
|
"constants",
|
|
"core/fpdfapi/page",
|
|
"core/fpdfapi/parser",
|
|
"core/fpdfdoc",
|
|
"core/fxcodec",
|
|
"core/fxcrt",
|
|
"core/fxge",
|
|
"fpdfsdk",
|
|
"fpdfsdk/formfiller",
|
|
"fxjs",
|
|
]
|
|
|
|
public_deps = [
|
|
":pdfium_public_headers_impl",
|
|
"core/fxcrt",
|
|
]
|
|
|
|
if (pdf_enable_xfa) {
|
|
deps += [
|
|
"fpdfsdk/fpdfxfa",
|
|
"xfa/fxfa",
|
|
"xfa/fxfa/parser",
|
|
]
|
|
}
|
|
|
|
if (is_win) {
|
|
libs += [
|
|
"advapi32.lib",
|
|
"gdi32.lib",
|
|
"user32.lib",
|
|
]
|
|
}
|
|
|
|
if (is_mac) {
|
|
frameworks = [
|
|
"AppKit.framework",
|
|
"CoreFoundation.framework",
|
|
]
|
|
}
|
|
|
|
if (pdf_is_complete_lib) {
|
|
static_component_type = "static_library"
|
|
complete_static_lib = true
|
|
configs -= [ "//build/config/compiler:thin_archive" ]
|
|
}
|
|
}
|
|
|
|
# Targets below this are only visible within this file.
|
|
visibility = [ ":*" ]
|
|
|
|
group("pdfium_unittest_deps") {
|
|
testonly = true
|
|
public_deps = [
|
|
"core/fxcrt",
|
|
"testing:unit_test_support",
|
|
"//testing/gmock",
|
|
"//testing/gtest",
|
|
]
|
|
visibility += [
|
|
"core/*",
|
|
"fpdfsdk/*",
|
|
"fxbarcode/*",
|
|
"fxjs/*",
|
|
"testing/image_diff/*",
|
|
"xfa/*",
|
|
]
|
|
}
|
|
|
|
test("pdfium_unittests") {
|
|
testonly = true
|
|
sources = [ "testing/unit_test_main.cpp" ]
|
|
deps = [
|
|
"core/fdrm:unittests",
|
|
"core/fpdfapi/edit:unittests",
|
|
"core/fpdfapi/font:unittests",
|
|
"core/fpdfapi/page:unittests",
|
|
"core/fpdfapi/parser:unittests",
|
|
"core/fpdfapi/render:unittests",
|
|
"core/fpdfdoc:unittests",
|
|
"core/fpdftext:unittests",
|
|
"core/fxcodec:unittests",
|
|
"core/fxcrt",
|
|
"core/fxcrt:unittests",
|
|
"core/fxge:unittests",
|
|
"fpdfsdk:unittests",
|
|
"testing:unit_test_support",
|
|
"testing/image_diff:unittests",
|
|
"//testing/gmock",
|
|
"//testing/gtest",
|
|
]
|
|
configs += [ ":pdfium_core_config" ]
|
|
if (is_android) {
|
|
use_raw_android_executable = true
|
|
}
|
|
if (pdf_enable_v8) {
|
|
configs += [ "//v8:external_startup_data" ]
|
|
deps += [
|
|
"fxjs:unittests",
|
|
"//v8",
|
|
]
|
|
if (pdf_enable_xfa) {
|
|
deps += [
|
|
"core/fxcrt/css:unittests",
|
|
"fxbarcode:unittests",
|
|
"xfa/fde:unittests",
|
|
"xfa/fgas/crt:unittests",
|
|
"xfa/fgas/font:unittests",
|
|
"xfa/fgas/layout:unittests",
|
|
"xfa/fxfa:unittests",
|
|
"xfa/fxfa/formcalc:unittests",
|
|
"xfa/fxfa/parser:unittests",
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
group("pdfium_embeddertest_deps") {
|
|
testonly = true
|
|
public_deps = [
|
|
":pdfium_public_headers",
|
|
"core/fxcrt",
|
|
"testing:embedder_test_support",
|
|
"//testing/gmock",
|
|
"//testing/gtest",
|
|
]
|
|
visibility += [
|
|
"core/*",
|
|
"fpdfsdk/*",
|
|
"fxjs/*",
|
|
"xfa/*",
|
|
]
|
|
}
|
|
|
|
test("pdfium_embeddertests") {
|
|
testonly = true
|
|
sources = [ "testing/embedder_test_main.cpp" ]
|
|
deps = [
|
|
":pdfium_embeddertest_deps",
|
|
"core/fpdfapi/edit:embeddertests",
|
|
"core/fpdfapi/parser:embeddertests",
|
|
"core/fpdfapi/render:embeddertests",
|
|
"core/fxcodec:embeddertests",
|
|
"core/fxcrt",
|
|
"core/fxge:embeddertests",
|
|
"fpdfsdk:embeddertests",
|
|
"fpdfsdk/formfiller:embeddertests",
|
|
"fpdfsdk/pwl:embeddertests",
|
|
"testing/image_diff",
|
|
"//testing/gmock",
|
|
"//testing/gtest",
|
|
]
|
|
include_dirs = [ "testing/gmock/include" ]
|
|
configs += [ ":pdfium_core_config" ]
|
|
|
|
if (is_android) {
|
|
ignore_all_data_deps = true
|
|
use_raw_android_executable = true
|
|
}
|
|
|
|
if (build_with_chromium && pdf_use_skia) {
|
|
deps += [ "testing:discardable_memory_allocator" ]
|
|
configs += [ "testing:pdfium_in_chromium_config" ]
|
|
}
|
|
|
|
if (pdf_enable_v8) {
|
|
deps += [
|
|
"fxjs:embeddertests",
|
|
"//v8",
|
|
]
|
|
configs += [ "//v8:external_startup_data" ]
|
|
}
|
|
|
|
if (pdf_enable_xfa) {
|
|
deps += [
|
|
"fpdfsdk/fpdfxfa:embeddertests",
|
|
"xfa/fwl:embeddertests",
|
|
"xfa/fxfa/layout:embeddertests",
|
|
"xfa/fxfa/parser:embeddertests",
|
|
]
|
|
}
|
|
}
|
|
|
|
executable("pdfium_diff") {
|
|
visibility += [ "testing/tools:test_runner_py" ]
|
|
testonly = true
|
|
sources = [ "testing/image_diff/image_diff.cpp" ]
|
|
deps = [
|
|
"core/fxcrt",
|
|
"testing:path_service",
|
|
"testing:pixel_diff_utils",
|
|
"testing/image_diff",
|
|
"//build/win:default_exe_manifest",
|
|
]
|
|
configs += [ ":pdfium_strict_config" ]
|
|
}
|
|
|
|
group("pdfium_all") {
|
|
testonly = true
|
|
deps = [
|
|
":pdfium_diff",
|
|
":pdfium_embeddertests",
|
|
":pdfium_unittests",
|
|
"testing:pdfium_test",
|
|
"testing/fuzzers",
|
|
]
|
|
|
|
if (pdf_is_standalone) {
|
|
deps += [ "testing/tools:test_runner_py" ]
|
|
}
|
|
}
|
|
|
|
# Makes additional targets reachable only for "gn check". These are not always
|
|
# built by the "all" Ninja target, which uses the "default" group, which in turn
|
|
# depends on the "pdfium_all" group.
|
|
group("gn_check") {
|
|
deps = []
|
|
|
|
# TODO(crbug.com/pdfium/1832): Remove !is_android when //third_party/expat is
|
|
# available.
|
|
if (defined(checkout_skia) && checkout_skia && !is_android) {
|
|
deps += [ "//skia" ]
|
|
}
|
|
}
|
|
|
|
# GN evaluates each .gn file once per toolchain, so restricting to default
|
|
# toolchain will ensure write_file() is called only once.
|
|
if (current_toolchain == default_toolchain) {
|
|
import("//build/gn_logs.gni")
|
|
|
|
# Write debug logs to gn_logs.txt.
|
|
_lines = [
|
|
"Generated during 'gn gen' by //BUILD.gn.",
|
|
"",
|
|
] + build_gn_logs
|
|
|
|
write_file("$root_build_dir/gn_logs.txt", _lines)
|
|
}
|