annotate src/compiler.sig @ 1739:c414850f206f

Add support for -boot flag, which allows in-tree execution of Ur/Web The boot flag rewrites most hardcoded paths to point to the build directory, and also forces static compilation. This is convenient for developing Ur/Web, or if you cannot 'sudo make install' Ur/Web. The following changes were made: * Header files were moved to include/urweb instead of include; this lets FFI users point their C_INCLUDE_PATH at this directory at write <urweb/urweb.h>. For internal Ur/Web executables, we simply pass -I$PATH/include/urweb as normal. * Differentiate between LIB and SRCLIB; SRCLIB is Ur and JavaScript source files, while LIB is compiled products from libtool. For in-tree compilation these live in different places. * No longer reference Config for paths; instead use Settings; these settings can be changed dynamically by Compiler.enableBoot () (TODO: add a disableBoot function.) * config.h is now generated directly in include/urweb/config.h, for consistency's sake (especially since it gets installed along with the rest of the headers!) * All of the autotools build products got updated. * The linkStatic field in protocols now only contains the name of the build product, and not the absolute path. Future users have to be careful not to reference the Settings files to early, lest they get an old version (this was the source of two bugs during development of this patch.)
author Edward Z. Yang <ezyang@mit.edu>
date Wed, 02 May 2012 17:17:57 -0400
parents 7b9775d4a8ce
children 3d922a28370b
rev   line source
adam@1677 1 (* Copyright (c) 2008-2012, Adam Chlipala
adamc@1 2 * All rights reserved.
adamc@1 3 *
adamc@1 4 * Redistribution and use in source and binary forms, with or without
adamc@1 5 * modification, are permitted provided that the following conditions are met:
adamc@1 6 *
adamc@1 7 * - Redistributions of source code must retain the above copyright notice,
adamc@1 8 * this list of conditions and the following disclaimer.
adamc@1 9 * - Redistributions in binary form must reproduce the above copyright notice,
adamc@1 10 * this list of conditions and the following disclaimer in the documentation
adamc@1 11 * and/or other materials provided with the distribution.
adamc@1 12 * - The names of contributors may not be used to endorse or promote products
adamc@1 13 * derived from this software without specific prior written permission.
adamc@1 14 *
adamc@1 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
adamc@1 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
adamc@1 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
adamc@1 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
adamc@1 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
adamc@1 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
adamc@1 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
adamc@1 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
adamc@1 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
adamc@1 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
adamc@1 25 * POSSIBILITY OF SUCH DAMAGE.
adamc@1 26 *)
adamc@1 27
adamc@244 28 (* Ur/Web main compiler interface *)
adamc@1 29
adamc@1 30 signature COMPILER = sig
adamc@1 31
adamc@270 32 type job = {
adamc@385 33 prefix : string,
adamc@270 34 database : string option,
adamc@274 35 sources : string list,
adamc@274 36 exe : string,
adamc@274 37 sql : string option,
adamc@502 38 debug : bool,
adamc@673 39 profile : bool,
adamc@764 40 timeout : int,
adamc@764 41 ffi : string list,
adamc@764 42 link : string list,
adam@1725 43 linker : string option,
adamc@765 44 headers : string list,
adamc@766 45 scripts : string list,
adamc@765 46 clientToServer : Settings.ffi list,
adamc@765 47 effectful : Settings.ffi list,
adamc@1171 48 benignEffectful : Settings.ffi list,
adamc@765 49 clientOnly : Settings.ffi list,
adamc@765 50 serverOnly : Settings.ffi list,
adamc@768 51 jsFuncs : (Settings.ffi * string) list,
adamc@769 52 rewrites : Settings.rewrite list,
adamc@769 53 filterUrl : Settings.rule list,
adamc@866 54 filterMime : Settings.rule list,
adam@1465 55 filterRequest : Settings.rule list,
adam@1465 56 filterResponse : Settings.rule list,
adamc@866 57 protocol : string option,
adamc@1164 58 dbms : string option,
adamc@1183 59 sigFile : string option,
adam@1294 60 safeGets : string list,
adam@1332 61 onError : (string * string list * string) option,
adam@1332 62 minHeap : int
adamc@270 63 }
adamc@1045 64 val compile : string -> bool
adamc@1045 65 val compiler : string -> unit
adamc@742 66 val compileC : {cname : string, oname : string, ename : string, libs : string,
adam@1725 67 profile : bool, debug : bool, linker : string option, link : string list} -> bool
adamc@29 68
adam@1540 69 val beforeC : (unit -> unit) ref
adam@1540 70 (* This function is called before beginning C compilation.
adam@1540 71 * The current use is for MLton to compact its heap here, to avoid hogging
adam@1540 72 * space after all the interesting ML code is done. *)
adam@1540 73
adamc@201 74 type ('src, 'dst) phase
adamc@201 75 type ('src, 'dst) transform
adamc@55 76
adamc@201 77 val transform : ('src, 'dst) phase -> string -> ('src, 'dst) transform
adamc@270 78 val o : ('b, 'c) transform * ('a, 'b) transform -> ('a, 'c) transform
adamc@1 79
adamc@346 80 val check : ('src, 'dst) transform -> 'src -> unit
adamc@201 81 val run : ('src, 'dst) transform -> 'src -> 'dst option
adamc@201 82 val runPrint : ('src, 'dst) transform -> 'src -> unit
adam@1362 83 val runPrintToFile : ('src, 'dst) transform -> 'src -> string -> unit
adamc@201 84 val time : ('src, 'dst) transform -> 'src -> unit
adamc@201 85 val timePrint : ('src, 'dst) transform -> 'src -> unit
adamc@56 86
adam@1362 87 val runPrintCoreFuncs : ('src, Core.file) transform -> 'src -> unit
adam@1362 88
adamc@244 89 val parseUr : (string, Source.file) phase
adamc@244 90 val parseUrs : (string, Source.sgn_item list) phase
adamc@270 91 val parseUrp : (string, job) phase
adamc@1082 92 val parseUrp' : (string, {Job : job, Libs : string list}) phase
adamc@201 93
adamc@201 94 val parse : (job, Source.file) phase
adamc@201 95 val elaborate : (Source.file, Elab.file) phase
adamc@448 96 val unnest : (Elab.file, Elab.file) phase
adamc@313 97 val termination : (Elab.file, Elab.file) phase
adamc@201 98 val explify : (Elab.file, Expl.file) phase
adamc@201 99 val corify : (Expl.file, Core.file) phase
adamc@454 100 val core_untangle : (Core.file, Core.file) phase
adamc@202 101 val shake : (Core.file, Core.file) phase
adamc@607 102 val rpcify : (Core.file, Core.file) phase
adamc@202 103 val tag : (Core.file, Core.file) phase
adamc@202 104 val reduce : (Core.file, Core.file) phase
adamc@315 105 val unpoly : (Core.file, Core.file) phase
adamc@1186 106 val especialize : (Core.file, Core.file) phase
adamc@202 107 val specialize : (Core.file, Core.file) phase
adamc@692 108 val marshalcheck : (Core.file, Core.file) phase
adamc@732 109 val effectize : (Core.file, Core.file) phase
adamc@1170 110 val css : (Core.file, Css.report) phase
adamc@202 111 val monoize : (Core.file, Mono.file) phase
adamc@202 112 val mono_opt : (Mono.file, Mono.file) phase
adamc@202 113 val untangle : (Mono.file, Mono.file) phase
adamc@202 114 val mono_reduce : (Mono.file, Mono.file) phase
adamc@202 115 val mono_shake : (Mono.file, Mono.file) phase
adamc@1200 116 val iflow : (Mono.file, Mono.file) phase
adamc@567 117 val jscomp : (Mono.file, Mono.file) phase
adamc@506 118 val fuse : (Mono.file, Mono.file) phase
adamc@377 119 val pathcheck : (Mono.file, Mono.file) phase
adam@1595 120 val sidecheck : (Mono.file, Mono.file) phase
adamc@202 121 val cjrize : (Mono.file, Cjr.file) phase
adamc@643 122 val scriptcheck : (Cjr.file, Cjr.file) phase
adamc@282 123 val prepare : (Cjr.file, Cjr.file) phase
adamc@879 124 val checknest : (Cjr.file, Cjr.file) phase
adamc@274 125 val sqlify : (Mono.file, Cjr.file) phase
adamc@201 126
adamc@270 127 val toParseJob : (string, job) transform
adamc@1082 128 val toParseJob' : (string, {Job : job, Libs : string list}) transform
adamc@270 129 val toParse : (string, Source.file) transform
adamc@270 130 val toElaborate : (string, Elab.file) transform
adamc@448 131 val toUnnest : (string, Elab.file) transform
adamc@313 132 val toTermination : (string, Elab.file) transform
adamc@270 133 val toExplify : (string, Expl.file) transform
adamc@270 134 val toCorify : (string, Core.file) transform
adamc@454 135 val toCore_untangle : (string, Core.file) transform
adamc@270 136 val toShake1 : (string, Core.file) transform
adam@1362 137 val toEspecialize1' : (string, Core.file) transform
adam@1362 138 val toShake1' : (string, Core.file) transform
adamc@607 139 val toRpcify : (string, Core.file) transform
adamc@642 140 val toCore_untangle2 : (string, Core.file) transform
adamc@642 141 val toShake2 : (string, Core.file) transform
adamc@1062 142 val toEspecialize1 : (string, Core.file) transform
adamc@1062 143 val toCore_untangle3 : (string, Core.file) transform
adamc@1062 144 val toShake3 : (string, Core.file) transform
adamc@270 145 val toTag : (string, Core.file) transform
adamc@270 146 val toReduce : (string, Core.file) transform
adamc@1186 147 val toShakey : (string, Core.file) transform
adamc@1272 148 val toUnpoly : (string, Core.file) transform
adamc@1272 149 val toSpecialize : (string, Core.file) transform
adamc@1062 150 val toShake4 : (string, Core.file) transform
adamc@1272 151 val toEspecialize2 : (string, Core.file) transform
adamc@1272 152 val toShake4' : (string, Core.file) transform
adamc@1276 153 val toSpecialize2 : (string, Core.file) transform
adamc@1272 154 val toUnpoly2 : (string, Core.file) transform
adamc@1272 155 val toShake4'' : (string, Core.file) transform
adamc@1272 156 val toEspecialize3 : (string, Core.file) transform
adamc@898 157 val toReduce2 : (string, Core.file) transform
adamc@1062 158 val toShake5 : (string, Core.file) transform
adamc@692 159 val toMarshalcheck : (string, Core.file) transform
adamc@732 160 val toEffectize : (string, Core.file) transform
adamc@1170 161 val toCss : (string, Css.report) transform
adamc@270 162 val toMonoize : (string, Mono.file) transform
adamc@270 163 val toMono_opt1 : (string, Mono.file) transform
adamc@270 164 val toUntangle : (string, Mono.file) transform
adamc@270 165 val toMono_reduce : (string, Mono.file) transform
adamc@270 166 val toMono_shake : (string, Mono.file) transform
adamc@572 167 val toMono_opt2 : (string, Mono.file) transform
adamc@1200 168 val toIflow : (string, Mono.file) transform
adamc@567 169 val toJscomp : (string, Mono.file) transform
adamc@572 170 val toMono_opt3 : (string, Mono.file) transform
adamc@506 171 val toFuse : (string, Mono.file) transform
adamc@506 172 val toUntangle2 : (string, Mono.file) transform
adamc@601 173 val toMono_reduce2 : (string, Mono.file) transform
adamc@506 174 val toMono_shake2 : (string, Mono.file) transform
adamc@916 175 val toMono_opt4 : (string, Mono.file) transform
adamc@1017 176 val toMono_reduce3 : (string, Mono.file) transform
adamc@916 177 val toFuse2 : (string, Mono.file) transform
adamc@916 178 val toUntangle3 : (string, Mono.file) transform
adamc@916 179 val toMono_shake3 : (string, Mono.file) transform
adamc@377 180 val toPathcheck : (string, Mono.file) transform
adam@1595 181 val toSidecheck : (string, Mono.file) transform
adamc@270 182 val toCjrize : (string, Cjr.file) transform
adamc@643 183 val toScriptcheck : (string, Cjr.file) transform
adamc@282 184 val toPrepare : (string, Cjr.file) transform
adamc@879 185 val toChecknest : (string, Cjr.file) transform
adamc@274 186 val toSqlify : (string, Cjr.file) transform
adamc@1 187
adamc@1079 188 val debug : bool ref
adam@1677 189 val dumpSource : bool ref
ezyang@1739 190 val enableBoot : unit -> unit
adam@1677 191
adamc@1235 192 val doIflow : bool ref
adamc@1079 193
adamc@1089 194 val addPath : string * string -> unit
adamc@1090 195 val addModuleRoot : string * string -> unit
adamc@1089 196
adamc@1266 197 val moduleOf : string -> string
adamc@1266 198
adamc@1 199 end