| 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
|