PmCleanSystem.dcl 6.08 KB
Newer Older
Diederik van Arkel's avatar
Diederik van Arkel committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
definition module PmCleanSystem

/* OS dependent module for windows */

/* Interface module for calling the CLEAN compiler, code generator and linker */

import StdFile, StdPSt
import StdPathname
import UtilStrictLists
import PmCompilerOptions
import PmTypes

//ifWindows w o :== o
standardStaticLibraries :: !LinkMethod -> List String
Diederik van Arkel's avatar
Diederik van Arkel committed
15
standardObjectFiles :: !Bool !Bool !Processor -> List String
Diederik van Arkel's avatar
Diederik van Arkel committed
16
17
getLibs :: ![String] !*Files -> (!(![String],![String]),!*Files)

Diederik van Arkel's avatar
Diederik van Arkel committed
18
ClearCompilerCache :: !String !String !.a -> (!Int,!.a)
Diederik van Arkel's avatar
Diederik van Arkel committed
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
ClearCompilerCaches :: !Int !.a -> (!Int,!.a)
QuitCleanCompiler :: !*(IOSt .l) -> *(IOSt .l)

::	CompileClearCache	= ClearCache | Don`tClearCache
instance == CompileClearCache

::	CompileOrCheckSyntax	= SyntaxCheck | Compilation
instance == CompileOrCheckSyntax

::	CodeGenerateAsmOrCode	= AsmGeneration | CodeGeneration
instance == CodeGenerateAsmOrCode

::	CompilerMsg
	= 	CompilerOK
	| 	SyntaxError
	| 	Patherror Pathname
instance == CompilerMsg

Diederik van Arkel's avatar
Diederik van Arkel committed
37
::	WindowFun env :== ([String]) -> env -> env
Diederik van Arkel's avatar
Diederik van Arkel committed
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

Compile ::						// Compiles the given file:
	!String						// compiler exe name and options
								// !! should be full path so that cocl generates diagnostics in logical place...
								// should be quoted if required
	!Bool						// send -wmt flag to compiler (write_module_times)
	!(WindowFun *env)			// error display fun
	!(WindowFun *env)			// types display fun
	!CompileOrCheckSyntax		// check syntax only?
	!Pathname					// full .icl pathname of module to be compiled
	!(List Pathname)			// list of paths where compiler can find imported .dcl files
	!Bool						// project memory profiling?
	!Bool						// project time profiling?
	!Bool						// project eager or dynamic linking?
	!CompilerOptions			// compiler options
	!Pathname					// startup directory
	!*env						// state
	->
	(!*env,						// state
	!Pathname					// .abc pathname of generated code
//					Note: on the macintosh the .abc file is generated in the standard Clean System
//					Files Folder. On Unix, however, the location of the .abc depends on the user
//					settings.
	,!CompilerMsg				// indication whether compilation was successfull
	) | FileEnv env

CodeGen	::						// Generates code for the given file:
	!String						// generator exe name and options
								// !! should be full path so that cg generates diagnostics in logical place...
								// should be quoted if required
	!(WindowFun *(PSt .l))		// error display fun
	!CodeGenerateAsmOrCode		// generate assembly only?
	!Pathname					// full .abc pathname of module to be compiled
	!Bool						// timeprofiling option
	!CodeGenOptions				// code generator options
	!ApplicationOptions			// application options
	!Pathname					// startup directory
	!*(PSt .l)					// state
	->
	( !*(PSt .l)				// state
	, !Pathname					// full pathname of generated object file
//					Note: on the macintosh the .o file is generated in the standard Clean System
//					Files Folder. On Unix, however, the location of the .o depends on the user
//					settings.
	, !Bool							// success status
	)

StartCodeGenerator	::	!String !(WindowFun *(PSt .l)) !CodeGenerateAsmOrCode !Pathname !Int !Bool !CodeGenOptions !ApplicationOptions !Pathname !*(PSt .l) -> (!Bool,!Pathname,!*(PSt .l))

Link ::							// Links the given file:
	!String						// linker exe name
								// !! should be full path so that linker generates diagnostics in logical place...
								// this is quoted by the Link function because it first needs to decompose it...
	!(WindowFun *(PSt .l))		// error display fun
	!Pathname					// full pathname of the executable
	!ApplicationOptions			// application options
	!Pathname					// options pathname
	!(List Pathname)			// dynamic library file names
	!(List Pathname)			// object file names
	!(List Pathname)			// static library file names
	!Bool						// link statically?
	!Bool						// generate relocations?
	!Bool						// generate link map?
	!Bool						// link in resources?
	!String						// source of resources to link in
	!Bool						// generate dll?
	!String						// name of file containing symbols to be exported from dll
	!Pathname					// startup directory
Diederik van Arkel's avatar
Diederik van Arkel committed
106
	!Bool						// add 'carb' 0 resource?
Diederik van Arkel's avatar
Diederik van Arkel committed
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
	!*(PSt .l)					// state
	->
	( !*(PSt .l)				// state
	, !Bool						// success status
	)

DynLink :: !String !String !String !*(PSt .l) -> (Bool,*PSt .l)

Execute	::						// Executes the given application
	!(WindowFun *env)			// error display fun
	!Pathname					// full pathname of the application
	!ApplicationOptions			// application options (only need the console flag)
	*env						// state
	->
	( *env						// state
	, !Bool						// success status
	)

Diederik van Arkel's avatar
Diederik van Arkel committed
125
Launch :: !{#Char} !.a -> (!Int, !.a)
Diederik van Arkel's avatar
Diederik van Arkel committed
126
Execute`	::	!String !*env -> (!Bool,!Int,!*env)
Diederik van Arkel's avatar
Diederik van Arkel committed
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

// RWS ...

import StdMaybe

:: ThreadId
	:==	Int

CompileStartCommand ::
	!String
	!Bool						// send -wmt flag to compiler (write_module_times)
	!(WindowFun *env)
	!CompileOrCheckSyntax
	!Pathname
	!(List Pathname)
	!Int
	!Bool
	!Bool
	!Bool
	!CompilerOptions
	!Pathname
	!*env
	-> (!Bool, !*env) | FileEnv env
CompileHandleExitCode :: !Int !String !String !Int !(WindowFun *env) !(WindowFun *env) !Pathname
				!ListTypes !*env -> (!*env,!Pathname,!CompilerMsg) | FileEnv env

/* old
CompilePollCompleted :: !*env -> (Maybe !(!Int,!Int), !*env) | FileEnv env
*/
:: CompilePollCompletedResult = NoFinishedCompiler | UnknownFinishedCompiler | FinishedCompiler !Int !Int

CompilePollCompleted :: !*env -> (!CompilePollCompletedResult, !*env) | FileEnv env

// ... RWS

// JVG ...

:: CompilingInfo

Diederik van Arkel's avatar
Diederik van Arkel committed
166
InitCompilingInfo :: *CompilingInfo
Diederik van Arkel's avatar
Diederik van Arkel committed
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190

ExitCleanCompiler :: !*(!*CompilingInfo,*env) -> *(!*CompilingInfo,*env)

CompilePersistent ::
	!String					// cocl
	!Bool					// send -wmt flag to compiler (write_module_times)
	!(WindowFun *env)		// errwin
	!(WindowFun *env)		// typewin
	!CompileOrCheckSyntax	// compileOrCheckSyntax
	!Pathname				// path
	!(List Pathname)		// paths
	!Bool					// projectHeapProfiling
	!Bool					// projectTimeProfiling
	!Bool					// projectEagerOrDynamic
	!CompilerOptions		// compileroptions
	!Pathname				// startupdir
	!*CompilingInfo			// compiler state
	!*env					// env
	-> (!*CompilingInfo,!(!*env, !Pathname, !CompilerMsg))
	| FileEnv env

SendRepeatResult :: !Int !.a -> (!Int,!.a)

// ... JVG