1 | """
|
2 | yaks/NINJA_subgraph.py
|
3 | """
|
4 | from __future__ import print_function
|
5 |
|
6 | from build import ninja_lib
|
7 | from build.ninja_lib import log, COMPILERS_VARIANTS
|
8 |
|
9 | _ = log
|
10 |
|
11 | # TODO: should have dependencies with sh_binary
|
12 | RULES_PY = 'build/ninja-rules-py.sh'
|
13 |
|
14 |
|
15 | def NinjaGraph(ru):
|
16 | n = ru.n
|
17 |
|
18 | ru.comment('Generated by %s' % __name__)
|
19 |
|
20 | ru.asdl_library('yaks/yaks.asdl')
|
21 |
|
22 | ru.cc_binary('yaks/yaks_runtime_test.cc',
|
23 | deps=['//mycpp/runtime'],
|
24 | matrix=COMPILERS_VARIANTS)
|
25 |
|
26 | # yaks compiler
|
27 | main_name = 'yaks_main'
|
28 | with open('_build/NINJA/yaks.%s/translate.txt' % main_name) as f:
|
29 | deps = [line.strip() for line in f]
|
30 |
|
31 | prefix = '_gen/yaks/%s.mycpp' % main_name
|
32 | outputs = [prefix + '.cc', prefix + '.h']
|
33 | n.build(outputs,
|
34 | 'gen-oils-for-unix',
|
35 | deps,
|
36 | implicit=['_bin/shwrap/mycpp_main', RULES_PY],
|
37 | variables=[('out_prefix', prefix), ('main_name', main_name),
|
38 | ('preamble', 'yaks/preamble.h')])
|
39 |
|
40 | ru.cc_binary(
|
41 | '_gen/yaks/%s.mycpp.cc' % main_name,
|
42 | # Note: yaks/yaks.py is bad for Python imports, so it's called
|
43 | # yaks_main.py
|
44 | # yaks overlaps with the directory _bin/cxx-opt/yaks/examples
|
45 | #bin_path='yaks_main',
|
46 | preprocessed=True,
|
47 | matrix=ninja_lib.COMPILERS_VARIANTS + ninja_lib.GC_PERF_VARIANTS,
|
48 | deps=[
|
49 | '//core/optview', # TODO: remove this dep
|
50 | '//core/runtime.asdl',
|
51 | '//core/value.asdl',
|
52 | '//cpp/data_lang',
|
53 | '//cpp/frontend_match',
|
54 | '//data_lang/nil8.asdl',
|
55 | '//frontend/consts',
|
56 | '//mycpp/runtime',
|
57 | '//yaks/yaks.asdl',
|
58 | ])
|
59 |
|
60 | ### Custom yaks translation
|
61 | n.newline()
|
62 |
|
63 | n.rule('yaks',
|
64 | command='_bin/cxx-opt/yaks/yaks_main.mycpp cpp $in > $out',
|
65 | description='yaks cpp $in > $out')
|
66 | n.newline()
|
67 |
|
68 | raw_cc = '_gen/yaks/examples/hello_raw.yaks.cc'
|
69 | example_cc = '_gen/yaks/examples/hello.yaks.cc'
|
70 |
|
71 | n.build(
|
72 | [raw_cc],
|
73 | 'yaks',
|
74 | ['yaks/examples/hello.yaks'],
|
75 | implicit=['_bin/cxx-opt/yaks/yaks_main.mycpp'],
|
76 | )
|
77 | n.newline()
|
78 |
|
79 | n.build([example_cc],
|
80 | 'wrap-cc', [raw_cc],
|
81 | implicit=[RULES_PY],
|
82 | variables=[('name', 'hello'), ('preamble_path', '""'),
|
83 | ('translator', 'yaks')])
|
84 | n.newline()
|
85 |
|
86 | ru.cc_binary(
|
87 | example_cc,
|
88 | matrix=ninja_lib.COMPILERS_VARIANTS + ninja_lib.GC_PERF_VARIANTS,
|
89 | deps=['//mycpp/runtime'],
|
90 | )
|
91 |
|
92 |
|
93 | # vim: sw=4
|