| # 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. |
| |
| import("//build/config/chromecast_build.gni") |
| import("//build/config/freetype/freetype.gni") |
| import("//third_party/harfbuzz-ng/harfbuzz.gni") |
| |
| assert(!use_system_freetype, "Not used when using system freetype.") |
| |
| config("freetype_config") { |
| include_dirs = [ |
| "include", |
| "src/include", |
| ] |
| |
| defines = [ |
| # Long directory name to avoid accidentally using wrong headers. |
| # GN currently does not escape '<' and '>' when generating xml based Visual |
| # Studio project files. As a result, use quotes instead of pointy brackets |
| # in these defines. |
| "FT_CONFIG_CONFIG_H=\"freetype-custom-config/ftconfig.h\"", |
| "FT_CONFIG_MODULES_H=\"freetype-custom-config/ftmodule.h\"", |
| "FT_CONFIG_OPTIONS_H=\"freetype-custom-config/ftoption.h\"", |
| ] |
| |
| if (!is_android) { |
| # Selects type1cid.c and type1.c modules in |
| # freetype-custom-config/ftmodule.h. |
| defines += [ "PDFIUM_REQUIRED_MODULES" ] |
| } else { |
| # Using HarfBuzz assisted autohinting has a performance impact that we do |
| # not want to take on Android, see crbug.com/724095. |
| defines += [ "WITHOUT_HARFBUZZ" ] |
| } |
| |
| if (!is_component_build) { |
| defines += [ "CHROMIUM_RESTRICT_VISIBILITY" ] |
| } |
| } |
| |
| config("freetype-warnings") { |
| cflags = [] |
| |
| if (is_clang) { |
| # The reduction of FreeType files to a minimum triggers -Wunused-function |
| # warnings in ftbase.c |
| cflags += [ "-Wno-unused-function" ] |
| } |
| } |
| |
| source_set("freetype_source") { |
| visibility = [ "//third_party:freetype_harfbuzz" ] |
| |
| defines = [] |
| include_dirs = [] |
| |
| sources = [ |
| "include/freetype-custom-config/ftconfig.h", |
| "include/freetype-custom-config/ftmodule.h", |
| "include/freetype-custom-config/ftoption.h", |
| "src/src/autofit/autofit.c", |
| "src/src/base/ftbase.c", |
| "src/src/base/ftbbox.c", |
| "src/src/base/ftbitmap.c", |
| "src/src/base/ftfstype.c", |
| "src/src/base/ftgasp.c", |
| "src/src/base/ftglyph.c", |
| "src/src/base/ftinit.c", |
| "src/src/base/ftmm.c", |
| "src/src/base/ftstroke.c", |
| "src/src/base/fttype1.c", |
| "src/src/cff/cff.c", |
| "src/src/gzip/ftgzip.c", |
| "src/src/psaux/psaux.c", |
| "src/src/pshinter/pshinter.c", |
| "src/src/psnames/psnames.c", |
| "src/src/raster/raster.c", |
| "src/src/sfnt/sfnt.c", |
| "src/src/smooth/smooth.c", |
| "src/src/truetype/truetype.c", |
| ] |
| |
| # ftsystem.c provides implementations of FT_Memory and FT_Stream_Open. |
| # While Chromium itself avoids using this code, any build of Chromium which |
| # depends on //third_party/fontconfig:fontconfig with use_bundled_fontconfig |
| # will make heavy use of these implementations, so use the best available. |
| if (is_posix || is_fuchsia) { |
| sources += [ "src/builds/unix/ftsystem.c" ] |
| |
| # builds/unix/ftsystem.c directly includes <ftconfig.h> instead of using |
| # FT_CONFIG_CONFIG_H. The includes/freetype/config directory should not be |
| # on the include path to avoid accidentally using the ftoption or ftmodule |
| # from there. |
| include_dirs += [ "include/freetype-custom-config" ] |
| |
| # builds/unix/ftsystem.c requires the following defines to be set. |
| defines += [ |
| "HAVE_UNISTD_H", |
| "HAVE_FCNTL_H", |
| ] |
| } else { |
| sources += [ "src/src/base/ftsystem.c" ] |
| } |
| |
| if (!is_android) { |
| sources += [ |
| "src/src/cid/type1cid.c", |
| "src/src/type1/type1.c", |
| ] |
| } |
| |
| if (is_linux || is_chromecast) { |
| # Needed for content_shell on Linux and Chromecast, since fontconfig |
| # requires FT_Get_BDF_Property. |
| sources += [ "src/src/base/ftbdf.c" ] |
| } |
| |
| if (is_linux || is_chromecast) { |
| # Needed on Fedora whose libfreetype builds ftsynth.c containing |
| # FT_GlyphSlot_Embolden, which we need to replace in content_shell if |
| # we are linking against our own FreeType. |
| sources += [ "src/src/base/ftsynth.c" ] |
| } |
| |
| defines += [ "FT2_BUILD_LIBRARY" ] |
| |
| if (is_win && is_component_build) { |
| # Used for managing declspec(dllimport/export) visibility. |
| defines += [ "FT2_BUILD_DLL" ] |
| } |
| |
| if (use_system_harfbuzz) { |
| configs += [ "//third_party/harfbuzz-ng:harfbuzz_from_pkgconfig" ] |
| } else { |
| configs += [ "//third_party/harfbuzz-ng:harfbuzz_config" ] |
| } |
| configs -= [ "//build/config/compiler:chromium_code" ] |
| configs += [ "//build/config/compiler:no_chromium_code" ] |
| configs += [ "//build/config/sanitizers:cfi_icall_generalize_pointers" ] |
| configs += [ ":freetype-warnings" ] |
| |
| public_configs = [ ":freetype_config" ] |
| |
| deps = [ |
| "//third_party/libpng", |
| "//third_party/zlib", |
| ] |
| } |