| 1 | #!/usr/bin/env bash
|
| 2 | #
|
| 3 | # Creates build.ninja. Crawls dynamic dependencies.
|
| 4 | #
|
| 5 | # Usage:
|
| 6 | # ./NINJA-config.sh
|
| 7 |
|
| 8 | set -o nounset
|
| 9 | set -o pipefail
|
| 10 | set -o errexit
|
| 11 |
|
| 12 | source build/dev-shell.sh # python2 in $PATH
|
| 13 | source build/dynamic-deps.sh # py-tool, etc
|
| 14 |
|
| 15 | asdl-main() { py-tool asdl.asdl_main; }
|
| 16 |
|
| 17 | optview-gen() { py-tool core.optview_gen; }
|
| 18 | consts-gen() { py-tool frontend.consts_gen; }
|
| 19 | flag-gen() { py-tool frontend.flag_gen; }
|
| 20 | lexer-gen() { py-tool frontend.lexer_gen; }
|
| 21 | option-gen() { py-tool frontend.option_gen; }
|
| 22 | grammar-gen() { py-tool ysh.grammar_gen; }
|
| 23 | arith-parse-gen() { py-tool osh.arith_parse_gen; }
|
| 24 | signal-gen() { py-tool frontend.signal_gen; }
|
| 25 | embedded-file-gen() { py-tool cpp.embedded_file_gen; }
|
| 26 |
|
| 27 | osh-eval() {
|
| 28 | ### Old binary
|
| 29 |
|
| 30 | local dir=$DIR/bin.osh_eval
|
| 31 | mkdir -p $dir
|
| 32 |
|
| 33 | PYTHONPATH=$PY_PATH /usr/bin/env python2 \
|
| 34 | build/dynamic_deps.py py-manifest bin.osh_eval \
|
| 35 | > $dir/all.txt
|
| 36 |
|
| 37 | set +o errexit
|
| 38 | cat $dir/all.txt | repo-filter | exclude-filter typecheck | mysort \
|
| 39 | > $dir/typecheck.txt
|
| 40 |
|
| 41 | cat $dir/typecheck.txt | exclude-filter translate | mysort \
|
| 42 | > $dir/translate.txt
|
| 43 |
|
| 44 | echo DEPS $dir/*
|
| 45 | }
|
| 46 |
|
| 47 | oils-for-unix() {
|
| 48 | ### The main binary
|
| 49 |
|
| 50 | local dir=$DIR/bin.oils_for_unix
|
| 51 | mkdir -p $dir
|
| 52 |
|
| 53 | PYTHONPATH=$PY_PATH /usr/bin/env python2 \
|
| 54 | build/dynamic_deps.py py-manifest bin.oils_for_unix \
|
| 55 | > $dir/all.txt
|
| 56 |
|
| 57 | set +o errexit
|
| 58 | cat $dir/all.txt | repo-filter | exclude-filter typecheck | mysort \
|
| 59 | > $dir/typecheck.txt
|
| 60 |
|
| 61 | cat $dir/typecheck.txt | exclude-filter translate | mysort \
|
| 62 | > $dir/translate.txt
|
| 63 |
|
| 64 | echo DEPS $dir/*
|
| 65 | }
|
| 66 |
|
| 67 | # TODO: Prune deps
|
| 68 | # j8.py depends on vm.HeapValueId() for cycle detection
|
| 69 | # But that's in the JSON8 PRINTER, which yaks doesn't need
|
| 70 | # vm.py depends on cmd_eval.py and a whole bunch of other stuff
|
| 71 | #
|
| 72 | # Well I guess you can create a cycle in nil8, especially if we have <- and so
|
| 73 | # forth.
|
| 74 | #
|
| 75 | # So that function should go in another file.
|
| 76 |
|
| 77 | yaks() {
|
| 78 | ### Experimental IR to C++ translator
|
| 79 |
|
| 80 | local dir=$DIR/yaks.yaks_main
|
| 81 | mkdir -p $dir
|
| 82 |
|
| 83 | PYTHONPATH=$PY_PATH /usr/bin/env python2 \
|
| 84 | build/dynamic_deps.py py-manifest yaks.yaks_main \
|
| 85 | > $dir/all.txt
|
| 86 |
|
| 87 | set +o errexit
|
| 88 | cat $dir/all.txt | repo-filter | exclude-filter typecheck | mysort \
|
| 89 | > $dir/typecheck.txt
|
| 90 |
|
| 91 | cat $dir/typecheck.txt | exclude-filter translate | mysort \
|
| 92 | > $dir/translate.txt
|
| 93 |
|
| 94 | echo DEPS $dir/*
|
| 95 | }
|
| 96 |
|
| 97 | main() {
|
| 98 | # _build/NINJA/ # Part of the Ninja graph
|
| 99 | # asdl.asdl_main/
|
| 100 | # all-pairs.txt
|
| 101 | # deps.txt
|
| 102 | # osh_eval/
|
| 103 | # typecheck.txt
|
| 104 | # translate.txt
|
| 105 |
|
| 106 | mkdir -p _build/NINJA
|
| 107 |
|
| 108 | # Implicit dependencies for tools
|
| 109 | asdl-main
|
| 110 |
|
| 111 | optview-gen
|
| 112 | consts-gen
|
| 113 | flag-gen
|
| 114 | lexer-gen
|
| 115 | option-gen
|
| 116 | grammar-gen
|
| 117 | arith-parse-gen
|
| 118 | signal-gen
|
| 119 | embedded-file-gen
|
| 120 |
|
| 121 | # Explicit dependencies for translating and type checking
|
| 122 | # Baked into mycpp/NINJA.
|
| 123 | osh-eval
|
| 124 | oils-for-unix
|
| 125 | yaks
|
| 126 |
|
| 127 | echo DEPS prebuilt/ninja/*/deps.txt
|
| 128 |
|
| 129 | echo
|
| 130 | # Special _OIL_DEV for -D GC_TIMING
|
| 131 | _OIL_DEV=1 ./configure
|
| 132 |
|
| 133 | # Reads the deps.txt files above
|
| 134 | PYTHONPATH=. build/ninja_main.py
|
| 135 | }
|
| 136 |
|
| 137 | main "$@"
|