BUILD.gn 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. # Copyright 2014 The Chromium Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. import("//build/config/buildflags_paint_preview.gni")
  5. import("//build/config/chrome_build.gni")
  6. import("//build/config/features.gni")
  7. import("//build/config/freetype/freetype.gni")
  8. import("//build/config/ui.gni")
  9. import("//testing/libfuzzer/fuzzer_test.gni")
  10. import("//third_party/harfbuzz-ng/harfbuzz.gni")
  11. if (use_system_harfbuzz) {
  12. import("//build/config/linux/pkg_config.gni")
  13. pkg_config("harfbuzz_from_pkgconfig") {
  14. visibility = [
  15. "//third_party:freetype_harfbuzz",
  16. "//third_party/freetype:freetype_source",
  17. ]
  18. packages = [
  19. "harfbuzz",
  20. "harfbuzz-subset",
  21. ]
  22. }
  23. } else {
  24. config("harfbuzz_config") {
  25. include_dirs = [ "src/src" ]
  26. }
  27. config("harfbuzz_warnings") {
  28. if (is_win) {
  29. # Result of 32-bit shift implicitly converted to 64 bits.
  30. cflags = [ "/wd4334" ]
  31. }
  32. }
  33. source_set("harfbuzz_source") {
  34. visibility = [ "//third_party:freetype_harfbuzz" ]
  35. public = [
  36. "src/src/hb-blob.h",
  37. "src/src/hb-buffer.h",
  38. "src/src/hb-common.h",
  39. "src/src/hb-deprecated.h",
  40. "src/src/hb-face.h",
  41. "src/src/hb-font.h",
  42. "src/src/hb-ft.h",
  43. "src/src/hb-icu.h",
  44. "src/src/hb-map.h",
  45. "src/src/hb-ot-font.h",
  46. "src/src/hb-ot-layout.h",
  47. "src/src/hb-ot-math.h",
  48. "src/src/hb-ot-shape.h",
  49. "src/src/hb-ot-var.h",
  50. "src/src/hb-ot.h",
  51. "src/src/hb-set.h",
  52. "src/src/hb-shape-plan.h",
  53. "src/src/hb-shape.h",
  54. "src/src/hb-subset.h",
  55. "src/src/hb-unicode.h",
  56. "src/src/hb-version.h",
  57. "src/src/hb.h",
  58. ]
  59. sources = [
  60. "src/src/hb-aat-layout-ankr-table.hh",
  61. "src/src/hb-aat-layout-bsln-table.hh",
  62. "src/src/hb-aat-layout-common.hh",
  63. "src/src/hb-aat-layout-feat-table.hh",
  64. "src/src/hb-aat-layout-just-table.hh",
  65. "src/src/hb-aat-layout-kerx-table.hh",
  66. "src/src/hb-aat-layout-morx-table.hh",
  67. "src/src/hb-aat-layout-opbd-table.hh",
  68. "src/src/hb-aat-layout-trak-table.hh",
  69. "src/src/hb-aat-layout.cc",
  70. "src/src/hb-aat-layout.h",
  71. "src/src/hb-aat-layout.hh",
  72. "src/src/hb-aat-ltag-table.hh",
  73. "src/src/hb-aat-map.cc",
  74. "src/src/hb-aat-map.hh",
  75. "src/src/hb-aat.h",
  76. "src/src/hb-algs.hh",
  77. "src/src/hb-array.hh",
  78. "src/src/hb-atomic.hh",
  79. "src/src/hb-bimap.hh",
  80. "src/src/hb-bit-page.hh",
  81. "src/src/hb-bit-set-invertible.hh",
  82. "src/src/hb-bit-set.hh",
  83. "src/src/hb-blob.cc",
  84. "src/src/hb-blob.hh",
  85. "src/src/hb-buffer-deserialize-json.hh",
  86. "src/src/hb-buffer-deserialize-text.hh",
  87. "src/src/hb-buffer-serialize.cc",
  88. "src/src/hb-buffer-verify.cc",
  89. "src/src/hb-buffer.cc",
  90. "src/src/hb-buffer.hh",
  91. "src/src/hb-cache.hh",
  92. "src/src/hb-cff-interp-common.hh",
  93. "src/src/hb-cff-interp-cs-common.hh",
  94. "src/src/hb-cff-interp-dict-common.hh",
  95. "src/src/hb-cff1-interp-cs.hh",
  96. "src/src/hb-cff2-interp-cs.hh",
  97. "src/src/hb-common.cc",
  98. "src/src/hb-config.hh",
  99. "src/src/hb-cplusplus.hh",
  100. "src/src/hb-debug.hh",
  101. "src/src/hb-dispatch.hh",
  102. "src/src/hb-draw.cc",
  103. "src/src/hb-draw.h",
  104. "src/src/hb-draw.hh",
  105. "src/src/hb-face.cc",
  106. "src/src/hb-face.hh",
  107. "src/src/hb-font.cc",
  108. "src/src/hb-font.hh",
  109. "src/src/hb-ft.cc",
  110. "src/src/hb-icu.cc",
  111. "src/src/hb-iter.hh",
  112. "src/src/hb-kern.hh",
  113. "src/src/hb-machinery.hh",
  114. "src/src/hb-map.cc",
  115. "src/src/hb-map.hh",
  116. "src/src/hb-meta.hh",
  117. "src/src/hb-ms-feature-ranges.hh",
  118. "src/src/hb-mutex.hh",
  119. "src/src/hb-null.hh",
  120. "src/src/hb-number-parser.hh",
  121. "src/src/hb-number.cc",
  122. "src/src/hb-number.hh",
  123. "src/src/hb-object.hh",
  124. "src/src/hb-open-file.hh",
  125. "src/src/hb-open-type.hh",
  126. "src/src/hb-ot-cff-common.hh",
  127. "src/src/hb-ot-cff1-std-str.hh",
  128. "src/src/hb-ot-cff1-table.cc",
  129. "src/src/hb-ot-cff1-table.hh",
  130. "src/src/hb-ot-cff2-table.cc",
  131. "src/src/hb-ot-cff2-table.hh",
  132. "src/src/hb-ot-cmap-table.hh",
  133. "src/src/hb-ot-color-cbdt-table.hh",
  134. "src/src/hb-ot-color-colr-table.hh",
  135. "src/src/hb-ot-color-colrv1-closure.hh",
  136. "src/src/hb-ot-color-cpal-table.hh",
  137. "src/src/hb-ot-color-sbix-table.hh",
  138. "src/src/hb-ot-color-svg-table.hh",
  139. "src/src/hb-ot-color.cc",
  140. "src/src/hb-ot-color.h",
  141. "src/src/hb-ot-deprecated.h",
  142. "src/src/hb-ot-face-table-list.hh",
  143. "src/src/hb-ot-face.cc",
  144. "src/src/hb-ot-face.hh",
  145. "src/src/hb-ot-font.cc",
  146. "src/src/hb-ot-gasp-table.hh",
  147. "src/src/hb-ot-glyf-table.hh",
  148. "src/src/hb-ot-hdmx-table.hh",
  149. "src/src/hb-ot-head-table.hh",
  150. "src/src/hb-ot-hhea-table.hh",
  151. "src/src/hb-ot-hmtx-table.hh",
  152. "src/src/hb-ot-kern-table.hh",
  153. "src/src/hb-ot-layout-base-table.hh",
  154. "src/src/hb-ot-layout-common.hh",
  155. "src/src/hb-ot-layout-gdef-table.hh",
  156. "src/src/hb-ot-layout-gpos-table.hh",
  157. "src/src/hb-ot-layout-gsub-table.hh",
  158. "src/src/hb-ot-layout-gsubgpos.hh",
  159. "src/src/hb-ot-layout-jstf-table.hh",
  160. "src/src/hb-ot-layout.cc",
  161. "src/src/hb-ot-layout.hh",
  162. "src/src/hb-ot-map.cc",
  163. "src/src/hb-ot-map.hh",
  164. "src/src/hb-ot-math-table.hh",
  165. "src/src/hb-ot-math.cc",
  166. "src/src/hb-ot-maxp-table.hh",
  167. "src/src/hb-ot-meta-table.hh",
  168. "src/src/hb-ot-meta.cc",
  169. "src/src/hb-ot-meta.h",
  170. "src/src/hb-ot-metrics.cc",
  171. "src/src/hb-ot-metrics.h",
  172. "src/src/hb-ot-metrics.hh",
  173. "src/src/hb-ot-name-language-static.hh",
  174. "src/src/hb-ot-name-language.hh",
  175. "src/src/hb-ot-name-table.hh",
  176. "src/src/hb-ot-name.cc",
  177. "src/src/hb-ot-name.h",
  178. "src/src/hb-ot-os2-table.hh",
  179. "src/src/hb-ot-os2-unicode-ranges.hh",
  180. "src/src/hb-ot-post-macroman.hh",
  181. "src/src/hb-ot-post-table-v2subset.hh",
  182. "src/src/hb-ot-post-table.hh",
  183. "src/src/hb-ot-shape-fallback.cc",
  184. "src/src/hb-ot-shape-fallback.hh",
  185. "src/src/hb-ot-shape-normalize.cc",
  186. "src/src/hb-ot-shape-normalize.hh",
  187. "src/src/hb-ot-shape.cc",
  188. "src/src/hb-ot-shape.hh",
  189. "src/src/hb-ot-shaper-arabic-fallback.hh",
  190. "src/src/hb-ot-shaper-arabic-joining-list.hh",
  191. "src/src/hb-ot-shaper-arabic-pua.hh",
  192. "src/src/hb-ot-shaper-arabic-table.hh",
  193. "src/src/hb-ot-shaper-arabic-win1256.hh",
  194. "src/src/hb-ot-shaper-arabic.cc",
  195. "src/src/hb-ot-shaper-arabic.hh",
  196. "src/src/hb-ot-shaper-default.cc",
  197. "src/src/hb-ot-shaper-hangul.cc",
  198. "src/src/hb-ot-shaper-hebrew.cc",
  199. "src/src/hb-ot-shaper-indic-machine.hh",
  200. "src/src/hb-ot-shaper-indic-table.cc",
  201. "src/src/hb-ot-shaper-indic.cc",
  202. "src/src/hb-ot-shaper-indic.hh",
  203. "src/src/hb-ot-shaper-khmer-machine.hh",
  204. "src/src/hb-ot-shaper-khmer.cc",
  205. "src/src/hb-ot-shaper-myanmar-machine.hh",
  206. "src/src/hb-ot-shaper-myanmar.cc",
  207. "src/src/hb-ot-shaper-syllabic.cc",
  208. "src/src/hb-ot-shaper-syllabic.hh",
  209. "src/src/hb-ot-shaper-thai.cc",
  210. "src/src/hb-ot-shaper-use-machine.hh",
  211. "src/src/hb-ot-shaper-use-table.hh",
  212. "src/src/hb-ot-shaper-use.cc",
  213. "src/src/hb-ot-shaper-vowel-constraints.cc",
  214. "src/src/hb-ot-shaper-vowel-constraints.hh",
  215. "src/src/hb-ot-shaper.hh",
  216. "src/src/hb-ot-stat-table.hh",
  217. "src/src/hb-ot-tag-table.hh",
  218. "src/src/hb-ot-tag.cc",
  219. "src/src/hb-ot-var-avar-table.hh",
  220. "src/src/hb-ot-var-common.hh",
  221. "src/src/hb-ot-var-fvar-table.hh",
  222. "src/src/hb-ot-var-gvar-table.hh",
  223. "src/src/hb-ot-var-hvar-table.hh",
  224. "src/src/hb-ot-var-mvar-table.hh",
  225. "src/src/hb-ot-var.cc",
  226. "src/src/hb-ot-vorg-table.hh",
  227. "src/src/hb-pool.hh",
  228. "src/src/hb-priority-queue.hh",
  229. "src/src/hb-repacker.hh",
  230. "src/src/hb-sanitize.hh",
  231. "src/src/hb-serialize.hh",
  232. "src/src/hb-set-digest.hh",
  233. "src/src/hb-set.cc",
  234. "src/src/hb-set.hh",
  235. "src/src/hb-shape-plan.cc",
  236. "src/src/hb-shape-plan.hh",
  237. "src/src/hb-shape.cc",
  238. "src/src/hb-shaper-impl.hh",
  239. "src/src/hb-shaper-list.hh",
  240. "src/src/hb-shaper.cc",
  241. "src/src/hb-shaper.hh",
  242. "src/src/hb-static.cc",
  243. "src/src/hb-string-array.hh",
  244. "src/src/hb-subset-cff-common.cc",
  245. "src/src/hb-subset-cff-common.hh",
  246. "src/src/hb-subset-cff1.cc",
  247. "src/src/hb-subset-cff1.hh",
  248. "src/src/hb-subset-cff2.cc",
  249. "src/src/hb-subset-cff2.hh",
  250. "src/src/hb-subset-input.cc",
  251. "src/src/hb-subset-input.hh",
  252. "src/src/hb-subset-plan.cc",
  253. "src/src/hb-subset-plan.hh",
  254. "src/src/hb-subset-repacker.cc",
  255. "src/src/hb-subset-repacker.h",
  256. "src/src/hb-subset.cc",
  257. "src/src/hb-subset.hh",
  258. "src/src/hb-ucd-table.hh",
  259. "src/src/hb-ucd.cc",
  260. "src/src/hb-unicode-emoji-table.hh",
  261. "src/src/hb-unicode.cc",
  262. "src/src/hb-unicode.hh",
  263. "src/src/hb-utf.hh",
  264. "src/src/hb-vector.hh",
  265. "src/src/hb.hh",
  266. ]
  267. # The following sources are explictly not used.
  268. # They are referenced to aid in detecting previously uncategorized files.
  269. unused_sources = [
  270. "src/src/hb-coretext.cc",
  271. "src/src/hb-coretext.h",
  272. "src/src/hb-directwrite.cc",
  273. "src/src/hb-directwrite.h",
  274. "src/src/hb-fallback-shape.cc",
  275. "src/src/hb-gdi.cc",
  276. "src/src/hb-gdi.h",
  277. "src/src/hb-gobject-structs.cc",
  278. "src/src/hb-gobject-structs.h",
  279. "src/src/hb-gobject.h",
  280. "src/src/hb-graphite2.cc",
  281. "src/src/hb-graphite2.h",
  282. "src/src/hb-style.cc",
  283. "src/src/hb-style.h",
  284. "src/src/hb-uniscribe.cc",
  285. "src/src/hb-uniscribe.h",
  286. ]
  287. assert(unused_sources != [])
  288. defines = [
  289. "HAVE_OT",
  290. "HAVE_FREETYPE",
  291. "HAVE_ICU",
  292. "HAVE_ICU_BUILTIN",
  293. "HB_NO_MMAP",
  294. "HB_NO_RESOURCE_FORK",
  295. # Size reductions by disabling parts that we do not currently require:
  296. # SkPDF needs subsetting but does not require subsetting of layout or CFF tables.
  297. "HB_NO_SUBSET_LAYOUT",
  298. "HB_NO_SUBSET_CFF",
  299. # Fallback shaper not required, we only use the HarfBuzz internal OT shaper.
  300. "HB_NO_FALLBACK_SHAPE",
  301. # Tells HarfBuzz to use ICU instead of the own mini UCDN implementation
  302. # that is part of HarfBuzz.
  303. "HB_NO_UCD",
  304. # Disable .fon file support, not needed for Chrome, and code behind this
  305. # flag produces warnings in Clang. Compare https://crbug.com/1002945.
  306. "HB_NO_WIN1256",
  307. # TODO(https://crbug.com/949962): Remove once this is fixed upstream.
  308. "U_DISABLE_VERSION_SUFFIX=0",
  309. # No experimental font format extensions yet.
  310. "HB_NO_BORING_EXPANSION",
  311. # Buffer verification not used in production build.
  312. "HB_NO_BUFFER_VERIFY",
  313. # We're not using HarfBuzz' drawing functions or debug tools in this build.
  314. "HB_NO_DRAW",
  315. # Letting HarfBuzz enable warnings through pragmas can block compiler
  316. # upgrades in situations where say a ToT compiler build adds a new
  317. # stricter warning under -Wfoowarning-subgroup. HarfBuzz pragma-enables
  318. # -Wfoowarning which default-enables -Wfoowarning-subgroup implicitly but
  319. # HarfBuzz upstream is not yet clean of warnings produced for
  320. # -Wfoowarning-subgroup. Hence disabling pragma warning control here.
  321. # See also https:/crbug.com/1203071
  322. "HB_NO_PRAGMA_GCC_DIAGNOSTIC_ERROR",
  323. "HB_NO_PRAGMA_GCC_DIAGNOSTIC_WARNING",
  324. ]
  325. if (!is_win && !is_mac) {
  326. # Needed for HarfBuzz mutex implementation, see hb-mutex.hh
  327. defines += [ "HAVE_PTHREAD" ]
  328. }
  329. if (enable_paint_preview) {
  330. # Paint Previews make use of CFF subsetting. However, enabling this is
  331. # expensive for binary size so only compile it when Paint Previews are
  332. # compiled.
  333. defines -= [ "HB_NO_SUBSET_CFF" ]
  334. }
  335. if (is_component_build) {
  336. if (is_win) {
  337. defines += [ "HB_EXTERN=__declspec (dllexport)" ]
  338. } else {
  339. defines += [ "HB_EXTERN=__attribute__((visibility(\"default\")))" ]
  340. # Exposing symbols in component builds can cause a mixture of system
  341. # harfbuzz symbols and //third_party harfbuzz symbols to be loaded at
  342. # the same time. This can cause issues for libraries that indirectly
  343. # load harfbuzz like pango (see https://crbug.com/1146397), so we need
  344. # to include metrics symbols (i.e. have HB_NO_METRICS undefined) to
  345. # prevent pango from using the system library. Currently, HB_NO_METRICS
  346. # is always disabled, due to
  347. # https://github.com/harfbuzz/harfbuzz/issues/3482 - if that changes
  348. # "HB_NO_METRICS" needs to be removed from the defines list here.
  349. # TODO(https://crbug.com/1148459): Remove this workaround once bug
  350. # 1148459 is fixed.
  351. }
  352. }
  353. if (use_system_freetype) {
  354. configs += [ "//build/linux:freetype_from_pkgconfig" ]
  355. } else {
  356. configs += [ "//third_party/freetype:freetype_component_config" ]
  357. }
  358. configs -= [ "//build/config/compiler:chromium_code" ]
  359. configs += [
  360. "//build/config/compiler:no_chromium_code",
  361. # Must be after no_chromium_code for warning flags to be ordered
  362. # correctly.
  363. ":harfbuzz_warnings",
  364. ]
  365. # This allows the compiler to do further optimizations in the code.
  366. if (!is_debug) {
  367. configs -= [ "//build/config/compiler:default_optimization" ]
  368. configs += [ "//build/config/compiler:optimize_speed" ]
  369. }
  370. public_configs = [ ":harfbuzz_config" ]
  371. deps = [ "//third_party/icu:icuuc" ]
  372. if (use_glib) {
  373. configs += [ "//build/config/linux:glib" ]
  374. public += [ "src/src/hb-glib.h" ]
  375. sources += [ "src/src/hb-glib.cc" ]
  376. }
  377. }
  378. }
  379. source_set("hb_scoped_util") {
  380. sources = [ "utils/hb_scoped.h" ]
  381. deps = [ "//third_party:freetype_harfbuzz" ]
  382. }
  383. fuzzer_test("hb_shape_fuzzer") {
  384. sources = [ "fuzz/hb_shape_fuzzer.cc" ]
  385. deps = [
  386. ":hb_scoped_util",
  387. "//base",
  388. "//third_party:freetype_harfbuzz",
  389. ]
  390. seed_corpus = "fuzz/seed_corpus"
  391. }
  392. fuzzer_test("hb_subset_fuzzer") {
  393. sources = [ "fuzz/hb_subset_fuzzer.cc" ]
  394. deps = [
  395. ":hb_scoped_util",
  396. "//base",
  397. "//third_party:freetype_harfbuzz",
  398. ]
  399. seed_corpus = "fuzz/seed_corpus"
  400. }