PmCleanSystem.dcl 6.43 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 !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
:: ProjectCompilerOptions = {
	pco_memory_profiling :: !Bool,
	pco_time_profiling :: !Bool,
45
	pco_callgraph_profiling :: !Bool,
46
47
	pco_desc_exl :: !Bool,
	pco_dynamics :: !Bool,
48
	pco_generic_fusion :: !Bool,
49
50
51
	pco_link_dynamic :: !Bool
   }

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

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...
106
	!(WindowFun *GeneralSt)		// error display fun
Diederik van Arkel's avatar
Diederik van Arkel committed
107
108
109
110
111
112
113
114
	!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?
115
	!Bool						// generate symbol table?
Diederik van Arkel's avatar
Diederik van Arkel committed
116
117
118
119
120
121
	!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
122
	!String						// path to dynamic linker
123
	!Processor					// target processor
124
	!Bool						// 64 bit target processor
125
	!*GeneralSt					// state
Diederik van Arkel's avatar
Diederik van Arkel committed
126
	->
127
	( !*GeneralSt				// state
Diederik van Arkel's avatar
Diederik van Arkel committed
128
129
	, !Bool						// success status
	)
130

Diederik van Arkel's avatar
Diederik van Arkel committed
131
132
133
134
135
136
137
138
139
140
141
142
143
144
Execute`	::	!String !*env -> (!Bool,!Int,!*env)


:: ThreadId
	:==	Int

CompileStartCommand ::
	!String
	!Bool						// write module times to abc file
	!(WindowFun *env)
	!CompileOrCheckSyntax
	!Pathname
	!(List Pathname)
	!Int
145
	!ProjectCompilerOptions
Diederik van Arkel's avatar
Diederik van Arkel committed
146
147
	!CompilerOptions
	!Pathname
148
	!CompilerProcessIds
Diederik van Arkel's avatar
Diederik van Arkel committed
149
	!*env
150
	-> (!Bool,!CompilerProcessIds,!*env) | FileEnv env
151
CompileHandleExitCode :: !Int !String !String !Int !(WindowFun *env) !(WindowFun *env) !ModuleDirAndName
152
				!ListTypes !*env -> (!Pathname,!CompilerMsg,!*env) | FileEnv env
Diederik van Arkel's avatar
Diederik van Arkel committed
153
154
155

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

156
CompilePollCompleted :: !CompilerProcessIds !*env -> (!CompilePollCompletedResult, !*env) | FileEnv env
Diederik van Arkel's avatar
Diederik van Arkel committed
157
158
159

:: CompilingInfo

Diederik van Arkel's avatar
Diederik van Arkel committed
160
InitCompilingInfo :: *CompilingInfo
Diederik van Arkel's avatar
Diederik van Arkel committed
161
162
163
164
165
166
167
168
169

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

CompilePersistent ::
	!String					// cocl
	!Bool						// write module times to abc file
	!(WindowFun *env)		// errwin
	!(WindowFun *env)		// typewin
	!CompileOrCheckSyntax	// compileOrCheckSyntax
170
	!ModuleDirAndName
Diederik van Arkel's avatar
Diederik van Arkel committed
171
	!(List Pathname)		// paths
172
	!ProjectCompilerOptions
Diederik van Arkel's avatar
Diederik van Arkel committed
173
174
175
176
177
178
179
	!CompilerOptions		// compileroptions
	!Pathname				// startupdir
	!*CompilingInfo			// compiler state
	!*env					// env
	-> (!*CompilingInfo,!(!*env, !Pathname, !CompilerMsg))
	| FileEnv env

180
StartCodeGenerator	::	!String !(WindowFun *GeneralSt) !CodeGenerateAsmOrCode !Pathname !Int !Bool !CodeGenOptions !Processor !ApplicationOptions !Pathname !CompilerProcessIds !*GeneralSt -> (!Bool,!Pathname,!CompilerProcessIds,!*GeneralSt)
181
SendRepeatResult :: !Int !.a -> (!Int,!.a)
182
183

DelayEventLoop :: !.ps -> .ps
184
185
186
187
188

:: StartedCodeGenerator

start_code_generator ::	!String !(WindowFun *GeneralSt) !Pathname !Int !Bool !CodeGenOptions !Processor !Pathname !*GeneralSt
						-> (!Bool,!Int/*HANDLE*/,!StartedCodeGenerator,!*GeneralSt)
189
190
finish_code_generator :: !Int/*HANDLE*/ !StartedCodeGenerator !Int !(WindowFun *GeneralSt) !*GeneralSt -> (!Bool,!*GeneralSt)
wait_for_finished_code_generator :: !{#Int} !*GeneralSt -> (!Int,!Int,!*GeneralSt);
Camil Staps's avatar
Camil Staps committed
191
192

RunExternalCommand :: !String ![String] !String !*GeneralSt -> *(!Int, ![String], !*GeneralSt)