aboutsummaryrefslogtreecommitdiffhomepage
path: root/BUILD.gn
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-09-07 15:44:01 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-11 16:17:00 +0000
commitc576e93d174f3106e072a2f506bca3990b541265 (patch)
treed4a410200aa71183c95643535b440bec919f2e18 /BUILD.gn
parenta2bdf005f3c706065d1aa93f319f4b73932721d4 (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.gn36
1 files changed, 35 insertions, 1 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 1c328b0452..ef2ac0751f 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -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 = []