PmCleanSystem.dcl 6.35 KB
Newer Older
Diederik van Arkel's avatar
Diederik van Arkel committed
1
2
3
4
definition module PmCleanSystem

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

5
import StdFile, StdMaybe
Diederik van Arkel's avatar
Diederik van Arkel committed
6
7
8
9
import StdPathname
import UtilStrictLists
import PmCompilerOptions
import PmTypes
10
import PmCallBack
Diederik van Arkel's avatar
Diederik van Arkel committed
11

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

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

17
18
19
20
:: CompilerProcessIds

NoCompilerProcessIds :: CompilerProcessIds

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

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

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

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

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...
99
	!(WindowFun *GeneralSt)		// error display fun
Diederik van Arkel's avatar
Diederik van Arkel committed
100
101
102
103
104
105
106
107
108
109
110
111
112
113
	!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
114
	!String						// path to dynamic linker
115
	!Processor					// target processor
116
	!Bool						// 64 bit target processor
117
	!*GeneralSt					// state
Diederik van Arkel's avatar
Diederik van Arkel committed
118
	->
119
	( !*GeneralSt				// state
Diederik van Arkel's avatar
Diederik van Arkel committed
120
121
	, !Bool						// success status
	)
Diederik van Arkel's avatar
Diederik van Arkel committed
122
/*
123
DynLink :: !String !String !String !*GeneralSt -> (Bool,*GeneralSt)
Diederik van Arkel's avatar
Diederik van Arkel committed
124
*/
125
/*
Diederik van Arkel's avatar
Diederik van Arkel committed
126
127
128
129
130
131
132
133
134
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
	)
135
*/
Diederik van Arkel's avatar
Diederik van Arkel committed
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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
155
	!CompilerProcessIds
Diederik van Arkel's avatar
Diederik van Arkel committed
156
	!*env
157
	-> (!Bool,!CompilerProcessIds,!*env) | FileEnv env
Diederik van Arkel's avatar
Diederik van Arkel committed
158
CompileHandleExitCode :: !Int !String !String !Int !(WindowFun *env) !(WindowFun *env) !Pathname
159
				!ListTypes !*env -> (!Pathname,!CompilerMsg,!*env) | FileEnv env
Diederik van Arkel's avatar
Diederik van Arkel committed
160
161
162
163
164
165
166
167
168
169

/* 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
170
InitCompilingInfo :: *CompilingInfo
Diederik van Arkel's avatar
Diederik van Arkel committed
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191

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

192
StartCodeGenerator	::	!String !(WindowFun *GeneralSt) !CodeGenerateAsmOrCode !Pathname !Int !Bool !CodeGenOptions !Processor !ApplicationOptions !Pathname !CompilerProcessIds !*GeneralSt -> (!Bool,!Pathname,!CompilerProcessIds,!*GeneralSt)
193
SendRepeatResult :: !Int !.a -> (!Int,!.a)
194
195

DelayEventLoop :: !.ps -> .ps