# GN (Generate Ninja) syntax highlighting test file # SPDX-License-Identifier: MIT # Import a file import("//build/config/features.gni") # Declare build arguments declare_args() { my_flag = true my_count = 42 my_name = "default" } # Control flow if (my_flag) { print("flag is set") } else { assert(defined(my_name), "my_name must be set") } # Target functions executable("my_app") { sources = [ "main.cc", "app.cc", ] deps = [ ":my_lib" ] if (current_os == "linux") { libs = [ "pthread" ] } } static_library("my_lib") { sources = [ "lib.cc" ] public_deps = [ "//base" ] } shared_library("my_shared") { output_name = "shared" } source_set("my_sources") { sources = [ "util.cc" ] } group("all") { deps = [ ":my_app", ":my_lib", ] } action("generate_header") { script = "//tools/gen.py" outputs = [ "$target_gen_dir/generated.h" ] args = [ rebase_path(target_gen_dir, root_build_dir), "--output", rebase_path("$target_out_dir/out.txt"), ] } config("my_config") { cflags = [ "-Wall" ] defines = [ "USE_FEATURE=1" ] } # Builtin variables print(host_os) print(host_cpu) print(target_cpu) print(current_toolchain) print(default_toolchain) print(root_out_dir) print(root_gen_dir) print(root_build_dir) print(python_path) print(invoker) # String interpolation my_var = "world" greeting = "hello $my_var!" path = "prefix/${my_var}/suffix" # Escape sequences escaped = "tab\there\nnewline" dollar = "costs \$100" # Operators x = 1 y = 2 result = x + y x += 1 x -= 1 flag = true && false || !true cmp = x == y cmp2 = x != y lt = x < y gt = x > y le = x <= y ge = x >= y # Foreach loop items = [ "a", "b", "c" ] foreach(item, items) { print(item) } # More builtin functions set_defaults("executable") { configs = [] } template("my_template") { executable(target_name) { forward_variables_from(invoker, "*") } } toolchain("my_toolchain") { tool("cc") { command = "gcc {{source}} -o {{output}}" } } # Various builtin functions files = read_file("//list.txt", "list lines") write_file("$root_build_dir/out.txt", files) info = get_label_info(":my_app", "dir") tgt_out = get_target_outputs(":generate_header") env_val = getenv("HOME") rebased = rebase_path("src/file.cc", root_build_dir) parts = string_split("a,b,c", ",") joined = string_join(",", parts) replaced = string_replace("hello", "l", "r") filtered = filter_include(sources, [ "*.cc" ]) excluded = filter_exclude(sources, [ "*_test.cc" ]) processed = process_file_template(sources, "{{source_dir}}/{{source_name_part}}.o") split = split_list(sources, 2) exec_result = exec_script("//script.py", [ "arg1" ]) pool("link_pool") { depth = 4 }