Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
227 dpurdie 1
# -*- mode: perl; indent-width: 4; -*-
2
##############################################################################
3
# Copyright (c) ERG Transit Systems. 1996-2004
4
#
5
# File:         PLATFORM/amx
6
#
7
# Contents:     AMX support
8
#
9
#               Defines rules to build the following:
10
#
11
#                   SCF     Software configuration
12
#                   TCF     Target configuration
13
#                   PCF     AMX/ES configuration (CJ8xx/386 only)
14
#                   INS     Insight configuration module
15
#
16
# Revision History:
17
#   30/08/99    APY     ToolsetGenerate/ToolsetObjs
18
#   09/12/99    APY     ToolsetDir
19
#   09/03/00    APY     Missed ToolsetGenerate/Objs statements for 
20
#                       amx_xxx (AMX/EP) builds.
21
#   13/11/00	APY	${exe} includes embedded '.'
22
#   29/03/02    APY     pd386 toolset
23
###############################################################################
24
 
25
AmxInit();
26
 
27
###############################################################################
28
#.  AMX platform runtime configuration
29
#
30
###############################################################################
31
sub AmxInit
32
{
33
    Init( "amx" );
34
    PlatformDefines( "amx.def" );
35
}
36
 
37
 
38
###############################################################################
39
#   AmxLib( $name, $amx, $insight )
40
#       Builds the rules required to build AMX application objects
41
#       into a library
42
#
43
#  Rules:
44
#       $(OBJDIR)/${name}.${a}: \	(assumed image from caller)
45
#               objs ...
46
#       obj:        source
47
#               $(CC)|$(AS)
48
#       source:     axm
49
#               $(AXM)
50
#....
51
 
52
sub AmxLib
53
{
54
    my( $name, $amx, $insight ) = @_;
55
 
56
    return 0 if (! $amx);
57
    AmxCfgRules( $name, $amx, ${a}, $insight );
58
}
59
 
60
 
61
###############################################################################
62
#   AmxLink( $name, $amx, $insight, \@objs, \@libraries )
63
#       Builds the rules required to link an AMX application
64
#
65
#  Rules:
66
#       $(BINDIR)/${name}${exe}: \	(assumed image from caller)
67
#               objs ...
68
#       obj:        source
69
#               $(CC)|$(AS)
70
#       source:     axm
71
#               $(AXM)
72
#
73
#  Returns:
74
#       Appends additional objects and libraries required to build
75
#       an AMX based application.
76
#....
77
 
78
sub AmxLinkStd
79
{
80
    my( $name, $pObjs, $pLibs ) = @_;
81
 
82
    AmxStdRules( $name );
83
    AmxStdStuff( $name, $pObjs, $pLibs );
84
}
85
 
86
sub AmxLinkCfg
87
{
88
    my( $name, $amx, $insight, $pObjs, $pLibs ) = @_;
89
 
90
    return 0 if (! $amx);
91
 
92
#.. Rules for generated modules
93
#
94
    AmxStdRules( $name );
95
    AmxCfgRules( $name, $amx, ${exe}, $insight );
96
 
97
#.. Objects and libraries required for builds
98
#
99
    AmxStdStuff( $name, $pObjs, $pLibs );
100
    AmxCfgStuff( $name, $amx, $insight, $pObjs, $pLibs );
101
}
102
 
103
 
104
###############################################################################
105
#   AmxStdStuff( $name, $amx, $insight, \@objs, \@libraries )
106
#       Appends additional objects and libraries required to build
107
#       an AMX based application.
108
#..
109
 
110
sub AmxStdStuff
111
{
112
    my( $name, $pObjs, $pLibs ) = @_;
113
 
114
# Objects
115
#
116
#       Toolset         Objects
117
#       wc386           amx_xxx, cjXXXwc
118
#       pd386           amx_xxx, cjXXXpd
119
#       mri68k          cjXXXuf
120
#..
121
    if ( $ScmToolset eq "wc386" )
122
    {
123
        @$pObjs = ( "\$(OBJDIR)/${name}/amx_xxx", @$pObjs );
124
        push( @$pObjs, "\$(amx_libdir)/obj\$(amx_calling)/\$(amx_name)wc" );
125
    }
126
    elsif ( $ScmToolset eq "pd386" )
127
    {
128
        @$pObjs = ( "\$(OBJDIR)/${name}/amx_xxx", @$pObjs );
129
    }
130
    elsif ( $ScmToolset eq "mri68k" )
131
    {
132
        push( @$pObjs, "\$(amx_libdir)/\$(amx_name)uf" );
133
    }
134
    else
135
    {
136
        Message( "AMX: unknown toolset '$ScmToolset'\n" );
137
    }
138
 
139
# Libraries,
140
#   Note:   Libraries must be pushed (after) APP/EOS libraries.
141
#..
142
                                                      # AMX kernel
143
    push( @$pLibs, "\$(amx_libdir)/\$(amx_name)\$(amx_calling)" );
144
 
145
    push( @$pLibs, "--ifdef=amx_compat" );            # AMX v1 compat
146
    push( @$pLibs, "\$(amx_libdir)/\$(amx_name)cv\$(amx_calling)" );
147
 
148
    push( @$pLibs, "--ifdef=amx_filesystem" );        # AMX/FS optional
149
    push( @$pLibs, "\$(amxfs_libdir)/\$(amx_fsname)\$(amx_calling)" );
150
}
151
 
152
 
153
###############################################################################
154
#   AmxCfgStuff( $name, $amx, $insight, \@objs, \@libraries )
155
#       Appends additional objects and libraries required to build
156
#       an AMX module into an application.
157
#..
158
 
159
sub AmxCfgLink
160
{
161
    my( $name, $amx, $insight, $pObjs, $pLibs ) = @_;
162
 
163
    @$pObjs = ( "\$(OBJDIR)/${name}/amx_icf", @$pObjs )
164
        if ( $insight );
165
    @$pObjs = ( "\$(OBJDIR)/${name}/amx_pcf", @$pObjs )
166
        if ( $ScmToolset eq "wc386" );
167
    @$pObjs = ( "\$(OBJDIR)/${name}/amx_tcf", @$pObjs );
168
    @$pObjs = ( "\$(OBJDIR)/${name}/amx_scf", @$pObjs );
169
}
170
 
171
 
172
###############################################################################
173
#   AmxStdRules( $name, $amx, $insight )
174
#       Builds the rules required to build an AMX application
175
#
176
#   Rules:
177
#       objs ...
178
#
179
#   ToolsetRules:
180
#
181
#       obj:        source
182
#               $(CC)|$(AS)
183
#       source:     axm
184
#               $(AXM)
185
#....
186
 
187
sub AmxStdRules
188
{
189
    my( $name ) = @_;
190
 
191
#.. Add to callers dependencies
192
#
193
    MakePrint( "\\\n\t\t\$(OBJDIR)/${name}/amx_xxx.${o}" )
194
        if ( $ScmToolset eq "wc386" || $ScmToolset eq "pd386" );
195
 
196
#.. Toolset
197
#
198
    if ( $ScmToolset eq "wc386" || $ScmToolset eq "pd386" )
199
    {
200
        ToolsetRule(
201
                "\$(OBJDIR)/${name}/amx_xxx.${o}:	\$(OBJDIR)/${name}/amx_xxx.c\n" .
202
                "\t\$(CC)\n" .
203
                "\$(OBJDIR)/${name}/amx_xxx.c:		\$(SCM_PLATFORM).pl\n" .
204
                "\t@\$(mkdir) -p \$(OBJDIR)/${name}\n" .
205
                "\t\$(amx_xxx)\n" );
206
 
207
        ToolsetDir( "\$(OBJDIR)/${name}" );
208
        ToolsetGenerate( "\$(OBJDIR)/${name}/amx_xxx.c" );
209
        ToolsetObj( "\$(OBJDIR)/${name}/amx_xxx" );
210
    }
211
}
212
 
213
 
214
###############################################################################
215
#   AmxCfgRules( $name, $amx, $ext, $insight )
216
#       Builds the rules required to build AMX configuration objects.
217
#
218
#   Rules:
219
#       objs ...
220
#
221
#   ToolsetRules:
222
#
223
#       obj:        source
224
#               $(CC)|$(AS)
225
#       source:     axm
226
#               $(AXM)
227
#....
228
 
229
sub AmxCfgRules
230
{
231
    my( $name, $amx, $ext, $insight ) = @_;
232
    my( $scf, $tcf ) = @_;
233
 
234
    $scf = MakeSrcResolve( "${amx}.scf" );      # resolve source name
235
    $tcf = MakeSrcResolve( "${amx}.tcf" );
236
 
237
#.. Add to callers dependencies
238
#
239
    MakePrint( "\\\n\t\t\$(OBJDIR)/${name}/amx_scf.${o}" .
240
               "\\\n\t\t\$(OBJDIR)/${name}/amx_tcf.${o}" );
241
 
242
#.. Object rules
243
#
244
    ToolsetRule(
245
        "##################################################################\n" .
246
        "#	AMX configuration for ${name}.${ext}\n" .
247
        "#..\n" .
248
        "\n" .
249
        "\$(OBJDIR)/${name}/amx_scf.${o}:	\$(OBJDIR)/${name}/amx_scf.c\n" .
250
            "\t\$(CC)\n" .
251
        "\$(OBJDIR)/${name}/amx_tcf.${o}:	\$(OBJDIR)/${name}/amx_tcf.${s}\n" .
252
            "\t\$(AS)\n" .
253
        "\$(OBJDIR)/${name}/amx_scf.c:	$scf\n" .
254
            "\t@\$(mkdir) -p \$(OBJDIR)/${name}\n" .
255
            "\t\$(amx_scf)\n" .
256
        "\$(OBJDIR)/${name}/amx_tcf.${s}:	$tcf\n" .
257
            "\t\$(amx_tcf)\n" );
258
 
259
    ToolsetDir( "\$(OBJDIR)/${name}" );
260
    ToolsetGenerate( "\$(OBJDIR)/${name}/amx_scf.c" );
261
    ToolsetObj( "\$(OBJDIR)/${name}/amx_scf" );
262
    ToolsetGenerate( "\$(OBJDIR)/${name}/amx_tcf.${s}" );      # Object
263
    ToolsetGenerate( "\$(OBJDIR)/${name}/amx_tcf.lst" );       # List file
264
    ToolsetObj( "\$(OBJDIR)/${name}/amx_tcf" );
265
 
266
    if ( $ScmToolset eq "wc386" )			       # AMX/ET
267
    {
268
    #.. Add to callers dependencies
269
    #
270
        MakePrint( "\\\n\t\t\$(OBJDIR)/${name}/amx_pcf.${o}" );
271
 
272
    #.. Object rules
273
    #
274
        ToolsetRule(
275
            "\$(OBJDIR)/${name}/amx_pcf.${o}:	\$(OBJDIR)/${name}/amx_pcf.${s}\n" .
276
                "\t\$(AS)\n" .
277
            "\$(OBJDIR)/${name}/amx_pcf.${s}:	$scf\n" .
278
                "\t\$(amx_pcf)\n" );
279
 
280
	ToolsetGenerate("\$(OBJDIR)/${name}/amx_pcf.${s}");    # Object
281
	ToolsetGenerate("\$(OBJDIR)/${name}/amx_pcf.lst");     # List file
282
        ToolsetObj("\$(OBJDIR)/${name}/amx_pcf");
283
    }
284
 
285
    if ( $insight )
286
    {
287
    #.. Add to callers dependencies
288
    #
289
        MakePrint( "\\\n\t\$(OBJDIR)/${name}/amx_icf.${o}" );
290
 
291
    #.. Object rules
292
    #
293
        ToolsetRule(
294
            "\$(OBJDIR)/${name}/amx_icf.${o}:	\$(OBJDIR)/${name}/amx_icf.c\n" .
295
            "\$(OBJDIR)/${name}/amx_icf.c:	$scf\n" .
296
                "\t\$(amx_icf)\n" );
297
 
298
        ToolsetGenerate( "\$(OBJDIR)/${name}/amx_icf.c}" );
299
        ToolsetObj( "\$(OBJDIR)/${name}/amx_icf" );
300
    }
301
 
302
    ToolsetRule( "\n#\n" );
303
}
304
 
305
 
306
###############################################################################
307
#   AmxLibISP( $name, $cfg )
308
#       Builds the rules required to build AMX ISP into a library
309
#
310
#   AmxLinkISP( $name, $cfg, \@objs, \@libs )
311
#       Builds the rules required to build AMX ISP into an application
312
#
313
#  Rules:
314
#	$(OBJDIR)/${name}${exe}|${a}: \			(assumed)
315
#               objs ...
316
#       obj:        source
317
#               $(CC)|$(AS)
318
#       source:     axm
319
#               $(AXM)
320
#....
321
 
322
sub AmxLibISP
323
{
324
    my( $name, $cfg ) = @_;
325
    AmxIntRules( $name, ${a}, $cfg );
326
}
327
 
328
 
329
sub AmxLinkISP
330
{
331
    my( $name, $cfg, $pObjs, $pLibs ) = @_;
332
 
333
    AmxIntRules( $name, ${exe}, $cfg );
334
    push( @$pObjs, "\$(OBJDIR)/${name}/${cfg}.${o}" );
335
}
336
 
337
 
338
###############################################################################
339
#   AmxISPRules( $name, $cfg )
340
#       Builds the rules required to build an AMX ISP module
341
#
342
#   ToolsetRules:
343
#
344
#       obj:        source
345
#               $(AS)
346
#       source:     axm
347
#               $(AXM)
348
#....
349
 
350
sub AmxIntRules
351
{
352
    my( $name, $ext, $cfg ) = @_;
353
    my( $icf );
354
 
355
#.. Add to callers dependencies
356
#
357
    MakePrint( "\\\n\t\t\$(OBJDIR)/${name}/${cfg}.${o}" );
358
 
359
#.. Objects rules
360
#
361
    $icf = MakeSrcResolve( "${cfg}.icf" );      # resolve source name
362
 
363
    ToolsetRule(
364
        "##################################################################\n" .
365
        "#	AMX Interrupt Service Procedure (ISP) for ${name}.${ext}\n" .
366
        "#..\n" .
367
        "\n" .
368
        "\$(OBJDIR)/${name}/${cfg}.${o}:	\$(OBJDIR)/${name}/${cfg}.${s}\n" .
369
            "\t\$(AS)\n" .
370
        "\$(OBJDIR)/${name}/${cfg}.${s}:	$icf\n" .
371
            "\t@\$(mkdir) -p \$(OBJDIR)/${name}\n" .
372
            "\t\$(amx_int)\n" );
373
 
374
    ToolsetDir( "\$(OBJDIR)/${name}" );
375
    ToolsetGenerate( "\$(OBJDIR)/${name}/${cfg}.${s}" );       # Object
376
    ToolsetGenerate( "\$(OBJDIR)/${name}/${cfg}.lst" );        # List file
377
    ToolsetObj( "\$(OBJDIR)/${name}/${cfg}" );
378
 
379
    ToolsetRule("\n#\n");
380
}
381