| 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 "$@"
 |