diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-09-07 15:44:01 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-11 16:17:00 +0000 |
commit | c576e93d174f3106e072a2f506bca3990b541265 (patch) | |
tree | d4a410200aa71183c95643535b440bec919f2e18 /BUILD.gn | |
parent | a2bdf005f3c706065d1aa93f319f4b73932721d4 (diff) |
Switch to the new SkSL lexer.
This completely replaces flex with a new in-house lexical analyzer generator,
which we have done for performance and memory usage reasons. Flex requires us
to copy strings every time we need the text of a token, whereas this new lexer
allows us to handle strings as a (non-null-terminated) pointer and length
everywhere, eliminating most string copies.
Bug: skia:
Change-Id: I2add26efc9e20cb699520e82abcf713af3968aca
Reviewed-on: https://skia-review.googlesource.com/39780
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'BUILD.gn')
-rw-r--r-- | BUILD.gn | 36 |
1 files changed, 35 insertions, 1 deletions
@@ -45,6 +45,7 @@ declare_args() { skia_vulkan_sdk = getenv("VULKAN_SDK") skia_qt_path = getenv("QT_PATH") skia_compile_processors = false + skia_lex = false skia_jumper_clang = "" skia_jumper_objdump = "" @@ -411,7 +412,7 @@ optional("fontmgr_fuchsia") { ] } -if (skia_compile_processors) { +if (skia_lex) { executable("sksllex") { sources = [ "src/sksl/lex/Main.cpp", @@ -422,6 +423,38 @@ if (skia_compile_processors) { include_dirs = [ "src/sksl/lex" ] } + action("run_sksllex") { + script = "gn/run_sksllex.py" + sources = [ + "src/sksl/lex/layout.lex", + "src/sksl/lex/sksl.lex", + ] + + # GN insists its outputs should go somewhere underneath target_out_dir, so we trick it with a + # path that starts with target_out_dir and then uses ".." to back up into the src dir. + outputs = [ + "$target_out_dir/" + + rebase_path("src/sksl/lex/SkSLLexer.h", target_out_dir), + # the script also modifies the corresponding .cpp file, but if we tell GN that it gets + # confused due to the same file being named by two different paths + ] + sksllex_path = "$root_out_dir/" + sksllex_path += "sksllex" + if (host_os == "win") { + sksllex_path += ".exe" + } + args = [ + rebase_path(sksllex_path), + rebase_path("bin/clang-format"), + rebase_path("src"), + ] + } +} else { + group("run_sksllex") { + } +} + +if (skia_compile_processors) { executable("skslc") { defines = [ "SKSL_STANDALONE" ] sources = [ @@ -482,6 +515,7 @@ optional("gpu") { enabled = skia_enable_gpu deps = [ ":compile_processors", + ":run_sksllex", ] public_defines = [] |