-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbootstrap-mk.sh
More file actions
executable file
·230 lines (215 loc) · 12.7 KB
/
Copy pathbootstrap-mk.sh
File metadata and controls
executable file
·230 lines (215 loc) · 12.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#!/bin/sh
# Script to compile 'mk' (and 'rc') without using 'mk' (nor 'rc') and generate
# a bin/mk (and bin/rc) so that we don't need a BOOTSTRAP/Linux/386/bin/mk like
# in kencc. Note that kencc has no BOOTSTRAP/Linux/386/bin/rc because
# it assumes the presence of a shell and can work with both 'rc' and 'sh'.
#
# Note that right now to boostrap Xix we still need:
# - OCaml with ocamlc, ocamllex, ocamlyacc
# (LATER: we could bootstrap and use the xix ocamllex/ocamlyacc)
# - a C compiler
# (LATER: we could bootstrap and use the xix 5a/5c/5l)
# - the ocamlfind tool and stdcompat library (unless using ocaml-light)
# - /bin/sh
# (LATER: we could use the xix rc at some point and add it in BOOTSTRAP/)
# - probably many other things
#
# LATER: Maybe at some point the assembler/linker/compiler in this repo will
# be able to bootstrap itself and we will just need ocamlrun and bytecode
# versions of those tools in BOOTSTRAP/.
#
# alt: maybe using the term boostrapping is a bit abusive and we could rename
# this script build-mk.sh or build-mk-rc.sh, but bootstrap-mk.sh is fine.
# In the end the important visible program is mk (it internally needs rc, but
# rc could also be statically linked with mk as a library).
#
# Ideally this could be a polyglot script that could work with sh/bash/rc/...
#
# This file was mostly auto-generated by copy-pasting a trace of mk.
# any error should abort the script
set -e
# for showing the executed commands (verbose)
set -x
#to test uncomment the following (but you should set those outside):
## use_ocaml_light="yes"
if test "$use_ocaml_light" = "yes"; then
# ocaml-light provides its own (lightweight) stdlib/stdcompat.ml
EXTERNAL_LIB="."
else
# Limit to just stdcompat! This is Xix!
EXTERNAL_LIB=`ocamlfind query stdcompat`
fi
#coupling: mkconfig COMPFLAGS
OCAMLCFLAGS="-I $EXTERNAL_LIB -g"
#coupling: mkconfig LINKFLAGS
if test "$use_ocaml_light" = "yes"; then
#LATER: not needed once ocaml-light automatically includes C libs
# when using unix.cma
EXTRALINKFLAGS="-cclib -lunix -custom -g"
else
EXTRALINKFLAGS="-I $EXTERNAL_LIB stdcompat.cma -custom -g"
fi
# can be useful to bench bytecode vs native, see how long it takes to
# run this script with and without .opt
# time: 1.135s with .opt, 1.171 without for 4.09.1. hmmm, not that useful
#OPT=.opt
TOP=`pwd`
cd $TOP/lib_core/commons/
ocamlc$OPT $OCAMLCFLAGS -c Set_.mli
ocamlc$OPT $OCAMLCFLAGS -c Map_.mli
ocamlc$OPT $OCAMLCFLAGS -c Set_.ml
ocamlc$OPT $OCAMLCFLAGS -c Map_.ml
ocamlc$OPT $OCAMLCFLAGS -c Cap.mli
ocamlc$OPT $OCAMLCFLAGS -c Dumper.mli
ocamlc$OPT $OCAMLCFLAGS -c Console.mli
ocamlc$OPT $OCAMLCFLAGS -c Common.mli
ocamlc$OPT $OCAMLCFLAGS -c IO.mli
ocamlc$OPT $OCAMLCFLAGS -c Logs.mli
ocamlc$OPT $OCAMLCFLAGS -c Logs_.mli
ocamlc$OPT $OCAMLCFLAGS -c Fpath.mli
ocamlc$OPT $OCAMLCFLAGS -c Fpath.ml
ocamlc$OPT $OCAMLCFLAGS -c Fpath_.mli
ocamlc$OPT $OCAMLCFLAGS -c Fpath_.ml
ocamlc$OPT $OCAMLCFLAGS -c Proc.mli
ocamlc$OPT $OCAMLCFLAGS -c Tmp.mli
ocamlc$OPT $OCAMLCFLAGS -c Chan.mli
ocamlc$OPT $OCAMLCFLAGS -c Chan.ml
ocamlc$OPT $OCAMLCFLAGS -c FS.mli
ocamlc$OPT $OCAMLCFLAGS -c Date.mli
ocamlc$OPT $OCAMLCFLAGS -c Cap.ml
ocamlc$OPT $OCAMLCFLAGS -c CapStdlib.ml
ocamlc$OPT $OCAMLCFLAGS -c CapSys.ml
ocamlc$OPT $OCAMLCFLAGS -c CapUnix.ml
ocamlc$OPT $OCAMLCFLAGS -c Dumper.ml
ocamlc$OPT $OCAMLCFLAGS -c Common.ml
ocamlc$OPT $OCAMLCFLAGS -c Console.ml
ocamlc$OPT $OCAMLCFLAGS -c OCaml.mli
ocamlc$OPT $OCAMLCFLAGS -c Logs.ml
ocamlc$OPT $OCAMLCFLAGS -c Logs_.ml
ocamlc$OPT $OCAMLCFLAGS -c FS.ml
ocamlc$OPT $OCAMLCFLAGS -c Date.ml
ocamlc$OPT $OCAMLCFLAGS -c IO.ml
ocamlc$OPT $OCAMLCFLAGS -c Proc.ml
ocamlc$OPT $OCAMLCFLAGS -c Tmp.ml
ocamlc$OPT $OCAMLCFLAGS -c OCaml.ml
ocamlc$OPT $OCAMLCFLAGS -c Exception.mli
ocamlc$OPT $OCAMLCFLAGS -c Exception.ml
ocamlc$OPT $OCAMLCFLAGS -c Exit.mli
ocamlc$OPT $OCAMLCFLAGS -c Exit.ml
ocamlc$OPT $OCAMLCFLAGS -c Arg_.mli
ocamlc$OPT $OCAMLCFLAGS -c Arg_.ml
ocamlc$OPT -I . Set_.cmo Map_.cmo Dumper.cmo Cap.cmo CapStdlib.cmo CapSys.cmo CapUnix.cmo Console.cmo Common.cmo OCaml.cmo IO.cmo Logs.cmo Logs_.cmo Fpath.cmo Fpath_.cmo Chan.cmo FS.cmo Proc.cmo Tmp.cmo Date.cmo Exception.cmo Exit.cmo Arg_.cmo -a -o lib.cma
cd $TOP/lib_core/regexps
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c cset.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c Re_core.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_str.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c cset.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c automata.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c Regexp.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_emacs.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_glob.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_perl.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_posix.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c Regexp.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c automata.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c Regexp_AST.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_emacs.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_str.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_glob.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_perl.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_pcre.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c re_posix.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c Compile_regexp.mli
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c Compile_regexp.ml
ocamlc$OPT $OCAMLCFLAGS -I ../commons -c Re_core.ml
ocamlc$OPT -I ../commons cset.cmo automata.cmo Regexp_AST.cmo Compile_regexp.cmo Re_core.cmo re_emacs.cmo re_str.cmo re_glob.cmo re_perl.cmo re_pcre.cmo re_posix.cmo Regexp.cmo -a -o lib.cma
cd $TOP/builder
ocamlyacc Parser.mly
perl -p -i -e 's#/\*\(\*[sex]: .* \*\)\*/##' Parser.ml
ocamllex Lexer.mll
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Globals.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Flags.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Ast.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Shellenv.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Percent.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c File.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Shellenv.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Shell.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Env.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parser.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parse.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Percent.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Rules.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c File.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Shell.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Env.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parser.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Lexer.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Lexer.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Eval.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Graph.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parse.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Eval.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Graph.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Job.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Outofdate.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Scheduler.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Scheduler.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Outofdate.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c CLI.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c CLI.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -pp ../scripts/remove_xix_open.sh -c Main.ml
ocamlc$OPT $EXTRALINKFLAGS -I ../lib_core/commons -I ../lib_core/regexps unix.cma ../lib_core/commons/lib.cma ../lib_core/regexps/lib.cma Globals.cmo Flags.cmo Ast.cmo Parser.cmo Lexer.cmo Parse.cmo Shellenv.cmo Shell.cmo Percent.cmo Env.cmo Rules.cmo Eval.cmo File.cmo Graph.cmo Job.cmo Scheduler.cmo Outofdate.cmo CLI.cmo Main.cmo -o omk
cd $TOP/shell/
ocamlyacc Parser.mly
perl -p -i -e 's#/\*\(\*[sex]: .* \*\)\*/##' Parser.ml
ocamllex Lexer.mll
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Flags.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Globals.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Ast.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Opcode.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Pattern.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Prompt.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Status.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c PATH.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Process.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Error.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Builtin.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parser.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parse.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Runtime.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Compile.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Runtime.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Interpreter.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Pattern.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parser.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Compile.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Fn.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Var.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Process.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Error.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Lexer.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Lexer.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Op_process.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Fn.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Env.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Env.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Var.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Prompt.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Status.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c PATH.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Builtin.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Op_repl.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c CLI.mli
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c CLI.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Parse.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -c Interpreter.ml
ocamlc$OPT $OCAMLCFLAGS -I ../lib_core/commons -I ../lib_core/regexps -pp ../scripts/remove_xix_open.sh -c Main.ml
ocamlc$OPT $EXTRALINKFLAGS -I ../lib_core/commons -I ../lib_core/regexps unix.cma ../lib_core/commons/lib.cma ../lib_core/regexps/lib.cma Flags.cmo Globals.cmo Ast.cmo Opcode.cmo Compile.cmo Runtime.cmo Pattern.cmo Fn.cmo Env.cmo Var.cmo Prompt.cmo Status.cmo PATH.cmo Process.cmo Error.cmo Parser.cmo Lexer.cmo Parse.cmo Builtin.cmo Op_repl.cmo Op_process.cmo Interpreter.cmo CLI.cmo Main.cmo -o orc
cd $TOP
cp builder/omk shell/orc bin/
echo 'Copy bin/omk bin/orc somewhere in your PATH and sets MKSHELL to point to rc.'
# Safer to delete the generated libs as we may have forgotten objects
# that are not needed for mk/rc but might be needed by other programs
rm -f $TOP/lib_core/commons/lib.cma
rm -f $TOP/lib_core/regexps/lib.cma