PmCleanSystem.dcl 6.64 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 !*World -> *World
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
46
47
48
49
:: ProjectCompilerOptions = {
	pco_memory_profiling :: !Bool,
	pco_time_profiling :: !Bool,
	pco_desc_exl :: !Bool,
	pco_dynamics :: !Bool,
	pco_link_dynamic :: !Bool
   }

Diederik van Arkel's avatar
Diederik van Arkel committed
50
51
52
53
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
54
	!Bool
Diederik van Arkel's avatar
Diederik van Arkel committed
55
56
57
58
	!Bool						// write module times to abc file
	!(WindowFun *env)			// error display fun
	!(WindowFun *env)			// types display fun
	!CompileOrCheckSyntax		// check syntax only?
59
	!ModuleDirAndName
Diederik van Arkel's avatar
Diederik van Arkel committed
60
61
	!Pathname					// full .icl pathname of module to be compiled
	!(List Pathname)			// list of paths where compiler can find imported .dcl files
62
	!ProjectCompilerOptions
Diederik van Arkel's avatar
Diederik van Arkel committed
63
64
	!CompilerOptions			// compiler options
	!Pathname					// startup directory
65
	!CompilerProcessIds
Diederik van Arkel's avatar
Diederik van Arkel committed
66
67
	!*env						// state
	->
68
	(!Pathname					// .abc pathname of generated code
Diederik van Arkel's avatar
Diederik van Arkel committed
69
70
71
72
//					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
73
74
	,!CompilerProcessIds
	,!*env						// state
Diederik van Arkel's avatar
Diederik van Arkel committed
75
76
77
78
79
80
	) | 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
81
	!Bool
82
	!(WindowFun *GeneralSt)		// error display fun
Diederik van Arkel's avatar
Diederik van Arkel committed
83
84
	!CodeGenerateAsmOrCode		// generate assembly only?
	!Pathname					// full .abc pathname of module to be compiled
85
	!Pathname					// full object pathname of module to be compiled
Diederik van Arkel's avatar
Diederik van Arkel committed
86
87
	!Bool						// time profiling...
	!CodeGenOptions				// code generator options
88
	!Processor					// target processor
Diederik van Arkel's avatar
Diederik van Arkel committed
89
90
	!ApplicationOptions			// application options
	!Pathname					// startup directory
91
	!CompilerProcessIds
92
	!*GeneralSt					// state
Diederik van Arkel's avatar
Diederik van Arkel committed
93
	->
94
	( !Pathname					// full pathname of generated object file
95
	, !Bool						// success status
96
	, !CompilerProcessIds
97
	, !*GeneralSt				// state
Diederik van Arkel's avatar
Diederik van Arkel committed
98
99
100
101
102
103
	)

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...
104
	!(WindowFun *GeneralSt)		// error display fun
Diederik van Arkel's avatar
Diederik van Arkel committed
105
106
107
108
109
110
111
112
	!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?
113
	!Bool						// generate symbol table?
Diederik van Arkel's avatar
Diederik van Arkel committed
114
115
116
117
118
119
	!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
120
	!String						// path to dynamic linker
121
	!Processor					// target processor
122
	!Bool						// 64 bit target processor
123
	!*GeneralSt					// state
Diederik van Arkel's avatar
Diederik van Arkel committed
124
	->
125
	( !*GeneralSt				// state
Diederik van Arkel's avatar
Diederik van Arkel committed
126
127
	, !Bool						// success status
	)
Diederik van Arkel's avatar
Diederik van Arkel committed
128
/*
129
DynLink :: !String !String !String !*GeneralSt -> (Bool,*GeneralSt)
Diederik van Arkel's avatar
Diederik van Arkel committed
130
*/
131
/*
Diederik van Arkel's avatar
Diederik van Arkel committed
132
133
134
135
136
137
138
139
140
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
	)
141
*/
Diederik van Arkel's avatar
Diederik van Arkel committed
142
143
144
145
146
147
148
149
150
151
152
153
154
155
Execute`	::	!String !*env -> (!Bool,!Int,!*env)


:: ThreadId
	:==	Int

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

:: CompilePollCompletedResult = NoFinishedCompiler | UnknownFinishedCompiler | FinishedCompiler !Int !Int

167
CompilePollCompleted :: !CompilerProcessIds !*env -> (!CompilePollCompletedResult, !*env) | FileEnv env
Diederik van Arkel's avatar
Diederik van Arkel committed
168
169
170

:: CompilingInfo

Diederik van Arkel's avatar
Diederik van Arkel committed
171
InitCompilingInfo :: *CompilingInfo
Diederik van Arkel's avatar
Diederik van Arkel committed
172
173
174
175
176
177
178
179
180

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

CompilePersistent ::
	!String					// cocl
	!Bool						// write module times to abc file
	!(WindowFun *env)		// errwin
	!(WindowFun *env)		// typewin
	!CompileOrCheckSyntax	// compileOrCheckSyntax
181
	!ModuleDirAndName
Diederik van Arkel's avatar
Diederik van Arkel committed
182
	!(List Pathname)		// paths
183
	!ProjectCompilerOptions
Diederik van Arkel's avatar
Diederik van Arkel committed
184
185
186
187
188
189
190
	!CompilerOptions		// compileroptions
	!Pathname				// startupdir
	!*CompilingInfo			// compiler state
	!*env					// env
	-> (!*CompilingInfo,!(!*env, !Pathname, !CompilerMsg))
	| FileEnv env

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

DelayEventLoop :: !.ps -> .ps
195
196
197
198
199

:: StartedCodeGenerator

start_code_generator ::	!String !(WindowFun *GeneralSt) !Pathname !Int !Bool !CodeGenOptions !Processor !Pathname !*GeneralSt
						-> (!Bool,!Int/*HANDLE*/,!StartedCodeGenerator,!*GeneralSt)
200
201
finish_code_generator :: !Int/*HANDLE*/ !StartedCodeGenerator !Int !(WindowFun *GeneralSt) !*GeneralSt -> (!Bool,!*GeneralSt)
wait_for_finished_code_generator :: !{#Int} !*GeneralSt -> (!Int,!Int,!*GeneralSt);