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

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

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

11
12
standardStaticLibraries	:: !Processor !LinkMethod -> List String
standardObjectFiles		:: !Bool !Bool !Processor -> List String
Diederik van Arkel's avatar
Diederik van Arkel committed
13
14
15

getLibs :: ![String] !*Files -> (!(![String],![String]),!*Files)

16
17
18
19
:: CompilerProcessIds

NoCompilerProcessIds :: CompilerProcessIds

20
ClearCompilerCache :: !String !String !.a -> (!Int,!.a)
21
22
ClearCompilerCaches :: !CompilerProcessIds !.a -> (!Int,!.a)
QuitCleanCompiler :: !Bool !CompilerProcessIds !*(IOSt .l) -> *(IOSt .l)
Diederik van Arkel's avatar
Diederik van Arkel committed
23

24
25
//::	CompileClearCache	= ClearCache | Don`tClearCache
//instance == CompileClearCache
Diederik van Arkel's avatar
Diederik van Arkel committed
26
27
28
29
30
31
32
33
34
35
36
37
38

::	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
39
::	WindowFun env :== ([String]) -> env -> env
Diederik van Arkel's avatar
Diederik van Arkel committed
40
41
42
43
44

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
45
	!Bool
Diederik van Arkel's avatar
Diederik van Arkel committed
46
47
48
49
50
51
52
53
54
55
56
	!Bool						// write module times to abc file
	!(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
57
	!CompilerProcessIds
Diederik van Arkel's avatar
Diederik van Arkel committed
58
59
	!*env						// state
	->
60
	(!Pathname					// .abc pathname of generated code
Diederik van Arkel's avatar
Diederik van Arkel committed
61
62
63
64
//					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
65
66
	,!CompilerProcessIds
	,!*env						// state
Diederik van Arkel's avatar
Diederik van Arkel committed
67
68
69
70
71
72
	) | 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
73
	!Bool
Diederik van Arkel's avatar
Diederik van Arkel committed
74
75
76
77
78
	!(WindowFun *(PSt .l))		// error display fun
	!CodeGenerateAsmOrCode		// generate assembly only?
	!Pathname					// full .abc pathname of module to be compiled
	!Bool						// time profiling...
	!CodeGenOptions				// code generator options
79
	!Processor					// target processor
Diederik van Arkel's avatar
Diederik van Arkel committed
80
81
	!ApplicationOptions			// application options
	!Pathname					// startup directory
82
	!CompilerProcessIds
Diederik van Arkel's avatar
Diederik van Arkel committed
83
84
	!*(PSt .l)					// state
	->
85
	( !Pathname					// full pathname of generated object file
Diederik van Arkel's avatar
Diederik van Arkel committed
86
87
88
89
//					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
90
91
	, !CompilerProcessIds
	, !*(PSt .l)				// state
Diederik van Arkel's avatar
Diederik van Arkel committed
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
	)

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
113
	!String						// path to dynamic linker
114
	!Processor					// target processor
Diederik van Arkel's avatar
Diederik van Arkel committed
115
116
117
118
119
	!*(PSt .l)					// state
	->
	( !*(PSt .l)				// state
	, !Bool						// success status
	)
Diederik van Arkel's avatar
Diederik van Arkel committed
120
/*
Diederik van Arkel's avatar
Diederik van Arkel committed
121
DynLink :: !String !String !String !*(PSt .l) -> (Bool,*PSt .l)
Diederik van Arkel's avatar
Diederik van Arkel committed
122
*/
123
/*
Diederik van Arkel's avatar
Diederik van Arkel committed
124
125
126
127
128
129
130
131
132
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
	)
133
*/
Diederik van Arkel's avatar
Diederik van Arkel committed
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
Execute`	::	!String !*env -> (!Bool,!Int,!*env)


:: ThreadId
	:==	Int

CompileStartCommand ::
	!String
	!Bool						// write module times to abc file
	!(WindowFun *env)
	!CompileOrCheckSyntax
	!Pathname
	!(List Pathname)
	!Int
	!Bool
	!Bool
	!Bool
	!CompilerOptions
	!Pathname
153
	!CompilerProcessIds
Diederik van Arkel's avatar
Diederik van Arkel committed
154
	!*env
155
	-> (!Bool,!CompilerProcessIds,!*env) | FileEnv env
Diederik van Arkel's avatar
Diederik van Arkel committed
156
CompileHandleExitCode :: !Int !String !String !Int !(WindowFun *env) !(WindowFun *env) !Pathname
157
				!ListTypes !*env -> (!Pathname,!CompilerMsg,!*env) | FileEnv env
Diederik van Arkel's avatar
Diederik van Arkel committed
158
159
160
161
162
163
164
165
166
167

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

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

:: CompilingInfo

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

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

CompilePersistent ::
	!String					// cocl
	!Bool						// write module times to abc file
	!(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

190
StartCodeGenerator	::	!String !(WindowFun *(PSt .l)) !CodeGenerateAsmOrCode !Pathname !Int !Bool !CodeGenOptions !Processor !ApplicationOptions !Pathname !CompilerProcessIds !*(PSt .l) -> (!Bool,!Pathname,!CompilerProcessIds,!*(PSt .l))
191
SendRepeatResult :: !Int !.a -> (!Int,!.a)
192
193

DelayEventLoop :: !.ps -> .ps