1
0
mirror of https://github.com/simh/simh.git synced 2026-01-11 23:52:58 +00:00
simh.simh/makefile
Patrick Linstruth aad5351080 Altair8800: New Simulator
This is the initial release of the Altair8800 simulator.

Why another Altair simulator? AltairZ80 has been described as a
“software simulator”, where the intent is to run software designed
specifically for executing under a simulator. Altair8800 is intended
to accurately simulate the Altair hardware and execute software
that will run unchanged on real hardware. Software and disk images
can be moved between the Altair8800 simulator and real Altair and
other S-100 hardware without any changes. The Altair8800 simulator
is a tool that can assist with the restoration of vintage Altair
and other S-100 hardware and software along with the development
of new hardware and software. The accomplish this, the following
are major differences between AltairZ80 and Altair8800.

* The monolithic design where devices access other devices directly
through external variables and functions is no longer supported.
All devices exchange data through a new BUS device. Memory and I/O
address decoding and transfers are now handled by the BUS device.
All interrupt requests are handled by the BUS device.

* System RAM was moved from the CPU device to a new RAM device and
managed by the BUS device.

* Banked RAM was moved from the CPU device to a new BRAM device.

* Banked RAM can only be accessed through the BUS device. Memory in
banks that are not currently selected cannot be accessed. The AZ80
“banked” RAM was removed.

* ROMs were moved from the CPU and DSK devices to the new ROM device.
Mike Douglas’ Altmon Monitor is also available through the ROM
device. The custom AltairZ80 ALTAIRROM, which is not compatible
with original Altair disk images, is also available.

* The custom ALTAIRROM boot loader was replaced with the original
MITS Disk Boot Loader as the default ROM.

* The monolithic Multiple-CPU/RAM/ROM/IO/BankedRAM CPU device has
been replaced with a generic CPU device that provides an abstraction
layer between SIMH and the supported CPU architectures (currently
8080 and Z80). All IO is handled through the BUS device. RAM, Banked
RAM, and ROM are each handled by their own independent devices.

* The AltairZ80 SIO device was replaced with the M2SIO0 and M2SIO1
devices. The M2SIO devices fully support TMXR.

* A new SIO device was added to provide generic, programmable, Serial
IO. TMXR is not supported on this device.

* The Altair 8800 did not have PTR or PTP hardware devices. They have
been removed and replaced with the M2SIO1 device. PTR and PTP devices
are defined by software executing on the simulator.

* Contention between multiple enabled serial devices checking the
single host keyboard for input is now handled by the BUS device.
Port 0xFF sense switches was moved to a new SSW device and IMSAI
programmed output was moved to a new PO device.

* The SIMH pseudo device no longer uses the removed PTR and PTP
devices. The SIMH device has its own IO system. To avoid conflicts
with other devices and remain compatible with the R and W utilities
written for AltairZ80, SIMH “borrows” I/O ports 12H and 13H during
file transfers. Only SIMH commands needed to support R and W file
transfers are supported. All other SIMH commands were removed.

* AltairZ80-specific versions of CP/M are not supported by Altair8800.

* PC queue was removed from CPU device and replaced with CPU HISTORY.

* The Altair8800 simulator only supports 16-bit address and 8-bit
data buses. 8086 and 68K CPU architectures were removed.

* All CPU timing (clockFrequency) and “sleeps” (SIO SLEEP) have been
removed. SIMH THROTTLE is fully supported and is the recommended
way to manage simulator speed and host CPU utilization. Executing
“SET THROTTLE 100K/1”, for example, should provide ample speed
without tasking the host CPU.

* HEXLOAD and HEXSAVE commands were added. The LOAD “-h” option has
been removed. Intel Hex and sRecord (coming soon) formats are
supported.

* The WD179X device was converted to an API.

* A new DSK API was added to provide a consistent way to manage soft
sector raw disk images.

* Support for the proprietary IMD disk image format was removed. Only
RAW disk images are supported.

The following devices are supported by this initial release:

BUS - Altair (S-100) Bus
CPU - Intel 8080 / Zilog Z80
RAM - 64K RAM
ROM - ROMs
BRAM - Banked RAM
DSK - MITS 88-DCDD Floppy Disk Controller
M2SIO0 - MITS 88-2SIO Port 0
M2SIO1 - MITS 88-2SIO Port 1
SSW - Sense Switches
PO - Programmed Output
SIO - Generic Serial I/O
SBC200 - SD Systems SBC-200
TARBELL - Tarbell SD and DD Floppy Disk Controller
VFII - SD Systems VersaFloppy II
SIMH - SIMH Pseudo Device
2025-11-21 17:01:40 -05:00

3336 lines
135 KiB
Makefile

#
# This GNU make makefile has been tested on:
# Linux (x86 & Sparc & PPC)
# Android (Termux)
# OS X
# Solaris (x86 & Sparc) (gcc and Sun C)
# OpenBSD
# NetBSD
# FreeBSD
# HP-UX
# AIX
# Windows (MinGW & cygwin) - deprecated (maybe works, maybe not)
# Linux x86 targeting Android (using agcc script)
# Haiku x86 (with gcc4)
#
# In general, the logic below will detect and build with the available
# features which the host build environment provides.
#
# Dynamic loading of libpcap is the preferred default behavior if pcap.h
# is available at build time. Support to statically linking against libpcap
# is deprecated and may be removed in the future. Static linking against
# libpcap can be enabled if GNU make is invoked with USE_NETWORK=1 on the
# command line.
#
# Some platforms may not have vendor supplied libpcap available. HP-UX is
# one such example. The packages which are available for this platform
# install include files and libraries in user specified directories. In
# order for this makefile to locate where these components may have been
# installed, gmake should be invoked with LPATH=/usr/lib:/usr/local/lib
# defined (adjusted as needed depending on where they may be installed).
#
# In the unlikely event that someone wants to build network capable
# simulators without networking support, invoking GNU make with
# NONETWORK=1 on the command line will do the trick.
#
# By default, video support is enabled if the SDL2 development
# headers and libraries are available. To force a build without video
# support, invoke GNU make with NOVIDEO=1 on the command line.
#
# The default build will build compiler optimized binaries.
# If debugging is desired, then GNU make can be invoked with
# DEBUG=1 on the command line.
#
# When building compiler optimized binaries with the gcc or clang
# compilers, invoking GNU make with LTO=1 on the command line will
# cause the build to use Link Time Optimization to maximally optimize
# the results. Link Time Optimization can report errors which aren't
# otherwise detected and will also take significantly longer to
# complete. Additionally, non debug builds default to build with an
# optimization level of -O2. This optimization level can be changed
# by invoking GNU make with OPTIMIZE=-O3 (or whatever optimize value
# you want) on the command line if desired.
#
# The default setup will fail simulator build(s) if the compile
# produces any warnings. These should be cleaned up before new
# or changed code is accepted into the code base. This option
# can be overridden if GNU make is invoked with WARNINGS=ALLOWED
# on the command line.
#
# The default build will run per simulator tests if they are
# available. If building without running tests is desired,
# then GNU make should be invoked with TESTS=0 on the command
# line.
#
# The default build has been changed to perform each simulator's
# build in separate compiles for each source module and then
# a separate link operation. This will better support folks
# doing active simulator development and hardly impact everyone
# else. Simulators can optionally be built with a single compile
# and link step. GNU make can be invoked with BUILD_SEPARATE=0
# on the command line (or defined as an exported environment
# variable) and a single compile and link command will be
# performed to produce each simulator. This is most optimal
# when building all simulators or just a single simulator which you
# merely plan to run.
#
# The default make output will show summary info about each compile
# and link command executed. GNU make can be invoked with QUIET=0
# on the command line (or defined as an exported environment
# variable) and details of the executed commands will be displayed
# in the make output.
#
# Default test execution will produce summary output. Detailed
# test output can be produced if GNU make is invoked with
# TEST_ARG=-v on the command line.
#
# simh project support is provided for simulators that are built with
# dependent packages provided with the or by the operating system
# distribution OR for platforms where that isn't directly available
# (OS X/macOS) by packages from specific package management systems
# (HomeBrew or MacPorts). Users wanting to build simulators with locally
# built dependent packages or packages provided by an unsupported package
# management system may be able to override where this procedure looks
# for include files and/or libraries. Overrides can be specified by define
# exported environment variables or GNU make command line arguments which
# specify INCLUDES and/or LIBRARIES.
# Each of these, if specified, must be the complete list include directories
# or library directories that should be used with each element separated by
# colons. (i.e. INCLUDES=/usr/include/:/usr/local/include/:...)
# If this doesn't work for you and/or you're interested in using a different
# ToolChain, you're free to solve this problem on your own. Good Luck.
#
# Some environments may have the LLVM (clang) compiler installed as
# an alternate to gcc. If you want to specifically build with the
# clang compiler, you should invoke make with GCC=clang on the make command
# line.
#
# Internal ROM support can be disabled if GNU make is invoked with
# DONT_USE_ROMS=1 on the command line.
#
# For linting (or other code analyzers) make may be invoked similar to:
#
# make GCC=cppcheck CC_OUTSPEC= LDFLAGS= CFLAGS_G="--enable=all --template=gcc" CC_STD=--std=c99
#
ifeq (0,$(MAKELEVEL)) # recursive individual target build logic is end of this makefile
#
# CC Command (and platform available options). (Poor man's autoconf)
#
ifneq (,${GREP_OPTIONS})
$(info GREP_OPTIONS is defined in your environment.)
$(info )
$(info This variable interfers with the proper operation of this script.)
$(info )
$(info The GREP_OPTIONS environment variable feature of grep is deprecated)
$(info for exactly this reason and will be removed from future versions of)
$(info grep. The grep man page suggests that you use an alias or a script)
$(info to invoke grep with your preferred options.)
$(info )
$(info unset the GREP_OPTIONS environment variable to use this makefile)
$(error 1)
endif
ifneq ($(findstring Windows,${OS}),)
$(info *** Warning *** Compiling simh simulators with MinGW or cygwin is deprecated and)
$(info *** Warning *** may not complete successfully or produce working simulators. If)
$(info *** Warning *** building simulators completes, they may not be fully functional.)
$(info *** Warning *** It is recommended to use one of the free Microsoft Visual Studio)
$(info *** Warning *** compilers which provide fully functional simulator capabilities.)
ifeq ($(findstring .exe,${SHELL}),.exe)
# MinGW
export WIN32 := 1
# Tests don't run under MinGW
export TESTS := 0
export RM = del /f /q
export MKDIR = mkdir
export OSTYPE = MinGW
ifneq (,$(strip $(shell $(MAKE) --version 2>NUL)))
GNUMake=$(strip $(shell $(MAKE) --version | findstr /C:"GNU Make"))
export GNUMakeVERSION=$(strip $(shell for /F "tokens=3" %%i in ("$(GNUMake)") do echo %%i))
else
# Nothing useful returned from MinGW GNU Make 3.82.90, make sure to set this version
export GNUMakeVERSION=3.82.90
endif
else # Msys or cygwin
ifeq (MINGW,$(findstring MINGW,$(shell uname)))
$(info *** This makefile can not be used with the Msys bash shell)
$(error Use build_mingw.bat ${MAKECMDGOALS} from a Windows command prompt)
endif
endif
else
export GNUMakeVERSION = $(shell ($(MAKE) --version /dev/null 2>&1 | grep 'GNU Make' | awk '{ print $$3 }'))
ifeq (old,$(shell $(MAKE) --version /dev/null 2>&1 | grep 'GNU Make' | awk '{ if ($$3 < "3.81") {print "old"} }'))
$(warning *** Warning *** GNU Make Version $(GNUMakeVERSION) is too old to)
$(warning *** Warning *** fully process this makefile)
endif
export MKDIR = mkdir -p
export OSTYPE = $(shell uname)
endif
ifeq ($(WIN32),)
SIM_MAJOR=$(shell grep SIM_MAJOR sim_rev.h | awk '{ print $$3 }')
else
SIM_MAJOR=$(shell for /F "tokens=3" %%i in ('findstr /c:"SIM_MAJOR" sim_rev.h') do echo %%i)
endif
# Default to BUILD_SEPARATE=1, but accept command line and environment variable overrides
ifeq (,$(BUILD_SEPARATE))
BUILD_SEPARATE=1
endif
# Assure that only BUILD_SEPARATE=1 will cause separate compiles
ifeq (,$(BUILD_SEPARATE))
override BUILD_SEPARATE=
endif
export BUILD_SEPARATE
# Default to QUIET=1, but accept command line and environment variable overrides
ifeq (,$(QUIET))
QUIET=1
endif
ifeq (,$(QUIET))
override QUIET=
endif
export QUIET
BUILD_SINGLE := ${MAKECMDGOALS} $(BLANK_SUFFIX)
BUILD_MULTIPLE_VERB = is
MAKECMDGOALS_DESCRIPTION = the $(MAKECMDGOALS) simulator
# building the pdp1, pdp11, tx-0, or any microvax simulator could use video support
ifneq (3,${SIM_MAJOR})
ifneq (,$(or $(findstring XXpdp1XX,$(addsuffix XX,$(addprefix XX,${MAKECMDGOALS}))),$(findstring pdp11,${MAKECMDGOALS}),$(findstring tx-0,${MAKECMDGOALS}),$(findstring microvax1,${MAKECMDGOALS}),$(findstring microvax2,${MAKECMDGOALS}),$(findstring microvax3900,${MAKECMDGOALS}),$(findstring microvax2000,${MAKECMDGOALS}),$(findstring vaxstation3100,${MAKECMDGOALS}),$(findstring XXvaxXX,$(addsuffix XX,$(addprefix XX,${MAKECMDGOALS})))))
VIDEO_USEFUL = true
endif
# building the besm6 needs both video support and fontfile support
ifneq (,$(findstring besm6,${MAKECMDGOALS}))
VIDEO_USEFUL = true
BESM6_BUILD = true
endif
# building the Imlac needs video support
ifneq (,$(findstring imlac,${MAKECMDGOALS}))
VIDEO_USEFUL = true
endif
# building the LINC needs video support
ifneq (,$(findstring linc,${MAKECMDGOALS}))
VIDEO_USEFUL = true
endif
# building the TT2500 needs video support
ifneq (,$(findstring tt2500,${MAKECMDGOALS}))
VIDEO_USEFUL = true
endif
# building the PDP6, KA10 or KI10 needs video support
ifneq (,$(or $(findstring pdp6,${MAKECMDGOALS}),$(findstring pdp10-ka,${MAKECMDGOALS}),$(findstring pdp10-ki,${MAKECMDGOALS})))
VIDEO_USEFUL = true
endif
# building the Altair8800 could use video support
ifneq (,$(findstring altair8800,${MAKECMDGOALS}))
VIDEO_USEFUL = true
endif
# building the AltairZ80 could use video support
ifneq (,$(findstring altairz80,${MAKECMDGOALS}))
VIDEO_USEFUL = true
endif
endif
# building the SEL32 networking can be used
ifneq (,$(findstring sel32,${MAKECMDGOALS}))
NETWORK_USEFUL = true
endif
# building the PDP-7 needs video support
ifneq (,$(findstring pdp7,${MAKECMDGOALS}))
VIDEO_USEFUL = true
endif
# building the PDP-8 could use video support
ifneq (,$(findstring pdp8,${MAKECMDGOALS}))
VIDEO_USEFUL = true
endif
# building the pdp11, any pdp10, any 3b2, or any vax simulator could use networking support
ifneq (,$(findstring pdp11,${MAKECMDGOALS})$(findstring pdp10,${MAKECMDGOALS})$(findstring vax,${MAKECMDGOALS})$(findstring frontpaneltest,${MAKECMDGOALS})$(findstring infoserver,${MAKECMDGOALS})$(findstring 3b2,${MAKECMDGOALS})$(findstring all,${MAKECMDGOALS}))
NETWORK_USEFUL = true
ifneq (,$(findstring all,${MAKECMDGOALS}))
BUILD_MULTIPLE = s
BUILD_MULTIPLE_VERB = are
VIDEO_USEFUL = true
BESM6_BUILD = true
MAKECMDGOALS_DESCRIPTION = everything
endif
else
ifeq (${MAKECMDGOALS},)
# default target is all
NETWORK_USEFUL = true
VIDEO_USEFUL = true
BUILD_MULTIPLE = s
BUILD_MULTIPLE_VERB = are
BUILD_SINGLE := all $(BUILD_SINGLE)
BESM6_BUILD = true
MAKECMDGOALS_DESCRIPTION = everything
endif
endif
ifneq (,$(and $(word 1,${MAKECMDGOALS}),$(word 2,${MAKECMDGOALS})))
BUILD_MULTIPLE = s
BUILD_MULTIPLE_VERB = are
MAKECMDGOALS_DESCRIPTION = the $(MAKECMDGOALS) simulators
endif
# someone may want to explicitly build simulators without network support
ifneq ($(NONETWORK),)
NETWORK_USEFUL =
endif
# ... or without video support
ifneq ($(NOVIDEO),)
VIDEO_USEFUL =
endif
find_exe = $(abspath $(strip $(firstword $(foreach dir,$(strip $(subst :, ,${PATH})),$(wildcard $(dir)/$(1))))))
find_lib = $(firstword $(abspath $(strip $(firstword $(foreach dir,$(strip ${LIBPATH}),$(foreach ext,$(strip ${LIBEXT}),$(wildcard $(dir)/lib$(1).$(ext))))))))
find_include = $(abspath $(strip $(firstword $(foreach dir,$(strip ${INCPATH}),$(wildcard $(dir)/$(1).h)))))
# macOS with Homebrew or MacPorts
ifeq (Darwin,$(OSTYPE))
eq = $(if $(or $(1),$(2)),$(and $(findstring $(1),$(2)),$(findstring $(2),$(1))),1)
ifneq (,$(or $(call eq,/usr/local/bin/brew,$(call find_exe,brew)),$(call eq,/opt/homebrew/bin/brew,$(call find_exe,brew))))
PKG_MGR = HOMEBREW
PKG_CMD = brew install
PKG_FIND = brew search
else
ifeq (/opt/local/bin/port,$(call find_exe,port))
PKG_MGR = MACPORTS
PKG_CMD = port install
PKG_FIND = port search --name
endif
endif
endif
ifneq (,$(and $(findstring Linux,$(OSTYPE)),$(call find_exe,apt-get)))
ifeq (Android,$(shell uname -o))
# Android with termux
PKG_MGR = TERMUX
PKG_CMD = pkg install
PKG_NO_SUDO = YES
PKG_FIND = pkg search
else
# Debian, Ubuntu (and its many derivatives like Kubuntu, Xubuntu, Lubuntu, Ubuntu Mate, Pop!_OS) and Linux Mint
# Deepin, MX Linux, Raspberry Pi OS, Peppermint OS, Bodhi Linux
PKG_MGR = APT
PKG_CMD = apt-get install
PKG_FIND = apt list
endif
endif
ifneq (,$(and $(findstring Linux,$(OSTYPE)),$(call find_exe,yum)))
# Early Red Had, Fedora, CentOS, Rocky and Alma Linux distributions
PKG_MGR = YUM
PKG_CMD = yum install
PKG_FIND = yum search
endif
ifneq (,$(and $(findstring Linux,$(OSTYPE)),$(call find_exe,apk)))
# Alpine Linux
PKG_MGR = APK
PKG_CMD = apk add
PKG_FIND = apk list
PKG_NO_SUDO = YES
endif
ifneq (,$(and $(findstring Linux,$(OSTYPE)),$(call find_exe,dnf)))
# More Modern Red Had, Fedora, CentOS, Rocky and Alma Linux distributions
PKG_MGR = DNF
ifneq (,$(shell dnf repolist | grep crb))
PKG_CMD = dnf --enablerepo=crb install
else
PKG_CMD = dnf install
endif
endif
ifneq (,$(and $(findstring Linux,$(OSTYPE)),$(call find_exe,zypper)))
# openSUSE and SUSE Linux Enterprise
PKG_MGR = ZYPPER
PKG_CMD = zypper install
endif
ifneq (,$(and $(findstring NetBSD,$(OSTYPE)),$(call find_exe,pkgin)))
# NetBSD
PKG_MGR = PKGSRC
PKG_CMD = pkgin install
PKG_NO_SUDO = YES
endif
ifneq (,$(and $(findstring FreeBSD,$(OSTYPE)),$(call find_exe,pkg)))
# FreeBSD
PKG_MGR = PKGBSD
PKG_CMD = pkg install
PKG_NO_SUDO = YES
endif
ifneq (,$(and $(findstring OpenBSD,$(OSTYPE)),$(call find_exe,pkg_add)))
# OpenBSD
PKG_MGR = PKGADD
PKG_CMD = pkg_add
PKG_NO_SUDO = YES
PKG_SHELL_READ_CANT_PROMPT = YES
endif
# Dependent packages
DPKG_COMPILER = 1
DPKG_PCAP = 2
DPKG_VDE = 3
DPKG_PCRE = 4
DPKG_EDITLINE = 5
DPKG_SDL = 6
DPKG_PNG = 7
DPKG_ZLIB = 8
DPKG_SDL_TTF = 9
DPKG_GMAKE = 10
DPKG_CURL = 11
DPKG_BUILD = 12
ifneq (3,${SIM_MAJOR})
# Platform Pkg Names COMPILER PCAP VDE PCRE EDITLINE SDL PNG ZLIB SDL_TTF GMAKE CURL BUILD-TOOL
PKGS_SRC_HOMEBREW = - - vde pcre libedit sdl2 libpng zlib sdl2_ttf make - -
PKGS_SRC_MACPORTS = - - vde2 pcre libedit libsdl2 libpng zlib libsdl2_ttf gmake - -
PKGS_SRC_APT = gcc libpcap-dev libvdeplug-dev libpcre3-dev libedit-dev libsdl2-dev libpng-dev - libsdl2-ttf-dev - curl build-essential:/usr/share/build-essential
PKGS_SRC_YUM = gcc libpcap-devel - pcre-devel libedit-devel SDL2-devel libpng-devel zlib-devel SDL2_ttf-devel - - -
PKGS_SRC_DNF = gcc libpcap-devel - pcre-devel libedit-devel SDL2-devel libpng-devel zlib-devel SDL2_ttf-devel - - -
PKGS_SRC_ZYPPER = gcc-c++ libpcap-devel - - libedit-devel sdl2-compat-devel libpng16-devel zlib-devel SDL2_ttf-devel make - -
PKGS_SRC_APK = clang libpcap-devel - - libedit-devel sdl2-compat-devel libpng-devel - sdl2_ttf-devel gmake curl -
PKGS_SRC_PKGSRC = - - - pcre editline SDL2 png zlib SDL2_ttf gmake - -
PKGS_SRC_PKGBSD = - - - pcre libedit SDL2 png - sdl2_ttf gmake - -
PKGS_SRC_PKGADD = - - - pcre - sdl2 png - sdl2-ttf gmake - -
PKGS_SRC_TERMUX = clang libpcap - pcre - - - - - - curl -
ifneq (0,$(TESTS))
ifneq (,${TEST_ARG})
export TEST_ARG
TESTING_FEATURES = - Per simulator tests will be run with argument: ${TEST_ARG}
else
TESTING_FEATURES = - Per simulator tests will be run
endif
else
TESTING_FEATURES = - Per simulator tests will be skipped
endif
else
# simh v3 has minimal external dependencies
# Platform Pkg Names COMPILER PCAP VDE PCRE EDITLINE SDL PNG ZLIB SDL_TTF GMAKE
PKGS_SRC_HOMEBREW = - - vde - libedit - - - - -
PKGS_SRC_MACPORTS = - - vde2 - libedit - - - - -
PKGS_SRC_APT = gcc libpcap-dev libvdeplug-dev - libedit-dev - - - - -
PKGS_SRC_YUM = gcc libpcap-devel - - libedit-devel - - - - -
PKGS_SRC_DNF = gcc libpcap-devel - - libedit-devel - - - - -
PKGS_SRC_PKGSRC = - - - - editline - - - - -
PKGS_SRC_PKGBSD = - - - - libedit - - - - -
PKGS_SRC_PKGADD = - - - - - - - - - -
endif
ifeq (${WIN32},) #*nix Environments (&& cygwin)
# OSNAME is used in messages to indicate the source of libpcap components
OSNAME = $(OSTYPE)
ifeq (SunOS,$(OSTYPE))
export TEST = /bin/test
else
export TEST = test
endif
RUNNING_AS_ROOT:=$(if $(findstring Darwin,$(OSTYPE)),$(shell if [ `id -u` == '0' ]; then echo running_as_root; fi),$(shell if $(TEST) -r /dev/mem; then echo running_as_root; fi))
CAN_AUTO_INSTALL_PACKAGES:=$(findstring HOMEBREW,$(PKG_MGR))$(RUNNING_AS_ROOT)
override AUTO_INSTALL_PACKAGES:=$(and $(AUTO_INSTALL_PACKAGES),$(or $(findstring HOMEBREW,$(PKG_MGR)),$(RUNNING_AS_ROOT)))
ifeq (${GCC},)
ifeq (,$(call find_exe,gcc))
ifneq (clang,$(findstring clang,$(and $(call find_exe,cc),$(shell cc -v /dev/null 2>&1 | grep 'clang'))))
$(info *** Warning *** Using local cc since gcc isn't available locally.)
$(info *** Warning *** You may need to install gcc to build working simulators.)
NEEDED_PKGS += DPKG_COMPILER
endif
GCC = cc
else
GCC = gcc
endif
endif
ifeq (CYGWIN,$(findstring CYGWIN,$(OSTYPE))) # uname returns CYGWIN_NT-n.n-ver
OSTYPE = cygwin
OSNAME = windows-build
endif
ifeq (Darwin,$(OSTYPE))
ifeq (,$(call find_exe,port)$(call find_exe,brew))
$(info *** Info *** simh dependent packages on macOS must be provided by either the)
$(info *** Info *** HomeBrew package system or by the MacPorts package system.)
$(info *** Info *** Neither of these seem to be installed on the local system.)
$(info *** Info ***)
ifeq (,$(INCLUDES)$(LIBRARIES))
$(info *** Info *** Users wanting to build simulators with locally built dependent)
$(info *** Info *** packages or packages provided by an unsupported package)
$(info *** Info *** management system may be able to override where this procedure)
$(info *** Info *** looks for include files and/or libraries. Overrides can be)
$(info *** Info *** specified by defining exported environment variables or GNU make)
$(info *** Info *** command line arguments which specify INCLUDES and/or LIBRARIES.)
$(info *** Info *** If this works, that's great, if it doesn't you are on your own!)
else
$(info *** Warning *** Attempting to build on macOS with:)
$(info *** Warning *** INCLUDES defined as $(INCLUDES))
$(info *** Warning *** and)
$(info *** Warning *** LIBRARIES defined as $(LIBRARIES))
endif
endif
endif
export LANG = en_US.UTF-8
ifeq (,$(shell ${GCC} -v /dev/null 2>&1 | grep 'clang'))
GCC_VERSION = $(shell ${GCC} -v /dev/null 2>&1 | grep 'gcc version' | awk '{ print $$3 }')
COMPILER_NAME = GCC Version: $(GCC_VERSION)
ifeq (,$(GCC_VERSION))
ifeq (SunOS,$(OSTYPE))
ifneq (,$(shell ${GCC} -V 2>&1 | grep 'Sun C'))
SUNC_VERSION = $(shell ${GCC} -V 2>&1 | grep 'Sun C')
COMPILER_NAME = $(wordlist 2,10,$(SUNC_VERSION))
CC_STD = -std=c99
endif
endif
ifeq (HP-UX,$(OSTYPE))
ifneq (,$(shell what `which $(firstword ${GCC}) 2>&1`| grep -i compiler))
COMPILER_NAME = $(strip $(shell what `which $(firstword ${GCC}) 2>&1` | grep -i compiler))
CC_STD = -std=gnu99
endif
endif
else
OS_CCDEFS += $(if $(findstring ALLOWED,$(WARNINGS)),,-Werror)
ifeq (,$(findstring ++,${GCC}))
CC_STD = -std=gnu99
else
export CPP_BUILD = 1
endif
endif
else
OS_CCDEFS += $(if $(findstring ALLOWED,$(WARNINGS)),,-Werror)
ifeq (Apple,$(shell ${GCC} -v /dev/null 2>&1 | grep 'Apple' | awk '{ print $$1 }'))
COMPILER_NAME = $(shell ${GCC} -v /dev/null 2>&1 | grep 'Apple' | awk '{ print $$1 " " $$2 " " $$3 " " $$4 }')
CLANG_VERSION = $(word 4,$(COMPILER_NAME))
else
COMPILER_NAME = $(shell ${GCC} -v /dev/null 2>&1 | grep 'clang version' | awk '{ print $$1 " " $$2 " " $$3 }')
CLANG_VERSION = $(word 3,$(COMPILER_NAME))
ifeq (,$(findstring .,$(CLANG_VERSION)))
COMPILER_NAME = $(shell ${GCC} -v /dev/null 2>&1 | grep 'clang version' | awk '{ print $$1 " " $$2 " " $$3 " " $$4 }')
CLANG_VERSION = $(word 4,$(COMPILER_NAME))
endif
endif
ifeq (,$(findstring ++,${GCC}))
CC_STD = -std=c99
else
export CPP_BUILD = 1
OS_CCDEFS += -Wno-deprecated
endif
endif
ifeq (git-repo,$(shell if ${TEST} -e ./.git; then echo git-repo; fi))
GIT_REPO=1
GIT_PATH=$(strip $(call find_exe,git))
ifeq (,$(GIT_PATH))
$(error building using a git repository, but git is not available)
endif
endif
ifeq (got-repo,$(shell if ${TEST} -e ./.got; then echo got-repo; fi))
GIT_PATH=$(strip $(call find_exe,git))
ifeq (,$(GIT_PATH))
$(error building using a got repository, but git is not available)
endif
ifeq (,$(file <.got/repository))
$(error building using a got repository, but git repository is not available)
endif
REPO_PATH=-C $(file <.got/repository)
GIT_REPO=1
endif
ifneq (,$(and $(GIT_REPO),$(GIT_PATH)))
ifeq (commit-id-exists,$(shell if ${TEST} -e .git-commit-id; then echo commit-id-exists; fi))
CURRENT_FULL_GIT_COMMIT_ID=$(strip $(shell grep 'SIM_GIT_COMMIT_ID' .git-commit-id | awk '{ print $$2 }'))
CURRENT_GIT_COMMIT_ID=$(word 1,$(subst +, , $(CURRENT_FULL_GIT_COMMIT_ID)))
ACTUAL_GIT_COMMIT_ID=$(strip $(shell git $(REPO_PATH) log -1 --pretty="%H"))
ifneq ($(CURRENT_GIT_COMMIT_ID),$(ACTUAL_GIT_COMMIT_ID))
NEED_COMMIT_ID = need-commit-id$(shell touch scp.c)
# make sure that the invalidly formatted .git-commit-id file wasn't generated
# by legacy git hooks which need to be removed.
$(shell $(RM) .git/hooks/post-checkout .git/hooks/post-commit .git/hooks/post-merge)
endif
else
NEED_COMMIT_ID = need-commit-id$(shell touch scp.c)
endif
ifneq (,$(if $(REPO_PATH),$(shell got status -S ?),$(shell git update-index --refresh --)))
ifeq (,$(findstring +uncommitted-changes,$(CURRENT_FULL_GIT_COMMIT_ID)))
GIT_EXTRA_FILES=+uncommitted-changes$(shell touch scp.c)
else
GIT_EXTRA_FILES=+uncommitted-changes
endif
endif
ifneq (,$(or $(NEED_COMMIT_ID),$(GIT_EXTRA_FILES)))
isodate=$(shell git $(REPO_PATH) log -1 --pretty="%ai"|sed -e 's/ /T/'|sed -e 's/ //')
$(shell git $(REPO_PATH) log -1 --pretty="SIM_GIT_COMMIT_ID %H$(GIT_EXTRA_FILES)%nSIM_GIT_COMMIT_TIME $(isodate)" >.git-commit-id)
endif
endif
SIM_BUILD_OS_VERSION= -DSIM_BUILD_OS_VERSION="$(shell uname -a|sed 's/,//g')"
LTO_EXCLUDE_VERSIONS =
PCAPLIB = pcap
ifeq (agcc,$(findstring agcc,${GCC})) # Android target build?
OS_CCDEFS += -D_GNU_SOURCE -DSIM_ASYNCH_IO
OS_LDFLAGS = -lm
else # Non-Android (or Native Android) Builds
ifeq (,$(INCLUDES)$(LIBRARIES))
INCPATH:=$(shell LANG=C; ${GCC} -x c -v -E /dev/null 2>&1 | grep -A 10 '> search starts here' | grep '^ ' | tr -d '\n')
ifeq (,${INCPATH})
INCPATH:=/usr/include
endif
LIBPATH:=/usr/lib
else
$(info *** Warning ***)
ifeq (,$(INCLUDES))
INCPATH:=$(shell LANG=C; ${GCC} -x c -v -E /dev/null 2>&1 | grep -A 10 '> search starts here' | grep '^ ' | tr -d '\n')
else
$(info *** Warning *** Unsupported build with INCLUDES defined as: $(INCLUDES))
INCPATH:=$(strip $(subst :, ,$(INCLUDES)))
UNSUPPORTED_BUILD := include
endif
ifeq (,$(LIBRARIES))
LIBPATH:=/usr/lib
else
$(info *** Warning *** Unsupported build with LIBRARIES defined as: $(LIBRARIES))
LIBPATH:=$(strip $(subst :, ,$(LIBRARIES)))
ifeq (include,$(UNSUPPORTED_BUILD))
UNSUPPORTED_BUILD := include+lib
else
UNSUPPORTED_BUILD := lib
endif
endif
$(info *** Warning ***)
endif
OS_CCDEFS += -D_GNU_SOURCE
GCC_OPTIMIZERS_CMD = ${GCC} -v --help 2>&1
GCC_WARNINGS_CMD = ${GCC} -v --help 2>&1
LD_ELF = $(shell echo | ${GCC} -E -dM - | grep __ELF__)
ifeq (Darwin,$(OSTYPE))
OSNAME = OSX
LIBEXT = dylib
OS_CCDEFS += -fno-common
ifneq (include,$(findstring include,$(UNSUPPORTED_BUILD)))
INCPATH:=$(shell LANG=C; ${GCC} -x c -v -E /dev/null 2>&1 | grep -A 10 '> search starts here' | grep '^ ' | awk '{ print $$1 }' | tr '\n' ' ')
endif
ifeq (incopt,$(shell if ${TEST} -d /opt/local/include; then echo incopt; fi))
INCPATH += /opt/local/include
OS_CCDEFS += -I/opt/local/include
endif
ifeq (libopt,$(shell if ${TEST} -d /opt/local/lib; then echo libopt; fi))
LIBPATH += /opt/local/lib
OS_LDFLAGS += -L/opt/local/lib
endif
ifeq (HomeBrew,$(or $(shell if ${TEST} -d /usr/local/Cellar; then echo HomeBrew; fi),$(shell if ${TEST} -d /opt/homebrew/Cellar; then echo HomeBrew; fi)))
ifeq (local,$(shell if $(TEST) -d /usr/local/Cellar; then echo local; fi))
HBPATH = /usr/local
else
HBPATH = /opt/homebrew
endif
INCPATH += $(foreach dir,$(wildcard $(HBPATH)/Cellar/*/*),$(realpath $(dir)/include))
LIBPATH += $(foreach dir,$(wildcard $(HBPATH)/Cellar/*/*),$(realpath $(dir)/lib))
endif
else
ifeq (Linux,$(OSTYPE))
ifeq (Android,$(shell uname -o))
ANDROID_API=$(shell getprop ro.build.version.sdk)
ANDROID_VERSION=$(shell getprop ro.build.version.release)
OS_CCDEFS += -DSIM_BUILD_OS=" On Android Version $(ANDROID_VERSION) sdk=$(ANDROID_API)"
ifeq (,$(shell clang sim_BuildROMs.c -o /dev/null -D__ANDROID_API__=$(ANDROID_API) 2>&1))
OS_CCDEFS += -D__ANDROID_API__=$(ANDROID_API)
endif
endif
ifneq (lib,$(findstring lib,$(UNSUPPORTED_BUILD)))
ifeq (Android,$(shell uname -o))
ifneq (,$(shell if ${TEST} -d ${PREFIX}/lib; then echo prefixlib; fi))
LIBPATH += ${PREFIX}/lib
endif
ifneq (,$(shell if ${TEST} -d /system/lib; then echo systemlib; fi))
LIBPATH += /system/lib
endif
LIBPATH += $(LD_LIBRARY_PATH)
endif
ifeq (ldconfig,$(shell if ${TEST} -e /sbin/ldconfig; then echo ldconfig; fi))
LIBPATH := $(sort $(foreach lib,$(shell /sbin/ldconfig -p | grep ' => /' | sed 's/^.* => //'),$(dir $(lib))))
endif
endif
LIBSOEXT = so
LIBEXT = $(LIBSOEXT) a
else
ifeq (SunOS,$(OSTYPE))
OSNAME = Solaris
ifneq (lib,$(findstring lib,$(UNSUPPORTED_BUILD)))
LIBPATH := $(shell LANG=C; crle | grep 'Default Library Path' | awk '{ print $$5 }' | sed 's/:/ /g')
endif
LIBEXT = so
OS_LDFLAGS += -lsocket -lnsl
ifeq (incsfw,$(shell if ${TEST} -d /opt/sfw/include; then echo incsfw; fi))
INCPATH += /opt/sfw/include
OS_CCDEFS += -I/opt/sfw/include
endif
ifeq (libsfw,$(shell if ${TEST} -d /opt/sfw/lib; then echo libsfw; fi))
LIBPATH += /opt/sfw/lib
OS_LDFLAGS += -L/opt/sfw/lib -R/opt/sfw/lib
endif
OS_CCDEFS += -D_LARGEFILE_SOURCE
else
ifeq (cygwin,$(OSTYPE))
# use 0readme_ethernet.txt documented Windows pcap build components
INCPATH += ../windows-build/winpcap/WpdPack/Include
LIBPATH += ../windows-build/winpcap/WpdPack/Lib
PCAPLIB = wpcap
LIBEXT = a
else
ifneq (,$(findstring AIX,$(OSTYPE)))
OS_LDFLAGS += -lm -lrt
ifeq (incopt,$(shell if ${TEST} -d /opt/freeware/include; then echo incopt; fi))
INCPATH += /opt/freeware/include
OS_CCDEFS += -I/opt/freeware/include
endif
ifeq (libopt,$(shell if ${TEST} -d /opt/freeware/lib; then echo libopt; fi))
LIBPATH += /opt/freeware/lib
OS_LDFLAGS += -L/opt/freeware/lib
endif
else
ifneq (,$(findstring Haiku,$(OSTYPE)))
HAIKU_ARCH=$(shell getarch)
ifeq ($(HAIKU_ARCH),)
$(error Missing getarch command, your Haiku release is probably too old)
endif
ifeq ($(HAIKU_ARCH),x86_gcc2)
$(error Unsupported arch x86_gcc2. Run setarch x86 and retry)
endif
INCPATH := $(shell findpaths -e -a $(HAIKU_ARCH) B_FIND_PATH_HEADERS_DIRECTORY)
INCPATH += $(shell findpaths -e B_FIND_PATH_HEADERS_DIRECTORY posix)
LIBPATH := $(shell findpaths -e -a $(HAIKU_ARCH) B_FIND_PATH_DEVELOP_LIB_DIRECTORY)
OS_LDFLAGS += -lnetwork
else
ifeq (,$(findstring NetBSD,$(OSTYPE)))
ifneq (no ldconfig,$(findstring no ldconfig,$(shell which ldconfig 2>&1)))
LDSEARCH :=$(shell LANG=C; ldconfig -r | grep 'search directories' | awk '{print $$3}' | sed 's/:/ /g')
endif
ifneq (,$(LDSEARCH))
LIBPATH := $(LDSEARCH)
else
ifeq (,$(strip $(LPATH)))
$(info *** Warning ***)
$(info *** Warning *** The library search path on your $(OSTYPE) platform can not be)
$(info *** Warning *** determined. This should be resolved before you can expect)
$(info *** Warning *** to have fully working simulators.)
$(info *** Warning ***)
$(info *** Warning *** You can specify your library paths via the LPATH environment)
$(info *** Warning *** variable.)
$(info *** Warning ***)
else
LIBPATH = $(subst :, ,$(LPATH))
endif
endif
OS_LDFLAGS += $(patsubst %,-L%,${LIBPATH})
endif
endif
endif
ifeq (usrpkglib,$(shell if ${TEST} -d /usr/pkg/lib; then echo usrpkglib; fi))
LIBPATH += /usr/pkg/lib
INCPATH += /usr/pkg/include
OS_LDFLAGS += -L/usr/pkg/lib -R/usr/pkg/lib
OS_CCDEFS += -I/usr/pkg/include
endif
ifeq (/usr/local/lib,$(findstring /usr/local/lib,${LIBPATH}))
INCPATH += /usr/local/include
OS_CCDEFS += -I/usr/local/include
endif
ifneq (,$(findstring NetBSD,$(OSTYPE))$(findstring FreeBSD,$(OSTYPE))$(findstring AIX,$(OSTYPE)))
LIBEXT = so
else
ifeq (HP-UX,$(OSTYPE))
ifeq (ia64,$(shell uname -m))
LIBEXT = so
else
LIBEXT = sl
endif
OS_CCDEFS += -D_HPUX_SOURCE -D_LARGEFILE64_SOURCE
OS_LDFLAGS += -Wl,+b:
override LTO =
else
LIBEXT = a
endif
endif
endif
endif
endif
endif
INCPATH += BIN/unix-build/local/include
OS_CCDEFS += -IBIN/unix-build/local/include
ifneq (,$(shell if $(TEST) -d BIN/unix-build/local/lib; then echo extra libs; fi))
LIBPATH += BIN/unix-build/local/lib
endif
ifeq (,$(and $(findstring -D_LARGEFILE64_SOURCE,$(OS_CCDEFS)),$(shell grep _LARGEFILE64_SOURCE $(call find_include,pthread))))
OS_CCDEFS += -D_LARGEFILE64_SOURCE
endif
ifeq (,$(LIBSOEXT))
LIBSOEXT = $(LIBEXT)
endif
ifeq (,$(filter /lib/,$(LIBPATH)))
ifeq (existlib,$(shell if $(TEST) -d /lib/; then echo existlib; fi))
LIBPATH += /lib/
endif
endif
ifeq (,$(filter /usr/lib/,$(LIBPATH)))
ifeq (existusrlib,$(shell if $(TEST) -d /usr/lib/; then echo existusrlib; fi))
LIBPATH += /usr/lib/
endif
endif
export CPATH = $(subst $() $(),:,$(INCPATH))
export LIBRARY_PATH = $(subst $() $(),:,$(LIBPATH))
endif
$(info lib paths are: ${LIBPATH})
$(info include paths are: ${INCPATH})
need_search = $(strip $(shell ld -l$(1) /dev/null 2>&1 | grep $(1) | sed s/$(1)//))
LD_SEARCH_NEEDED := $(call need_search,ZzzzzzzZ)
ifneq (,$(or $(findstring Android,$(shell uname -a)),$(call find_lib,m)))
OS_LDFLAGS += -lm
$(info using libm: $(call find_lib,m))
endif
ifneq (,$(call find_lib,rt))
OS_LDFLAGS += -lrt
$(info using librt: $(call find_lib,rt))
endif
ifneq (,$(call find_include,pthread))
ifneq (,$(call find_lib,pthread))
PTHREAD_CCDEFS += -DSIM_ASYNCH_IO
PTHREAD_LDFLAGS += -lpthread
$(info using libpthread: $(call find_lib,pthread) $(call find_include,pthread))
else
LIBEXTSAVE := ${LIBEXT}
LIBEXT = a
ifneq (,$(call find_lib,pthread))
PTHREAD_CCDEFS += -DSIM_ASYNCH_IO
PTHREAD_LDFLAGS += -lpthread
$(info using libpthread: $(call find_lib,pthread) $(call find_include,pthread))
else
ifneq (,$(findstring Haiku,$(OSTYPE)))
PTHREAD_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO
$(info using libpthread: $(call find_include,pthread))
else
ifeq (Darwin,$(OSTYPE))
PTHREAD_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO
PTHREAD_LDFLAGS += -lpthread
$(info using macOS libpthread: $(call find_include,pthread))
endif
endif
endif
LIBEXT = $(LIBEXTSAVE)
endif
endif
# Find PCRE RegEx library.
ifneq (,$(call find_include,pcre))
ifneq (,$(call find_lib,pcre))
$(info using libpcre: $(call find_lib,pcre) $(call find_include,pcre))
OS_CCDEFS += -DHAVE_PCRE_H
OS_LDFLAGS += -lpcre
ifeq ($(LD_SEARCH_NEEDED),$(call need_search,pcre))
OS_LDFLAGS += -L$(dir $(call find_lib,pcre))
endif
else
export NEED_PCRE = TRUE
endif
else
export NEED_PCRE = TRUE
endif
ifneq (,$(NEED_PCRE))
DESIRED_PCRE = $(word $(DPKG_PCRE),$(PKGS_SRC_$(strip $(PKG_MGR))))
ifneq (,$(PKG_FIND))
DESIRED_AVAILABLE = $(shell $(PKG_FIND) 2>/dev/null $(DESIRED_PCRE) | grep $(DESIRED_PCRE))
endif
ifneq (,$(DESIRED_AVAILABLE))
NEEDED_PKGS += DPKG_PCRE
else
BUILD_EXTRA = $(word $(DPKG_BUILD),$(PKGS_SRC_$(strip $(PKG_MGR))))
BUILD_EXTRA_PKG = $(word 1,$(subst :, ,$(BUILD_EXTRA)))
BUILD_EXTRA_TEST = $(word 2,$(subst :, ,$(BUILD_EXTRA)))
ifneq (,$(BUILD_EXTRA_TEST))
ifneq (installed,$(shell if $(TEST) -d $(BUILD_EXTRA_TEST); then echo installed; fi))
NEEDED_PKGS += DPKG_BUILD
$(info Need Build Support package: $(BUILD_EXTRA_PKG))
else
$(info Building missing PCRE dependency)
UNIX_BUILD = $(shell if $(TEST) -d .; then if $(TEST) -d BIN/unix-build; then cd BIN/unix-build; else mkdir -p BIN; cd BIN; git clone https://github.com/simh/unix-build; cd unix-build; fi; make NEED_PCRE=$(NEED_PCRE) >/dev/null 2>&1; fi)
OS_CCDEFS += -DHAVE_PCRE_H $(UNIX_BUILD)
OS_LDFLAGS += -lpcre
endif
endif
endif
endif
# Find libedit BSD licensed library for readline support.
ifneq (,$(call find_lib,edit))
ifneq (,$(call find_include,editline/readline))
$(info using libedit: $(call find_lib,edit) $(call find_include,editline/readline))
ifneq (,$(ALL_DEPENDENCIES))
OS_CCDEFS += -DHAVE_LIBEDIT
OS_LDFLAGS += -ledit
ifneq (,$(call find_lib,termcap))
OS_LDFLAGS += -ltermcap
endif
ifeq ($(LD_SEARCH_NEEDED),$(call need_search,edit))
OS_LDFLAGS += -L$(dir $(call find_lib,edit))
endif
endif
else
NEEDED_PKGS += DPKG_EDITLINE
endif
else
NEEDED_PKGS += DPKG_EDITLINE
endif
# The recursive logic needs a GNU make at least v4 when building with
# separate compiles
ifneq (,$(call find_exe,gmake))
override MAKE = $(call find_exe,gmake)
endif
ifneq (,$(and $(findstring 3.,$(GNUMakeVERSION)),$(findstring 1,$(BUILD_SEPARATE))))
NEEDED_PKGS += DPKG_GMAKE
endif
ifeq (,$(call find_exe,curl))
$(info *** Info ***)
$(info *** Info *** The SCP curl command needs the curl package installed.)
$(info *** Info *** Normal simulator execution doesn't require curl, but user)
$(info *** Info *** scripts may want it available.)
$(info *** Info ***)
OPTIONAL_PKGS += DPKG_CURL
endif
# Find available ncurses library.
ifneq (,$(call find_include,ncurses))
ifneq (,$(call find_lib,ncurses))
OS_CURSES_DEFS += -DHAVE_NCURSES -lncurses
endif
endif
ifeq (,$(findstring Android,$(shell uname -a)))
ifneq (,$(call find_include,semaphore))
ifneq (, $(shell grep sem_timedwait $(call find_include,semaphore)))
OS_CCDEFS += -DHAVE_SEMAPHORE
$(info using semaphore: $(call find_include,semaphore))
endif
endif
endif
ifneq (,$(call find_include,sys/ioctl))
OS_CCDEFS += -DHAVE_SYS_IOCTL
endif
ifneq (,$(call find_include,linux/cdrom))
OS_CCDEFS += -DHAVE_LINUX_CDROM
endif
ifneq (,$(call find_include,dlfcn))
ifneq (,$(call find_lib,dl))
OS_CCDEFS += -DSIM_HAVE_DLOPEN=$(LIBSOEXT)
OS_LDFLAGS += -ldl
$(info using libdl: $(call find_lib,dl) $(call find_include,dlfcn))
else
ifneq (,$(findstring BSD,$(OSTYPE))$(findstring AIX,$(OSTYPE))$(findstring Haiku,$(OSTYPE)))
OS_CCDEFS += -DSIM_HAVE_DLOPEN=so
$(info using libdl: $(call find_include,dlfcn))
else
ifneq (,$(call find_lib,dld))
OS_CCDEFS += -DSIM_HAVE_DLOPEN=$(LIBSOEXT)
OS_LDFLAGS += -ldld
$(info using libdld: $(call find_lib,dld) $(call find_include,dlfcn))
else
ifeq (Darwin,$(OSTYPE))
OS_CCDEFS += -DSIM_HAVE_DLOPEN=dylib
$(info using macOS dlopen with .dylib)
endif
endif
endif
endif
endif
ifneq (,$(call find_include,utime))
OS_CCDEFS += -DHAVE_UTIME
endif
ifneq (,$(call find_include,png))
ifneq (,$(call find_lib,png))
$(info using libpng: $(call find_lib,png) $(call find_include,png))
PNG_CCDEFS += -DHAVE_LIBPNG
ifneq (,$(ALL_DEPENDENCIES))
PNG_LDFLAGS += -lpng
endif
ifneq (,$(call find_include,zlib))
ifneq (,$(call find_lib,z))
$(info using zlib: $(call find_lib,z) $(call find_include,zlib))
PNG_CCDEFS += -DHAVE_ZLIB
ifneq (,$(ALL_DEPENDENCIES))
PNG_LDFLAGS += -lz
endif
else
NEEDED_PKGS += DPKG_ZLIB
endif
else
NEEDED_PKGS += DPKG_ZLIB
endif
else
# some systems may name the png library libpng16
ifneq (,$(call find_lib,png16))
PNG_CCDEFS += -DHAVE_LIBPNG
PNG_LDFLAGS += -lpng16
$(info using libpng: $(call find_lib,png16) $(call find_include,png))
ifneq (,$(call find_include,zlib))
ifneq (,$(call find_lib,z))
PNG_CCDEFS += -DHAVE_ZLIB
PNG_LDFLAGS += -lz
$(info using zlib: $(call find_lib,z) $(call find_include,zlib))
else
NEEDED_PKGS += DPKG_ZLIB
endif
endif
else
NEEDED_PKGS += DPKG_PNG
endif
endif
else
NEEDED_PKGS += DPKG_PNG
endif
ifneq (,$(call find_include,glob))
OS_CCDEFS += -DHAVE_GLOB
else
ifneq (,$(call find_include,fnmatch))
OS_CCDEFS += -DHAVE_FNMATCH
endif
endif
ifneq (,$(call find_include,sys/mman))
ifneq (,$(shell grep shm_open $(call find_include,sys/mman)))
# some Linux installs have been known to have the include, but are
# missing librt (where the shm_ APIs are implemented on Linux)
# other OSes seem have these APIs implemented elsewhere
ifneq (,$(if $(findstring Linux,$(OSTYPE)),$(call find_lib,rt),OK))
OS_CCDEFS += -DHAVE_SHM_OPEN
$(info using mman: $(call find_include,sys/mman))
endif
endif
endif
ifneq (,$(VIDEO_USEFUL))
ifeq (cygwin,$(OSTYPE))
LIBEXTSAVE := ${LIBEXT}
LIBEXT = dll.a
endif
ifneq (,$(call find_include,SDL2/SDL))
ifneq (,$(call find_lib,SDL2))
ifneq (,$(call find_exe,sdl2-config))
SDLX_CONFIG = sdl2-config
endif
ifneq (,$(SDLX_CONFIG))
VIDEO_CCDEFS += -DHAVE_LIBSDL `$(SDLX_CONFIG) --cflags` $(PNG_CCDEFS)
VIDEO_LDFLAGS += `$(SDLX_CONFIG) --libs` $(PNG_LDFLAGS)
VIDEO_FEATURES = - video capabilities provided by libSDL2 (Simple Directmedia Layer)
DISPLAYL = ${DISPLAYD}/display.c $(DISPLAYD)/sim_ws.c
DISPLAYVT = ${DISPLAYD}/vt11.c
DISPLAY340 = ${DISPLAYD}/type340.c
DISPLAYNG = ${DISPLAYD}/ng.c
DISPLAYIII = ${DISPLAYD}/iii.c
DISPLAY_OPT += -DUSE_DISPLAY $(VIDEO_CCDEFS) -DUSE_SIM_VIDEO
$(info using libSDL2: $(call find_include,SDL2/SDL))
endif
else
NEEDED_PKGS += DPKG_SDL
endif
else
NEEDED_PKGS += DPKG_SDL
endif
ifneq (,$(BESM6_BUILD))
ifneq (,$(and $(findstring sdl2,${VIDEO_LDFLAGS}),$(call find_include,SDL2/SDL_ttf),$(call find_lib,SDL2_ttf)))
$(info using libSDL2_ttf: $(call find_lib,SDL2_ttf) $(call find_include,SDL2/SDL_ttf))
$(info ***)
VIDEO_TTF_OPT = $(VIDEO_CCDEFS) -DHAVE_LIBSDL_TTF
VIDEO_TTF_LDFLAGS += -lSDL2_ttf
VIDEO_FEATURES += with TrueType font support
# Retain support for explicitly supplying a preferred fontfile
ifneq (,$(FONTFILE))
VIDEO_TTF_OPT += -DFONTFILE=${FONTFILE}
endif
else
NEEDED_PKGS += DPKG_SDL_TTF
endif
ifneq (,$(and $(VIDEO_CCDEFS),$(PTHREAD_CCDEFS)))
VIDEO_CCDEFS += $(PTHREAD_CCDEFS)
VIDEO_LDFLAGS += $(PTHREAD_LDFLAGS)
endif
endif
endif
ifneq (,$(NETWORK_USEFUL))
ifeq (Darwin,$(OSTYPE)) # the macOS vmnet framework is only useful when the OS is 10.15 or later
ifeq (,$(findstring clang,$(COMPILER_NAME))) #only clang can use vmnet APIs
DONT_USE_VMNET = DONT_USE_VMNET
endif
ifeq (,$(DONT_USE_VMNET))
macOSMajor = $(strip $(shell sw_vers 2>/dev/null | grep 'ProductVersion:' 2>/dev/null | awk '{ print $$2 }' | awk -F . '{ print $$1 }'))
macOSMinor = $(strip $(shell sw_vers 2>/dev/null | grep 'ProductVersion:' 2>/dev/null | awk '{ print $$2 }' | awk -F . '{ print $$2 }'))
ifeq (10,$(macOSMajor))
DONT_USE_VMNET = $(shell if ${TEST} $(macOSMinor) -lt 15; then echo DONT_USE_VMNET; fi)
else
DONT_USE_VMNET = $(shell if ${TEST} $(macOSMajor) -lt 10; then echo DONT_USE_VMNET; fi)
endif
ifeq (,$(DONT_USE_VMNET)$(DONT_USE_VMNET_HOST))
DONT_USE_VMNET_HOST = $(shell if ${TEST} $(macOSMajor) -lt 11; then echo DONT_USE_VMNET_HOST; fi)
endif
endif
endif
ifneq (,$(if $(DONT_USE_VMNET),,$(call find_include,vmnet.framework/Headers/vmnet)))
# sim_ether reduces network features to the appropriate minimal set
NETWORK_LAN_FEATURES += VMNET
NETWORK_CCDEFS += -DUSE_SHARED -I slirp -I slirp_glue -I slirp_glue/qemu -DHAVE_VMNET_NETWORK
ifneq (,$(DONT_USE_VMNET_HOST))
NETWORK_CCDEFS += -DDONT_USE_VMNET_HOST
endif
NETWORK_DEPS += slirp/*.c slirp_glue/*.c
NETWORK_LDFLAGS += -framework vmnet
$(info using vmnet: $(call find_include,vmnet.framework/Headers/vmnet))
else
# Consider other network connections
ifneq (,$(call find_include,pcap))
ifneq (,$(shell grep 'pcap/pcap.h' $(call find_include,pcap) | grep include))
PCAP_H_PATH = $(dir $(call find_include,pcap))pcap/pcap.h
else
PCAP_H_PATH = $(call find_include,pcap)
endif
ifneq (,$(shell grep pcap_compile $(PCAP_H_PATH) | grep const))
BPF_CONST_STRING = -DBPF_CONST_STRING
endif
NETWORK_CCDEFS += -DHAVE_PCAP_NETWORK -I$(dir $(call find_include,pcap)) $(BPF_CONST_STRING)
NETWORK_LAN_FEATURES += PCAP
ifneq (,$(call find_lib,$(PCAPLIB)))
ifneq ($(USE_NETWORK),) # Network support specified on the GNU make command line
NETWORK_CCDEFS += -DUSE_NETWORK
ifeq (,$(findstring Linux,$(OSTYPE))$(findstring Darwin,$(OSTYPE)))
$(info *** Warning ***)
$(info *** Warning *** Directly linking against libpcap is provides no measurable)
$(info *** Warning *** benefits over dynamically linking libpcap.)
$(info *** Warning ***)
$(info *** Warning *** Support for linking this way is currently deprecated and may be removed)
$(info *** Warning *** in the future.)
$(info *** Warning ***)
else
$(info *** Error ***)
$(info *** Error *** Directly linking against libpcap is provides no measurable)
$(info *** Error *** benefits over dynamically linking libpcap.)
$(info *** Error ***)
$(info *** Error *** Support for linking directly has been removed on the $(OSTYPE))
$(info *** Error *** platform.)
$(info *** Error ***)
$(error Retry your build without specifying USE_NETWORK=1)
endif
ifeq (cygwin,$(OSTYPE))
# cygwin has no ldconfig so explicitly specify pcap object library
NETWORK_LDFLAGS = -L$(dir $(call find_lib,$(PCAPLIB))) -Wl,-R,$(dir $(call find_lib,$(PCAPLIB))) -l$(PCAPLIB)
else
NETWORK_LDFLAGS = -l$(PCAPLIB)
endif
$(info using libpcap: $(call find_lib,$(PCAPLIB)) $(call find_include,pcap))
NETWORK_FEATURES = - static networking support using $(OSNAME) provided libpcap components
else # default build uses dynamic libpcap
NETWORK_CCDEFS += -DUSE_SHARED
$(info using libpcap: $(call find_include,pcap))
NETWORK_FEATURES = - dynamic networking support using $(OSNAME) provided libpcap components
endif
else
LIBEXTSAVE := ${LIBEXT}
LIBEXT = a
ifneq (,$(call find_lib,$(PCAPLIB)))
NETWORK_CCDEFS += -DUSE_NETWORK
NETWORK_LDFLAGS := -L$(dir $(call find_lib,$(PCAPLIB))) -l$(PCAPLIB)
NETWORK_FEATURES = - static networking support using $(OSNAME) provided libpcap components
$(info using libpcap: $(call find_lib,$(PCAPLIB)) $(call find_include,pcap))
endif
LIBEXT = $(LIBEXTSAVE)
ifeq (Darwin,$(OSTYPE)$(findstring USE_,$(NETWORK_CCDEFS)))
NETWORK_CCDEFS +=
NETWORK_FEATURES = - dynamic networking support using $(OSNAME) provided libpcap components
$(info using macOS dynamic libpcap: $(call find_include,pcap))
endif
endif
else # pcap desired but pcap.h not found
ifneq (,$(call find_lib,$(PCAPLIB)))
PCAP_LIB_VERSION = $(shell strings $(call find_lib,$(PCAPLIB)) | grep 'libpcap version' | awk '{ print $$3}')
PCAP_LIB_BASE_VERSION = $(firstword $(subst ., ,$(PCAP_LIB_VERSION)))
endif
NEEDED_PKGS += DPKG_PCAP
# On non-Linux platforms, we'll still try to provide deprecated support for libpcap in /usr/local
INCPATHSAVE := ${INCPATH}
ifeq (,$(findstring Linux,$(OSTYPE)))
# Look for package built from tcpdump.org sources with default install target (or cygwin winpcap)
INCPATH += /usr/local/include
PCAP_H_FOUND = $(call find_include,pcap)
endif
ifneq (,$(strip $(PCAP_H_FOUND)))
ifneq (,$(shell grep 'pcap/pcap.h' $(call find_include,pcap) | grep include))
PCAP_H_PATH = $(dir $(call find_include,pcap))pcap/pcap.h
else
PCAP_H_PATH = $(call find_include,pcap)
endif
ifneq (,$(shell grep pcap_compile $(PCAP_H_PATH) | grep const))
BPF_CONST_STRING = -DBPF_CONST_STRING
endif
LIBEXTSAVE := ${LIBEXT}
# first check if binary - shared objects are available/installed in the linker known search paths
ifneq (,$(call find_lib,$(PCAPLIB)))
NETWORK_CCDEFS = -DUSE_SHARED -I$(dir $(call find_include,pcap)) $(BPF_CONST_STRING)
NETWORK_FEATURES = - dynamic networking support using libpcap components from www.tcpdump.org and locally installed libpcap.${LIBEXT}
$(info using libpcap: $(call find_include,pcap))
else
LIBPATH += /usr/local/lib
LIBEXT = a
ifneq (,$(call find_lib,$(PCAPLIB)))
$(info using libpcap: $(call find_lib,$(PCAPLIB)) $(call find_include,pcap))
ifeq (cygwin,$(OSTYPE))
NETWORK_CCDEFS = -DUSE_NETWORK -DHAVE_PCAP_NETWORK -I$(dir $(call find_include,pcap)) $(BPF_CONST_STRING)
NETWORK_LDFLAGS = -L$(dir $(call find_lib,$(PCAPLIB))) -Wl,-R,$(dir $(call find_lib,$(PCAPLIB))) -l$(PCAPLIB)
NETWORK_FEATURES = - static networking support using libpcap components located in the cygwin directories
else
NETWORK_CCDEFS := -DUSE_NETWORK -DHAVE_PCAP_NETWORK -isystem -I$(dir $(call find_include,pcap)) $(BPF_CONST_STRING) $(call find_lib,$(PCAPLIB))
NETWORK_FEATURES = - networking support using libpcap components from www.tcpdump.org
$(info *** Warning ***)
$(info *** Warning *** $(BUILD_SINGLE)Simulator$(BUILD_MULTIPLE) being built with networking support using)
$(info *** Warning *** libpcap components from www.tcpdump.org.)
$(info *** Warning *** Some users have had problems using the www.tcpdump.org libpcap)
$(info *** Warning *** components for simh networking. For best results, with)
$(info *** Warning *** simh networking, it is recommended that you install the)
$(info *** Warning *** libpcap-dev (or libpcap-devel) package from your $(OSNAME) distribution)
$(info *** Warning ***)
$(info *** Warning *** Building with the components manually installed from www.tcpdump.org)
$(info *** Warning *** is officially deprecated. Attempting to do so is unsupported.)
$(info *** Warning ***)
endif
else
$(error using libpcap: $(call find_include,pcap) missing $(PCAPLIB).${LIBEXT})
endif
NETWORK_LAN_FEATURES += PCAP
endif
LIBEXT = $(LIBEXTSAVE)
else
INCPATH = $(INCPATHSAVE)
ifeq (1,$(PCAP_LIB_BASE_VERSION))
$(info using libpcap $(PCAP_LIB_VERSION) without an available pcap.h)
NETWORK_CCDEFS = -DUSE_SHARED -DHAVE_PCAP_NETWORK -DPCAP_LIB_VERSION=$(PCAP_LIB_VERSION)
NETWORK_FEATURES = - dynamic networking support using libpcap components from www.tcpdump.org and locally installed libpcap.${LIBEXT}
NETWORK_LAN_FEATURES += PCAP
NEEDED_PKGS := $(filter-out DPKG_PCAP,$(NEEDED_PKGS))
else
$(info *** Warning ***)
$(info *** Warning *** $(BUILD_SINGLE)Simulator$(BUILD_MULTIPLE) $(BUILD_MULTIPLE_VERB) being built WITHOUT)
$(info *** Warning *** libpcap networking support)
$(info *** Warning ***)
$(info *** Warning *** To build simulator(s) with libpcap networking support you)
$(info *** Warning *** should install the libpcap development components for)
$(info *** Warning *** for your $(OSNAME) system.)
ifeq (,$(or $(findstring Linux,$(OSTYPE)),$(findstring OSX,$(OSNAME))))
$(info *** Warning *** You should read 0readme_ethernet.txt and follow the instructions)
$(info *** Warning *** regarding the needed libpcap development components for your)
$(info *** Warning *** $(OSNAME) platform.)
endif
$(info *** Warning ***)
endif
endif
endif
ifneq (,$(call find_lib,vdeplug))
# libvdeplug requires the use of the OS provided libpcap
ifeq (,$(findstring usr/local,$(NETWORK_CCDEFS)))
ifneq (,$(call find_include,libvdeplug))
# Provide support for vde networking
NETWORK_CCDEFS += -DHAVE_VDE_NETWORK
NETWORK_LAN_FEATURES += VDE
ifeq (,$(findstring USE_NETWORK,$(NETWORK_CCDEFS))$(findstring USE_SHARED,$(NETWORK_CCDEFS)))
NETWORK_CCDEFS += -DUSE_SHARED
endif
ifeq (Darwin,$(OSTYPE))
NETWORK_LDFLAGS += -lvdeplug -L$(dir $(call find_lib,vdeplug))
else
NETWORK_LDFLAGS += -lvdeplug -Wl,-R,$(dir $(call find_lib,vdeplug)) -L$(dir $(call find_lib,vdeplug))
endif
$(info using libvdeplug: $(call find_lib,vdeplug) $(call find_include,libvdeplug))
endif
else
ifeq (,$(findstring PKG_PCAP, $(NEEDED_PKGS)))
NEEDED_PKGS += DPKG_PCAP
endif
endif
else
NEEDED_PKGS += DPKG_VDE
endif
ifneq (,$(call find_include,linux/if_tun))
# Provide support for Tap networking on Linux
NETWORK_CCDEFS += -DHAVE_TAP_NETWORK
NETWORK_LAN_FEATURES += TAP
ifeq (,$(findstring USE_NETWORK,$(NETWORK_CCDEFS))$(findstring USE_SHARED,$(NETWORK_CCDEFS)))
NETWORK_CCDEFS += -DUSE_NETWORK
endif
endif
ifeq (bsdtuntap,$(shell if ${TEST} -e /usr/include/net/if_tun.h -o -e /Library/Extensions/tap.kext -o -e /Applications/Tunnelblick.app/Contents/Resources/tap-notarized.kext; then echo bsdtuntap; fi))
# Provide support for Tap networking on BSD platforms (including OS X)
NETWORK_CCDEFS += -DHAVE_TAP_NETWORK -DHAVE_BSDTUNTAP
NETWORK_LAN_FEATURES += TAP
ifeq (,$(findstring USE_NETWORK,$(NETWORK_CCDEFS))$(findstring USE_SHARED,$(NETWORK_CCDEFS)))
NETWORK_CCDEFS += -DUSE_NETWORK
endif
endif
endif
ifeq (slirp,$(shell if ${TEST} -e slirp_glue/sim_slirp.c; then echo slirp; fi))
NETWORK_CCDEFS += -I slirp -I slirp_glue -I slirp_glue/qemu -DHAVE_SLIRP_NETWORK -DUSE_SIMH_SLIRP_DEBUG
NETWORK_DEPS += slirp/*.c slirp_glue/*.c
NETWORK_LAN_FEATURES += NAT(SLiRP)
endif
ifneq (,$(and $(NETWORK_CCDEFS),$(PTHREAD_CCDEFS)))
NETWORK_CCDEFS += -DUSE_READER_THREAD $(PTHREAD_CCDEFS)
NETWORK_LDFLAGS += $(PTHREAD_LDFLAGS)
endif
NETWORK_OPT = $(NETWORK_CCDEFS)
endif
ifneq (binexists,$(shell if ${TEST} -e BIN/buildtools; then echo binexists; fi))
export MKDIRBIN
MKDIRBIN = @$(MKDIR) BIN/buildtools
endif
ifeq (commit-id-exists,$(shell if ${TEST} -e .git-commit-id; then echo commit-id-exists; fi))
GIT_COMMIT_ID=$(shell grep 'SIM_GIT_COMMIT_ID' .git-commit-id | awk '{ print $$2 }')
GIT_COMMIT_TIME=$(shell grep 'SIM_GIT_COMMIT_TIME' .git-commit-id | awk '{ print $$2 }')
else
ifeq (,$(shell grep 'define SIM_ARCHIVE_GIT_COMMIT_ID' sim_rev.h | grep 'Format:'))
GIT_COMMIT_ID=$(shell grep 'define SIM_ARCHIVE_GIT_COMMIT_ID' sim_rev.h | awk '{ print $$3 }')
GIT_COMMIT_TIME=$(shell grep 'define SIM_ARCHIVE_GIT_COMMIT_TIME' sim_rev.h | awk '{ print $$3 }')
GIT_ARCHIVE_COMMIT_ID=$(empty) $(empty)archive
else
ifeq (git-submodule,$(if $(shell cd .. ; git rev-parse --git-dir 2>/dev/null),git-submodule))
GIT_COMMIT_ID=$(shell cd .. ; git submodule status | grep " $(notdir $(realpath .)) " | awk '{ print $$1 }')
GIT_COMMIT_TIME=$(shell git $(REPO_PATH) --git-dir=$(realpath .)/.git log $(GIT_COMMIT_ID) -1 --pretty="%aI")
else
$(info *** Error ***)
$(info *** Error *** The simh git commit id can not be determined.)
$(info *** Error ***)
$(info *** Error *** There are ONLY two supported ways to acquire and build)
$(info *** Error *** the simh source code:)
$(info *** Error *** 1: directly with git via:)
$(info *** Error *** $$ git clone https://github.com/simh/simh)
$(info *** Error *** $$ cd simh)
$(info *** Error *** $$ make {simulator-name})
$(info *** Error *** OR)
$(info *** Error *** 2: download the source code zip archive from:)
$(info *** Error *** $$ wget(or via browser) https://github.com/simh/simh/archive/master.zip)
$(info *** Error *** $$ unzip master.zip)
$(info *** Error *** $$ cd simh-master)
$(info *** Error *** $$ make {simulator-name})
$(info *** Error ***)
$(error get simh source either with zip download or git clone)
endif
endif
endif
else
#Win32 Environments (via MinGW32)
GCC := gcc
GCC_Path := $(abspath $(dir $(word 1,$(wildcard $(addsuffix /${GCC}.exe,$(subst ;, ,${PATH}))))))
ifeq (rename-build-support,$(shell if exist ..\windows-build-windows-build echo rename-build-support))
REMOVE_OLD_BUILD := $(shell if exist ..\windows-build rmdir/s/q ..\windows-build)
FIXED_BUILD := $(shell move ..\windows-build-windows-build ..\windows-build >NUL)
endif
GCC_VERSION = $(word 3,$(shell ${GCC} --version))
COMPILER_NAME = GCC Version: $(GCC_VERSION)
ifeq (,$(findstring ++,${GCC}))
CC_STD = -std=gnu99
else
export CPP_BUILD = 1
endif
LTO_EXCLUDE_VERSIONS = 4.5.2
ifeq (,$(PATH_SEPARATOR))
PATH_SEPARATOR := ;
endif
INCPATH = $(abspath $(wildcard $(GCC_Path)\..\include $(subst $(PATH_SEPARATOR), ,$(CPATH)) $(subst $(PATH_SEPARATOR), ,$(C_INCLUDE_PATH))))
LIBPATH = $(abspath $(wildcard $(GCC_Path)\..\lib $(subst :, ,$(LIBRARY_PATH))))
$(info lib paths are: ${LIBPATH})
$(info include paths are: ${INCPATH})
# Give preference to any MinGW provided threading (if available)
ifneq (,$(call find_include,pthread))
PTHREADS_CCDEFS = -DUSE_READER_THREAD -DSIM_ASYNCH_IO
PTHREADS_LDFLAGS = -lpthread
else
ifeq (pthreads,$(shell if exist ..\windows-build\pthreads\Pre-built.2\include\pthread.h echo pthreads))
PTHREADS_CCDEFS = -DUSE_READER_THREAD -DPTW32_STATIC_LIB -D_POSIX_C_SOURCE -I../windows-build/pthreads/Pre-built.2/include -DSIM_ASYNCH_IO
PTHREADS_LDFLAGS = -lpthreadGC2 -L..\windows-build\pthreads\Pre-built.2\lib
endif
endif
ifeq (pcap,$(shell if exist ..\windows-build\winpcap\Wpdpack\include\pcap.h echo pcap))
NETWORK_LDFLAGS =
NETWORK_OPT = -DUSE_SHARED -I../windows-build/winpcap/Wpdpack/include
NETWORK_FEATURES = - dynamic networking support using windows-build provided libpcap components
NETWORK_LAN_FEATURES += PCAP
else
ifneq (,$(call find_include,pcap))
NETWORK_LDFLAGS =
NETWORK_OPT = -DUSE_SHARED
NETWORK_FEATURES = - dynamic networking support using libpcap components found in the MinGW directories
NETWORK_LAN_FEATURES += PCAP
endif
endif
ifneq (,$(VIDEO_USEFUL))
SDL_INCLUDE = $(word 1,$(shell dir /b /s ..\windows-build\libSDL\SDL.h))
ifeq (SDL.h,$(findstring SDL.h,$(SDL_INCLUDE)))
VIDEO_CCDEFS += -DHAVE_LIBSDL -DUSE_SIM_VIDEO -I$(abspath $(dir $(SDL_INCLUDE)))
ifneq ($(DEBUG),)
VIDEO_LDFLAGS += $(abspath $(dir $(SDL_INCLUDE))\..\..\..\lib\lib-VC2008\Debug)/SDL2.lib
else
VIDEO_LDFLAGS += $(abspath $(dir $(SDL_INCLUDE))\..\..\..\lib\lib-VC2008\Release)/SDL2.lib
endif
VIDEO_FEATURES = - video capabilities provided by libSDL2 (Simple Directmedia Layer)
DISPLAYL = ${DISPLAYD}/display.c $(DISPLAYD)/sim_ws.c
DISPLAYVT = ${DISPLAYD}/vt11.c
DISPLAY340 = ${DISPLAYD}/type340.c
DISPLAYNG = ${DISPLAYD}/ng.c
DISPLAY_OPT += -DUSE_DISPLAY $(VIDEO_CCDEFS)
else
$(info ***********************************************************************)
$(info ***********************************************************************)
$(info ** This build could produce simulators with video capabilities. **)
$(info ** However, the required files to achieve this can not be found on **)
$(info ** on this system. Download the file: **)
$(info ** https://github.com/simh/windows-build/archive/windows-build.zip **)
$(info ** Extract the windows-build-windows-build folder it contains to **)
$(info ** $(abspath ..\) **)
$(info ***********************************************************************)
$(info ***********************************************************************)
$(info .)
endif
endif
OS_CCDEFS += -fms-extensions $(PTHREADS_CCDEFS)
OS_LDFLAGS += -lm -lwsock32 -lwinmm $(PTHREADS_LDFLAGS)
EXE = .exe
ifeq (,$(findstring clean,${MAKECMDGOALS}))
ifneq (buildtoolsexists,$(shell if exist BIN\buildtools (echo buildtoolsexists) else (mkdir BIN\buildtools)))
MKDIRBIN=
endif
endif
ifneq ($(USE_NETWORK),)
NETWORK_OPT += -DUSE_SHARED
endif
ifeq (git-repo,$(shell if exist .git echo git-repo))
GIT_PATH := $(shell where git)
ifeq (,$(GIT_PATH))
$(error building using a git repository, but git is not available)
endif
ifeq (commit-id-exists,$(shell if exist .git-commit-id echo commit-id-exists))
CURRENT_FULL_GIT_COMMIT_ID=$(shell for /F "tokens=2" %%i in ("$(shell findstr /C:"SIM_GIT_COMMIT_ID" .git-commit-id)") do echo %%i)
CURRENT_GIT_COMMIT_ID=$(word 1,$(subst +, , $(CURRENT_FULL_GIT_COMMIT_ID)))
ACTUAL_GIT_COMMIT_ID=$(strip $(shell $(REPO_PATH) git log -1 --pretty=%H))
ifneq ($(CURRENT_GIT_COMMIT_ID),$(ACTUAL_GIT_COMMIT_ID))
ifeq (,$(strip $(findstring scp.c,$(shell git $(REPO_PATH) diff --name-only))))
# scp.c hasn't changed, so we want to touch it to force it to recompile
# but touch isn't part of MinGW, so we do some git monkey business
NEED_COMMIT_ID = need-commit-id$(file >> scp.c,)$(shell git $(REPO_PATH) restore scp.c)
else
NEED_COMMIT_ID = need-commit-id
endif
# make sure that the invalidly formatted .git-commit-id file wasn't generated
# by legacy git hooks which need to be removed.
$(shell if exist .git\hooks\post-checkout del .git\hooks\post-checkout)
$(shell if exist .git\hooks\post-commit del .git\hooks\post-commit)
$(shell if exist .git\hooks\post-merge del .git\hooks\post-merge)
endif
else
ifeq (,$(strip $(findstring scp.c,$(shell git $(REPO_PATH) diff --name-only))))
NEED_COMMIT_ID = need-commit-id$(file >> scp.c,)$(shell git $(REPO_PATH) restore scp.c)
else
NEED_COMMIT_ID = need-commit-id
endif
endif
ifneq (,$(shell git $(REPO_PATH) update-index --refresh --))
ifeq (,$(findstring +uncommitted-changes,$(CURRENT_FULL_GIT_COMMIT_ID)))
ifeq (,$(strip $(findstring scp.c,$(shell git $(REPO_PATH) diff --name-only))))
GIT_EXTRA_FILES=+uncommitted-changes$(file >> scp.c,)$(shell git $(REPO_PATH) restore scp.c)
else
GIT_EXTRA_FILES=+uncommitted-changes
endif
else
GIT_EXTRA_FILES=+uncommitted-changes
endif
endif
ifneq (,$(or $(NEED_COMMIT_ID),$(GIT_EXTRA_FILES)))
isodatetime=$(shell git $(REPO_PATH) log -1 --pretty=%ai)
isodate=$(word 1,$(isodatetime))T$(word 2,$(isodatetime))$(word 3,$(isodatetime))
$(shell echo SIM_GIT_COMMIT_ID $(ACTUAL_GIT_COMMIT_ID)$(GIT_EXTRA_FILES)>.git-commit-id)
$(shell echo SIM_GIT_COMMIT_TIME $(isodate)>>.git-commit-id)
endif
endif
ifneq (,$(shell if exist .git-commit-id echo git-commit-id))
GIT_COMMIT_ID=$(shell for /F "tokens=2" %%i in ("$(shell findstr /C:"SIM_GIT_COMMIT_ID" .git-commit-id)") do echo %%i)
GIT_COMMIT_TIME=$(shell for /F "tokens=2" %%i in ("$(shell findstr /C:"SIM_GIT_COMMIT_TIME" .git-commit-id)") do echo %%i)
else
ifeq (,$(shell findstr /C:"define SIM_GIT_COMMIT_ID" sim_rev.h | findstr Format))
GIT_COMMIT_ID=$(shell for /F "tokens=3" %%i in ("$(shell findstr /C:"define SIM_GIT_COMMIT_ID" sim_rev.h)") do echo %%i)
GIT_COMMIT_TIME=$(shell for /F "tokens=3" %%i in ("$(shell findstr /C:"define SIM_GIT_COMMIT_TIME" sim_rev.h)") do echo %%i)
endif
endif
ifneq (windows-build,$(shell if exist ..\windows-build\README.md echo windows-build))
ifneq (,$(GIT_PATH))
$(info Cloning the windows-build dependencies into $(abspath ..)/windows-build)
$(shell git clone https://github.com/simh/windows-build ../windows-build)
else
ifneq (3,${SIM_MAJOR})
$(info ***********************************************************************)
$(info ***********************************************************************)
$(info ** This build is operating without the required windows-build **)
$(info ** components and therefore will produce less than optimal **)
$(info ** simulator operation and features. **)
$(info ** Download the file: **)
$(info ** https://github.com/simh/windows-build/archive/windows-build.zip **)
$(info ** Extract the windows-build-windows-build folder it contains to **)
$(info ** $(abspath ..\) **)
$(info ***********************************************************************)
$(info ***********************************************************************)
$(info .)
endif
endif
else
# Version check on windows-build
WINDOWS_BUILD = $(word 2,$(shell findstr WINDOWS-BUILD ..\windows-build\Windows-Build_Versions.txt))
ifeq (,$(WINDOWS_BUILD))
WINDOWS_BUILD = 00000000
endif
ifneq (,$(or $(shell if 20191001 GTR $(WINDOWS_BUILD) echo old-windows-build),$(and $(shell if 20171112 GTR $(WINDOWS_BUILD) echo old-windows-build),$(findstring pthreadGC2,$(PTHREADS_LDFLAGS)))))
$(info .)
$(info windows-build components at: $(abspath ..\windows-build))
$(info .)
$(info ***********************************************************************)
$(info ***********************************************************************)
$(info ** This currently available windows-build components are out of **)
ifneq (,$(GIT_PATH))
$(info ** date. You need to update to the latest windows-build **)
$(info ** dependencies by executing these commands: **)
$(info ** **)
$(info ** > cd ..\windows-build **)
$(info ** > git pull **)
$(info ** **)
$(info ***********************************************************************)
$(info ***********************************************************************)
$(error .)
else
$(info ** date. For the most functional and stable features you should **)
$(info ** Download the file: **)
$(info ** https://github.com/simh/windows-build/archive/windows-build.zip **)
$(info ** Extract the windows-build-windows-build folder it contains to **)
$(info ** $(abspath ..\) **)
$(info ***********************************************************************)
$(info ***********************************************************************)
$(info .)
$(error Update windows-build)
endif
endif
ifeq (pcre,$(shell if exist ..\windows-build\PCRE\include\pcre.h echo pcre))
OS_CCDEFS += -DHAVE_PCRE_H -DPCRE_STATIC -I$(abspath ../windows-build/PCRE/include)
OS_LDFLAGS += -lpcre -L../windows-build/PCRE/lib/
$(info using libpcre: $(abspath ../windows-build/PCRE/lib/pcre.a) $(abspath ../windows-build/PCRE/include/pcre.h))
endif
ifeq (slirp,slirp)
NETWORK_OPT += -I slirp -I slirp_glue -I slirp_glue/qemu -DHAVE_SLIRP_NETWORK -DUSE_SIMH_SLIRP_DEBUG slirp/*.c slirp_glue/*.c -lIphlpapi
NETWORK_LAN_FEATURES += NAT(SLiRP)
endif
endif
ifneq (,$(call find_include,ddk/ntdddisk))
CFLAGS_I = -DHAVE_NTDDDISK_H
endif
endif # Win32 (via MinGW)
ifeq (clean,$(strip ${MAKECMDGOALS}))
# a simple clean has no dependencies
NEEDED_PKGS =
OPTIONAL_PKGS =
endif
USEFUL_PACKAGES = $(filter-out -,$(foreach word,$(NEEDED_PKGS),$(word 1,$(subst :, ,$(word $($(word)),$(PKGS_SRC_$(strip $(PKG_MGR))))))))
OPTIONAL_PACKAGES = $(filter-out -,$(foreach word,$(OPTIONAL_PKGS),$(word $($(word)),$(PKGS_SRC_$(strip $(PKG_MGR))))))
USEFUL_PLURAL = $(if $(word 2,$(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES)),s,)
USEFUL_MULTIPLE_HIST = $(if $(word 2,$(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES)),were,was)
USEFUL_MULTIPLE = $(if $(word 2,$(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES)),these,this)
ifneq (,$(USEFUL_PACKAGES))
$(info )
$(info *** Info ***)
$(info *** Info *** The simulator$(BUILD_MULTIPLE) you are building could provide more)
$(info *** Info *** functionality if the:)
$(info *** Info *** $(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES))
$(info *** Info *** package$(USEFUL_PLURAL) $(USEFUL_MULTIPLE_HIST) available on your system.)
$(info )
ifeq (,$(AUTO_INSTALL_PACKAGES))
$(info *** You have the option of building $(MAKECMDGOALS_DESCRIPTION) without the)
$(info *** functionality $(USEFUL_MULTIPLE) package$(USEFUL_PLURAL) provide$(if $(USEFUL_PLURAL),,s), or stopping now to install)
$(info *** $(USEFUL_MULTIPLE) package$(USEFUL_PLURAL).)
$(info )
endif
endif
ifneq (,$(BUILD_SEPARATE))
EXTRAS:=BUILD_SEPARATE=$(BUILD_SEPARATE)
endif
ifneq (,$(QUIET))
EXTRAS+= QUIET=$(QUIET)
endif
ifneq (,$(and $(AUTO_INSTALL_PACKAGES),$(PKG_CMD),$(USEFUL_PACKAGES)))
ifneq (,$(AUTO_INSTALL_PACKAGES))
$(info Running $(word 1,$(PKG_CMD)) now to install $(USEFUL_MULTIPLE) package$(USEFUL_PLURAL) before building $(MAKECMDGOALS_DESCRIPTION)?)
else
$(info Do you want to install $(USEFUL_MULTIPLE) package$(USEFUL_PLURAL) before building $(MAKECMDGOALS_DESCRIPTION)?)
endif
ifeq (,$(if $(AUTO_INSTALL_PACKAGES),,$(shell $(SHELL) -c 'read -p "[Enter Y or N, Default is Y] " answer; echo $$answer' | grep -i n)))
INSTALLER_RESULT = $(shell $(PKG_CMD) $(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES) 1>&2)
$(info $(INSTALLER_RESULT))
$(info *** rerunning this make to perform your desired build...)
MAKE_RESULT = $(shell $(MAKE) $(MAKECMDGOALS) $(EXTRAS) 1>&2)
$(error Done: $(MAKE_RESULT))
endif
else
ifneq (,$(USEFUL_PACKAGES))
$(info Do you want to install $(USEFUL_MULTIPLE) package$(USEFUL_PLURAL) before building $(MAKECMDGOALS_DESCRIPTION)?)
ifeq (,$(PKG_SHELL_READ_CANT_PROMPT))
ANSWER := $(shell $(SHELL) -c 'read -p "[Enter Y or N, Default is Y] " answer; echo $$answer' | grep -i n)
else
$(info [Enter Y or N, Default is Y])
ANSWER := $(shell $(SHELL) -c 'read answer; echo $$answer' | grep -i n)
endif
ifeq (,$(ANSWER))
ANSWER := Y
else
ifeq (y,$(ANSWER))
ANSWER := Y
endif
endif
ifeq (Y,$(ANSWER))
ifneq (,$(CAN_AUTO_INSTALL_PACKAGES))
INSTALLER_RESULT = $(shell $(PKG_CMD) $(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES) 1>&2)
$(info $(INSTALLER_RESULT))
$(info *** rerunning this make to perform your desired build...)
MAKE_RESULT = $(shell $(MAKE) $(MAKECMDGOALS) $(EXTRAS) 1>&2)
$(error Done: $(MAKE_RESULT))
endif
ifeq (,$(PKG_NO_SUDO))
$(info Enter: $$ sudo $(PKG_CMD) $(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES))
$(info when that completes)
$(info re-enter: $$ $(MAKE) $(MAKECMDGOALS) $(EXTRAS))
$(error )
else
hash := \#
$(info Enter: $$ su)
$(info Enter: Password: <type-root-password>)
$(info Enter: $(hash) $(PKG_CMD) $(USEFUL_PACKAGES) $(OPTIONAL_PACKAGES))
$(info when that completes)
$(info Enter: $(hash) exit)
$(info re-enter: $$ $(MAKE) $(MAKECMDGOALS) $(EXTRAS))
$(error )
endif
endif
endif
endif
ifneq (,$(GIT_COMMIT_ID))
CFLAGS_GIT = -DSIM_GIT_COMMIT_ID=$(GIT_COMMIT_ID)
endif
ifneq (,$(GIT_COMMIT_TIME))
CFLAGS_GIT += -DSIM_GIT_COMMIT_TIME=$(GIT_COMMIT_TIME)
endif
ifneq (,$(UNSUPPORTED_BUILD))
CFLAGS_GIT += -DSIM_BUILD=Unsupported=$(UNSUPPORTED_BUILD)
endif
OPTIMIZE ?= -O2
ifneq ($(DEBUG),)
CFLAGS_G = -g -ggdb -g3
CFLAGS_O = -O0
BUILD_FEATURES = - debugging support
LTO =
else
ifneq (,$(findstring clang,$(COMPILER_NAME))$(findstring LLVM,$(COMPILER_NAME)))
CFLAGS_O = $(OPTIMIZE) -fno-strict-overflow
GCC_OPTIMIZERS_CMD = ${GCC} --help 2>&1
else
CFLAGS_O := $(OPTIMIZE)
endif
LDFLAGS_O =
GCC_MAJOR_VERSION = $(firstword $(subst ., ,$(GCC_VERSION)))
ifneq (3,$(GCC_MAJOR_VERSION))
ifeq (,$(GCC_OPTIMIZERS_CMD))
GCC_OPTIMIZERS_CMD = ${GCC} --help=optimizers
GCC_COMMON_CMD = ${GCC} --help=common
endif
endif
ifneq (,$(GCC_OPTIMIZERS_CMD))
GCC_OPTIMIZERS = $(shell $(GCC_OPTIMIZERS_CMD))
endif
ifneq (,$(GCC_COMMON_CMD))
GCC_OPTIMIZERS += $(shell $(GCC_COMMON_CMD))
endif
ifneq (,$(findstring -finline-functions,$(GCC_OPTIMIZERS)))
CFLAGS_O += -finline-functions
endif
ifneq (,$(findstring -fgcse-after-reload,$(GCC_OPTIMIZERS)))
CFLAGS_O += -fgcse-after-reload
endif
ifneq (,$(findstring -fpredictive-commoning,$(GCC_OPTIMIZERS)))
CFLAGS_O += -fpredictive-commoning
endif
ifneq (,$(findstring -fipa-cp-clone,$(GCC_OPTIMIZERS)))
CFLAGS_O += -fipa-cp-clone
endif
ifneq (,$(findstring -funsafe-loop-optimizations,$(GCC_OPTIMIZERS)))
CFLAGS_O += -fno-unsafe-loop-optimizations
endif
ifneq (,$(findstring -fstrict-overflow,$(GCC_OPTIMIZERS)))
CFLAGS_O += -fno-strict-overflow
endif
ifneq (,$(findstring $(GCC_VERSION),$(LTO_EXCLUDE_VERSIONS)))
override LTO =
endif
ifneq (,$(LTO))
ifneq (,$(findstring -flto,$(GCC_OPTIMIZERS)))
CFLAGS_O += -flto
LTO_FEATURE = , with Link Time Optimization,
endif
endif
BUILD_FEATURES = - compiler optimizations$(LTO_FEATURE) and no debugging support
endif
ifneq (3,$(GCC_MAJOR_VERSION))
ifeq (,$(GCC_WARNINGS_CMD))
GCC_WARNINGS_CMD = ${GCC} --help=warnings
endif
endif
ifneq (clean,${MAKECMDGOALS})
BUILD_FEATURES := $(BUILD_FEATURES). $(COMPILER_NAME)
$(info ***)
$(info *** $(BUILD_SINGLE)Simulator$(BUILD_MULTIPLE) being built with:)
$(info *** $(BUILD_FEATURES).)
$(info *** - $(if $(findstring 1,$(BUILD_SEPARATE)),Each source module compiled separately,Building using a single compile and link).)
ifeq (1,$(QUIET))
$(info *** - Summary Compile and Link commands are displayed.)
$(info *** Put QUIET=0 on the make command line to see command details.)
endif
ifneq (,$(NETWORK_FEATURES))
$(info *** $(NETWORK_FEATURES).)
endif
ifneq (,$(NETWORK_LAN_FEATURES))
$(info *** - Local LAN packet transports: $(NETWORK_LAN_FEATURES))
endif
ifneq (,$(VIDEO_FEATURES))
$(info *** $(VIDEO_FEATURES).)
endif
ifneq (,$(TESTING_FEATURES))
$(info *** $(TESTING_FEATURES).)
endif
ifneq (,$(GIT_COMMIT_ID))
$(info ***)
$(info *** git$(GIT_ARCHIVE_COMMIT_ID) commit id is $(GIT_COMMIT_ID).)
$(info *** git$(GIT_ARCHIVE_COMMIT_ID) commit time is $(GIT_COMMIT_TIME).)
endif
$(info ***)
endif
ifneq ($(DONT_USE_ROMS),)
ROMS_OPT = -DDONT_USE_INTERNAL_ROM
else
BUILD_ROMS = ${BIN}buildtools/BuildROMs${EXE}
endif
ifneq ($(DONT_USE_READER_THREAD),)
NETWORK_OPT += -DDONT_USE_READER_THREAD
endif
CC_OUTSPEC = -o $@
export CC := ${GCC} ${CC_STD} -U__STRICT_ANSI__ ${CFLAGS_G} ${CFLAGS_O} ${CFLAGS_GIT} ${CFLAGS_I} -DSIM_COMPILER="${COMPILER_NAME}" $(SIM_BUILD_OS_VERSION) -DSIM_BUILD_TOOL=simh-makefile$(if $(findstring 1,$(BUILD_SEPARATE)),-separate-compiles,-single-compile) -I . ${OS_CCDEFS} ${ROMS_OPT}
ifneq (,${SIM_VERSION_MODE})
CC += -DSIM_VERSION_MODE="${SIM_VERSION_MODE}"
endif
ifneq (,$(shell if $(TEST) -d BIN/unix-build/local/lib; then echo extra libs; fi))
OS_LDFLAGS += -LBIN/unix-build/local/lib
endif
ifneq (,$(and $(findstring -lpthread,$(NETWORK_LDFLAGS)),$(findstring -lpthread,$(VIDEO_LDFLAGS))))
export LDFLAGS := ${OS_LDFLAGS} $(NETWORK_LDFLAGS:-lpthread=) ${VIDEO_LDFLAGS} ${VIDEO_TTF_LDFLAGS} ${LDFLAGS_O}
else
export LDFLAGS := ${OS_LDFLAGS} ${NETWORK_LDFLAGS} ${VIDEO_LDFLAGS} ${VIDEO_TTF_LDFLAGS} ${LDFLAGS_O}
endif
#
# Common Libraries
#
SIMHD = .
SIM = ${SIMHD}/scp.c ${SIMHD}/sim_console.c ${SIMHD}/sim_fio.c \
${SIMHD}/sim_timer.c ${SIMHD}/sim_sock.c ${SIMHD}/sim_tmxr.c \
${SIMHD}/sim_ether.c ${SIMHD}/sim_tape.c ${SIMHD}/sim_disk.c \
${SIMHD}/sim_serial.c ${SIMHD}/sim_video.c ${SIMHD}/sim_imd.c \
${SIMHD}/sim_card.c
DISPLAYD = ${SIMHD}/display
SCSI = ${SIMHD}/sim_scsi.c
BIN = BIN/
# The recursive logic needs a GNU make at least v4 when building with
# separate compiles
ifneq (,$(call find_exe,gmake))
override MAKE = $(call find_exe,gmake)
endif
ifneq (,$(and $(findstring 3.,$(GNUMakeVERSION)),$(findstring 1,$(BUILD_SEPARATE))))
ifeq (HOMEBREW,$(PKG_MGR))
$(info *** You can't build with separate compiles using version $(GNUMakeVERSION))
$(info *** of GNU make. A GNU make version 4 or later is required.)
$(info *** Installing the latest GNU make using HomeBrew...)
BREW_RESULT = $(shell brew install make 1>&2)
$(info $(BREW_RESULT))
override MAKE = $(call find_exe,gmake)
else
$(info makefile:error *** You can't build with separate compiles using version $(GNUMakeVERSION))
$(info makefile:error *** of GNU make. Until you install GNU make version 4 or)
$(info makefile:error *** later, you can build with BUILD_SEPARATE=0 on the make)
$(info makefile:error *** command line or have that defined in an environment)
$(info makefile:error *** variable, a GNU make version 4 or later is required.)
$(info makefile:error *** Rerunning your original make command now with)
$(info makefile:error *** with BUILD_SEPARATE=0.)
$(error Done: $(shell $(MAKE) $(MAKECMDGOALS) $(subst BUILD_SEPARATE=1,BUILD_SEPARATE=0,$(EXTRAS))1>&2))
endif
endif
MAKEIT = @+$(MAKE) -f $(MAKEFILE_LIST) TARGET="$@" DEPS="$^"
#
# Emulator source files and compile time options
#
PDP1D = ${SIMHD}/PDP1
PDP1_DISPLAY_OPT = -DDISPLAY_TYPE=DIS_TYPE30 -DPIX_SCALE=RES_HALF
PDP1 = ${PDP1D}/pdp1_lp.c ${PDP1D}/pdp1_cpu.c ${PDP1D}/pdp1_stddev.c \
${PDP1D}/pdp1_sys.c ${PDP1D}/pdp1_dt.c ${PDP1D}/pdp1_drm.c \
${PDP1D}/pdp1_clk.c ${PDP1D}/pdp1_dcs.c ${PDP1D}/pdp1_dpy.c \
${DISPLAYL}
PDP1_OPT = -I ${PDP1D} ${DISPLAY_OPT} $(PDP1_DISPLAY_OPT)
ND100D = ${SIMHD}/ND100
ND100 = ${ND100D}/nd100_sys.c ${ND100D}/nd100_cpu.c ${ND100D}/nd100_floppy.c \
${ND100D}/nd100_stddev.c ${ND100D}/nd100_mm.c
ND100_OPT = -I ${ND100D}
NOVAD = ${SIMHD}/NOVA
NOVA = ${NOVAD}/nova_sys.c ${NOVAD}/nova_cpu.c ${NOVAD}/nova_dkp.c \
${NOVAD}/nova_dsk.c ${NOVAD}/nova_lp.c ${NOVAD}/nova_mta.c \
${NOVAD}/nova_plt.c ${NOVAD}/nova_pt.c ${NOVAD}/nova_clk.c \
${NOVAD}/nova_tt.c ${NOVAD}/nova_tt1.c ${NOVAD}/nova_qty.c
NOVA_OPT = -I ${NOVAD}
ECLIPSE = ${NOVAD}/eclipse_cpu.c ${NOVAD}/eclipse_tt.c ${NOVAD}/nova_sys.c \
${NOVAD}/nova_dkp.c ${NOVAD}/nova_dsk.c ${NOVAD}/nova_lp.c \
${NOVAD}/nova_mta.c ${NOVAD}/nova_plt.c ${NOVAD}/nova_pt.c \
${NOVAD}/nova_clk.c ${NOVAD}/nova_tt1.c ${NOVAD}/nova_qty.c
ECLIPSE_OPT = -I ${NOVAD} -DECLIPSE -DUSE_INT64
PDP18BD = ${SIMHD}/PDP18B
PDP18B = ${PDP18BD}/pdp18b_dt.c ${PDP18BD}/pdp18b_drm.c ${PDP18BD}/pdp18b_cpu.c \
${PDP18BD}/pdp18b_lp.c ${PDP18BD}/pdp18b_mt.c ${PDP18BD}/pdp18b_rf.c \
${PDP18BD}/pdp18b_rp.c ${PDP18BD}/pdp18b_stddev.c ${PDP18BD}/pdp18b_sys.c \
${PDP18BD}/pdp18b_rb.c ${PDP18BD}/pdp18b_tt1.c ${PDP18BD}/pdp18b_fpp.c \
${PDP18BD}/pdp18b_g2tty.c ${PDP18BD}/pdp18b_dr15.c
ifneq (,${DISPLAY_OPT})
PDP7_DISPLAY_OPT = -DDISPLAY_TYPE=DIS_TYPE30 -DPIX_SCALE=RES_HALF
endif
PDP4_OPT = -DPDP4 -I ${PDP18BD}
PDP7_OPT = -DPDP7 -I ${PDP18BD} ${DISPLAY_OPT} $(PDP7_DISPLAY_OPT)
PDP9_OPT = -DPDP9 -I ${PDP18BD}
PDP15_OPT = -DPDP15 -I ${PDP18BD}
PDP11D = ${SIMHD}/PDP11
PDP11 = ${PDP11D}/pdp11_fp.c ${PDP11D}/pdp11_cpu.c ${PDP11D}/pdp11_dz.c \
${PDP11D}/pdp11_cis.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_rpb.c \
${PDP11D}/pdp11_rx.c ${PDP11D}/pdp11_stddev.c ${PDP11D}/pdp11_sys.c \
${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_tm.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_io.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_pclk.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_pt.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_xq.c ${PDP11D}/pdp11_xu.c \
${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_rh.c ${PDP11D}/pdp11_tu.c \
${PDP11D}/pdp11_cpumod.c ${PDP11D}/pdp11_cr.c ${PDP11D}/pdp11_rf.c \
${PDP11D}/pdp11_dl.c ${PDP11D}/pdp11_ta.c ${PDP11D}/pdp11_rc.c \
${PDP11D}/pdp11_kg.c ${PDP11D}/pdp11_ke.c ${PDP11D}/pdp11_dc.c \
${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_kmc.c ${PDP11D}/pdp11_dup.c \
${PDP11D}/pdp11_rs.c ${PDP11D}/pdp11_vt.c ${PDP11D}/pdp11_td.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_rom.c ${PDP11D}/pdp11_ch.c \
${PDP11D}/pdp11_dh.c ${PDP11D}/pdp11_ng.c ${PDP11D}/pdp11_daz.c \
${PDP11D}/pdp11_tv.c ${PDP11D}/pdp11_mb.c ${PDP11D}/pdp11_rr.c \
${DISPLAYL} ${DISPLAYNG} ${DISPLAYVT} $(NETWORK_DEPS)
PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} ${DISPLAY_OPT}
UC15D = ${SIMHD}/PDP11
UC15 = ${UC15D}/pdp11_cis.c ${UC15D}/pdp11_cpu.c \
${UC15D}/pdp11_cpumod.c ${UC15D}/pdp11_cr.c \
${UC15D}/pdp11_fp.c ${UC15D}/pdp11_io.c \
${UC15D}/pdp11_io_lib.c ${UC15D}/pdp11_lp.c \
${UC15D}/pdp11_rh.c ${UC15D}/pdp11_rk.c \
${UC15D}/pdp11_stddev.c ${UC15D}/pdp11_sys.c \
${UC15D}/pdp11_uc15.c
UC15_OPT = -DVM_PDP11 -DUC15 -I ${UC15D} -I ${PDP18BD}
VAXD = ${SIMHD}/VAX
VAX = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c ${VAXD}/vax_io.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_stddev.c ${VAXD}/vax_sysdev.c \
${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c ${VAXD}/vax_syslist.c \
${VAXD}/vax_vc.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax_2681.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xq.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_dup.c \
$(NETWORK_DEPS)
VAX_OPT = -DVM_VAX -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS}
VAX410 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax4xx_stddev.c \
${VAXD}/vax410_sysdev.c ${VAXD}/vax410_syslist.c ${VAXD}/vax4xx_dz.c \
${VAXD}/vax4xx_rd.c ${VAXD}/vax4xx_rz80.c ${VAXD}/vax_xs.c \
${VAXD}/vax4xx_va.c ${VAXD}/vax4xx_vc.c ${VAXD}/vax_lk.c \
${VAXD}/vax_vs.c ${VAXD}/vax_gpx.c \
$(NETWORK_DEPS)
VAX410_OPT = -DVM_VAX -DVAX_410 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} ${NETWORK_OPT} ${VIDEO_CCDEFS}
VAX420 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax4xx_stddev.c \
${VAXD}/vax420_sysdev.c ${VAXD}/vax420_syslist.c ${VAXD}/vax4xx_dz.c \
${VAXD}/vax4xx_rd.c ${VAXD}/vax4xx_rz80.c ${VAXD}/vax_xs.c \
${VAXD}/vax4xx_va.c ${VAXD}/vax4xx_vc.c ${VAXD}/vax4xx_ve.c \
${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax_gpx.c \
$(NETWORK_DEPS)
VAX420_OPT = -DVM_VAX -DVAX_420 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS}
VAX411_OPT = ${VAX420_OPT} -DVAX_411
VAX412_OPT = ${VAX420_OPT} -DVAX_412
VAX41A_OPT = ${VAX420_OPT} -DVAX_41A
VAX41D_OPT = ${VAX420_OPT} -DVAX_41D
VAX42A_OPT = ${VAX420_OPT} -DVAX_42A
VAX42B_OPT = ${VAX420_OPT} -DVAX_42B
VAX43 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax4xx_stddev.c \
${VAXD}/vax43_sysdev.c ${VAXD}/vax43_syslist.c ${VAXD}/vax4xx_dz.c \
${VAXD}/vax4xx_rz80.c ${VAXD}/vax_xs.c ${VAXD}/vax4xx_vc.c \
${VAXD}/vax4xx_ve.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c \
$(NETWORK_DEPS)
VAX43_OPT = -DVM_VAX -DVAX_43 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} ${NETWORK_OPT} ${VIDEO_CCDEFS}
VAX440 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax4xx_stddev.c \
${VAXD}/vax440_sysdev.c ${VAXD}/vax440_syslist.c ${VAXD}/vax4xx_dz.c \
${VAXD}/vax_xs.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax4xx_rz94.c \
$(NETWORK_DEPS)
VAX440_OPT = -DVM_VAX -DVAX_440 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} ${NETWORK_OPT}
VAX46_OPT = ${VAX440_OPT} -DVAX_46
VAX47_OPT = ${VAX440_OPT} -DVAX_47
VAX48_OPT = ${VAX440_OPT} -DVAX_48
IS1000 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax_xs.c \
${VAXD}/vax4xx_rz94.c ${VAXD}/vax4nn_stddev.c \
${VAXD}/is1000_sysdev.c ${VAXD}/is1000_syslist.c \
$(NETWORK_DEPS)
IS1000_OPT = -DVM_VAX -DIS_1000 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} ${NETWORK_OPT}
VAX610 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax610_stddev.c ${VAXD}/vax610_sysdev.c ${VAXD}/vax610_io.c \
${VAXD}/vax610_syslist.c ${VAXD}/vax610_mem.c ${VAXD}/vax_vc.c \
${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax_2681.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c \
${PDP11D}/pdp11_xq.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c \
$(NETWORK_DEPS)
VAX610_OPT = -DVM_VAX -DVAX_610 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS}
VAX630 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax_watch.c ${VAXD}/vax630_stddev.c ${VAXD}/vax630_sysdev.c \
${VAXD}/vax630_io.c ${VAXD}/vax630_syslist.c ${VAXD}/vax_va.c \
${VAXD}/vax_vc.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c \
${VAXD}/vax_2681.c ${VAXD}/vax_gpx.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xq.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_dup.c \
$(NETWORK_DEPS)
VAX620_OPT = -DVM_VAX -DVAX_620 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
VAX630_OPT = -DVM_VAX -DVAX_630 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS}
VAX730 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax730_stddev.c ${VAXD}/vax730_sys.c \
${VAXD}/vax730_mem.c ${VAXD}/vax730_uba.c ${VAXD}/vax730_rb.c \
${VAXD}/vax_uw.c ${VAXD}/vax730_syslist.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_dup.c \
$(NETWORK_DEPS)
VAX730_OPT = -DVM_VAX -DVAX_730 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
VAX750 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax750_stddev.c ${VAXD}/vax750_cmi.c \
${VAXD}/vax750_mem.c ${VAXD}/vax750_uba.c ${VAXD}/vax7x0_mba.c \
${VAXD}/vax_uw.c ${VAXD}/vax750_syslist.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_rpb.c \
${PDP11D}/pdp11_tu.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c \
${PDP11D}/pdp11_rk.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c \
$(NETWORK_DEPS)
VAX750_OPT = -DVM_VAX -DVAX_750 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
VAX780 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax780_stddev.c ${VAXD}/vax780_sbi.c \
${VAXD}/vax780_mem.c ${VAXD}/vax780_uba.c ${VAXD}/vax7x0_mba.c \
${VAXD}/vax780_fload.c ${VAXD}/vax_uw.c ${VAXD}/vax780_syslist.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_rpb.c ${PDP11D}/pdp11_tu.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c \
${PDP11D}/pdp11_rk.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c \
$(NETWORK_DEPS)
VAX780_OPT = -DVM_VAX -DVAX_780 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
VAX8200 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax_watch.c ${VAXD}/vax820_stddev.c ${VAXD}/vax820_bi.c \
${VAXD}/vax820_mem.c ${VAXD}/vax820_uba.c ${VAXD}/vax820_ka.c \
${VAXD}/vax_uw.c ${VAXD}/vax820_syslist.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_dup.c \
$(NETWORK_DEPS)
VAX8200_OPT = -DVM_VAX -DVAX_820 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
VAX8600 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_cis.c ${VAXD}/vax_octa.c ${VAXD}/vax_cmode.c \
${VAXD}/vax_mmu.c ${VAXD}/vax_sys.c ${VAXD}/vax_syscm.c \
${VAXD}/vax860_stddev.c ${VAXD}/vax860_sbia.c \
${VAXD}/vax860_abus.c ${VAXD}/vax780_uba.c ${VAXD}/vax7x0_mba.c \
${VAXD}/vax_uw.c ${VAXD}/vax860_syslist.c \
${PDP11D}/pdp11_rl.c ${PDP11D}/pdp11_rq.c ${PDP11D}/pdp11_ts.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.c \
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_rp.c ${PDP11D}/pdp11_rpb.c ${PDP11D}/pdp11_tu.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c \
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_tc.c \
${PDP11D}/pdp11_rk.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c \
$(NETWORK_DEPS)
VAX8600_OPT = -DVM_VAX -DVAX_860 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT}
PDP10D = ${SIMHD}/PDP10
PDP10 = ${PDP10D}/pdp10_fe.c ${PDP11D}/pdp11_dz.c ${PDP10D}/pdp10_cpu.c \
${PDP10D}/pdp10_ksio.c ${PDP10D}/pdp10_lp20.c ${PDP10D}/pdp10_mdfp.c \
${PDP10D}/pdp10_pag.c ${PDP10D}/pdp10_rp.c ${PDP10D}/pdp10_sys.c \
${PDP10D}/pdp10_tim.c ${PDP10D}/pdp10_tu.c ${PDP10D}/pdp10_xtnd.c \
${PDP11D}/pdp11_pt.c ${PDP11D}/pdp11_ry.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_kmc.c \
${PDP11D}/pdp11_xu.c ${PDP11D}/pdp11_ch.c \
$(NETWORK_DEPS)
PDP10_OPT = -DVM_PDP10 -DUSE_INT64 -I ${PDP10D} -I ${PDP11D} ${NETWORK_OPT}
IMLACD = ${SIMHD}/imlac
IMLAC = ${IMLACD}/imlac_sys.c ${IMLACD}/imlac_cpu.c \
${IMLACD}/imlac_dp.c ${IMLACD}/imlac_crt.c ${IMLACD}/imlac_kbd.c \
${IMLACD}/imlac_tty.c ${IMLACD}/imlac_pt.c ${IMLACD}/imlac_bel.c \
${DISPLAYL}
IMLAC_OPT = -I ${IMLACD} ${DISPLAY_OPT} ${AIO_CCDEFS}
LINCD = ${SIMHD}/linc
LINC = ${LINCD}/linc_sys.c ${LINCD}/linc_cpu.c \
${LINCD}/linc_crt.c ${LINCD}/linc_dpy.c ${LINCD}/linc_kbd.c \
${LINCD}/linc_tape.c ${LINCD}/linc_tty.c \
${DISPLAYL}
LINC_OPT = -I ${LINCD} ${DISPLAY_OPT} ${AIO_CCDEFS}
TT2500D = ${SIMHD}/tt2500
TT2500 = ${TT2500D}/tt2500_sys.c ${TT2500D}/tt2500_cpu.c \
${TT2500D}/tt2500_dpy.c ${TT2500D}/tt2500_crt.c ${TT2500D}/tt2500_tv.c \
${TT2500D}/tt2500_key.c ${TT2500D}/tt2500_uart.c ${TT2500D}/tt2500_rom.c \
${DISPLAYL}
TT2500_OPT = -I ${TT2500D} ${DISPLAY_OPT} ${AIO_CCDEFS}
PDP8D = ${SIMHD}/PDP8
PDP8 = ${PDP8D}/pdp8_cpu.c ${PDP8D}/pdp8_clk.c ${PDP8D}/pdp8_df.c \
${PDP8D}/pdp8_dt.c ${PDP8D}/pdp8_lp.c ${PDP8D}/pdp8_mt.c \
${PDP8D}/pdp8_pt.c ${PDP8D}/pdp8_rf.c ${PDP8D}/pdp8_rk.c \
${PDP8D}/pdp8_rx.c ${PDP8D}/pdp8_sys.c ${PDP8D}/pdp8_tt.c \
${PDP8D}/pdp8_ttx.c ${PDP8D}/pdp8_rl.c ${PDP8D}/pdp8_tsc.c \
${PDP8D}/pdp8_td.c ${PDP8D}/pdp8_ct.c ${PDP8D}/pdp8_fpp.c \
${PDP8D}/pdp8_dpy.c ${DISPLAYL}
PDP8_OPT = -I ${PDP8D} ${DISPLAY_OPT}
H316D = ${SIMHD}/H316
H316 = ${H316D}/h316_stddev.c ${H316D}/h316_lp.c ${H316D}/h316_cpu.c \
${H316D}/h316_sys.c ${H316D}/h316_mt.c ${H316D}/h316_fhd.c \
${H316D}/h316_dp.c ${H316D}/h316_rtc.c ${H316D}/h316_imp.c \
${H316D}/h316_hi.c ${H316D}/h316_mi.c ${H316D}/h316_udp.c
H316_OPT = -I ${H316D} -D VM_IMPTIP
HP2100D = ${SIMHD}/HP2100
HP2100 = ${HP2100D}/hp2100_baci.c ${HP2100D}/hp2100_cpu.c \
${HP2100D}/hp2100_cpu_fp.c ${HP2100D}/hp2100_cpu_fpp.c \
${HP2100D}/hp2100_cpu0.c ${HP2100D}/hp2100_cpu1.c \
${HP2100D}/hp2100_cpu2.c ${HP2100D}/hp2100_cpu3.c \
${HP2100D}/hp2100_cpu4.c ${HP2100D}/hp2100_cpu5.c \
${HP2100D}/hp2100_cpu6.c ${HP2100D}/hp2100_cpu7.c \
${HP2100D}/hp2100_di.c ${HP2100D}/hp2100_di_da.c \
${HP2100D}/hp2100_disclib.c ${HP2100D}/hp2100_dma.c \
${HP2100D}/hp2100_dp.c ${HP2100D}/hp2100_dq.c \
${HP2100D}/hp2100_dr.c ${HP2100D}/hp2100_ds.c \
${HP2100D}/hp2100_ipl.c ${HP2100D}/hp2100_lps.c \
${HP2100D}/hp2100_lpt.c ${HP2100D}/hp2100_mc.c \
${HP2100D}/hp2100_mem.c ${HP2100D}/hp2100_mpx.c \
${HP2100D}/hp2100_ms.c ${HP2100D}/hp2100_mt.c \
${HP2100D}/hp2100_mux.c ${HP2100D}/hp2100_pif.c \
${HP2100D}/hp2100_pt.c ${HP2100D}/hp2100_sys.c \
${HP2100D}/hp2100_tbg.c ${HP2100D}/hp2100_tty.c
HP2100_OPT = -DHAVE_INT64 -I ${HP2100D}
HP3000D = ${SIMHD}/HP3000
HP3000 = ${HP3000D}/hp_disclib.c ${HP3000D}/hp_tapelib.c ${HP3000D}/hp3000_atc.c \
${HP3000D}/hp3000_clk.c ${HP3000D}/hp3000_cpu.c ${HP3000D}/hp3000_cpu_base.c \
${HP3000D}/hp3000_cpu_fp.c ${HP3000D}/hp3000_cpu_cis.c ${HP3000D}/hp3000_ds.c \
${HP3000D}/hp3000_iop.c ${HP3000D}/hp3000_lp.c ${HP3000D}/hp3000_mem.c \
${HP3000D}/hp3000_mpx.c ${HP3000D}/hp3000_ms.c ${HP3000D}/hp3000_scmb.c \
${HP3000D}/hp3000_sel.c ${HP3000D}/hp3000_sys.c
HP3000_OPT = -I ${HP3000D}
I1401D = ${SIMHD}/I1401
I1401 = ${I1401D}/i1401_lp.c ${I1401D}/i1401_cpu.c ${I1401D}/i1401_iq.c \
${I1401D}/i1401_cd.c ${I1401D}/i1401_mt.c ${I1401D}/i1401_dp.c \
${I1401D}/i1401_sys.c
I1401_OPT = -I ${I1401D}
I1620D = ${SIMHD}/I1620
I1620 = ${I1620D}/i1620_cd.c ${I1620D}/i1620_dp.c ${I1620D}/i1620_pt.c \
${I1620D}/i1620_tty.c ${I1620D}/i1620_cpu.c ${I1620D}/i1620_lp.c \
${I1620D}/i1620_fp.c ${I1620D}/i1620_sys.c
I1620_OPT = -I ${I1620D}
I7000D = ${SIMHD}/I7000
I7090 = ${I7000D}/i7090_cpu.c ${I7000D}/i7090_sys.c ${I7000D}/i7090_chan.c \
${I7000D}/i7090_cdr.c ${I7000D}/i7090_cdp.c ${I7000D}/i7090_lpr.c \
${I7000D}/i7000_chan.c ${I7000D}/i7000_mt.c ${I7000D}/i7090_drum.c \
${I7000D}/i7090_hdrum.c ${I7000D}/i7000_chron.c ${I7000D}/i7000_dsk.c \
${I7000D}/i7000_com.c ${I7000D}/i7000_ht.c
I7090_OPT = -I $(I7000D) -DUSE_INT64 -DI7090 -DUSE_SIM_CARD
I7080D = ${SIMHD}/I7000
I7080 = ${I7000D}/i7080_cpu.c ${I7000D}/i7080_sys.c ${I7000D}/i7080_chan.c \
${I7000D}/i7080_drum.c ${I7000D}/i7000_cdp.c ${I7000D}/i7000_cdr.c \
${I7000D}/i7000_con.c ${I7000D}/i7000_chan.c ${I7000D}/i7000_lpr.c \
${I7000D}/i7000_mt.c ${I7000D}/i7000_chron.c ${I7000D}/i7000_dsk.c \
${I7000D}/i7000_com.c ${I7000D}/i7000_ht.c
I7080_OPT = -I $(I7000D) -DI7080 -DUSE_SIM_CARD
I7070D = ${SIMHD}/I7000
I7070 = ${I7000D}/i7070_cpu.c ${I7000D}/i7070_sys.c ${I7000D}/i7070_chan.c \
${I7000D}/i7000_cdp.c ${I7000D}/i7000_cdr.c ${I7000D}/i7000_con.c \
${I7000D}/i7000_chan.c ${I7000D}/i7000_lpr.c ${I7000D}/i7000_mt.c \
${I7000D}/i7000_chron.c ${I7000D}/i7000_dsk.c ${I7000D}/i7000_com.c \
${I7000D}/i7000_ht.c
I7070_OPT = -I $(I7000D) -DUSE_INT64 -DI7070 -DUSE_SIM_CARD
I7010D = ${SIMHD}/I7000
I7010 = ${I7000D}/i7010_cpu.c ${I7000D}/i7010_sys.c ${I7000D}/i7010_chan.c \
${I7000D}/i7000_cdp.c ${I7000D}/i7000_cdr.c ${I7000D}/i7000_con.c \
${I7000D}/i7000_chan.c ${I7000D}/i7000_lpr.c ${I7000D}/i7000_mt.c \
${I7000D}/i7000_chron.c ${I7000D}/i7000_dsk.c ${I7000D}/i7000_com.c \
${I7000D}/i7000_ht.c
I7010_OPT = -I $(I7010D) -DI7010 -DUSE_SIM_CARD
I704D = ${SIMHD}/I7000
I704 = ${I7000D}/i7090_cpu.c ${I7000D}/i7090_sys.c ${I7000D}/i7090_chan.c \
${I7000D}/i7090_cdr.c ${I7000D}/i7090_cdp.c ${I7000D}/i7090_lpr.c \
${I7000D}/i7000_mt.c ${I7000D}/i7090_drum.c ${I7000D}/i7000_chan.c
I704_OPT = -I $(I7000D) -DUSE_INT64 -DI704 -DUSE_SIM_CARD
I701D = ${SIMHD}/I7000
I701 = ${I7000D}/i701_cpu.c ${I7000D}/i701_sys.c ${I7000D}/i701_chan.c \
${I7000D}/i7090_cdr.c ${I7000D}/i7090_cdp.c ${I7000D}/i7090_lpr.c \
${I7000D}/i7000_mt.c ${I7000D}/i7090_drum.c ${I7000D}/i7000_chan.c
I701_OPT = -I $(I7000D) -DUSE_INT64 -DI701 -DUSE_SIM_CARD
I7094D = ${SIMHD}/I7094
I7094 = ${I7094D}/i7094_cpu.c ${I7094D}/i7094_cpu1.c ${I7094D}/i7094_io.c \
${I7094D}/i7094_cd.c ${I7094D}/i7094_clk.c ${I7094D}/i7094_com.c \
${I7094D}/i7094_drm.c ${I7094D}/i7094_dsk.c ${I7094D}/i7094_sys.c \
${I7094D}/i7094_lp.c ${I7094D}/i7094_mt.c ${I7094D}/i7094_binloader.c
I7094_OPT = -DUSE_INT64 -I ${I7094D}
I650D = ${SIMHD}/I650
I650 = ${I650D}/i650_cpu.c ${I650D}/i650_cdr.c ${I650D}/i650_cdp.c \
${I650D}/i650_dsk.c ${I650D}/i650_mt.c ${I650D}/i650_sys.c
I650_OPT = -I ${I650D} -DUSE_INT64 -DUSE_SIM_CARD
IBM1130D = ${SIMHD}/Ibm1130
IBM1130 = ${IBM1130D}/ibm1130_cpu.c ${IBM1130D}/ibm1130_cr.c \
${IBM1130D}/ibm1130_disk.c ${IBM1130D}/ibm1130_stddev.c \
${IBM1130D}/ibm1130_sys.c ${IBM1130D}/ibm1130_gdu.c \
${IBM1130D}/ibm1130_gui.c ${IBM1130D}/ibm1130_prt.c \
${IBM1130D}/ibm1130_fmt.c ${IBM1130D}/ibm1130_ptrp.c \
${IBM1130D}/ibm1130_plot.c ${IBM1130D}/ibm1130_sca.c \
${IBM1130D}/ibm1130_t2741.c
IBM1130_OPT = -I ${IBM1130D}
ifneq (${WIN32},)
IBM1130_OPT += -DGUI_SUPPORT -lgdi32 ${BIN}ibm1130.o
endif
ID16D = ${SIMHD}/Interdata
ID16 = ${ID16D}/id16_cpu.c ${ID16D}/id16_sys.c ${ID16D}/id_dp.c \
${ID16D}/id_fd.c ${ID16D}/id_fp.c ${ID16D}/id_idc.c ${ID16D}/id_io.c \
${ID16D}/id_lp.c ${ID16D}/id_mt.c ${ID16D}/id_pas.c ${ID16D}/id_pt.c \
${ID16D}/id_tt.c ${ID16D}/id_uvc.c ${ID16D}/id16_dboot.c ${ID16D}/id_ttp.c
ID16_OPT = -DIFP_IN_MEM -I ${ID16D}
ID32D = ${SIMHD}/Interdata
ID32 = ${ID32D}/id32_cpu.c ${ID32D}/id32_sys.c ${ID32D}/id_dp.c \
${ID32D}/id_fd.c ${ID32D}/id_fp.c ${ID32D}/id_idc.c ${ID32D}/id_io.c \
${ID32D}/id_lp.c ${ID32D}/id_mt.c ${ID32D}/id_pas.c ${ID32D}/id_pt.c \
${ID32D}/id_tt.c ${ID32D}/id_uvc.c ${ID32D}/id32_dboot.c ${ID32D}/id_ttp.c
ID32_OPT = -I ${ID32D}
S3D = ${SIMHD}/S3
S3 = ${S3D}/s3_cd.c ${S3D}/s3_cpu.c ${S3D}/s3_disk.c ${S3D}/s3_lp.c \
${S3D}/s3_pkb.c ${S3D}/s3_sys.c
S3_OPT = -I ${S3D}
ALTAIRD = ${SIMHD}/ALTAIR
ALTAIR = ${ALTAIRD}/altair_sio.c ${ALTAIRD}/altair_cpu.c ${ALTAIRD}/altair_dsk.c \
${ALTAIRD}/altair_sys.c
ALTAIR_OPT = -I ${ALTAIRD}
ALTAIR8800D = ${SIMHD}/Altair8800
ALTAIR8800 = \
${ALTAIR8800D}/altair8800_sys.c \
${ALTAIR8800D}/altair8800_dsk.c \
${ALTAIR8800D}/s100_bus.c \
${ALTAIR8800D}/s100_bram.c \
${ALTAIR8800D}/s100_cpu.c \
${ALTAIR8800D}/s100_po.c \
${ALTAIR8800D}/s100_simh.c \
${ALTAIR8800D}/s100_sio.c \
${ALTAIR8800D}/s100_ssw.c \
${ALTAIR8800D}/s100_ram.c \
${ALTAIR8800D}/s100_rom.c \
${ALTAIR8800D}/s100_z80.c \
${ALTAIR8800D}/mits_2sio.c \
${ALTAIR8800D}/mits_dsk.c \
${ALTAIR8800D}/sds_sbc200.c \
${ALTAIR8800D}/sds_vfii.c \
${ALTAIR8800D}/tarbell_fdc.c \
${ALTAIR8800D}/wd_17xx.c
ALTAIR8800_OPT = $(ALTAIR8800_GCC_OPT) -I ${ALTAIR8800D} -DUSE_SIM_VIDEO ${VIDEO_CCDEFS}
ALTAIRZ80D = ${SIMHD}/AltairZ80
ALTAIRZ80 = ${ALTAIRZ80D}/altairz80_cpu.c ${ALTAIRZ80D}/altairz80_cpu_nommu.c \
${ALTAIRZ80D}/s100_dazzler.c \
${ALTAIRZ80D}/s100_tuart.c \
${ALTAIRZ80D}/s100_jair.c \
${ALTAIRZ80D}/sol20.c \
${ALTAIRZ80D}/s100_vdm1.c \
${ALTAIRZ80D}/mmd.c \
${ALTAIRZ80D}/s100_dj2d.c \
${ALTAIRZ80D}/s100_djhdc.c \
${ALTAIRZ80D}/altairz80_dsk.c ${ALTAIRZ80D}/disasm.c \
${ALTAIRZ80D}/altairz80_sio.c ${ALTAIRZ80D}/altairz80_sys.c \
${ALTAIRZ80D}/altairz80_hdsk.c ${ALTAIRZ80D}/altairz80_net.c \
${ALTAIRZ80D}/s100_hayes.c ${ALTAIRZ80D}/s100_2sio.c ${ALTAIRZ80D}/s100_pmmi.c\
${ALTAIRZ80D}/flashwriter2.c ${ALTAIRZ80D}/i86_decode.c \
${ALTAIRZ80D}/i86_ops.c ${ALTAIRZ80D}/i86_prim_ops.c \
${ALTAIRZ80D}/i8272.c ${ALTAIRZ80D}/insnsd.c ${ALTAIRZ80D}/altairz80_mhdsk.c \
${ALTAIRZ80D}/ibc.c ${ALTAIRZ80D}/ibc_mcc_hdc.c ${ALTAIRZ80D}/ibc_smd_hdc.c \
${ALTAIRZ80D}/mfdc.c ${ALTAIRZ80D}/n8vem.c ${ALTAIRZ80D}/vfdhd.c \
${ALTAIRZ80D}/s100_disk1a.c ${ALTAIRZ80D}/s100_disk2.c ${ALTAIRZ80D}/s100_disk3.c \
${ALTAIRZ80D}/s100_fif.c ${ALTAIRZ80D}/s100_mdriveh.c \
${ALTAIRZ80D}/s100_icom.c \
${ALTAIRZ80D}/s100_jadedd.c \
${ALTAIRZ80D}/s100_mdsa.c \
${ALTAIRZ80D}/s100_mdsad.c ${ALTAIRZ80D}/s100_selchan.c \
${ALTAIRZ80D}/s100_ss1.c ${ALTAIRZ80D}/s100_64fdc.c \
${ALTAIRZ80D}/s100_scp300f.c \
${ALTAIRZ80D}/s100_tarbell.c \
${ALTAIRZ80D}/s100_tdd.c \
${ALTAIRZ80D}/wd179x.c ${ALTAIRZ80D}/s100_hdc1001.c \
${ALTAIRZ80D}/s100_if3.c ${ALTAIRZ80D}/s100_adcs6.c \
${ALTAIRZ80D}/m68k/m68kcpu.c ${ALTAIRZ80D}/m68k/m68kdasm.c ${ALTAIRZ80D}/m68k/m68kasm.c \
${ALTAIRZ80D}/m68k/m68kopac.c ${ALTAIRZ80D}/m68k/m68kopdm.c \
${ALTAIRZ80D}/m68k/softfloat/softfloat.c \
${ALTAIRZ80D}/m68k/m68kopnz.c ${ALTAIRZ80D}/m68k/m68kops.c ${ALTAIRZ80D}/m68ksim.c
ALTAIRZ80_OPT = -I ${ALTAIRZ80D} -DUSE_SIM_VIDEO ${VIDEO_CCDEFS}
GRID = ${SIMHD}/GRI
GRI = ${GRID}/gri_cpu.c ${GRID}/gri_stddev.c ${GRID}/gri_sys.c
GRI_OPT = -I ${GRID}
LGPD = ${SIMHD}/LGP
LGP = ${LGPD}/lgp_cpu.c ${LGPD}/lgp_stddev.c ${LGPD}/lgp_sys.c
LGP_OPT = -I ${LGPD}
SDSD = ${SIMHD}/SDS
SDS = ${SDSD}/sds_cpu.c ${SDSD}/sds_drm.c ${SDSD}/sds_dsk.c ${SDSD}/sds_io.c \
${SDSD}/sds_lp.c ${SDSD}/sds_mt.c ${SDSD}/sds_mux.c ${SDSD}/sds_rad.c \
${SDSD}/sds_stddev.c ${SDSD}/sds_sys.c ${SDSD}/sds_cp.c ${SDSD}/sds_cr.c
SDS_OPT = -I ${SDSD} -DUSE_SIM_CARD
SWTP6800D = ${SIMHD}/swtp6800/swtp6800
SWTP6800C = ${SIMHD}/swtp6800/common
SWTP6800MP-A = ${SWTP6800C}/mp-a.c ${SWTP6800C}/m6800.c ${SWTP6800C}/m6810.c \
${SWTP6800C}/bootrom.c ${SWTP6800C}/dc-4.c ${SWTP6800D}/mp-a_sys.c \
${SWTP6800C}/mp-8m.c ${SWTP6800C}/fd400.c ${SWTP6800C}/mp-b2.c \
${SWTP6800C}/mp-s.c
SWTP6800MP-A2 = ${SWTP6800C}/mp-a2.c ${SWTP6800C}/m6800.c ${SWTP6800C}/m6810.c \
${SWTP6800C}/bootrom.c ${SWTP6800C}/dc-4.c ${SWTP6800D}/mp-a2_sys.c \
${SWTP6800C}/mp-8m.c ${SWTP6800C}/i2716.c ${SWTP6800C}/fd400.c \
${SWTP6800C}/mp-s.c ${SWTP6800C}/mp-b2.c
SWTP6800_OPT = -I ${SWTP6800D}
INTELSYSD = ${SIMHD}/Intel-Systems
INTELSYSC = ${SIMHD}/Intel-Systems/common
INTEL_PARTS = \
${INTELSYSC}/i3214.c \
${INTELSYSC}/i8251.c \
${INTELSYSC}/i8253.c \
${INTELSYSC}/i8255.c \
${INTELSYSC}/i8259.c \
${INTELSYSC}/ieprom.c \
${INTELSYSC}/ioc-cont.c \
${INTELSYSC}/ipc-cont.c \
${INTELSYSC}/iram8.c \
${INTELSYSC}/isbc064.c \
${INTELSYSC}/isbc202.c \
${INTELSYSC}/isbc201.c \
${INTELSYSC}/isbc206.c \
${INTELSYSC}/isbc464.c \
${INTELSYSC}/isbc208.c \
${INTELSYSC}/port.c \
${INTELSYSC}/irq.c \
${INTELSYSC}/multibus.c \
${INTELSYSC}/mem.c \
${INTELSYSC}/sys.c \
${INTELSYSC}/zx200a.c
INTEL_MDSD = ${INTELSYSD}/Intel-MDS
INTEL_MDS = ${INTELSYSC}/i8080.c ${INTEL_MDSD}/imds_sys.c \
${INTEL_PARTS}
INTEL_MDS_OPT = -I ${INTEL_MDSD}
IBMPCD = ${INTELSYSD}/ibmpc
IBMPCC = ${INTELSYSD}/common
IBMPC = ${IBMPCC}/i8255.c ${IBMPCD}/ibmpc.c \
${IBMPCC}/i8088.c ${IBMPCD}/ibmpc_sys.c \
${IBMPCC}/i8253.c ${IBMPCC}/i8259.c \
${IBMPCC}/pceprom.c ${IBMPCC}/pcram8.c \
${IBMPCC}/i8237.c ${IBMPCC}/pcbus.c
IBMPC_OPT = -I ${IBMPCD}
IBMPCXTD = ${INTELSYSD}/ibmpcxt
IBMPCXTC = ${INTELSYSD}/common
IBMPCXT = ${IBMPCXTC}/i8088.c ${IBMPCXTD}/ibmpcxt_sys.c \
${IBMPCXTC}/i8253.c ${IBMPCXTC}/i8259.c \
${IBMPCXTC}/i8255.c ${IBMPCXTD}/ibmpcxt.c \
${IBMPCXTC}/pceprom.c ${IBMPCXTC}/pcram8.c \
${IBMPCXTC}/pcbus.c ${IBMPCXTC}/i8237.c
IBMPCXT_OPT = -I ${IBMPCXTD}
SCELBID = ${INTELSYSD}/scelbi
SCELBIC = ${INTELSYSD}/common
SCELBI = ${SCELBIC}/i8008.c ${SCELBID}/scelbi_sys.c ${SCELBID}/scelbi_io.c
SCELBI_OPT = -I ${SCELBID}
TX0D = ${SIMHD}/TX-0
TX0 = ${TX0D}/tx0_cpu.c ${TX0D}/tx0_dpy.c ${TX0D}/tx0_stddev.c \
${TX0D}/tx0_sys.c ${TX0D}/tx0_sys_orig.c ${DISPLAYL}
TX0_OPT = -I ${TX0D} ${DISPLAY_OPT}
SSEMD = ${SIMHD}/SSEM
SSEM = ${SSEMD}/ssem_cpu.c ${SSEMD}/ssem_sys.c
SSEM_OPT = -I ${SSEMD}
B5500D = ${SIMHD}/B5500
B5500 = ${B5500D}/b5500_cpu.c ${B5500D}/b5500_io.c ${B5500D}/b5500_sys.c \
${B5500D}/b5500_dk.c ${B5500D}/b5500_mt.c ${B5500D}/b5500_urec.c \
${B5500D}/b5500_dr.c ${B5500D}/b5500_dtc.c
B5500_OPT = -I ${B5500D} -DUSE_INT64 -DB5500 -DUSE_SIM_CARD
BESM6D = ${SIMHD}/BESM6
BESM6 = ${BESM6D}/besm6_cpu.c ${BESM6D}/besm6_sys.c ${BESM6D}/besm6_mmu.c \
${BESM6D}/besm6_arith.c ${BESM6D}/besm6_disk.c ${BESM6D}/besm6_drum.c \
${BESM6D}/besm6_tty.c ${BESM6D}/besm6_panel.c ${BESM6D}/besm6_printer.c \
${BESM6D}/besm6_pl.c ${BESM6D}/besm6_mg.c \
${BESM6D}/besm6_punch.c ${BESM6D}/besm6_punchcard.c ${BESM6D}/besm6_vu.c
BESM6_OPT = -I ${BESM6D} -DUSE_INT64 $(VIDEO_TTF_OPT)
PDP6D = ${SIMHD}/PDP10
ifneq (,${DISPLAY_OPT})
PDP6_DISPLAY_OPT =
endif
PDP6 = ${PDP6D}/kx10_cpu.c ${PDP6D}/kx10_sys.c ${PDP6D}/kx10_cty.c \
${PDP6D}/kx10_lp.c ${PDP6D}/kx10_pt.c ${PDP6D}/kx10_cr.c \
${PDP6D}/kx10_cp.c ${PDP6D}/pdp6_dct.c ${PDP6D}/pdp6_dtc.c \
${PDP6D}/pdp6_mtc.c ${PDP6D}/pdp6_dsk.c ${PDP6D}/pdp6_dcs.c \
${PDP6D}/kx10_dpy.c ${PDP6D}/pdp6_slave.c ${PDP6D}/pdp6_ge.c \
${DISPLAYL} ${DISPLAY340}
PDP6_OPT = -DPDP6=1 -DUSE_INT64 -I ${PDP6D} -DUSE_SIM_CARD ${DISPLAY_OPT} ${PDP6_DISPLAY_OPT}
KA10D = ${SIMHD}/PDP10
ifneq (,${DISPLAY_OPT})
KA10_DISPLAY_OPT =
endif
KA10 = ${KA10D}/kx10_cpu.c ${KA10D}/kx10_sys.c ${KA10D}/kx10_df.c \
${KA10D}/kx10_dp.c ${KA10D}/kx10_mt.c ${KA10D}/kx10_cty.c \
${KA10D}/kx10_lp.c ${KA10D}/kx10_pt.c ${KA10D}/kx10_dc.c \
${KA10D}/kx10_rp.c ${KA10D}/kx10_rc.c ${KA10D}/kx10_dt.c \
${KA10D}/kx10_dk.c ${KA10D}/kx10_cr.c ${KA10D}/kx10_cp.c \
${KA10D}/kx10_tu.c ${KA10D}/kx10_rs.c ${KA10D}/ka10_pd.c \
${KA10D}/kx10_rh.c ${KA10D}/kx10_imp.c ${KA10D}/ka10_tk10.c \
${KA10D}/ka10_mty.c ${KA10D}/ka10_imx.c ${KA10D}/ka10_ch10.c \
${KA10D}/ka10_stk.c ${KA10D}/ka10_ten11.c ${KA10D}/ka10_auxcpu.c \
$(KA10D)/ka10_pmp.c ${KA10D}/ka10_dkb.c ${KA10D}/pdp6_dct.c \
${KA10D}/pdp6_dtc.c ${KA10D}/pdp6_mtc.c ${KA10D}/pdp6_dsk.c \
${KA10D}/pdp6_dcs.c ${KA10D}/ka10_dpk.c ${KA10D}/kx10_dpy.c \
${KA10D}/ka10_ai.c ${KA10D}/ka10_iii.c ${KA10D}/kx10_disk.c \
${KA10D}/ka10_pclk.c ${KA10D}/ka10_tv.c ${KA10D}/ka10_dd.c \
${KA10D}/kx10_ddc.c ${DISPLAYL} ${DISPLAY340} ${DISPLAYIII} $(NETWORK_DEPS)
KA10_OPT = -DKA=1 -DUSE_INT64 -I ${KA10D} -DUSE_SIM_CARD ${NETWORK_OPT} ${DISPLAY_OPT} ${KA10_DISPLAY_OPT}
ifneq (${PANDA_LIGHTS},)
# ONLY for Panda display.
KA10_OPT += -DPANDA_LIGHTS
KA10 += ${KA10D}/ka10_lights.c
KA10_LDFLAGS += -lusb-1.0
endif
KI10D = ${SIMHD}/PDP10
ifneq (,${DISPLAY_OPT})
KI10_DISPLAY_OPT =
endif
KI10 = ${KI10D}/kx10_cpu.c ${KI10D}/kx10_sys.c ${KI10D}/kx10_df.c \
${KI10D}/kx10_dp.c ${KI10D}/kx10_mt.c ${KI10D}/kx10_cty.c \
${KI10D}/kx10_lp.c ${KI10D}/kx10_pt.c ${KI10D}/kx10_dc.c \
${KI10D}/kx10_rh.c ${KI10D}/kx10_rp.c ${KI10D}/kx10_rc.c \
${KI10D}/kx10_dt.c ${KI10D}/kx10_dk.c ${KI10D}/kx10_cr.c \
${KI10D}/kx10_cp.c ${KI10D}/kx10_tu.c ${KI10D}/kx10_rs.c \
${KI10D}/kx10_imp.c ${KI10D}/kx10_dpy.c ${KI10D}/kx10_disk.c \
${KI10D}/kx10_ddc.c ${KI10D}/kx10_tym.c ${DISPLAYL} ${DISPLAY340} $(NETWORK_DEPS)
KI10_OPT = -DKI=1 -DUSE_INT64 -I ${KI10D} -DUSE_SIM_CARD ${NETWORK_OPT} ${DISPLAY_OPT} ${KI10_DISPLAY_OPT}
ifneq (${PANDA_LIGHTS},)
# ONLY for Panda display.
KI10_OPT += -DPANDA_LIGHTS
KI10 += ${KA10D}/ka10_lights.c
KI10_LDFLAGS = -lusb-1.0
endif
KL10D = ${SIMHD}/PDP10
KL10 = ${KL10D}/kx10_cpu.c ${KL10D}/kx10_sys.c ${KL10D}/kx10_df.c \
${KA10D}/kx10_dp.c ${KA10D}/kx10_mt.c ${KA10D}/kx10_lp.c \
${KA10D}/kx10_pt.c ${KA10D}/kx10_dc.c ${KL10D}/kx10_rh.c \
${KA10D}/kx10_dt.c ${KA10D}/kx10_cr.c ${KA10D}/kx10_cp.c \
${KL10D}/kx10_rp.c ${KL10D}/kx10_tu.c ${KL10D}/kx10_rs.c \
${KL10D}/kx10_imp.c ${KL10D}/kl10_fe.c ${KL10D}/ka10_pd.c \
${KL10D}/ka10_ch10.c ${KL10D}/kl10_nia.c ${KL10D}/kx10_disk.c \
$(NETWORK_DEPS)
KL10_OPT = -DKL=1 -DUSE_INT64 -I $(KL10D) -DUSE_SIM_CARD ${NETWORK_OPT}
KS10D = ${SIMHD}/PDP10
KS10 = ${KS10D}/kx10_cpu.c ${KS10D}/kx10_sys.c ${KS10D}/kx10_disk.c \
${KS10D}/ks10_cty.c ${KS10D}/ks10_uba.c ${KS10D}/kx10_rh.c \
${KS10D}/kx10_rp.c ${KS10D}/kx10_tu.c ${KS10D}/ks10_dz.c \
${KS10D}/ks10_tcu.c ${KS10D}/ks10_lp.c ${KS10D}/ks10_ch11.c \
${KS10D}/ks10_kmc.c ${KS10D}/ks10_dup.c ${KS10D}/kx10_imp.c \
$(NETWORK_DEPS)
KS10_OPT = -DKS=1 -DUSE_INT64 -I $(KS10D) -I $(PDP11D) ${NETWORK_OPT}
ATT3B2D = ${SIMHD}/3B2
ATT3B2M400 = ${ATT3B2D}/3b2_cpu.c ${ATT3B2D}/3b2_sys.c \
${ATT3B2D}/3b2_rev2_sys.c ${ATT3B2D}/3b2_rev2_mmu.c \
${ATT3B2D}/3b2_mau.c ${ATT3B2D}/3b2_rev2_csr.c \
${ATT3B2D}/3b2_timer.c ${ATT3B2D}/3b2_stddev.c \
${ATT3B2D}/3b2_mem.c ${ATT3B2D}/3b2_iu.c \
${ATT3B2D}/3b2_if.c ${ATT3B2D}/3b2_id.c \
${ATT3B2D}/3b2_dmac.c ${ATT3B2D}/3b2_io.c \
${ATT3B2D}/3b2_ports.c ${ATT3B2D}/3b2_ctc.c \
${ATT3B2D}/3b2_ni.c \
$(NETWORK_DEPS)
ATT3B2M400_OPT = -DUSE_INT64 -DUSE_ADDR64 -DREV2 -I ${ATT3B2D} ${NETWORK_OPT}
ATT3B2M700 = ${ATT3B2D}/3b2_cpu.c ${ATT3B2D}/3b2_sys.c \
${ATT3B2D}/3b2_rev3_sys.c ${ATT3B2D}/3b2_rev3_mmu.c \
${ATT3B2D}/3b2_mau.c ${ATT3B2D}/3b2_rev3_csr.c \
${ATT3B2D}/3b2_timer.c ${ATT3B2D}/3b2_stddev.c \
${ATT3B2D}/3b2_mem.c ${ATT3B2D}/3b2_iu.c \
${ATT3B2D}/3b2_if.c ${ATT3B2D}/3b2_dmac.c \
${ATT3B2D}/3b2_io.c ${ATT3B2D}/3b2_ports.c \
${ATT3B2D}/3b2_scsi.c ${ATT3B2D}/3b2_ni.c \
$(NETWORK_DEPS)
ATT3B2M700_OPT = -DUSE_INT64 -DUSE_ADDR64 -DREV3 -I ${ATT3B2D} ${NETWORK_OPT}
SIGMAD = ${SIMHD}/sigma
SIGMA = ${SIGMAD}/sigma_cpu.c ${SIGMAD}/sigma_sys.c ${SIGMAD}/sigma_cis.c \
${SIGMAD}/sigma_coc.c ${SIGMAD}/sigma_dk.c ${SIGMAD}/sigma_dp.c \
${SIGMAD}/sigma_fp.c ${SIGMAD}/sigma_io.c ${SIGMAD}/sigma_lp.c \
${SIGMAD}/sigma_map.c ${SIGMAD}/sigma_mt.c ${SIGMAD}/sigma_pt.c \
${SIGMAD}/sigma_rad.c ${SIGMAD}/sigma_rtc.c ${SIGMAD}/sigma_tt.c \
${SIGMAD}/sigma_cr.c ${SIGMAD}/sigma_cp.c
SIGMA_OPT = -I ${SIGMAD}
SEL32D = ${SIMHD}/SEL32
SEL32 = ${SEL32D}/sel32_cpu.c ${SEL32D}/sel32_sys.c ${SEL32D}/sel32_chan.c \
${SEL32D}/sel32_iop.c ${SEL32D}/sel32_com.c ${SEL32D}/sel32_con.c \
${SEL32D}/sel32_clk.c ${SEL32D}/sel32_mt.c ${SEL32D}/sel32_lpr.c \
${SEL32D}/sel32_scfi.c ${SEL32D}/sel32_fltpt.c ${SEL32D}/sel32_disk.c \
${SEL32D}/sel32_hsdp.c ${SEL32D}/sel32_mfp.c ${SEL32D}/sel32_scsi.c \
${SEL32D}/sel32_ec.c \
$(NETWORK_DEPS)
SEL32_OPT = -I ${SEL32D} -DUSE_INT32 -DSEL32 ${NETWORK_OPT}
###
### Experimental simulators
###
CDC1700D = ${SIMHD}/CDC1700
CDC1700 = ${CDC1700D}/cdc1700_cpu.c ${CDC1700D}/cdc1700_dis.c \
${CDC1700D}/cdc1700_io.c ${CDC1700D}/cdc1700_sys.c \
${CDC1700D}/cdc1700_dev1.c ${CDC1700D}/cdc1700_mt.c \
${CDC1700D}/cdc1700_dc.c ${CDC1700D}/cdc1700_iofw.c \
${CDC1700D}/cdc1700_lp.c ${CDC1700D}/cdc1700_dp.c \
${CDC1700D}/cdc1700_cd.c ${CDC1700D}/cdc1700_sym.c \
${CDC1700D}/cdc1700_rtc.c ${CDC1700D}/cdc1700_drm.c \
${CDC1700D}/cdc1700_msos5.c
CDC1700_OPT = -I ${CDC1700D}
###
### Unsupported/Incomplete simulators
###
ALPHAD = ${SIMHD}/alpha
ALPHA = ${ALPHAD}/alpha_500au_syslist.c ${ALPHAD}/alpha_cpu.c \
${ALPHAD}/alpha_ev5_cons.c ${ALPHAD}/alpha_ev5_pal.c \
${ALPHAD}/alpha_ev5_tlb.c ${ALPHAD}/alpha_fpi.c \
${ALPHAD}/alpha_fpv.c ${ALPHAD}/alpha_io.c \
${ALPHAD}/alpha_mmu.c ${ALPHAD}/alpha_sys.c
ALPHA_OPT = -I ${ALPHAD} -DUSE_ADDR64 -DUSE_INT64
SAGED = ${SIMHD}/SAGE
SAGE = ${SAGED}/sage_cpu.c ${SAGED}/sage_sys.c ${SAGED}/sage_stddev.c \
${SAGED}/sage_cons.c ${SAGED}/sage_fd.c ${SAGED}/sage_lp.c \
${SAGED}/m68k_cpu.c ${SAGED}/m68k_mem.c ${SAGED}/m68k_scp.c \
${SAGED}/m68k_parse.tab.c ${SAGED}/m68k_sys.c \
${SAGED}/sage_i8251.c ${SAGED}/sage_i8253.c ${SAGED}/sage_i8255.c \
${SAGED}/sage_i8259.c ${SAGED}/sage_i8272.c
SAGE_OPT = -I ${SAGED} -DHAVE_INT64
PDQ3D = ${SIMHD}/PDQ-3
PDQ3 = ${PDQ3D}/pdq3_cpu.c ${PDQ3D}/pdq3_sys.c ${PDQ3D}/pdq3_stddev.c \
${PDQ3D}/pdq3_mem.c ${PDQ3D}/pdq3_debug.c ${PDQ3D}/pdq3_fdc.c
PDQ3_OPT = -I ${PDQ3D}
#
# Build everything (not the unsupported/incomplete or experimental simulators)
#
ALL = pdp1 pdp4 pdp7 pdp8 pdp9 pdp15 pdp11 pdp10 \
vax microvax3900 microvax1 rtvax1000 microvax2 vax730 vax750 vax780 \
vax8200 vax8600 besm6 \
microvax2000 infoserver100 infoserver150vxt microvax3100 microvax3100e \
vaxstation3100m30 vaxstation3100m38 vaxstation3100m76 vaxstation4000m60 \
microvax3100m80 vaxstation4000vlc infoserver1000 \
nd100 nova eclipse hp2100 hp3000 i1401 i1620 s3 altair altair8800 \
altairz80 gri i7094 ibm1130 id16 id32 sds lgp h316 cdc1700 \
swtp6800mp-a swtp6800mp-a2 tx-0 ssem b5500 intel-mds \
scelbi 3b2 3b2-700 i701 i704 i7010 i7070 i7080 i7090 \
sigma uc15 pdp10-ka pdp10-ki pdp10-kl pdp10-ks pdp6 i650 \
imlac linc tt2500 sel32
all : ${ALL}
EXPERIMENTAL = alpha pdq3 sage
experimental : ${EXPERIMENTAL}
clean :
ifeq (${WIN32},)
-${RM} -rf ${BIN}
else
-if exist $(BIN) rmdir /s /q BIN
endif
${BUILD_ROMS} :
${MKDIRBIN}
ifeq (${WIN32},)
@if ${TEST} \( ! -e $@ \) -o \( sim_BuildROMs.c -nt $@ \) ; then ${CC} sim_BuildROMs.c ${CC_OUTSPEC}; fi
else
@if not exist $@ ${CC} sim_BuildROMs.c ${CC_OUTSPEC}
endif
@$@
MAKEFLAGS += --no-print-directory
#
# Individual builds
#
pdp1 : $(BIN)pdp1$(EXE)
$(BIN)pdp1$(EXE) : $(PDP1) $(SIM)
$(MAKEIT) OPTS="$(PDP1_OPT)"
pdp4 : $(BIN)pdp4$(EXE)
$(BIN)pdp4$(EXE) : $(PDP18B) $(SIM)
$(MAKEIT) OPTS="$(PDP4_OPT)"
pdp7 : $(BIN)pdp7$(EXE)
$(BIN)pdp7$(EXE) : $(PDP18B) ${PDP18BD}/pdp18b_dpy.c ${DISPLAYL} ${DISPLAY340} $(SIM)
$(MAKEIT) OPTS="$(PDP7_OPT)"
pdp8 : $(BIN)pdp8$(EXE)
$(BIN)pdp8$(EXE) : ${PDP8} ${SIM}
$(MAKEIT) OPTS="$(PDP8_OPT)"
pdp9 : $(BIN)pdp9$(EXE)
$(BIN)pdp9$(EXE) : ${PDP18B} ${SIM}
$(MAKEIT) OPTS="$(PDP9_OPT)"
pdp15 : $(BIN)pdp15$(EXE)
$(BIN)pdp15$(EXE) : ${PDP18B} ${SIM}
$(MAKEIT) OPTS="$(PDP15_OPT)"
pdp10 : $(BIN)pdp10$(EXE)
$(BIN)pdp10$(EXE) : ${PDP10} ${SIM}
$(MAKEIT) OPTS="$(PDP10_OPT)"
imlac : $(BIN)imlac$(EXE)
$(BIN)imlac$(EXE) : ${IMLAC} ${SIM}
$(MAKEIT) OPTS="$(IMLAC_OPT)"
linc : $(BIN)linc$(EXE)
$(BIN)linc$(EXE) : ${LINC} ${SIM}
$(MAKEIT) OPTS="$(LINC_OPT)"
tt2500 : $(BIN)tt2500$(EXE)
$(BIN)tt2500$(EXE) : ${TT2500} ${SIM}
$(MAKEIT) OPTS="$(TT2500_OPT)"
pdp11 : $(BIN)pdp11$(EXE)
$(BIN)pdp11$(EXE) : ${PDP11} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(PDP11_OPT)"
uc15 : $(BIN)uc15$(EXE)
$(BIN)uc15$(EXE) : ${UC15} ${SIM}
$(MAKEIT) OPTS="$(UC15_OPT)"
microvax3900 : vax
vax : $(BIN)vax$(EXE)
$(BIN)vax$(EXE) : ${VAX} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX_OPT)" TEST_NAME=vax-diag ALTNAME=microvax3900
microvax2000 : $(BIN)microvax2000$(EXE)
$(BIN)microvax2000$(EXE) : ${VAX410} ${SIM} ${SCSI} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX410_OPT)" TEST_NAME=vax-diag
infoserver100 : $(BIN)infoserver100$(EXE)
$(BIN)infoserver100$(EXE) : ${VAX420} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX411_OPT)" TEST_NAME=vax-diag
infoserver150vxt : $(BIN)infoserver150vxt$(EXE)
$(BIN)infoserver150vxt$(EXE) : ${VAX420} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX412_OPT)" TEST_NAME=vax-diag
microvax3100 : $(BIN)microvax3100$(EXE)
$(BIN)microvax3100$(EXE) : ${VAX420} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX41A_OPT)" TEST_NAME=vax-diag
microvax3100e : $(BIN)microvax3100e$(EXE)
$(BIN)microvax3100e$(EXE) : ${VAX420} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX41D_OPT)" TEST_NAME=vax-diag
vaxstation3100m30 : $(BIN)vaxstation3100m30$(EXE)
$(BIN)vaxstation3100m30$(EXE) : ${VAX420} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX42A_OPT)" TEST_NAME=vax-diag
vaxstation3100m38 : $(BIN)vaxstation3100m38$(EXE)
$(BIN)vaxstation3100m38$(EXE) : ${VAX420} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX42B_OPT)" TEST_NAME=vax-diag
vaxstation3100m76 : $(BIN)vaxstation3100m76$(EXE)
$(BIN)vaxstation3100m76$(EXE) : ${VAX43} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX43_OPT)" TEST_NAME=vax-diag
vaxstation4000m60 : $(BIN)vaxstation4000m60$(EXE)
$(BIN)vaxstation4000m60$(EXE) : ${VAX440} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX46_OPT)" TEST_NAME=vax-diag
microvax3100m80 : $(BIN)microvax3100m80$(EXE)
$(BIN)microvax3100m80$(EXE) : ${VAX440} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX47_OPT)" TEST_NAME=vax-diag
vaxstation4000vlc : $(BIN)vaxstation4000vlc$(EXE)
$(BIN)vaxstation4000vlc$(EXE) : ${VAX440} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX48_OPT)" TEST_NAME=vax-diag
infoserver1000 : $(BIN)infoserver1000$(EXE)
$(BIN)infoserver1000$(EXE) : ${IS1000} ${SCSI} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(IS1000_OPT)" TEST_NAME=vax-diag
microvax1 : $(BIN)microvax1$(EXE)
$(BIN)microvax1$(EXE) : ${VAX610} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX610_OPT)" TEST_NAME=vax-diag
rtvax1000 : $(BIN)rtvax1000$(EXE)
$(BIN)rtvax1000$(EXE) : ${VAX630} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX620_OPT)" TEST_NAME=vax-diag
microvax2 : $(BIN)microvax2$(EXE)
$(BIN)microvax2$(EXE) : ${VAX630} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX630_OPT)" TEST_NAME=vax-diag
vax730 : $(BIN)vax730$(EXE)
$(BIN)vax730$(EXE) : ${VAX730} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX730_OPT)" TEST_NAME=vax-diag
vax750 : $(BIN)vax750$(EXE)
$(BIN)vax750$(EXE) : ${VAX750} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX750_OPT)" TEST_NAME=vax-diag
vax780 : $(BIN)vax780$(EXE)
$(BIN)vax780$(EXE) : ${VAX780} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX780_OPT)" TEST_NAME=vax-diag
vax8200 : $(BIN)vax8200$(EXE)
$(BIN)vax8200$(EXE) : ${VAX8200} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX8200_OPT)" TEST_NAME=vax-diag
vax8600 : $(BIN)vax8600$(EXE)
$(BIN)vax8600$(EXE) : ${VAX8600} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(VAX8600_OPT)" TEST_NAME=vax-diag
nd100 : $(BIN)nd100$(EXE)
$(BIN)nd100$(EXE) : ${ND100} ${SIM}
$(MAKEIT) OPTS="$(ND100_OPT)" NOCPP=1
nova : $(BIN)nova$(EXE)
$(BIN)nova$(EXE) : ${NOVA} ${SIM}
$(MAKEIT) OPTS="$(NOVA_OPT)"
eclipse : $(BIN)eclipse$(EXE)
$(BIN)eclipse$(EXE) : ${ECLIPSE} ${SIM}
$(MAKEIT) OPTS="$(ECLIPSE_OPT)"
h316 : $(BIN)h316$(EXE)
$(BIN)h316$(EXE) : ${H316} ${SIM}
$(MAKEIT) OPTS="$(H316_OPT)"
hp2100 : $(BIN)hp2100$(EXE)
$(BIN)hp2100$(EXE) : ${HP2100} ${SIM}
$(MAKEIT) OPTS="$(HP2100_OPT)" NOCPP=1
hp3000 : $(BIN)hp3000$(EXE)
$(BIN)hp3000$(EXE) : ${HP3000} ${SIM}
$(MAKEIT) OPTS="$(HP3000_OPT)" NOCPP=1
i1401 : $(BIN)i1401$(EXE)
$(BIN)i1401$(EXE) : ${I1401} ${SIM}
$(MAKEIT) OPTS="$(I1401_OPT)"
i1620 : $(BIN)i1620$(EXE)
$(BIN)i1620$(EXE) : ${I1620} ${SIM}
$(MAKEIT) OPTS="$(I1620_OPT)"
i7094 : $(BIN)i7094$(EXE)
$(BIN)i7094$(EXE) : ${I7094} ${SIM}
$(MAKEIT) OPTS="$(I7094_OPT)"
ibm1130 : $(BIN)ibm1130$(EXE)
#$(BIN)ibm1130$(EXE) : ${IBM1130} $(SIM)
# $(MAKEIT) OPTS="$(IBM1130_OPT)" NOCPP=1
${BIN}ibm1130${EXE} : ${IBM1130}
ifneq (1,${CPP_BUILD}${CPP_FORCE})
${MKDIRBIN}
ifneq (${WIN32},)
windres ${IBM1130D}/ibm1130.rc ${BIN}ibm1130.o
endif
${CC} ${IBM1130} ${SIM} ${IBM1130_OPT} ${CC_OUTSPEC} ${LDFLAGS}
ifneq (${WIN32},)
del $(BIN)\ibm1130.o
endif
ifneq (,$(call find_test,Ibm1130))
$@ $(call find_test,Ibm1130) ${TEST_ARG}
endif
else
$(info ibm1130 can not be built using C++)
endif
s3 : $(BIN)s3$(EXE)
$(BIN)s3$(EXE) : ${S3} ${SIM}
$(MAKEIT) OPTS="$(S3_OPT)"
sel32 : $(BIN)sel32$(EXE)
$(BIN)sel32$(EXE) : ${SEL32} ${SIM}
$(MAKEIT) OPTS="$(SEL32_OPT)"
altair : $(BIN)altair$(EXE)
$(BIN)altair$(EXE) : ${ALTAIR} ${SIM}
$(MAKEIT) OPTS="$(ALTAIR_OPT)"
altair8800 : $(BIN)altair8800$(EXE)
$(BIN)altair8800$(EXE) : ${ALTAIR8800} ${SIM}
$(MAKEIT) OPTS="$(ALTAIR8800_OPT)"
altairz80 : $(BIN)altairz80$(EXE)
$(BIN)altairz80$(EXE) : ${ALTAIRZ80} ${SIM}
$(MAKEIT) OPTS="$(ALTAIRZ80_OPT)"
gri : $(BIN)gri$(EXE)
$(BIN)gri$(EXE) : ${GRI} ${SIM}
$(MAKEIT) OPTS="$(GRI_OPT)"
lgp : $(BIN)lgp$(EXE)
$(BIN)lgp$(EXE) : ${LGP} ${SIM}
$(MAKEIT) OPTS="$(LGP_OPT)"
id16 : $(BIN)id16$(EXE)
$(BIN)id16$(EXE) : ${ID16} ${SIM}
$(MAKEIT) OPTS="$(ID16_OPT)"
id32 : $(BIN)id32$(EXE)
$(BIN)id32$(EXE) : ${ID32} ${SIM}
$(MAKEIT) OPTS="$(ID32_OPT)"
sds : $(BIN)sds$(EXE)
$(BIN)sds$(EXE) : ${SDS} ${SIM}
$(MAKEIT) OPTS="$(SDS_OPT)"
swtp6800mp-a : $(BIN)swtp6800mp-a$(EXE)
$(BIN)swtp6800mp-a$(EXE) : ${SWTP6800MP-A} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(SWTP6800_OPT)"
swtp6800mp-a2 : $(BIN)swtp6800mp-a2$(EXE)
$(BIN)swtp6800mp-a2$(EXE) : ${SWTP6800MP-A2} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(SWTP6800_OPT)"
intel-mds : $(BIN)intel-mds$(EXE)
$(BIN)intel-mds$(EXE) : ${INTEL_MDS} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(INTEL_MDS_OPT)"
ibmpc : $(BIN)ibmpc$(EXE)
$(BIN)ibmpc$(EXE) : ${IBMPC} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(IBMPC_OPT)"
ibmpcxt : $(BIN)ibmpcxt$(EXE)
$(BIN)ibmpcxt$(EXE) : ${IBMPCXT} ${SIM} ${BUILD_ROMS}
$(MAKEIT) OPTS="$(IBMPCXT_OPT)"
scelbi : $(BIN)scelbi$(EXE)
$(BIN)scelbi$(EXE) : ${SCELBI} ${SIM}
$(MAKEIT) OPTS="$(SCELBI_OPT)"
tx-0 : $(BIN)tx-0$(EXE)
$(BIN)tx-0$(EXE) : ${TX0} ${SIM}
$(MAKEIT) OPTS="$(TX0_OPT)"
ssem : $(BIN)ssem$(EXE)
$(BIN)ssem$(EXE) : ${SSEM} ${SIM}
$(MAKEIT) OPTS="$(SSEM_OPT)"
cdc1700 : $(BIN)cdc1700$(EXE)
$(BIN)cdc1700$(EXE) : ${CDC1700} ${SIM}
$(MAKEIT) OPTS="$(CDC1700_OPT)"
besm6 : $(BIN)besm6$(EXE)
$(BIN)besm6$(EXE) : ${BESM6} ${SIM}
$(MAKEIT) OPTS="$(BESM6_OPT)" NOCPP=1
sigma : $(BIN)sigma$(EXE)
$(BIN)sigma$(EXE) : ${SIGMA} ${SIM}
$(MAKEIT) OPTS="$(SIGMA_OPT)"
alpha : $(BIN)alpha$(EXE)
$(BIN)alpha$(EXE) : ${ALPHA} ${SIM}
$(MAKEIT) OPTS="$(ALPHA_OPT)"
sage : $(BIN)sage$(EXE)
$(BIN)sage$(EXE) : ${SAGE} ${SIM}
$(MAKEIT) OPTS="$(SAGE_OPT)"
pdq3 : $(BIN)pdq3$(EXE)
$(BIN)pdq3$(EXE) : ${PDQ3} ${SIM}
$(MAKEIT) OPTS="$(PDQ3_OPT)"
b5500 : $(BIN)b5500$(EXE)
$(BIN)b5500$(EXE) : ${B5500} ${SIM}
$(MAKEIT) OPTS="$(B5500_OPT)"
3b2 : $(BIN)3b2$(EXE)
$(BIN)3b2$(EXE) : ${ATT3B2M400} ${SIM}
$(MAKEIT) OPTS="$(ATT3B2M400_OPT)" ALTNAME=3b2-400
3b2-700 : $(BIN)3b2-700$(EXE)
$(BIN)3b2-700$(EXE) : ${ATT3B2M700} ${SCSI} ${SIM}
$(MAKEIT) OPTS="$(ATT3B2M700_OPT)"
i7090 : $(BIN)i7090$(EXE)
$(BIN)i7090$(EXE) : ${I7090} ${SIM}
$(MAKEIT) OPTS="$(I7090_OPT)"
i7080 : $(BIN)i7080$(EXE)
$(BIN)i7080$(EXE) : ${I7080} ${SIM}
$(MAKEIT) OPTS="$(I7080_OPT)"
i7070 : $(BIN)i7070$(EXE)
$(BIN)i7070$(EXE) : ${I7070} ${SIM}
$(MAKEIT) OPTS="$(I7070_OPT)"
i7010 : $(BIN)i7010$(EXE)
$(BIN)i7010$(EXE) : ${I7010} ${SIM}
$(MAKEIT) OPTS="$(I7010_OPT)"
i704 : $(BIN)i704$(EXE)
$(BIN)i704$(EXE) : ${I704} ${SIM}
$(MAKEIT) OPTS="$(I704_OPT)"
i701 : $(BIN)i701$(EXE)
$(BIN)i701$(EXE) : ${I701} ${SIM}
$(MAKEIT) OPTS="$(I701_OPT)"
i650 : $(BIN)i650$(EXE)
$(BIN)i650$(EXE) : ${I650} ${SIM}
$(MAKEIT) OPTS="$(I650_OPT)"
pdp6 : $(BIN)pdp6$(EXE)
$(BIN)pdp6$(EXE) : ${PDP6} ${SIM}
$(MAKEIT) OPTS="$(PDP6_OPT)"
pdp10-ka : $(BIN)pdp10-ka$(EXE)
$(BIN)pdp10-ka$(EXE) : ${KA10} ${SIM}
$(MAKEIT) OPTS="$(KA10_OPT)"
pdp10-ki : $(BIN)pdp10-ki$(EXE)
$(BIN)pdp10-ki$(EXE) : ${KI10} ${SIM}
$(MAKEIT) OPTS="$(KI10_OPT)"
pdp10-kl : $(BIN)pdp10-kl$(EXE)
$(BIN)pdp10-kl$(EXE) : ${KL10} ${SIM}
$(MAKEIT) OPTS="$(KL10_OPT)"
pdp10-ks : $(BIN)pdp10-ks$(EXE)
$(BIN)pdp10-ks$(EXE) : ${KS10} ${SIM}
$(MAKEIT) OPTS="$(KS10_OPT)"
# Front Panel API Demo/Test program
frontpaneltest : ${BIN}frontpaneltest${EXE} ${BIN}vax${EXE}
${BIN}frontpaneltest${EXE} : frontpanel/FrontPanelTest.c sim_sock.c sim_frontpanel.c
#cmake:ignore-target
$(MAKEIT) OPTS="$(OS_CURSES_DEFS)" TESTS=0
else # end of primary make recipies
# Recursion support to build simulator objects and/or binaries
# This section exists for make recursion to achieve individual target
# builds.
# potential specified input parameters
# OPTS - the compile options (required)
# LNK_OPTS - optional platform specific linker options
# TEST_NAME - the name of the simulator test script (when not simply named <simulator-name>_test.ini)
# ALTNAME - an optional alternate name for the current simulator target
override DEPS := $(filter %.c,$(DEPS)) # only worry about building C source modules
ifeq (,$(OPTS))
$(error ERROR *** Missing build options.)
endif
ifeq (1,$(QUIET))
CC := @$(CC)
endif
# Extract source directories from the dependencies
D0 = $(foreach dir,$(DEPS),$(dir $(dir)))
# Isolate the directory of the first dependency
PRIMARY_SRC = $(word 1, $(D0))
D1 = $(sort $(D0))
# Extract potential source code directories from the -I specifiers in the options
space = $(empty) $(empty)
# Combine all options separated with ^
D2=$(subst $(space),^,^$(OPTS))
# split the options with -I at the beginning of each element
D3=$(subst ^-I,$(space)^-I,$(D2))
# strip out includes for known support directories (system/dependenty includes
# starting with /, slirp, slirp_glue, display, etc - with or without spaces between the
# -I and the directory)
D4=$(filter-out ^-I/%,$(filter-out ^-I^/%,$(filter-out ^-Islirp%,$(filter-out ^-I^slirp%,$(filter-out ^-Islirp_glue%,$(filter-out ^-I^slirp_glue%,$(filter-out ^-Idisplay%,$(filter-out ^-I^display%,$(D3)))))))))
# remove leading element if it isn't an include
D5=$(filter ^-I%,$(D4))
# strip off the leading -I include specifier
D6=$(foreach include,$(D5),$(patsubst ^-I%,%,$(include)))
# chop off any extra options beyond the include directory
D7=$(foreach include,$(D6),$(word 1,$(subst ^,$(space),$(include))))
PRIMARY_INC = $(word 1, $(D7))
DIRS = $(strip $(D7) $(D1))
ifneq ($(WIN32),)
pathfix = $(subst /,\,$(1))
else
pathfix = $(1)
endif
find_test = $(if $(findstring 0,$(TESTS)),, RegisterSanityCheck $(if $(abspath $(wildcard $(PRIMARY_SRC)/tests/$(1)_test.ini)),$(abspath $(wildcard $(PRIMARY_SRC)/tests/$(1)_test.ini)),$(abspath $(wildcard $(PRIMARY_INC)/tests/$(1)_test.ini))) </dev/null)
TARGETNAME = $(basename $(notdir $(TARGET)))
BIN = $(dir $(TARGET))
EXE = $(suffix $(TARGET))
BLDDIR = $(BIN)$(OSTYPE)-build/$(TARGETNAME)
OBJS = $(addsuffix .o,$(addprefix $(BLDDIR)/,$(basename $(notdir $(DEPS)))))
$(shell $(MKDIR) $(call pathfix,$(BLDDIR)))
ifeq (,$(findstring 3.,$(GNUMakeVERSION)))
define NEWLINE
$(empty)
$(empty)
endef
MAKE_INFO = $(foreach VAR,CC OPTS LNK_OPTS DEPS LDFLAGS DIRS BUILD_SEPARATE,$(VAR)=$($(VAR))$(NEWLINE))
PRIOR_MAKE_INFO = $(shell if ${TEST} -e $(call pathfix,$(BLDDIR)/Make.info); then cat $(call pathfix,$(BLDDIR)/Make.info); fi)
ifneq ($(strip $(subst $(NEWLINE), ,$(MAKE_INFO))),$(strip $(PRIOR_MAKE_INFO)))
# Different or no prior options, so start from scratch
$(shell $(RM) $(call pathfix,$(BLDDIR)/*) $(call pathfix,$(wildcard $(TARGET))))
$(file >$(BLDDIR)/Make.info,$(MAKE_INFO))
endif
endif
ifneq (,$(and $(CPP_BUILD),$(NOCPP)))
$(warning the $(TARGETNAME) simulator can not be built using C++)
else
$(BLDDIR)/%.o : $(word 1,$(DIRS))/%.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : $(word 1,$(DIRS))/*/%.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : $(word 1,$(DIRS))/*/*/%.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : display/%.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : slirp/%.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : slirp_glue/%.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : %.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
ifneq (,$(word 2,$(DIRS)))
$(BLDDIR)/%.o : $(word 2,$(DIRS))/%.c
-@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : $(word 2,$(DIRS))/*/%.c
@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : $(word 2,$(DIRS))/*/*/%.c
@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
ifneq (,$(word 3,$(DIRS)))
$(BLDDIR)/%.o : $(word 3,$(DIRS))/%.c
@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : $(word 3,$(DIRS))/*/%.c
@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
$(BLDDIR)/%.o : $(word 3,$(DIRS))/*/*/%.c
@$(MKDIR) $(call pathfix,$(dir $@))
ifeq (1,$(QUIET))
@echo Compiling $< into $@
endif
$(CC) -c $< -o $@ ${OPTS}
endif
endif
ifeq (,$(TEST_NAME))
override TEST_NAME = $(TARGETNAME)
endif
ifneq (,$(findstring 1,$(BUILD_SEPARATE)))
# Multiple Separate compiles for each input
$(TARGET): $(OBJS)
$(MKDIRBIN)
ifeq (1,$(QUIET))
@echo Linking $(TARGET)
endif
${CC} $(OBJS) ${OPTS} ${LNK_OPTS} -o $@ ${LDFLAGS}
else
# Single Compile and Link of all inputs
$(TARGET): $(DEPS)
$(MKDIRBIN)
ifeq (1,$(QUIET))
@echo Compile and Linking $(DEPS) into $(TARGET)
endif
${CC} $(DEPS) ${OPTS} ${LNK_OPTS} -o $@ ${LDFLAGS}
endif
ifneq (,$(ALTNAME))
ifeq (${WIN32},)
cp $(TARGET) $(@D)/$(ALTNAME)${EXE}
else
copy $(TARGET) $(@D)\$(ALTNAME)${EXE}
endif
endif
ifneq (,$(call find_test,$(TEST_NAME)))
# invoke the just built simulator to engage its test activities
$@ $(call find_test,$(TEST_NAME)) ${TEST_ARG}
endif
ifneq (,$(SOURCE_CHECK))
$@ $(SOURCE_CHECK_SWITCHES) CheckSourceCode $(DEPS)
endif
endif # CPP_BUILD
endif # makefile recursion build support