Commit | Line | Data |
---|---|---|
196ba1fc PH |
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 |