First Commit of my working state
[simh.git] / Makefile
1 #
2 # Makefile for SIMH 3.8
3 #
4 # Philipp Hachtmann
5 #
6
7 # 01-OCT-08 PH Added spaces after "-o" option to gcc
8 # 19-SEP-08 PH Initial version
9 #
10
11 ################################################################################
12
13 # Find out something about the system we build for.
14 # This process is ugly and should be revisited!
15
16 BUILD=linux
17
18 ifneq ($(WIN32),)
19 BUILD=win32
20 endif
21
22 ifneq (,$(findstring solaris,$(OSTYPE)))
23 BUILD=solaris
24 endif
25
26 ifneq (,$(findstring darwin,$(OSTYPE)))
27 BUILD=darwin
28 endif
29
30
31 ################################################################################
32
33 # Set build options according to what we found out about the build platform
34
35 ifeq ($(BUILD),win32)
36 CC = gcc
37 LDFLAGS = -lm -lwsock32 -lwinmm
38 CFLAGS=-std=c99 -U__STRICT_ANSI__ -O2 -I. -Wall
39 EXEC_SUFFIX = .exe
40 endif
41
42 ifeq ($(BUILD),solaris)
43 CC=gcc
44 CFLAGS=-D_GNU_SOURCE
45 LDFLAGS=-lm -lsocket -lnsl -lrt -lpthread
46 endif
47
48 ifeq ($(BUILD),darwin)
49 CC=gcc
50 CFLAGS = -D_GNU_SOURCE -O3
51 LDFLAGS=
52 endif
53
54 ifeq ($(BUILD),linux)
55 CC=gcc
56 CFLAGS = -D_GNU_SOURCE -O3 -std=c99 -U__STRICT_ANSI__ -g
57 LDFLAGS+= -lrt -lm
58 HAVE_READLINE=true
59 READLINE_SAVED_HISTORY=true
60 endif
61
62
63 ################################################################################
64
65 # Add network definitions etc if desired
66
67 ifneq ($(USE_NETWORK),)
68 CFLAGS+=-DUSE_NETWORK
69 LDFLAGS+=-lwpcap -lpacket
70 endif
71
72 ifneq ($(HAVE_READLINE),)
73 READLINE_CFLAGS += -DHAVE_READLINE
74 READLINE_LDFLAGS += -lreadline
75 ifneq ($(READLINE_SAVED_HISTORY),)
76 READLINE_CFLAGS += -DREADLINE_SAVED_HISTORY
77 endif
78 endif
79
80 ################################################################################
81
82 # Other stuff to add to CFLAGS and LDFLAGS
83
84 CFLAGS+=-I $(COMMON_DIR)
85 LDFLAGS+=
86
87
88 ################################################################################
89
90 # Target directory where the executables go to.
91 # The directory is automatically created if it doesn't exist.
92 TARGET_DIR=bin
93
94 # This makes the target directory go away with "make clean":
95 CLEANSTUFF+=$(TARGET_DIR)
96
97
98 ################################################################################
99 ################################################################################
100
101 # This is the main section containing all the simulator dependent information.
102
103
104
105 ################################################################################
106 #
107 # Global stuff.
108 #
109
110 # The "normal" common modules
111 SIM_NAMES+=COMMON
112 COMMON_DIR=.
113 COMMON_MODULES=scp sim_console sim_fio sim_timer sim_sock sim_tmxr\
114 sim_ether sim_tape sim_readline
115 COMMON_CFLAGS+=$(READLINE_CFLAGS)
116 LDFLAGS+=$(READLINE_LDFLAGS)
117
118 # The common modules with -DUSE_INT64
119 SIM_NAMES+=COMMON_INT64
120 COMMON_INT64_SRC_DIR=$(COMMON_SRC_DIR)
121 COMMON_INT64_OBJ_DIR=common_int64
122 COMMON_INT64_MODULES=$(COMMON_MODULES)
123 COMMON_INT64_CFLAGS+=$(READLINE_CFLAGS)
124 COMMON_INT64_CFLAGS+=-DUSE_INT64
125
126 # The common modules with -DUSE_INT64 and -DUSE_ADDR64
127 SIM_NAMES+=COMMON_INT64_ADDR64
128 COMMON_INT64_ADDR64_SRC_DIR=$(COMMON_SRC_DIR)
129 COMMON_INT64_ADDR64_OBJ_DIR=common_int64_addr64
130 COMMON_INT64_ADDR64_MODULES=$(COMMON_MODULES)
131 COMMON_INT64_ADDR64_CFLAGS+=$(READLINE_CFLAGS)
132 COMMON_INT64_ADDR64_CFLAGS+=-DUSE_INT64 -DUSE_ADDR64
133
134
135 ################################################################################
136 #
137 # Data General Nova
138 #
139
140 SIM_NAMES+=NOVA
141 NOVA_DIR=NOVA
142 NOVA_EXEC=nova
143 NOVA_MODULES= nova_sys nova_cpu nova_dkp nova_dsk nova_lp nova_mta \
144 nova_plt nova_pt nova_clk nova_tt nova_tt1 nova_qty
145 NOVA_EXTRA_OBJS+=$(COMMON_OBJS)
146 NOVA_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
147
148
149
150 ################################################################################
151 #
152 # Data General Eclipse
153 #
154
155 # What happens:
156 #
157 # The Makefile uses all items in SIM_NAMES to call the OBJECT_COLLECT_TEMPLATE
158 # sequentially. This macro uses the sim name (e.g. ECLIPSE) as prefix for
159 # the variables it is working on.
160 # It looks if there's a ..._SRC_DIR and ..._OBJ_DIR.
161 # If not, it assigns both from ..._DIR.
162 # So you can also specify a single source and object directory with ..._DIR.
163 #
164 # The template also builds a complete list of source files, ..._SOURCES.
165 #
166 # Then the OBJECT_RULE_TEMPLATE is expanded for all source files.
167 # The current object file name is created from the source file name,
168 # then added to the list of object files, ..._OBJS.
169 # And, of course, the build rule for the object is output.
170 # After the expansion of the OBJECT_RULE_TEMPLATE, the ..._EXTRA_OBJS
171 # are added to the ..._OBJs list.
172 #
173 # There's another template, PROGRAM_TEMPLATE. It is called with all
174 # SIM_NAMES as well. It generates the link rules for each application,
175 # uses the ..._OBJS variable as input.
176 # It also generates a "phony" target with the executable's stem,
177 # to enable things like "make nova".
178 # The application clean rules, like "novaclean", are also created by means
179 # of this template.
180
181
182 # This tells make to use the ECLIPSE_ variables.
183 SIM_NAMES+=ECLIPSE
184
185 # The program's source directory
186 ECLIPSE_SRC_DIR=NOVA
187
188 # Where the program's modules go to
189 ECLIPSE_OBJ_DIR=eclipse
190
191 # Because the OBJ_DIR is no SRC_DIR, we will add it to the list of items
192 # to delete with "make clean".
193 CLEANSTUFF+=$(ECLIPSE_OBJ_DIR)
194
195 # The executable name. Can be left out if only rules for object files should
196 # be generated. The common parts leave this blank.
197 ECLIPSE_EXEC=eclipse
198
199 # The source file names without extension relative to the SRC_DIR
200 # Other sources (relative to the current directory) can be added by means
201 # of the EXTRA_MODULES variable (see PDP10)
202 ECLIPSE_MODULES=eclipse_cpu eclipse_tt nova_sys nova_dkp nova_dsk nova_lp \
203 nova_mta nova_plt nova_pt nova_clk nova_tt1 nova_qty
204
205 # The C compiler flags used to build the MODULES' and EXTRA_MODULES' object
206 # files.
207 ECLIPSE_CFLAGS=-DECLIPSE -DUSE_INT64
208
209 # Objects that are defined in another program/collection. Must be the
210 # object file names relative to the current directory,
211 # for example "H316/h316_cpu.o".
212 # Those object files are compiled by their own collection's rules!
213 ECLIPSE_EXTRA_OBJS+=$(COMMON_INT64_OBJS)
214
215 # Extra dependencies for the program's/collection's modules.
216 ECLIPSE_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
217
218
219
220 ################################################################################
221 #
222 # DEC PDP-1
223 #
224
225 SIM_NAMES+=PDP1
226 PDP1_DIR = PDP1
227 PDP1_EXEC = pdp1
228 PDP1_MODULES = pdp1_lp pdp1_cpu pdp1_stddev pdp1_sys pdp1_dt pdp1_drm \
229 pdp1_clk pdp1_dcs
230 PDP1_EXTRA_OBJS+=$(COMMON_OBJS)
231 PDP1__EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
232
233
234
235 ################################################################################
236 #
237 # DEC PDP-4,7,9,15
238 #
239
240 PDP18_MODULES = pdp18b_dt pdp18b_drm pdp18b_cpu\
241 pdp18b_lp pdp18b_mt pdp18b_rf\
242 pdp18b_rp pdp18b_stddev pdp18b_sys\
243 pdp18b_rb pdp18b_tt1 pdp18b_fpp
244
245 SIM_NAMES+=PDP4
246 PDP4_SRC_DIR=PDP18B
247 PDP4_OBJ_DIR=pdp4
248 PDP4_EXEC=pdp4
249 CLEANSTUFF+=$(PDP4_OBJ_DIR)
250 PDP4_MODULES=$(PDP18_MODULES)
251 PDP4_CFLAGS=-DPDP4
252 PDP4_EXTRA_OBJS+=$(COMMON_OBJS)
253 PDP4_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
254
255 SIM_NAMES+=PDP7
256 PDP7_SRC_DIR=PDP18B
257 PDP7_OBJ_DIR=pdp7
258 PDP7_EXEC=pdp7
259 CLEANSTUFF+=$(PDP7_OBJ_DIR)
260 PDP7_MODULES=$(PDP18_MODULES)
261 PDP7_CFLAGS=-DPDP7
262 PDP7_EXTRA_OBJS+=$(COMMON_OBJS)
263 PDP7_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
264
265 SIM_NAMES+=PDP9
266 PDP9_SRC_DIR=PDP18B
267 PDP9_OBJ_DIR=pdp9
268 PDP9_EXEC=pdp9
269 CLEANSTUFF+=$(PDP9_OBJ_DIR)
270 PDP9_MODULES=$(PDP18_MODULES)
271 PDP9_CFLAGS=-DPDP9
272 PDP9_EXTRA_OBJS+=$(COMMON_OBJS)
273 PDP9_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
274
275 SIM_NAMES+=PDP15
276 PDP15_SRC_DIR=PDP18B
277 PDP15_OBJ_DIR=pdp15
278 PDP15_EXEC=pdp15
279 CLEANSTUFF+=$(PDP15_OBJ_DIR)
280 PDP15_MODULES=$(PDP18_MODULES)
281 PDP15_CFLAGS=-DPDP15
282 PDP15_EXTRA_OBJS+=$(COMMON_OBJS)
283 PDP15_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
284
285
286
287 ################################################################################
288 #
289 # DEC PDP-8
290 #
291
292 SIM_NAMES+=PDP8
293 PDP8_DIR=PDP8
294 PDP8_EXEC=pdp8
295 PDP8_MODULES=pdp8_cpu pdp8_clk pdp8_df \
296 pdp8_dt pdp8_lp pdp8_mt \
297 pdp8_pt pdp8_rf pdp8_rk \
298 pdp8_rx pdp8_sys pdp8_tt \
299 pdp8_ttx pdp8_rl pdp8_tsc \
300 pdp8_td pdp8_ct pdp8_fpp
301 PDP8_EXTRA_OBJS+=$(COMMON_OBJS)
302 PDP8_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
303
304
305
306 ################################################################################
307 #
308 # DEC PDP-10
309 #
310
311 SIM_NAMES+=PDP10
312 PDP10_DIR=PDP10
313 PDP10_MODULES = pdp10_fe pdp10_cpu \
314 pdp10_ksio pdp10_lp20 pdp10_mdfp \
315 pdp10_pag pdp10_rp pdp10_sys \
316 pdp10_tim pdp10_tu pdp10_xtnd\
317
318 PDP10_EXTRA_MODULES=$(PDP11_DIR)/pdp11_dz $(PDP11_DIR)/pdp11_pt\
319 $(PDP11_DIR)/pdp11_ry $(PDP11_DIR)/pdp11_xu\
320 $(PDP11_DIR)/pdp11_cr
321
322 PDP10_EXTRA_DEPS=$(PDP11_DIR)/*.h
323 PDP10_EXEC=pdp10
324 PDP10_CFLAGS=-DVM_PDP10 -DUSE_INT64 -I $(PDP11_DIR)
325 PDP10_EXTRA_OBJS+=$(COMMON_INT64_OBJS)
326 PDP10_EXTRA_DEPS+=$(COMMON_INT64_SRC_DIR)/*.h
327
328
329
330 ################################################################################
331 #
332 # DEC PDP-11
333 #
334
335 SIM_NAMES+=PDP11
336 PDP11_DIR=PDP11
337 PDP11_MODULES = pdp11_fp pdp11_cpu pdp11_dz \
338 pdp11_cis pdp11_lp pdp11_rk \
339 pdp11_rl pdp11_rp pdp11_rx \
340 pdp11_stddev pdp11_sys pdp11_tc \
341 pdp11_tm pdp11_ts pdp11_io \
342 pdp11_rq pdp11_tq pdp11_pclk \
343 pdp11_ry pdp11_pt pdp11_hk \
344 pdp11_xq pdp11_xu pdp11_vh \
345 pdp11_rh pdp11_tu pdp11_cpumod \
346 pdp11_cr pdp11_rf pdp11_dl \
347 pdp11_ta pdp11_rc pdp11_kg \
348 pdp11_ke pdp11_dc
349
350 PDP11_EXEC=pdp11
351 PDP11_CFLAGS=-DVM_PDP11
352 PDP11_EXTRA_OBJS+=$(COMMON_OBJS)
353 PDP11_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
354
355
356
357 ################################################################################
358 #
359 # DEC VAX
360 #
361
362 SIM_NAMES+=VAX
363 VAX_DIR=VAX
364 VAX_EXEC=vax
365 VAX_MODULES=vax_cpu vax_cpu1 vax_fpa vax_io \
366 vax_cis vax_octa vax_cmode \
367 vax_mmu vax_stddev vax_sysdev \
368 vax_sys vax_syscm vax_syslist
369
370 VAX_EXTRA_MODULES=$(PDP11_DIR)/pdp11_rl $(PDP11_DIR)/pdp11_rq $(PDP11_DIR)/pdp11_ts \
371 $(PDP11_DIR)/pdp11_dz $(PDP11_DIR)/pdp11_lp $(PDP11_DIR)/pdp11_tq \
372 $(PDP11_DIR)/pdp11_xq $(PDP11_DIR)/pdp11_ry \
373 $(PDP11_DIR)/pdp11_vh $(PDP11_DIR)/pdp11_cr
374
375 VAX_EXTRA_DEPS=$(PDP11_DIR)/*.h
376 VAX_CFLAGS=-DVM_VAX -DUSE_INT64 -DUSE_ADDR64 -I ${PDP11_DIR}
377 VAX_EXTRA_OBJS+=$(COMMON_INT64_ADDR64_OBJS)
378 VAX_EXTRA_DEPS+=$(COMMON_INT64_ADDR64_SRC_DIR)/*.h
379
380
381
382 ################################################################################
383 #
384 # DEC VAX780
385 #
386
387 SIM_NAMES+=VAX780
388 VAX780_EXEC=vax780
389 VAX780_SRC_DIR=VAX
390 VAX780_OBJ_DIR=vax780
391 VAX780_MODULES=vax_cpu vax_cpu1 vax_fpa \
392 vax_cis vax_octa vax_cmode \
393 vax_mmu vax_sys vax_syscm \
394 vax780_stddev vax780_sbi \
395 vax780_mem vax780_uba vax780_mba \
396 vax780_fload vax780_syslist \
397
398 VAX780_EXTRA_MODULES=${PDP11_DIR}/pdp11_rl ${PDP11_DIR}/pdp11_rq \
399 ${PDP11_DIR}/pdp11_ts ${PDP11_DIR}/pdp11_dz \
400 ${PDP11_DIR}/pdp11_lp ${PDP11_DIR}/pdp11_tq \
401 ${PDP11_DIR}/pdp11_xu ${PDP11_DIR}/pdp11_ry \
402 ${PDP11_DIR}/pdp11_cr ${PDP11_DIR}/pdp11_rp \
403 ${PDP11_DIR}/pdp11_tu ${PDP11_DIR}/pdp11_hk
404
405 VAX780_CFLAGS=-DVM_VAX -DVAX_780 -DUSE_INT64 -DUSE_ADDR64 -I $(PDP11_DIR)
406 VAX780_EXTRA_DEPS=$(PDP11_DIR)/*.h
407 VAX780_EXTRA_OBJS+=$(COMMON_INT64_ADDR64_OBJS)
408 VAX780_EXTRA_DEPS+=$(COMMON_INT64_ADDR64_SRC_DIR)/*.h
409
410
411
412 ################################################################################
413 #
414 # Honeywell DDP-516/H316
415 #
416
417 SIM_NAMES+=H316
418 H316_DIR=H316
419 H316_EXEC=h316
420 H316_MODULES = h316_stddev h316_lp h316_cpu h316_sys h316_mt h316_fhd h316_dp
421 H316_EXTRA_OBJS+=$(COMMON_OBJS)
422 H316_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
423
424
425
426 ################################################################################
427 #
428 # Hewlett Packard 2100
429 #
430
431 SIM_NAMES+=HP2100
432 HP2100_DIR=HP2100
433 HP2100_EXEC=hp2100
434 HP2100_MODULES = hp2100_stddev hp2100_dp hp2100_dq \
435 hp2100_dr hp2100_lps hp2100_ms \
436 hp2100_mt hp2100_mux hp2100_cpu \
437 hp2100_fp hp2100_sys hp2100_lpt \
438 hp2100_ipl hp2100_ds hp2100_cpu0 \
439 hp2100_cpu1 hp2100_cpu2 hp2100_cpu3 \
440 hp2100_cpu4 hp2100_cpu5 hp2100_cpu6 \
441 hp2100_cpu7 hp2100_fp1 hp2100_baci
442 HP2100_CFLAGS = -DHAVE_INT64
443 HP2100_EXTRA_OBJS+=$(COMMON_OBJS)
444 HP2100_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
445
446
447
448 ################################################################################
449 #
450 # IBM 1401
451 #
452
453 SIM_NAMES+=I1401
454 I1401_DIR = I1401
455 I1401_EXEC= i1401
456 I1401_MODULES = i1401_lp i1401_cpu i1401_iq \
457 i1401_cd i1401_mt i1401_dp \
458 i1401_sys
459 I1401_EXTRA_OBJS+=$(COMMON_OBJS)
460 I1401_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
461
462
463
464 ################################################################################
465 #
466 # IBM 1620
467 #
468
469 SIM_NAMES+=I1620
470 I1620_DIR = I1620
471 I1620_EXEC = i1620
472 I1620_MODULES = i1620_cd i1620_dp i1620_pt \
473 i1620_tty i1620_cpu i1620_lp \
474 i1620_fp i1620_sys
475 I1620_EXTRA_OBJS+=$(COMMON_OBJS)
476 I1620_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
477
478
479
480 ################################################################################
481 #
482 # IBM 7094/7094
483 #
484
485 SIM_NAMES+=I7094
486 I7094_DIR = I7094
487 I7094_EXEC = i7094
488 I7094_MODULES = i7094_cpu i7094_cpu1 i7094_io \
489 i7094_cd i7094_clk i7094_com \
490 i7094_drm i7094_dsk i7094_sys \
491 i7094_lp i7094_mt i7094_binloader
492 I7094_OPT = -DUSE_INT64
493 I7094_EXTRA_OBJS+=$(COMMON_INT64_OBJS)
494 I7094_EXTRA_DEPS+=$(COMMON_INT64_SRC_DIR)/*.h
495
496
497
498 ################################################################################
499 #
500 # IBM 1130
501 #
502
503 SIM_NAMES+=IBM1130
504 IBM1130_DIR = Ibm1130
505 IBM1130_EXEC = ibm1130
506 IBM1130_MODULES = ibm1130_cpu ibm1130_cr \
507 ibm1130_disk ibm1130_stddev \
508 ibm1130_sys ibm1130_gdu \
509 ibm1130_gui ibm1130_prt \
510 ibm1130_fmt ibm1130_ptrp \
511 ibm1130_plot ibm1130_sca \
512 ibm1130_t2741
513 IBM1130_EXTRA_OBJS+=$(COMMON_OBJS)
514 IBM1130_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
515
516
517
518 ################################################################################
519 #
520 # IBM System 3
521 #
522
523 SIM_NAMES+=S3
524 S3_EXEC=s3
525 S3_DIR = S3
526 S3_MODULES = s3_cd s3_cpu s3_disk s3_lp \
527 s3_pkb s3_sys
528 S3_EXTRA_OBJS+=$(COMMON_OBJS)
529 S3_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
530
531
532
533 ################################################################################
534 #
535 # Interdata 16b
536 #
537
538 SIM_NAMES+=ID16
539 ID16_DIR = Interdata
540 ID16_EXEC= id16
541 ID16_MODULES = id16_cpu id16_sys id_dp \
542 id_fd id_fp id_idc id_io \
543 id_lp id_mt id_pas id_pt \
544 id_tt id_uvc id16_dboot id_ttp
545 ID16_EXTRA_OBJS+=$(COMMON_OBJS)
546 ID16_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
547
548
549
550 ################################################################################
551 #
552 # Interdata 32b
553 #
554
555 SIM_NAMES+=ID32
556 ID32_EXEC=id32
557 ID32_DIR = Interdata
558 ID32_MODULES = id32_cpu id32_sys id32_dboot
559 ID32_EXTRA_OBJS= $(foreach o, id_dp \
560 id_fd id_fp id_idc id_io \
561 id_lp id_mt id_pas id_pt \
562 id_tt id_uvc id_ttp, $(ID16_DIR)/$(o).o)
563 ID32_EXTRA_OBJS+=$(COMMON_OBJS)
564 ID32_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
565
566
567
568 ################################################################################
569 #
570 # MITS Altair
571 #
572
573 SIM_NAMES+=ALTAIR
574 ALTAIR_DIR = ALTAIR
575 ALTAIR_EXEC=altair
576 ALTAIR_MODULES = altair_sio altair_cpu altair_dsk \
577 altair_sys
578 ALTAIR_EXTRA_OBJS+=$(COMMON_OBJS)
579 ALTAIR_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
580
581
582
583 ################################################################################
584 #
585 # MITS Altair Z80
586 #
587
588 SIM_NAMES+=ALTAIRZ80
589 ALTAIRZ80_EXEC=altairz80
590 ALTAIRZ80_DIR = AltairZ80
591 ALTAIRZ80_MODULES = altairz80_cpu altairz80_cpu_nommu \
592 altairz80_dsk disasm \
593 altairz80_sio altairz80_sys \
594 altairz80_hdsk altairz80_net \
595 flashwriter2 i86_decode \
596 i86_ops i86_prim_ops \
597 i8272 insnsa insnsd \
598 mfdc n8vem vfdhd \
599 s100_disk1a s100_disk2 \
600 s100_fif s100_mdriveh \
601 s100_mdsad s100_selchan \
602 s100_ss1 s100_64fdc \
603 s100_scp300f sim_imd \
604 wd179x
605 ALTAIRZ80_EXTRA_OBJS+=$(COMMON_OBJS)
606 ALTAIRZ80_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
607
608
609
610 ################################################################################
611 #
612 # GRI-909 and GRI-99
613 #
614
615 SIM_NAMES+=GRI
616 GRI_EXEC=gri
617 GRI_DIR = GRI
618 GRI_MODULES = gri_cpu gri_stddev gri_sys
619 GRI_EXTRA_OBJS+=$(COMMON_OBJS)
620 GRI_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
621
622
623
624 ################################################################################
625 #
626 # Royal-Mcbee LGP-30, LGP-21
627 #
628
629 SIM_NAMES+=LGP
630 LGP_DIR = LGP
631 LGP_EXEC=lgp
632 LGP_MODULES = lgp_cpu lgp_stddev lgp_sys
633 LGP_EXTRA_OBJS+=$(COMMON_OBJS)
634 LGP_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
635
636
637
638 ################################################################################
639 #
640 # Scientific Data Systems SDS 940
641 #
642
643 SIM_NAMES+=SDS
644 SDS_EXEC=sds
645 SDS_DIR = SDS
646 SDS_MODULES = sds_cpu sds_drm sds_dsk sds_io \
647 sds_lp sds_mt sds_mux sds_rad \
648 sds_stddev sds_sys
649 SDS_EXTRA_OBJS+=$(COMMON_OBJS)
650 SDS_EXTRA_DEPS+=$(COMMON_SRC_DIR)/*.h
651
652
653
654 ################################################################################
655 ################################################################################
656
657 # Here comes the generic stuff. Should be altered VERY carefully.
658
659 # Default target
660 default: all
661
662 #################################
663 #
664 # The object file build rule template
665 #
666
667 define OBJECT_RULE_TEMPLATE
668
669 # Add the object file to the CLEANSTUFF list
670 $(1)_OBJS+=$$(patsubst %.c,%.o, $$($(1)_OBJ_DIR)/$$(notdir $(2)))
671
672 CLEANSTUFF+=$$(patsubst %.c,%.o, $$($(1)_OBJ_DIR)/$$(notdir $(2)))
673
674 $$(patsubst %.c,%.o,$$($(1)_OBJ_DIR)/$$(notdir $(2))): $(2) $$($(1)_SRC_DIR)/*.h $$($(1)_EXTRA_DEPS)
675
676 # Create output directory if it doesn't exist yet.
677 @if [ ! -d $$($(1)_OBJ_DIR) ]; then echo "MKDIR $$($(1)_OBJ_DIR)";\
678 mkdir $$($(1)_OBJ_DIR) 2>/dev/null||true; fi
679
680 ifneq (,$$(VERBOSE))
681 $$(CC) -c -o $$@ -I $$($(1)_SRC_DIR) $$(CFLAGS) $$($(1)_CFLAGS) $$<
682 else
683 @echo CC $$@
684 @$$(CC) -c -o $$@ -I $$($(1)_SRC_DIR) $$(CFLAGS) $$($(1)_CFLAGS) $$<
685 endif
686
687 endef
688
689
690 ################################################################################
691 #
692 # The object file collection template
693 #
694
695 define OBJECT_COLLECT_TEMPLATE
696
697 # If no ..._OBJ_DIR is specified, use ..._DIR
698 ifeq (,$$($(1)_OBJ_DIR))
699 $(1)_OBJ_DIR=$$($(1)_DIR)
700 endif
701
702 # If no ..._SRC_DIR is specified, use ..._DIR
703 ifeq (,$$($(1)_SRC_DIR))
704 $(1)_SRC_DIR=$$($(1)_DIR)
705 endif
706
707 $(1)_SOURCES=$$(foreach mod, $$($(1)_MODULES), $$($(1)_SRC_DIR)/$$(mod).c)
708 $(1)_SOURCES+=$$(foreach mod, $$($(1)_EXTRA_MODULES), $$(mod).c)
709
710 # The build rules.
711 # They are generated by an inner template. Needed for flexibility.
712
713 $$(foreach src, $$($(1)_SOURCES), $$(eval $$(call OBJECT_RULE_TEMPLATE,$(1),$$(src))))
714
715 $(1)_OBJS+=$$($(1)_EXTRA_OBJS)
716
717 endef
718
719
720 ################################################################################
721 #
722 # The executable file build rule template
723 #
724
725 define PROGRAM_TEMPLATE
726
727 # All this is disabled if there's no executable to build.
728
729 ifneq (,$$($(1)_EXEC))
730
731 # Add the executable to the CLEANSTUFF list
732
733 CLEANSTUFF+=$$(TARGET_DIR)/$$($(1)_EXEC)$$(EXEC_SUFFIX)
734
735 EXEC_TARGETS+=$$($(1)_EXEC)
736
737 # Generate a phony target with the simulator's name.
738 # Enables things like "make h316".
739 # On Windows this WILL NOT be "make h316.exe".
740 $$($(1)_EXEC): $$(TARGET_DIR)/$$($(1)_EXEC)$$(EXEC_SUFFIX)
741
742
743 $$(TARGET_DIR)/$$($(1)_EXEC)$$(EXEC_SUFFIX): $$($(1)_OBJS)
744 @if [ ! -d $$(TARGET_DIR) ]; then echo "MKDIR $$(TARGET_DIR)";\
745 mkdir $$(TARGET_DIR) 2>/dev/null||true;fi
746
747 ifneq (,$$(VERBOSE))
748 $$(CC) -o $$@ $$(LDFLAGS) $$($(1)_LDFLAGS) $$^
749 else
750 @echo LD $$@
751 @$$(CC) -o $$@ $$(LDFLAGS) $$($(1)_LDFLAGS) $$^
752 endif
753
754
755 $$($(1)_EXEC)clean clean$$($(1)_EXEC):
756 ifneq (,$$(VERBOSE))
757 rm -f $$(TARGET_DIR)/$$($(1)_EXEC)$$(EXEC_SUFFIX)
758 rm -f $$($(1)_OBJS)
759 else
760 @echo CLEAN $$($(1)_EXEC)
761 @rm -f $$(TARGET_DIR)/$$($(1)_EXEC)$$(EXEC_SUFFIX)
762 @rm -f $$($(1)_OBJS)
763 endif
764
765
766 .PHONY: $$($(1)_EXEC) clean$$($(1)_EXEC) $$($(1)_EXEC)clean
767
768
769 endif
770
771 endef
772 ################################################################################
773
774 #################################
775 #
776 # Use the template with SIM_NAMES
777 # This will generate all build rules for all object files and executables.
778 #
779 $(foreach sn, $(SIM_NAMES),$(eval $(call OBJECT_COLLECT_TEMPLATE,$(sn))))
780 $(foreach sn, $(SIM_NAMES),$(eval $(call PROGRAM_TEMPLATE,$(sn))))
781
782
783 #################################
784 #
785 # The all target
786 #
787 all: $(EXEC_TARGETS)
788
789
790 #################################
791 #
792 # Output a little help
793 #
794 help:
795 @echo Available targets:
796 @echo
797 @echo "all - Build all simulators"
798 @echo "clean - Delete all generated files and directories"
799 @echo
800 @echo Simulators can explicitely built by the following targets:
801 @echo
802 @for n in $(EXEC_TARGETS); do echo " $$n" ; done
803 @echo
804 @echo The actual CC calls can be made visible with specifying VERBOSE=something.
805 @echo
806
807
808 #################################
809 #
810 # The clean rule.
811 #
812
813 clean:
814 @echo CLEAN
815 @rm -rf $(CLEANSTUFF)
816
817
818
819 #################################
820 #
821 # Specify phony targets
822 #
823
824 .PHONY: clean help all default
825
826
827 ################################################################################
828 #
829 # This is the end of the game :-)
830 #
831 ################################################################################
832
833
834