1# DPS/8M simulator: src/dps8/GNUmakefile
2# vim: filetype=make:tabstop=4:tw=76
3#
4###############################################################################
5#
6# Copyright (c) 2013-2016 Harry Reed
7# Copyright (c) 2013-2016 Charles Anthony
8# Copyright (c) 2016 Jean-Michel Merliot
9# Copyright (c) 2016 Michal Tomek
10# Copyright (c) 2021 Jeffrey H. Johnson <trnsz@pobox.com>
11# Copyright (c) 2021 The DPS8M Development Team
12#
13# All rights reserved.
14#
15# This software is made available under the terms of the ICU
16# License, version 1.8.1 or later.  For more details, see the
17# LICENSE.md file at the top-level directory of this distribution.
18#
19###############################################################################
20
21.DEFAULT_GOAL := all
22
23###############################################################################
24
25INSTALL_ROOT ?= $(PREFIX)
26INSTALL_BIN  ?= $(INSTALL_ROOT)/bin
27
28###############################################################################
29
30ifneq (,$(wildcard ../Makefile.mk))
31  include ../Makefile.mk
32endif
33
34###############################################################################
35
36ifdef BUILD_PROM_OSV_TEXT
37  CFLAGS += -DBUILD_PROM_OSV_TEXT="\"$(BUILD_PROM_OSV_TEXT)\""
38endif
39
40###############################################################################
41
42ifdef BUILD_PROM_OSA_TEXT
43  CFLAGS += -DBUILD_PROM_OSA_TEXT="\"$(BUILD_PROM_OSA_TEXT)\""
44endif
45
46###############################################################################
47# If using Cygwin as a host for cross-compilation, set CYGWIN_MINGW_CROSS=1
48
49ifneq ($(CYGWIN_MINGW_CROSS),1)
50  ifeq ($(shell $(UNAME) -o 2> /dev/null || true >/dev/null 2>&1),Cygwin)
51    CROSS=""
52  endif
53endif
54
55###############################################################################
56
57ifndef LIBUV
58  LIBUV = -luv
59endif
60LIBS += $(LIBUV)
61
62###############################################################################
63# Support for MinGW-W32, MinGW-W64, LLVM-MinGW32/64 (i686/x86_64/ARM/AArch64)
64
65ifneq ($(msys_version),0)
66  CROSS=MINGW64
67  MINGW_FLAVOR=64
68  MINGW_CROSS=1
69  export CROSS
70  export MINGW_FLAVOR
71  export MINGW_CROSS
72endif
73
74ifeq ($(CROSS),MINGW32)
75  MINGW_CROSS=1
76  MINGW_FLAVOR=32
77  M32=$(MINGW_FLAVOR)
78  ifeq ($(msys_version),)
79    MINGWEX=-lmingwex
80    export MINGWEX
81  endif
82  export MINGW_CROSS
83  export MINGW_FLAVOR
84  export M32
85endif
86
87ifeq ($(CROSS),MINGW64)
88  MINGW_CROSS=1
89  MINGW_FLAVOR=64
90  ifeq ($(msys_version),)
91    MINGWEX=-lmingwex
92    export MINGWEX
93  endif
94  export MINGW_CROSS
95  export MINGW_FLAVOR
96endif
97
98ifeq ($(MINGW_CROSS),1)
99  CFLAGS += -DCROSS_MINGW$(MINGW_FLAVOR) -I../../../libuv/include
100  # Cross-compilation with Cygwin host to MinGW target
101  ifeq ($(CYGWIN_MINGW_CROSS),1)
102    LIBS += -lwinmm -lws2_32 -lssp $(MINGWEX) -lwsock32 -luserenv -liplpapi   \
103            -L../../../libuv/.libs $(LIBUV)
104  endif
105  ifeq ($(shell $(UNAME) -o 2> /dev/null || true >/dev/null 2>&1),Cygwin)
106    # Standard Cygwin build
107    LIBS += -lwinmm -lws2_32 -lwsock32 -luserenv -liphlpapi $(LIBUV)
108  else
109    # Cross-compilation to MinGW
110    LIBS += -lwinmm -lws2_32 -lssp $(MINGWEX) -lwsock32 -luserenv -liphlpapi  \
111            -L../../../libuv/.libs $(LIBUV)
112  endif
113endif
114
115###############################################################################
116# Include directories
117
118CFLAGS += -I../decNumber -I$(SIMHx)
119
120###############################################################################
121# Warning level tweaks
122
123ifneq ($(W),)
124  ifeq ($(CC),clang)
125    CFLAGS += -Wall -Wconversion -Wsign-conversion -Wno-unknown-warning-option
126  else
127    ifeq ($(CC),gcc)
128      CFLAGS += -Wall -Wno-conversion -Wsign-conversion -Wno-psabi -Wno-abi
129    else
130      CFLAGS += -Wall
131    endif
132  endif
133endif
134
135###############################################################################
136# Need to create a 128-bit type?
137
138ifneq ($(M32),)
139  CFLAGS += -DNEED_128
140  ifneq ($(W),)
141    CFLAGS += -Wno-format-zero-length -Wno-sign-conversion
142  endif
143endif
144
145###############################################################################
146# The system_state code relies on M_SHARED.
147
148ifneq ($(MINGW_CROSS),1)
149  CFLAGS += -DM_SHARED
150  ifneq ($(OS),OSX)
151    ifneq ($(UNAME_S),OpenBSD)
152      LIBS += -lrt
153    endif
154  endif
155endif
156
157###############################################################################
158# What needs -ldl?
159
160OSTYPE = $(shell $(UNAME) -s 2> /dev/null)
161ifeq ($(OSTYPE),AIX)
162  LIBS += -lm
163endif
164ifeq ($(OSTYPE),FreeBSD)
165  LIBS += -lm -pthread
166endif
167ifeq ($(OSTYPE),Linux)
168  ifeq ($(CROSS),MINGW32)
169    LIBS += -lm
170  endif
171  ifeq ($(CROSS),MINGW64)
172    LIBS += -lm
173  else
174    LIBS += -lm -ldl
175  endif
176endif
177
178###############################################################################
179# What needs -lm explicitly?
180
181OSTYPE = $(shell $(UNAME) -s)
182ifeq ($(OSTYPE),OpenBSD)
183  LIBS += -lm
184endif
185ifeq ($(OSTYPE),FreeBSD)
186  LIBS += -lm -pthread
187endif
188ifeq ($(OSTYPE),Linux)
189  LIBS += -lm
190endif
191ifeq ($(OSTYPE),GNU)
192  LIBS += -lm
193endif
194
195###############################################################################
196
197ifneq ($(MINGW_CROSS),1)
198  C_SRCS  = dps8_absi.c
199endif
200C_SRCS += bsd_random.c
201C_SRCS += dps8_addrmods.c
202C_SRCS += dps8_append.c
203C_SRCS += dps8_cable.c
204C_SRCS += dps8_console.c
205C_SRCS += dps8_cpu.c
206C_SRCS += dps8_crdpun.c
207C_SRCS += dps8_crdrdr.c
208C_SRCS += dps8_decimal.c
209C_SRCS += dps8_disk.c
210C_SRCS += dps8_eis.c
211C_SRCS += dps8_faults.c
212C_SRCS += dps8_fnp2.c
213C_SRCS += dps8_fnp2_iomcmd.c
214C_SRCS += dps8_iefp.c
215C_SRCS += dps8_ins.c
216C_SRCS += dps8_iom.c
217C_SRCS += dps8_math.c
218C_SRCS += dps8_math128.c
219C_SRCS += dps8_mt.c
220C_SRCS += dps8_opcodetable.c
221C_SRCS += dps8_prt.c
222C_SRCS += dps8_scu.c
223C_SRCS += dps8_simh.c
224ifneq ($(MINGW_CROSS),1)
225  C_SRCS += dps8_socket_dev.c
226endif
227ifeq ($(TESTING),1)
228  C_SRCS += tracker.c
229endif
230C_SRCS += dps8_sys.c
231C_SRCS += dps8_urp.c
232C_SRCS += dps8_utils.c
233C_SRCS += fnpuv.c
234C_SRCS += fnptelnet.c
235C_SRCS += libtelnet.c
236C_SRCS += hdbg.c
237C_SRCS += segldr.c
238ifneq ($(MINGW_CROSS),1)
239  C_SRCS += shm.c
240  C_SRCS += udplib.c
241endif
242ifeq ($(THREADZ),1)
243  C_SRCS += threadz.c
244endif
245ifeq ($(LOCKLESS),1)
246  C_SRCS += threadz.c
247endif
248C_SRCS += utfile.c
249C_SRCS += uvutil.c
250
251###############################################################################
252
253OBJS  := $(patsubst %.c,%.o,$(C_SRCS))
254
255###############################################################################
256
257ifneq ($(MINGW_CROSS),1)
258  H_SRCS  = dps8_absi.h
259endif
260H_SRCS += bsd_random.h
261H_SRCS += dps8_addrmods.h
262H_SRCS += dps8_append.h
263H_SRCS += dps8_cable.h
264H_SRCS += dps8_console.h
265H_SRCS += dps8_cpu.h
266H_SRCS += dps8_crdpun.h
267H_SRCS += dps8_crdrdr.h
268H_SRCS += dps8_decimal.h
269H_SRCS += dps8_disk.h
270H_SRCS += dps8_eis.h
271H_SRCS += dps8_em_consts.h
272H_SRCS += dps8_faults.h
273H_SRCS += dps8_fnp2.h
274H_SRCS += dps8_fnp2_iomcmd.h
275H_SRCS += libtelnet.h
276H_SRCS += dps8.h
277H_SRCS += dps8_hw_consts.h
278H_SRCS += dps8_iefp.h
279H_SRCS += dps8_ins.h
280H_SRCS += dps8_iom.h
281H_SRCS += dps8_math.h
282H_SRCS += dps8_math128.h
283H_SRCS += dps8_mt.h
284H_SRCS += dps8_opcodetable.h
285H_SRCS += dps8_prom.h
286H_SRCS += dps8_prt.h
287H_SRCS += dps8_socket_dev.h
288H_SRCS += dps8_scu.h
289H_SRCS += dps8_simh.h
290H_SRCS += dps8_state.h
291H_SRCS += dps8_sys.h
292H_SRCS += dps8_urp.h
293H_SRCS += dps8_utils.h
294H_SRCS += fnpuv.h
295H_SRCS += fnptelnet.h
296H_SRCS += h316_imp.h
297H_SRCS += hdbg.h
298H_SRCS += segldr.h
299H_SRCS += shm.h
300ifneq ($(MINGW_CROSS),1)
301  H_SRCS += udplib.h
302endif
303H_SRCS += utarray.h
304H_SRCS += uthash.h
305H_SRCS += utfile.h
306H_SRCS += utlist.h
307ifeq ($(THREADZ),1)
308  H_SRCS += threadz.h
309endif
310ifeq ($(LOCKLESS),1)
311  H_SRCS += threadz.h
312endif
313ifeq ($(TESTING),1)
314  H_SRCS += tracker.h
315endif
316H_SRCS += uvutil.h
317
318###############################################################################
319
320SIMH_OBJS = ../simh/dispatch.o     ../simh/sim_console.o   ../simh/sim_disk.o \
321            ../simh/sim_fio.o      ../simh/sim_sock.o      ../simh/sim_tape.o \
322            ../simh/sim_timer.o    ../simh/sim_tmxr.o      ../simh/scp.o      \
323            ../simh/linehistory.o
324
325###############################################################################
326
327DECN_OBJS = ../decNumber/decContext.o  ../decNumber/decNumber.o
328
329###############################################################################
330
331.PHONY: all
332all: sysdefs.h                                                                \
333     ver.h                                                                    \
334     unifdef                                                                  \
335     locallibs_then_dps8                                                      \
336     prt2pdf                                                                  \
337     punutil                                                                  \
338     mcmb                                                                     \
339     $(TAGS)
340
341###############################################################################
342
343.PHONY: install
344ifneq (,$(findstring install,$(MAKECMDGOALS)))
345.NOTPARALLEL: install clean
346endif
347ifneq (,$(findstring clean,$(MAKECMDGOALS)))
348.NOTPARALLEL: clean install
349endif
350install: all
351	@$(SETV); $(MKDIR) "$(DESTDIR)$(INSTALL_BIN)"
352	@$(SETV); $(CP) "dps8$(EXE)" "$(DESTDIR)$(INSTALL_BIN)/dps8$(EXE)"
353
354###############################################################################
355
356.PHONY: printuk
357printuk:
358	@$(PRINTF) '%s\n' "*** Begin printuk (git untracked files):"
359	@$(SETV); ($(CD) "../.." && $(GIT) status -s --untracked-files="all"      \
360        2> /dev/null | $(GREP) '^? ' || $(TRUE))
361	@$(PRINTF) '%s\n' "*** End printuk"
362
363###############################################################################
364
365.PHONY: printmod
366printmod:
367	@$(PRINTF) '%s\n' "*** Begin printmod (git tracked modified files)"
368	@$(SETV); ($(CD) "../.." && $(GIT) status -s 2> /dev/null |               \
369        $(GREP) '^\ \?M ' || $(TRUE))
370	@$(PRINTF) '%s\n' "*** End printmod"
371
372###############################################################################
373
374blinkenLights: blinkenLights.c shm.o
375	@$(PRINTF) '%s\n' "LD: blinkenLights"
376	@$(SETV); $(CC) $(CFLAGS) $(LDFLAGS) blinkenLights.c                      \
377        -o blinkenLights shm.o `$(PKGCONFIG) --cflags --libs gtk+-3.0`
378
379###############################################################################
380
381blinkenLightsCurses: blinkenLightsCurses.c shm.o
382	@$(PRINTF) '%s\n' "LD: blinkenLightsCurses"
383	@$(SETV); $(CC) $(CFLAGS) $(LDFLAGS) blinkenLightsCurses.c                \
384        -o blinkenLightsCurses shm.o -lncurses
385
386###############################################################################
387
388.PHONY: all ctags
389dps8$(EXE): $(OBJS) $(LOCALOBJS) $(LOCALLIBS) $(DECN_OBJS) $(SIMH_OBJS) ctags
390	@$(PRINTF) '%s\n' "LD: dps8$(EXE)"
391	@$(SETV); $(CC) -o dps8$(EXE) $(LDFLAGS) $(OBJS) $(LOCALOBJS)             \
392        $(DECN_OBJS) $(SIMH_OBJS) $(LOCALLIBS) $(LIBS)
393
394###############################################################################
395
396.PHONY: FORCE
397ifeq (,$(wildcard ../../.git))
398# not git
399ifeq (,$(wildcard ver.h~))
400# not git, not kit
401ver.h:
402	@$(SETV); $(RMF) "./ver.h"
403	@$(PRINTF) '%s\n' "WARNING: This source tree does not appear to be a"    \
404                      "         full git clone or a complete source kit."
405	@$(SETV); $(TOUCH) "./ver.h"
406else
407# kit
408ver.h:
409	@$(SETV); $(CP) "./ver.h~" "./ver.h"
410endif
411else
412# git
413ver.h: FORCE
414ifneq ($(USE_BUILDER),)
415	@$(SETV); $(PRINTF) '%s\n' "$(USE_BUILDER)" > "../../.builder.txt"
416endif
417ifneq ($(USE_BUILDOS),)
418	@$(SETV); $(PRINTF) '%s\n' "$(USE_BUILDOS)" > "../../.buildos.txt"
419endif
420ifeq ($(MAKE_TOPLEVEL),1)
421	@$(RMF) "ver.h" > /dev/null 2>&1
422endif
423	@$(TEST) -f "ver.h" && $(PRINTF) '%s\n'                                   \
424                     "WARNING: Git re-build: Skipping \"make_ver.sh\"."       \
425                     " *** Use \"$(MAKE) clean\" or build from top-level!" || \
426                         $(TRUE) > /dev/null 2>&1
427	@$(SETV); $(TEST) -f "ver.h" || { ./make_ver.sh ||                        \
428        $(SHELL) ./make_ver.sh ||                                             \
429            { $(PRINTF) '%s\n' "WARNING: Unable to run \"make_ver.sh\"."      \
430                               "     *** Using default fallback data!";       \
431              $(TOUCH) "ver.h"; }; }
432endif
433
434###############################################################################
435
436slte.inc: system_book_12_3.ascii
437	@$(SETV); ./buildSLTE.sh
438
439###############################################################################
440
441.PHONY: locallibs_then_dps8
442locallibs_then_dps8: ver.h sysdefs.h
443	@($(SETV); $(CD) "../decNumber" && $(MAKE) -C "." -f "GNUmakefile" "all")
444	@($(SETV); $(CD) "$(SIMHx)" && $(MAKE) -C "." -f "GNUmakefile" "all")
445	@$(SETV); $(MAKE) -C "." -f "GNUmakefile" "dps8$(EXE)"
446
447###############################################################################
448
449prt2pdf: sysdefs.h
450	@$(SETV); $(MAKE) -C "../prt2pdf" "all"
451
452###############################################################################
453
454unifdef: ver.h
455	-@$(SETV); $(MAKE) -C "../unifdef" "all"
456
457###############################################################################
458
459punutil:
460	-@$(SETV); $(MAKE) -C "../punutil" "all"
461
462###############################################################################
463
464mcmb:
465	-@$(SETV); $(MAKE) -C "../mcmb" "all"
466
467###############################################################################
468
469udplib: udplib.c udplib.h
470udplib$(EXE): udplib.c udplib.h
471	@$(SETV); $(CC) udplib.c -o udplib -DTEST=1
472
473###############################################################################
474
475.PHONY: ctags
476tags TAGS ctags: $(C_SRCS) $(H_SRCS) ver.h
477	@$(PRINTF) '%s\n' "CTAGS: dps8"
478	-@$(SETV); $(CTAGS) $(C_SRCS) $(H_SRCS)                                   \
479        $(SIMHx)/*.[ch] ../decNumber/dec*.[ch]    2> /dev/null   || $(TRUE)
480	@$(PRINTF) '%s\n' "ETAGS: dps8"
481	-@$(SETV); $(ETAGS) $(C_SRCS) $(H_SRCS)                                   \
482        $(SIMHx)/*.[ch] ../decNumber/dec*.[ch]    2> /dev/null   || $(TRUE)
483	@$(PRINTF) '%s\n' "GTAGS: dps8"
484	-@($(SETV); $(CD) ../.. && $(GIT) ls-files    2> /dev/null    |           \
485        $(GREP) '\.[ch]'                          2> /dev/null    |           \
486         $(GREP) -E '(dps8|decNumber|simh)'       2> /dev/null    |           \
487          $(GREP) -vE '(blinkenLights|\.Attic/)'  2> /dev/null    |           \
488          $(GTAGS) -f -                           2> /dev/null)  || $(TRUE)
489	@$(PRINTF) '%s\n' "CSCOPE: dps8"
490	-@$(SETV); $(CSCOPE) -bcq $(C_SRCS) $(H_SRCS)                             \
491        $(SIMHx)/*.[ch] ../decNumber/dec*.[ch]    2> /dev/null   || $(TRUE)
492
493###############################################################################
494
495.PHONY: tapes
496tapes: 88534.tap 88631.tap 88632.tap 88633.tap 88634.tap 88635.tap 88636.tap  \
497       99020.tap 93085.tap 98570.tap 99019.tap 98577.tap 20184.tap 20185.tap  \
498       20186.tap 20187.tap 20188.tap t4d_b.2.tap 98580_1er.tap 98576_1er.tap
499
500%.tap:
501	@$(SETV); $(WEBDL) \
502       "https://bitsavers.trailing-edge.com/bits/Honeywell/multics/tape/$@.gz"
503	@$(SETV); $(GUNZIP) "$@.gz"
504
505###############################################################################
506
507.PHONY: superclean realclean reallyclean distclean clean
508ifneq (,$(findstring clean,$(MAKECMDGOALS)))
509.NOTPARALLEL: superclean realclean reallyclean distclean clean
510endif
511superclean realclean reallyclean: distclean
512	@$(SETV); $(CCACHE) -cC > /dev/null 2>&1  ||  $(TRUE)
513
514###############################################################################
515
516.PHONY: distclean clean
517ifneq (,$(findstring clean,$(MAKECMDGOALS)))
518.NOTPARALLEL: distclean clean
519endif
520distclean: clean
521	@$(RMF) ../../dps8m*.state                ||  $(TRUE)
522	@$(RMF) ../dps8m*.state                   ||  $(TRUE)
523	@$(RMF) dps8m*.state                      ||  $(TRUE)
524	@$(RMF) "../../dps8m.state"               ||  $(TRUE)
525	@$(RMF) "../dps8m.state"                  ||  $(TRUE)
526	@$(RMF) "dps8m.state"                     ||  $(TRUE)
527	@$(RMF) "../../l68.state"                 ||  $(TRUE)
528	@$(RMF) "../l68.state"                    ||  $(TRUE)
529	@$(RMF) "l68.state"                       ||  $(TRUE)
530	@$(RMF) ../../l68*.state                  ||  $(TRUE)
531	@$(RMF) ../l68*.state                     ||  $(TRUE)
532	@$(RMF) l68*.state                        ||  $(TRUE)
533	@$(RMF) "../../.dps8m.state"              ||  $(TRUE)
534	@$(RMF) "../.dps8m.state"                 ||  $(TRUE)
535	@$(RMF) ".dps8m.state"                    ||  $(TRUE)
536	@$(RMF) ../../.dps8m*.state               ||  $(TRUE)
537	@$(RMF) ../.dps8m*.state                  ||  $(TRUE)
538	@$(RMF) .dps8m*.state                     ||  $(TRUE)
539	@$(RMF) "../../.l68.state"                ||  $(TRUE)
540	@$(RMF) "../.l68.state"                   ||  $(TRUE)
541	@$(RMF) ".l68.state"                      ||  $(TRUE)
542	@$(RMF) ../../.l68*.state                 ||  $(TRUE)
543	@$(RMF) ../.l68*.state                    ||  $(TRUE)
544	@$(RMF) .l68*.state                       ||  $(TRUE)
545	@$(SETV); $(RMF) "restoreMultics.log"     ||  $(TRUE)
546	@$(SETV); $(RMF) "TAGS"                   ||  $(TRUE)
547	@$(SETV); $(RMF) "tags"                   ||  $(TRUE)
548	@$(SETV); $(RMF) "ver.h~"                 ||  $(TRUE)
549	@$(SETV); $(RMF) "../../GPATH"            ||  $(TRUE)
550	@$(SETV); $(RMF) "../../GRTAGS"           ||  $(TRUE)
551	@$(SETV); $(RMF) "../../GTAGS"            ||  $(TRUE)
552	@$(SETV); $(RMF) "cscope.in.out"          ||  $(TRUE)
553	@$(SETV); $(RMF) "cscope.out"             ||  $(TRUE)
554	@$(SETV); $(RMF) "cscope.po.out"          ||  $(TRUE)
555	@$(SETV); $(TEST) -d "../../libuv-local"  &&                              \
556              $(RMF) -r  "../../libuv-local"  ||  $(TRUE)
557
558###############################################################################
559
560.PHONY: distclean clean
561ifneq (,$(findstring clean,$(MAKECMDGOALS)))
562.NOTPARALLEL: distclean clean
563endif
564clean:
565	@$(SETV); $(MAKE) -C "$(SIMHx)"          -f "GNUmakefile"  "clean"
566	@$(SETV); $(MAKE) -C "../decNumber"      -f "GNUmakefile"  "clean"
567	@$(SETV); $(MAKE) -C "../prt2pdf"        -f "GNUmakefile"  "clean"
568	@$(SETV); $(MAKE) -C "../punutil"        -f "GNUmakefile"  "clean"
569	@$(SETV); $(MAKE) -C "../mcmb"           -f "GNUmakefile"  "clean"
570	@$(SETV); $(MAKE) -C "../unifdef"        -f "GNUmakefile"  "clean"
571	@$(SETV); ( cd ../blinkenLights2 && $(RMF) blinkenLights2 || $(TRUE) )
572	@$(SETV); $(MAKE) -C "."                 -f "GNUmakefile"  "clean_dps8"
573	@$(SETV); $(RMF)  ../../"$(KITNAME)"."$(TARXT)"    ||  $(TRUE)
574	@$(SETV); $(RMF)  ../../"$(KITNAME)"."$(TARXT)".*  ||  $(TRUE)
575	@$(SETV); $(RMF)  ../../"$(KITNAME)"."TMP"         ||  $(TRUE)
576	@$(SETV); $(RMF)  ../../"$(KITNAME)"."zip"         ||  $(TRUE)
577	@$(SETV); $(TEST) -d "../../dps8"                  &&                     \
578              $(RMF) -r "../../dps8"                   ||  $(TRUE)
579	@$(SETV); $(RMF)  "../../.builder.txt"             ||  $(TRUE)
580	@$(SETV); $(RMF)  "../../.buildos.txt"             ||  $(TRUE)
581	@$(SETV); $(RMF)  "ver.h"                          ||  $(TRUE)
582	@$(SETV); $(RMF)  "dump.i"                         ||  $(TRUE)
583	@$(SETV); $(RMF)  "compdef.out"                    ||  $(TRUE)
584	@$(SETV); $(RMF)  "procdef.out"                    ||  $(TRUE)
585	@$(SETV); $(RMF)  "procsrt.out"                    ||  $(TRUE)
586	@$(SETV); $(RMF)  "unifdef.out"                    ||  $(TRUE)
587	@$(SETV); $(RMF)  "sysdefs.h"                      ||  $(TRUE)
588	@$(SETV); $(RMF)  "useddef.txt"                    ||  $(TRUE)
589	@$(SETV); $(RMF)  "amd_memcpy.o"                   ||  $(TRUE)
590	@$(SETV); $(RMF)  "../amd_memcpy.o"                ||  $(TRUE)
591	@$(SETV); $(RMF)  "../../amd_memcopy.o"            ||  $(TRUE)
592
593###############################################################################
594
595.PHONY: clean_dps8
596ifneq (,$(findstring clean,$(MAKECMDGOALS)))
597.NOTPARALLEL: clean_dps8
598endif
599clean_dps8:
600	@$(PRINTF) '%s\n' "CLEAN: dps8"
601	@$(SETV); $(RMF) $(OBJS) $(C_DEPS) $(EXECUTABLES) "dps8$(EXE)"            \
602      "tags" "TAGS" $(C_SRCS:.c=.d) $(wildcard $(C_SRCS:.c=.d.[0-9]*))        \
603        "dps8.exe" "errnos.h" "udplib.exe" "udplib" "tracker.o" "dump.[icd]"  \
604          || $(TRUE)
605
606###############################################################################
607
608.PHONY: kit dist
609kit dist:
610	@$(PRINTF) '%s\n' "KIT: dps8"
611	@$(PRINTF) '%s\n' "ARCHIVE: $(KITNAME).$(TARXT)"
612	@$(SETV); $(RMF) ../../"$(KITNAME)"."$(TARXT)"                  ||  $(TRUE)
613	@$(SETV); $(RMF) ../../"$(KITNAME)"."$(TARXT)"."$(COMPRESSXT)"  ||  $(TRUE)
614	@$(SETV); MAKE="$(MAKE)" $(MAKE) "ver.h"
615	@$(SETV); $(CP) "./ver.h" "./ver.h~"
616	@$(SETV); ($(CD) "../.." &&                                               \
617        $(MAKETAR) "$(KITNAME).$(TARXT)" $$( $(GIT) ls-files               |  \
618         $(GREP) -v '^.git' | $(GREP) -v '^.whitesource'                   |  \
619          $(GREP) -v '^.lgtm.yml' | $(GREP) -v '/.Attic/'                  |  \
620           $(GREP) -v '^src/dps8/make_ver.sh' | $(GREP) -v 'docs/manual'   |  \
621            $(GREP) -v '^src/Makefile.scc' | $(GREP) -v 'ci-kit'           |  \
622             $(GREP) -v '^src/dps8/listings/'                              |  \
623               $(GREP) -v '^src/Makefile.dev') 'src/dps8/ver.h~' )
624	@$(PRINTF) '%s\n'                                                         \
625       "COMPRESS: $(KITNAME).$(TARXT) -> $(KITNAME).$(TARXT).$(COMPRESSXT)"
626	@$(SETV); $(COMPRESS) "../../$(KITNAME).$(TARXT)"
627
628###############################################################################
629# Makes a ZIP format kit
630
631.PHONY: zipkit zipdist
632zipkit zipdist:
633	@$(PRINTF) '%s\n' "ZIPKIT: dps8"
634	@$(PRINTF) '%s\n' "ARCHIVE: $(KITNAME).zip"
635	@$(SETV); $(RMF) ../../"$(KITNAME)"."zip"                       ||  $(TRUE)
636	@$(SETV); $(RMF) ../../"$(KITNAME)"."TMP"                       ||  $(TRUE)
637	@$(SETV); MAKE="$(MAKE)" $(MAKE) "ver.h"
638	@$(SETV); $(CP) "./ver.h" "./ver.h~"
639	@$(SETV); ($(CD) "../.." &&                                               \
640        $(MAKETAR) "$(KITNAME).TMP" $$( $(GIT) ls-files                    |  \
641         $(GREP) -v '^.git' | $(GREP) -v '^.whitesource'                   |  \
642          $(GREP) -v '^.lgtm.yml' | $(GREP) -v '/.Attic/'                  |  \
643           $(GREP) -v '^src/dps8/make_ver.sh' | $(GREP) -v 'docs/manual'   |  \
644            $(GREP) -v '^src/Makefile.scc' | $(GREP) -v 'ci-kit'           |  \
645             $(GREP) -v '^src/dps8/listings/' )                               \
646                              'src/dps8/ver.h~' )
647	@$(SETV); ($(CD) "../.." && $(TAR) xf "$(KITNAME)"."TMP"              &&  \
648      $(RMF) "$(KITNAME)"."zip"                                           &&  \
649        $(TR) -s ' ' < "./src/dps8/ver.h~" 2> /dev/null                    |  \
650          $(GREP) -E '(VER_H_GIT_VERSION|VER_H_GIT_HASH)' 2> /dev/null     |  \
651            $(CUT) -d ' ' -f 3- 2> /dev/null | $(TR) -d '"' 2> /dev/null   |  \
652              $(PASTE) - - 2> /dev/null                                    |  \
653                $(SED) -e 's/^/\r\nDPS\/8M Simulator /' -e 's/\t/\r\n(/'      \
654                           -e 's/$$/)\r\n\r\n.\n/'                         |  \
655                  $(INFOZIP) -q -r -o -z -nw -9 "$(KITNAME)"."zip" "./dps8"   \
656                    2> /dev/null && $(INFOZIP) -q -T "$(KITNAME)"."zip"       \
657                      2> /dev/null &&  $(RMF) "$(KITNAME)"."TMP"              \
658                        2> /dev/null && $(RMF) -r "./dps8" 2> /dev/null   &&  \
659                          $(PRINTF) 'ZIPKIT: %s\n'                            \
660                            "$(KITNAME).zip created successfully")
661	@$(SETV); { $(COMMAND) -v $(ADVZIP) > /dev/null 2>&1                  &&  \
662      $(PRINTF) '%s\n' "ADVZIP: $(KITNAME).zip"                           &&  \
663        $(ADVZIP) -qz4k "../../sources.zip" || $(TRUE); } || $(TRUE)
664
665###############################################################################
666
667unifdef.out: unifdef
668	@$(PRINTF) '%s\n' "UNIFDEF: *.[ch]"
669	@($(SETV); $(CD) ".." 2> /dev/null && $(FIND) $$($(GIT) ls-files          \
670     2> /dev/null | $(GREP) -v 'ci-kit/' 2> /dev/null                         \
671       | $(GREP) ".*\.[ch]" 2> /dev/null )                                    \
672         -exec "./unifdef/unifdef.wrapper" "-s" "{}" 2> /dev/null \; |        \
673           $(SORT) -u 2> /dev/null) > "./unifdef.out" ||                      \
674             $(TOUCH) "./unifdef.out" > /dev/null 2>&1
675
676###############################################################################
677
678procdef.out:
679	@$(PRINTF) '%s\n' "PROCDEF: $(CPPCPP)"
680	@($(SETV); ($(CPPCPP) -dM - < /dev/null 2> /dev/null ;                    \
681      $(CPPCPP) -dD - < /dev/null 2> /dev/null ; $(CPPCPP2) ; $(CPPCPP3) ;    \
682       $(CPPCPP4)) | $(GREP) "^#define " 2> /dev/null | $(GREP) -v "^$$"      \
683        2> /dev/null | $(SORT) -u 2> /dev/null) | $(SED) 's/^#define //g'  |  \
684         $(SORT) -u > "./procdef.out" || $(TOUCH) "./procdef.out"             \
685          > /dev/null 2>&1
686
687###############################################################################
688
689procsrt.out: procdef.out
690	@$(PRINTF) '%s\n' "PROCSRT: procdef.out"
691	@$(SETV); $(CUT) -d ' ' -f 1 < "./procdef.out" 2> /dev/null |             \
692      $(SORT) > "./procsrt.out" 2> /dev/null ||                               \
693        $(TOUCH) "./procsrt.out" > /dev/null 2>&1
694
695###############################################################################
696
697compdef.out: procsrt.out unifdef.out
698	@$(PRINTF) '%s\n' "COMM: procsrt.out unifdef.out"
699	@$(SETV); $(COMM) -12 "procsrt.out" "unifdef.out" > "./compdef.out"       \
700      2> /dev/null || $(TOUCH) "./compdef.out" 2> /dev/null
701
702###############################################################################
703
704useddef.txt: compdef.out
705	@$(PRINTF) '%s\n' "USEDDEF: compdef.out"
706	@$(SETV); $(SH) -c 'while read -r line; do $(GREP) -i "$${line:-}"        \
707      "./procdef.out" 2> /dev/null; done < "compdef.out" 2> /dev/null |       \
708        $(SORT) -u | $(GREP) -v -e "^__VERSION__"  -e "^__clang_version__"    \
709          -e "^__GCC_HAVE_SYNC_COMPARE_AND_SWAP_." -e "^__ORDER_.*_ENDIAN__"  \
710            2> /dev/null > "useddef.txt"' || $(TRUE) > /dev/null 2>&1;        \
711              $(TOUCH) "./useddef.txt" > /dev/null 2>&1
712
713###############################################################################
714
715errnos.h:
716	@$(PRINTF) '%s\n' '#include <errno.h>' > "./dump.c" 2> /dev/null
717	@$(SETV); ($(CC) -E -dD ./dump.c 2> /dev/null;                            \
718               $(CC) -qshowmacros -E ./dump.c 2> /dev/null) | $(SORT) -u |    \
719        $(AWK) '/^#define E/ { printf "{\"%s\",%s},\n", $$2, $$2 } END        \
720                               { print "" }' > "./errnos.h"
721	@$(SETV); $(RMF) "./dump.c"
722
723###############################################################################
724
725sysdefs.h: useddef.txt
726	@$(PRINTF) '%s\n' "SYSDEFS: useddef.txt"
727	@$(SETV); $(TR) -d '=' < "./useddef.txt" 2> /dev/null              |      \
728      $(TR) ' ' '=' 2> /dev/null | $(SED) -e 's/^/-D/g' 2> /dev/null   |      \
729        $(TR) '\n' ' ' 2> /dev/null | $(SED) -e 's/ $$//'                     \
730          -e 's/^-D$$//g' | $(SED) -e 's/^/#define\ SYSDEFS_USED\ \"/'        \
731            -e 's/$$/\"/' 2> /dev/null > "./sysdefs.n"                 ||     \
732              $(TOUCH) "./sysdefs.n" > /dev/null 2>&1
733	@$(PRINTF) '%s\n' "" >> "./sysdefs.n" 2> /dev/null
734	@$(SETV); $(CMP) "./sysdefs.n" "./sysdefs.h" > /dev/null 2>&1      ||     \
735        $(CP) "./sysdefs.n" "./sysdefs.h" 2> /dev/null                 ||     \
736            $(TOUCH) "sysdefs.h"
737	@$(SETV); $(RMF) "sysdefs.n"
738
739###############################################################################
740
741dps8_absi.o:        dps8.h
742dps8_absi.o:        dps8_simh.h
743dps8_absi.o:        dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
744dps8_absi.o:        dps8_iom.h
745dps8_absi.o:        dps8_absi.h dps8_sys.h
746dps8_absi.o:        dps8_scu.h
747dps8_absi.o:        dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h udplib.h
748dps8_addrmods.o:    dps8.h
749dps8_addrmods.o:    dps8_simh.h
750dps8_addrmods.o:    dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
751dps8_addrmods.o:    dps8_addrmods.h dps8_sys.h
752dps8_addrmods.o:    dps8_faults.h
753dps8_addrmods.o:    dps8_scu.h dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h
754dps8_addrmods.o:    dps8_append.h dps8_ins.h dps8_iefp.h dps8_opcodetable.h
755dps8_addrmods.o:    dps8_utils.h
756dps8_append.o:      dps8_simh.h
757dps8_append.o:      dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
758dps8_append.o:      dps8_sys.h
759dps8_append.o:      dps8_scu.h
760dps8_append.o:      dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_append.h
761dps8_append.o:      dps8_addrmods.h dps8_utils.h
762dps8_cable.o:       dps8.h
763dps8_cable.o:       dps8_simh.h
764dps8_cable.o:       dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
765dps8_cable.o:       dps8_iom.h
766dps8_cable.o:       dps8_mt.h dps8_socket_dev.h dps8_scu.h dps8_sys.h
767dps8_cable.o:       dps8_faults.h
768dps8_cable.o:       dps8_cable.h dps8_cpu.h hdbg.h dps8_state.h dps8_console.h
769dps8_cable.o:       dps8_disk.h dps8_fnp2.h libtelnet.h dps8_urp.h
770dps8_cable.o:       dps8_crdrdr.h
771dps8_cable.o:       dps8_crdpun.h dps8_prt.h dps8_utils.h dps8_absi.h
772dps8_console.o:     dps8.h
773dps8_console.o:     dps8_simh.h
774dps8_console.o:     dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
775dps8_console.o:     dps8_iom.h
776dps8_console.o:     dps8_console.h dps8_sys.h
777dps8_console.o:     dps8_faults.h
778dps8_console.o:     dps8_scu.h dps8_cable.h dps8_cpu.h hdbg.h dps8_mt.h
779dps8_console.o:     dps8_disk.h dps8_utils.h libtelnet.h
780dps8_cpu.o:         dps8.h
781dps8_cpu.o:         dps8_simh.h
782dps8_cpu.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
783dps8_cpu.o:         dps8_addrmods.h
784dps8_cpu.o:         dps8_sys.h
785dps8_cpu.o:         uvutil.h dps8_faults.h dps8_scu.h dps8_iom.h dps8_cable.h
786dps8_cpu.o:         dps8_cpu.h hdbg.h dps8_append.h dps8_ins.h dps8_state.h
787dps8_cpu.o:         dps8_math.h dps8_iefp.h dps8_console.h dps8_fnp2.h
788dps8_cpu.o:         libtelnet.h
789dps8_cpu.o:         dps8_socket_dev.h dps8_crdrdr.h dps8_absi.h dps8_utils.h
790dps8_cpu.o:         dps8_opcodetable.h
791dps8_crdpun.o:      dps8.h
792dps8_crdpun.o:      dps8_simh.h
793dps8_crdpun.o:      dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
794dps8_crdpun.o:      dps8_iom.h
795dps8_crdpun.o:      dps8_crdpun.h dps8_sys.h
796dps8_crdpun.o:      dps8_scu.h
797dps8_crdpun.o:      dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h
798dps8_crdpun.o:      utfile.h
799dps8_crdrdr.o:      dps8.h
800dps8_crdrdr.o:      dps8_simh.h
801dps8_crdrdr.o:      dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
802dps8_crdrdr.o:      dps8_iom.h
803dps8_crdrdr.o:      dps8_crdrdr.h dps8_sys.h
804dps8_crdrdr.o:      dps8_scu.h
805dps8_crdrdr.o:      dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h
806dps8_decimal.o:     dps8_simh.h
807dps8_decimal.o:     dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
808dps8_decimal.o:     dps8_sys.h
809dps8_decimal.o:     dps8_faults.h
810dps8_decimal.o:     dps8_scu.h dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h
811dps8_decimal.o:     dps8_decimal.h dps8_eis.h dps8_utils.h
812dps8_dia.o:         dps8_simh.h
813dps8_dia.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
814dps8_dia.o:         dps8_dia.h
815dps8_dia.o:         dps8_sys.h
816dps8_dia.o:         dps8_scu.h
817dps8_dia.o:         dps8_cpu.h hdbg.h dps8_iom.h dps8_cable.h dps8_utils.h
818dps8_dia.o:         udplib.h
819dps8_disk.o:        dps8_simh.h
820dps8_disk.o:        dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
821dps8_disk.o:        dps8_iom.h
822dps8_disk.o:        dps8_disk.h dps8_sys.h
823dps8_disk.o:        dps8_scu.h
824dps8_disk.o:        dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h
825dps8_eis.o:         dps8_simh.h
826dps8_eis.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
827dps8_eis.o:         dps8_sys.h
828dps8_eis.o:         dps8_scu.h
829dps8_eis.o:         dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_iefp.h
830dps8_eis.o:         dps8_decimal.h dps8_ins.h dps8_eis.h dps8_utils.h
831dps8_faults.o:      dps8_simh.h
832dps8_faults.o:      dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
833dps8_faults.o:      dps8_sys.h
834dps8_faults.o:      dps8_scu.h
835dps8_faults.o:      dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_append.h
836dps8_faults.o:      dps8_ins.h dps8_utils.h
837dps8_fnp2.o:        dps8_simh.h
838dps8_fnp2.o:        dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
839dps8_fnp2.o:        dps8_sys.h
840dps8_fnp2.o:        dps8_scu.h
841dps8_fnp2.o:        dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_fnp2.h
842dps8_fnp2.o:        libtelnet.h fnptelnet.h fnpuv.h dps8_utils.h utlist.h
843dps8_fnp2_iomcmd.o: dps8.h
844dps8_fnp2_iomcmd.o: dps8_simh.h dps8_math128.h dps8_hw_consts.h
845dps8_fnp2_iomcmd.o: dps8_em_consts.h dps8_sys.h
846dps8_fnp2_iomcmd.o: dps8_scu.h
847dps8_fnp2_iomcmd.o: dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_fnp2.h
848dps8_fnp2_iomcmd.o: libtelnet.h dps8_fnp2_iomcmd.h dps8_utils.h fnpuv.h
849dps8_iefp.o:        dps8.h
850dps8_iefp.o:        dps8_simh.h
851dps8_iefp.o:        dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
852dps8_iefp.o:        dps8_sys.h
853dps8_iefp.o:        dps8_scu.h
854dps8_iefp.o:        dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_append.h
855dps8_iefp.o:        dps8_iefp.h dps8_addrmods.h dps8_utils.h
856dps8_ins.o:         dps8_simh.h
857dps8_ins.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
858dps8_ins.o:         dps8_addrmods.h
859dps8_ins.o:         dps8_sys.h
860dps8_ins.o:         uvutil.h dps8_faults.h dps8_scu.h dps8_iom.h dps8_cable.h
861dps8_ins.o:         dps8_cpu.h hdbg.h dps8_append.h dps8_eis.h dps8_ins.h
862dps8_ins.o:         dps8_math.h
863dps8_ins.o:         dps8_opcodetable.h dps8_decimal.h dps8_iefp.h dps8_utils.h
864dps8_ins.o:         ver.h
865dps8_ins.o:         dps8_prom.h
866dps8_iom.o:         dps8.h
867dps8_iom.o:         dps8_simh.h
868dps8_iom.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
869dps8_iom.o:         dps8_sys.h
870dps8_iom.o:         uvutil.h dps8_faults.h dps8_scu.h dps8_iom.h dps8_cable.h
871dps8_iom.o:         dps8_cpu.h hdbg.h dps8_console.h dps8_fnp2.h libtelnet.h
872dps8_iom.o:         dps8_utils.h
873dps8_math128.o:     dps8.h
874dps8_math128.o:     dps8_simh.h
875dps8_math128.o:     dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
876dps8_math.o:        dps8_simh.h
877dps8_math.o:        dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
878dps8_math.o:        dps8_sys.h
879dps8_math.o:        dps8_scu.h
880dps8_math.o:        dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_ins.h
881dps8_math.o:        dps8_math.h
882dps8_math.o:        dps8_utils.h
883dps8_mt.o:          dps8_simh.h
884dps8_mt.o:          dps8_math128.h dps8_hw_consts.h dps8_em_consts.h dps8_mt.h
885dps8_mt.o:          dps8_sys.h
886dps8_mt.o:          dps8_scu.h
887dps8_mt.o:          dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h
888dps8_opcodetable.o: dps8.h
889dps8_opcodetable.o: dps8_simh.h dps8_math128.h dps8_hw_consts.h
890dps8_opcodetable.o: dps8_em_consts.h dps8_opcodetable.h
891dps8_prt.o:         dps8.h
892dps8_prt.o:         dps8_simh.h
893dps8_prt.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
894dps8_prt.o:         dps8_iom.h
895dps8_prt.o:         dps8_prt.h dps8_sys.h
896dps8_prt.o:         dps8_scu.h
897dps8_prt.o:         dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h
898dps8_prt.o:         utfile.h
899dps8_scu.o:         dps8.h
900dps8_scu.o:         dps8_simh.h
901dps8_scu.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
902dps8_scu.o:         dps8_sys.h
903dps8_scu.o:         uvutil.h dps8_faults.h dps8_scu.h dps8_iom.h dps8_cable.h
904dps8_scu.o:         dps8_cpu.h hdbg.h dps8_utils.h
905dps8_simh.o:        dps8.h
906dps8_simh.o:        dps8_simh.h
907dps8_simh.o:        dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
908dps8_simh.o:        dps8_sys.h
909dps8_simh.o:        uvutil.h
910dps8_socket_dev.o:  dps8_simh.h
911dps8_socket_dev.o:  dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
912dps8_socket_dev.o:  dps8_socket_dev.h dps8_sys.h
913dps8_socket_dev.o:  dps8_faults.h
914dps8_socket_dev.o:  dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h
915dps8_socket_dev.o:  errnos.h
916dps8_sys.o:         dps8_simh.h
917dps8_sys.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
918dps8_sys.o:         dps8_console.h
919dps8_sys.o:         dps8_sys.h
920dps8_sys.o:         dps8_scu.h
921dps8_sys.o:         dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_state.h
922dps8_sys.o:         dps8_ins.h
923dps8_sys.o:         dps8_math.h dps8_mt.h dps8_socket_dev.h dps8_disk.h
924dps8_sys.o:         dps8_append.h
925dps8_sys.o:         dps8_fnp2.h libtelnet.h dps8_crdrdr.h dps8_crdpun.h
926dps8_sys.o:         dps8_prt.h
927dps8_sys.o:         dps8_urp.h dps8_absi.h dps8_utils.h shm.h utlist.h
928dps8_sys.o:         ver.h
929dps8_urp.o:         dps8.h
930dps8_urp.o:         dps8_simh.h
931dps8_urp.o:         dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
932dps8_urp.o:         dps8_iom.h
933dps8_urp.o:         dps8_urp.h dps8_sys.h
934dps8_urp.o:         dps8_scu.h
935dps8_urp.o:         dps8_cable.h dps8_cpu.h hdbg.h dps8_utils.h
936dps8_utils.o:       dps8_simh.h
937dps8_utils.o:       dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
938dps8_utils.o:       dps8_sys.h
939dps8_utils.o:       dps8_scu.h
940dps8_utils.o:       dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_ins.h
941dps8_utils.o:       dps8_opcodetable.h dps8_utils.h
942fnptelnet.o:        dps8_simh.h
943fnptelnet.o:        dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
944fnptelnet.o:        dps8_sys.h
945fnptelnet.o:        dps8_scu.h
946fnptelnet.o:        dps8_iom.h dps8_cable.h dps8_cpu.h hdbg.h dps8_fnp2.h
947fnptelnet.o:        libtelnet.h dps8_utils.h fnpuv.h fnptelnet.h
948fnpuv.o:            dps8_simh.h
949fnpuv.o:            dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
950fnpuv.o:            dps8_scu.h
951fnpuv.o:            dps8_sys.h
952fnpuv.o:            dps8_cable.h
953fnpuv.o:            dps8_cpu.h hdbg.h dps8_fnp2.h libtelnet.h dps8_utils.h
954fnpuv.o:            fnpuv.h
955fnpuv.o:            fnptelnet.h
956hdbg.o:             dps8.h
957hdbg.o:             dps8_simh.h
958hdbg.o:             dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
959hdbg.o:             dps8_sys.h
960hdbg.o:             uvutil.h dps8_cpu.h hdbg.h dps8_utils.h
961libtelnet.o:        libtelnet.h
962shm.o:              shm.h
963threadz.o:          dps8.h
964threadz.o:          dps8_simh.h
965threadz.o:          dps8_math128.h dps8_hw_consts.h dps8_em_consts.h
966threadz.o:          dps8_sys.h
967threadz.o:          uvutil.h dps8_cpu.h hdbg.h dps8_faults.h dps8_iom.h
968threadz.o:          dps8_utils.h
969threadz.o:          threadz.h
970tracker.o:          tracker.h
971udplib.o:           h316_imp.h
972uvutil.o:           dps8.h
973uvutil.o:           dps8_hw_consts.h
974uvutil.o:           dps8_em_consts.h dps8_sys.h uvutil.h dps8_cpu.h hdbg.h
975uvutil.o:           dps8_utils.h
976uvutil.o:           libtelnet.h
977utfile.o:           utfile.h bsd_random.h
978bsd_random.o:       bsd_random.h
979
980###############################################################################
981
982ifdef LIBS
983  export LIBS
984  ifneq (,$(wildcard ../Makefile.mk))
985    include ../Makefile.mk
986  endif
987endif
988
989###############################################################################
990
991# Local Variables:
992# mode: make
993# tab-width: 4
994# End:
995