File: control.sml

package info (click to toggle)
mlton 20100608-5
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 36,624 kB
  • sloc: ansic: 18,441; lisp: 2,879; makefile: 1,572; sh: 1,326; pascal: 256; asm: 97
file content (141 lines) | stat: -rw-r--r-- 5,060 bytes parent folder | download | duplicates (4)
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
(* Copyright (C) 2004-2009 Henry Cejtin, Matthew Fluet, Suresh
 *    Jagannathan, and Stephen Weeks.
 *
 * MLton is released under a BSD-style license.
 * See the file MLton-LICENSE for details.
 *)

structure Control: CONTROL =
struct

structure C = Control ()
open C

val debug = control {name = "debug",
                     default = false,
                     toString = Bool.toString}

val allSU = control {name = "allSU",
                     default = false,
                     toString = Bool.toString}

val collect_enums = control {name = "collect_enums",
                             default = true,
                             toString = Bool.toString}

val cppopts = control {name = "cppopts",
                       default = [],
                       toString = List.toString (fn s => s)}

val dir = control {name = "dir",
                   default = "NLFFI-Generated",
                   toString = fn s => s}

val enum_cons = control {name = "enum_cons",
                         default = false,
                         toString = Bool.toString}

val extramembers = control {name = "extramembers",
                            default = [],
                            toString = List.toString (fn s => s)}

val gensym = control {name = "gensym",
                      default = "",
                      toString = fn s => s}

val libhandle = control {name = "libhandle",
                         default = "Library.libh",
                         toString = fn s => s}

structure Linkage =
   struct
      datatype t = Archive | Dynamic | Shared

      val toString =
         fn Archive => "archive"
          | Dynamic => "dynamic"
          | Shared => "shared"
   end
val linkage = control {name = "linkage",
                       default = Linkage.Dynamic,
                       toString = Linkage.toString}

val match = control {name = "match",
                     default = fn _ => false,
                     toString = fn _ => "<fn>"}

val mlbfile = control {name = "mlbfile",
                       default = "nlffi-generated.mlb",
                       toString = fn s => s}

val namedargs = control {name = "namedargs",
                         default = false,
                         toString = Bool.toString}

val prefix = control {name = "prefix",
                      default = "",
                      toString = fn s => s}

structure Target =
   struct
      open MLton.Platform
      datatype arch = datatype Arch.t
      datatype os = datatype OS.t

      datatype t = T of {arch: arch, os: os}
      val host = T {arch = Arch.host, os = OS.host}

      fun toString (T {arch, os}) =
         concat [Arch.toString arch, "-", OS.toString os]

      fun fromString s =
         case String.split (s, #"-") of
            [arch, os] =>
               (case (Arch.fromString arch, OS.fromString os) of
                   (SOME arch, SOME os) =>
                      SOME (T {arch = arch, os = os})
                 | _ => NONE)
          | _ => NONE

      fun make (t as T {arch, os}) =
         case (arch, os) of
            (AMD64, _) => SOME {name = toString t, sizes = SizesAMD64.sizes,
                                endianShift = EndianLittle.shift}
          | (HPPA, _) => SOME {name = toString t, sizes = SizesHPPA.sizes,
                               endianShift = EndianBig.shift}
          | (IA64, Hurd) => SOME {name = toString t, sizes = SizesIA64.sizes,
                                  endianShift = EndianBig.shift}
          | (IA64, HPUX) => SOME {name = toString t, sizes = SizesIA64.sizes,
                                  endianShift = EndianBig.shift}
          | (IA64, Linux) => SOME {name = toString t, sizes = SizesIA64.sizes,
                                   endianShift = EndianLittle.shift}
          | (Sparc, _) => SOME {name = toString t, sizes = SizesSparc.sizes,
                                endianShift = EndianBig.shift}
          | (PowerPC, _) => SOME {name = toString t, sizes = SizesPPC.sizes,
                                  endianShift = EndianLittle.shift}
          | (PowerPC64, _) => SOME {name = toString t, 
                                    sizes = SizesPowerPC64.sizes,
                                    endianShift = EndianLittle.shift}
          | (X86, _) => SOME {name = toString t, sizes = SizesX86.sizes,
                              endianShift = EndianLittle.shift}
          | _ => NONE
   end

val target = control {name = "target",
                      default = Target.make Target.host,
                      toString = Option.toString (fn {name, ...} => name)}

val weight = control {name = "weight",
                      default = {heavy = true, light = true},
                      toString = fn {heavy, light} =>
                      concat ["{heavy = ", Bool.toString heavy,
                              ", light = ", Bool.toString light, "}"]}

val width = control {name = "width",
                     default = 75,
                     toString = Int.toString}

val defaults = setDefaults
val _ = defaults ()

end