CMake: Updates

Issue #294: "apple silicon build problem(s?)": If the "--flavor/-f" flag
is not specified on the command line, then complain loudly, print help
and exit. The script used to default to "Unix Makefiles".

Updates:

- Add missing "-DHAVE_LIBPNG" compiler command line define when the PNG
  library is detected/present for screen capture support.

- Add "clang64" to the list of MinGW64 platforms for which the
  .travis/deps.sh script can install build dependencies.

- Add PThread4W_FOUND to the condition that sets async I/O for Win32
  when using vcpkg for build dependencies.

- Add vs2022-x64, vs2019-x64 and vs2017-x64 build environments to
  build 64-bit Windows executables.

- Use simulator AIO only where needed by the simulator (i.e., the
  simulator calls/uses AIO_CHECK_EVENT in sim_instr())

  - Add "USES_AIO" flag to add_simulator() to mark a simulator that
    acutally uses asynchronous I/O.

  - Build "_aio" SIMH core library variants that have AIO turned on,
    link with the "_aio" variant when a simulator sets USES_AIO.

  - Emit a warning message when WITH_ASYNC is False (CMake configuration
    option) to notify the user/developer that some functionality will be
    crippled.

  Affected simulator builds: 3b2 family, PDP-6, PDP-11, VAX family,
  IMLAC and TT2500. The makefile and cmake/generate.py also updated
  to remain in sync with CMake.

  N.B.: Simulators still link with the underlying platform's threading
  library. SEL32 requires pthreads or equivalent threading library,
  independent of AIO.

- cmake/cmake-builder.sh

  - New "--no-aio" flag: Build simulators without async I/O.

  - New "--no-aio-intrinsics" flag: Don't build async I/O using compiler
    compare-exchange, atomic load intrinsics.

- cmake/cmake-builder.ps1

  - New "-noaio" flag: Build simulators without async I/O.

  - New "-noaiointrinsics" flag: Don't build async I/O using compiler
    compare-exchange, atomic load intrinsics.

CMake 3.28.1 INTERFACE_LINK_LIBRARIES behavior change: The file name
must now be an absolute path. Relative paths no longer accepted.
Internally, SIMH enforces this if CMAKE_VERSION >= 3.19, when REAL_PATH
was first implemented.
This commit is contained in:
B. Scott Michel 2023-12-04 11:33:00 -08:00 committed by Paul Koning
parent f4c39a325c
commit d9d0e8bd74
18 changed files with 324 additions and 139 deletions

View file

@ -45,8 +45,22 @@ install_ucrt64() {
mingw-w64-ucrt-x86_64-libpcap mingw-w64-ucrt-x86_64-libpcap
} }
install_clang64() {
pacman -S --needed mingw-w64-clang-x86_64-ninja \
mingw-w64-clang-x86_64-cmake \
mingw-w64-clang-x86_64-extra-cmake-modules \
mingw-w64-clang-x86_64-clang \
mingw-w64-clang-x86_64-make \
mingw-w64-clang-x86_64-pcre \
mingw-w64-clang-x86_64-freetype \
mingw-w64-clang-x86_64-SDL2 \
mingw-w64-clang-x86_64-SDL2_ttf \
mingw-w64-clang-x86_64-libpcap
}
case "$1" in case "$1" in
osx|linux|mingw64|ucrt64) osx|linux|mingw64|ucrt64|clang64)
install_"$1" install_"$1"
;; ;;
*) *)

View file

@ -38,6 +38,7 @@ add_simulator(3b2
DEFINES DEFINES
REV2 REV2
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
LABEL 3B2 LABEL 3B2
PKG_FAMILY att3b2_family PKG_FAMILY att3b2_family
TEST 3b2) TEST 3b2)
@ -65,6 +66,7 @@ add_simulator(3b2-700
DEFINES DEFINES
REV3 REV3
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
LABEL 3B2 LABEL 3B2
PKG_FAMILY att3b2_family PKG_FAMILY att3b2_family
TEST 3b2-700) TEST 3b2-700)

View file

@ -28,6 +28,13 @@ if (CMAKE_VERSION VERSION_LESS "3.21" AND NOT DEFINED SIMH_INSTALLER_WARNING)
set(SIMH_INSTALLER_WARNING TRUE CACHE BOOL "Installer/CPack warning issued when CMAKE_VERSION < 3.21" FORCE) set(SIMH_INSTALLER_WARNING TRUE CACHE BOOL "Installer/CPack warning issued when CMAKE_VERSION < 3.21" FORCE)
endif () endif ()
## SIMH Version variables:
set(SIMH_VERSION_MAJOR 4)
set(SIMH_VERSION_MINOR 1)
set(SIMH_VERSION_PATCH 0)
set(SIMH_VERSION "${SIMH_VERSION_MAJOR}.${SIMH_VERSION_MINOR}.${SIMH_VERSION_PATCH}"
CACHE PATH "Open-Simh version string.")
# Places to look for CMake modules/includes # Places to look for CMake modules/includes
set(SIMH_INCLUDE_PATH_LIST set(SIMH_INCLUDE_PATH_LIST
${CMAKE_SOURCE_DIR}/cmake ${CMAKE_SOURCE_DIR}/cmake
@ -73,12 +80,6 @@ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.15)
cmake_policy(SET CMP0091 NEW) cmake_policy(SET CMP0091 NEW)
endif() endif()
## SIMH Version variables:
set(SIMH_VERSION_MAJOR 4)
set(SIMH_VERSION_MINOR 1)
set(SIMH_VERSION_PATCH 0)
set(SIMH_VERSION "${SIMH_VERSION_MAJOR}.${SIMH_VERSION_MINOR}.${SIMH_VERSION_PATCH}")
project(simh VERSION "${SIMH_VERSION}" LANGUAGES C CXX) project(simh VERSION "${SIMH_VERSION}" LANGUAGES C CXX)
include(vcpkg-setup) include(vcpkg-setup)

View file

@ -226,6 +226,7 @@ add_simulator(pdp6
FEATURE_INT64 FEATURE_INT64
FEATURE_VIDEO FEATURE_VIDEO
FEATURE_DISPLAY FEATURE_DISPLAY
USES_AIO
LABEL PDP10 LABEL PDP10
PKG_FAMILY decpdp_family PKG_FAMILY decpdp_family
TEST pdp6) TEST pdp6)

View file

@ -74,6 +74,7 @@ add_simulator(pdp11
VM_PDP11 VM_PDP11
FEATURE_VIDEO FEATURE_VIDEO
FEATURE_DISPLAY FEATURE_DISPLAY
USES_AIO
BUILDROMS BUILDROMS
LABEL PDP11 LABEL PDP11
PKG_FAMILY pdp11_family PKG_FAMILY pdp11_family

View file

@ -1189,13 +1189,15 @@ add_simulator(3b2
convention `[sim]_test.ini` -- the argument to the `TEST` parameter is the convention `[sim]_test.ini` -- the argument to the `TEST` parameter is the
`[sim]` portion of the test script's name. `[sim]` portion of the test script's name.
- Option keywords: These determine which of [six (6) simulator core libraries](#simulator-core-libraries) is - Option keywords: These determine which of [simulator core libraries](#simulator-core-libraries) is
linked with the simulator. linked with the simulator.
- `FEATURE_INT64`: 64-bit integers, 32-bit pointers - `FEATURE_INT64`: 64-bit integers, 32-bit pointers
- `FEATURE_FULL64`: 64-bit integers, 64-bit pointers - `FEATURE_FULL64`: 64-bit integers, 64-bit pointers
- `FEATURE_VIDEO`: Simulator video support. - `FEATURE_VIDEO`: Simulator video support.
- `FEATURE_DISPLAY`: Video display support. - `FEATURE_DISPLAY`: Video display support.
- `USES_AIO`: Asynchronous I/O support (primarily useful for simulator
network devices.)
- `PKG_FAMILY` option: This option adds the simulator to a package "family" or - `PKG_FAMILY` option: This option adds the simulator to a package "family" or
simulator packaging group, e.g., "DEC PDP simulators". The default package simulator packaging group, e.g., "DEC PDP simulators". The default package
@ -1213,14 +1215,31 @@ The `CMake` build infrastructure avoids repeatedly compiling the simulator
libraries that represents the combination of required features: 32/64 bit libraries that represents the combination of required features: 32/64 bit
support and video: support and video:
| Library | Video | Integer size | Address size | `add_simulator` flags | | Library | Video | Integer size | Address size | `add_simulator` flags |
| :--------------- | :---: | -----------: | -----------: | :-------------------- | | :---------------- | :---: | -----------: | -----------: | :-------------------- |
| simhcore.a | N | 32 | 32 | | | simhcore.a | N | 32 | 32 | |
| simhi64.a | N | 64 | 32 | `FEATURE_INT64` | | simhi64.a | N | 64 | 32 | `FEATURE_INT64` |
| simhz64.a | N | 64 | 64 | `FEATURE_FULL64` | | simhz64.a | N | 64 | 64 | `FEATURE_FULL64` |
| simhcore_video.a | Y | 32 | 32 | `FEATURE_VIDEO` | | simhcore\_video.a | Y | 32 | 32 | `FEATURE_VIDEO` |
| simhi64_video.a | Y | 64 | 32 | `FEATURE_INT64`, `FEATURE_VIDEO` | | simhi64\_video.a | Y | 64 | 32 | `FEATURE_INT64`, `FEATURE_VIDEO` |
| simhz64_video.a | Y | 64 | 64 | `FEATURE_FULL64`, `FEATURE_VIDEO` | | simhz64\_video.a | Y | 64 | 64 | `FEATURE_FULL64`, `FEATURE_VIDEO` |
In addition to these six libraries, there are six asynchronous I/O (AIO)
variants that are built and linked into a simulator when the `USES_AIO` feature
flag is present in `add_simulator()`'s arguments:
| Library variant | Description |
| :--------------------- | :---------: |
| simhcore\_aio.a | simhcore.a with AIO support. |
| simhi64\_aio.a | simhi64.a with AIO support. |
| simhz64\_aio.a | simhz64.a with AIO support. |
| simhcore\_video\_aio.a | simhcore\_video.a with AIO support. |
| simhi64\_video\_aio.a | simhi64\_video.a with AIO support. |
| simhz64\_video\_aio.a | simhz64\_video.a with AIO support. |
The `EXCLUDE_FROM_ALL` property is set on each of theses libraries in CMake to
avoid building the entire matrix. Practically speaking, 10 out of the 12 total
libraries actually build for the entire simulator suite.
Internally, these core libraries are [`CMake` interface libraries][cmake_interface_library] -- when they Internally, these core libraries are [`CMake` interface libraries][cmake_interface_library] -- when they
are added to a simulator's executable via `target_link_libraries`, the simulator are added to a simulator's executable via `target_link_libraries`, the simulator
@ -1265,6 +1284,10 @@ add_simulator(simulator_name
## in conjunction with FEATURE_VIDEO ## in conjunction with FEATURE_VIDEO
FEATURE_DISPLAY FEATURE_DISPLAY
## Simulator uses asynchronous I/O, i.e., calls AIO_CHECK_EVENT
## in its sim_instr() instruction simulation loop:
USES_AIO
## Packaging "family" (group) to which the simulator belongs, ## Packaging "family" (group) to which the simulator belongs,
## for packagers that support grouping (Windows: NSIS .exe, ## for packagers that support grouping (Windows: NSIS .exe,
## WIX .msi; macOS) ## WIX .msi; macOS)

View file

@ -140,6 +140,7 @@ add_simulator(infoserver100
VAX_411 VAX_411
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -169,6 +170,7 @@ add_simulator(infoserver1000
VM_VAX VM_VAX
IS_1000 IS_1000
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -186,6 +188,7 @@ add_simulator(infoserver150vxt
VAX_412 VAX_412
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -230,6 +233,7 @@ add_simulator(microvax1
VAX_610 VAX_610
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -246,6 +250,7 @@ add_simulator(microvax2
VAX_630 VAX_630
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -283,6 +288,7 @@ add_simulator(microvax2000
VAX_410 VAX_410
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -300,6 +306,7 @@ add_simulator(microvax3100
VAX_41A VAX_41A
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -317,6 +324,7 @@ add_simulator(microvax3100e
VAX_41D VAX_41D
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -332,6 +340,7 @@ add_simulator(microvax3100m80
VAX_440 VAX_440
VAX_47 VAX_47
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -362,6 +371,7 @@ add_simulator(vax
VM_VAX VM_VAX
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -435,6 +445,7 @@ add_simulator(vax730
VM_VAX VM_VAX
VAX_730 VAX_730
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -485,6 +496,7 @@ add_simulator(vax750
VM_VAX VM_VAX
VAX_750 VAX_750
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -536,6 +548,7 @@ add_simulator(vax780
VM_VAX VM_VAX
VAX_780 VAX_780
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -584,6 +597,7 @@ add_simulator(vax8200
VM_VAX VM_VAX
VAX_820 VAX_820
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -633,6 +647,7 @@ add_simulator(vax8600
VM_VAX VM_VAX
VAX_860 VAX_860
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -650,6 +665,7 @@ add_simulator(vaxstation3100m30
VAX_42A VAX_42A
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -667,6 +683,7 @@ add_simulator(vaxstation3100m38
VAX_42B VAX_42B
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -702,6 +719,7 @@ add_simulator(vaxstation3100m76
VAX_43 VAX_43
FEATURE_FULL64 FEATURE_FULL64
FEATURE_VIDEO FEATURE_VIDEO
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -717,6 +735,7 @@ add_simulator(vaxstation4000m60
VAX_440 VAX_440
VAX_46 VAX_46
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family
@ -732,6 +751,7 @@ add_simulator(vaxstation4000vlc
VAX_440 VAX_440
VAX_48 VAX_48
FEATURE_FULL64 FEATURE_FULL64
USES_AIO
BUILDROMS BUILDROMS
LABEL VAX LABEL VAX
PKG_FAMILY vax_family PKG_FAMILY vax_family

View file

@ -42,67 +42,78 @@ set(SIM_VIDEO_SOURCES
${CMAKE_SOURCE_DIR}/display/display.c ${CMAKE_SOURCE_DIR}/display/display.c
${CMAKE_SOURCE_DIR}/display/sim_ws.c) ${CMAKE_SOURCE_DIR}/display/sim_ws.c)
## Build a simulator core library, with and without AIO support. The AIO variant
## has "_aio" appended to its name, e.g., "simhz64_aio" or "simhz64_video_aio".
function(build_simcore _targ) function(build_simcore _targ)
cmake_parse_arguments(SIMH "VIDEO;INT64;ADDR64;BESM6_SDL_HACK" "" "" ${ARGN}) cmake_parse_arguments(SIMH "VIDEO;INT64;ADDR64;BESM6_SDL_HACK" "" "" ${ARGN})
# Additional library targets that depend on simulator I/O:
add_library(${_targ} STATIC ${SIM_SOURCES}) add_library(${_targ} STATIC ${SIM_SOURCES})
set(sim_aio_lib "${_targ}_aio")
add_library(${sim_aio_lib} STATIC ${SIM_SOURCES})
# Components that need to be turned on while building the library, but # Components that need to be turned on while building the library, but
# don't export out to the dependencies (hence PRIVATE.) # don't export out to the dependencies (hence PRIVATE.)
set_target_properties(${_targ} PROPERTIES foreach (lib IN ITEMS "${_targ}" "${sim_aio_lib}")
C_STANDARD 99 set_target_properties(${lib} PROPERTIES
) C_STANDARD 99
target_compile_definitions(${_targ} PRIVATE USE_SIM_CARD USE_SIM_IMD) EXCLUDE_FROM_ALL True
target_compile_options(${_targ} PRIVATE ${EXTRA_TARGET_CFLAGS}) )
target_link_options(${_targ} PRIVATE ${EXTRA_TARGET_LFLAGS}) target_compile_definitions(${lib} PRIVATE USE_SIM_CARD USE_SIM_IMD)
target_compile_options(${lib} PRIVATE ${EXTRA_TARGET_CFLAGS})
target_link_options(${lib} PRIVATE ${EXTRA_TARGET_LFLAGS})
# Make sure that the top-level directory is part of the libary's include path: # Make sure that the top-level directory is part of the libary's include path:
target_include_directories("${_targ}" PUBLIC "${CMAKE_SOURCE_DIR}") target_include_directories("${lib}" PUBLIC "${CMAKE_SOURCE_DIR}")
if (SIMH_INT64) if (SIMH_INT64)
target_compile_definitions(${_targ} PUBLIC USE_INT64) target_compile_definitions(${lib} PUBLIC USE_INT64)
endif (SIMH_INT64) endif (SIMH_INT64)
if (SIMH_ADDR64) if (SIMH_ADDR64)
target_compile_definitions(${_targ} PUBLIC USE_ADDR64) target_compile_definitions(${lib} PUBLIC USE_ADDR64)
endif (SIMH_ADDR64) endif (SIMH_ADDR64)
if (SIMH_VIDEO) if (SIMH_VIDEO)
if (WITH_VIDEO) if (WITH_VIDEO)
# It's the video library # It's the video library
target_sources(${_targ} PRIVATE ${SIM_VIDEO_SOURCES}) target_sources(${lib} PRIVATE ${SIM_VIDEO_SOURCES})
target_link_libraries(${_targ} PUBLIC simh_video) target_link_libraries(${lib} PUBLIC simh_video)
endif ()
if (CMAKE_HOST_APPLE AND NOT SIMH_BESM6_SDL_HACK)
## (a) The BESM6 SDL hack is temporary. If SDL_MAIN_AVAILABLE needs
## to be defined, it belongs in the simh_video interface library.
## (b) BESM6 doesn't use SIMH's video capabilities correctly and
## the makefile filters out SDL_MAIN_AVAILABLE on macOS.
## (c) This shouldn't be just an Apple platform quirk; SDL_main should
## be used by all platforms. <sigh!>
target_compile_definitions("${lib}" PUBLIC SDL_MAIN_AVAILABLE)
endif ()
endif () endif ()
if (CMAKE_HOST_APPLE AND NOT SIMH_BESM6_SDL_HACK)
## (a) The BESM6 SDL hack is temporary. If SDL_MAIN_AVAILABLE needs # Define SIM_BUILD_TOOL for the simulator'
## to be defined, it belongs in the simh_video interface library. target_compile_definitions("${lib}" PRIVATE
## (b) BESM6 doesn't use SIMH's video capabilities correctly and "SIM_BUILD_TOOL=CMake (${CMAKE_GENERATOR})"
## the makefile filters out SDL_MAIN_AVAILABLE on macOS. )
## (c) This shouldn't be just an Apple platform quirk; SDL_main should
## be used by all platforms. <sigh!> target_link_libraries(${lib} PUBLIC
target_compile_definitions("${_targ}" PUBLIC SDL_MAIN_AVAILABLE) simh_network
simh_regexp
os_features
thread_lib
)
# Ensure that sim_rev.h picks up .git-commit-id.h if the git command is
# available.
if (GIT_COMMAND)
target_compile_definitions("${lib}" PRIVATE SIM_NEED_GIT_COMMIT_ID)
endif () endif ()
endif ()
target_link_libraries(${_targ} PUBLIC add_dependencies(${lib} update_sim_commit)
simh_network endforeach ()
simh_regexp
os_features
thread_lib
)
# Define SIM_BUILD_TOOL for the simulator' target_compile_definitions(${sim_aio_lib} PUBLIC ${AIO_FLAGS})
target_compile_definitions("${_targ}" PRIVATE
"SIM_BUILD_TOOL=CMake (${CMAKE_GENERATOR})"
)
# Ensure that sim_rev.h picks up .git-commit-id.h if the git command is
# available.
if (GIT_COMMAND)
target_compile_definitions("${_targ}" PRIVATE SIM_NEED_GIT_COMMIT_ID)
endif ()
add_dependencies(${_targ} update_sim_commit)
# Create target cppcheck rule, if detected. # Create target cppcheck rule, if detected.
if (ENABLE_CPPCHECK AND cppcheck_cmd) if (ENABLE_CPPCHECK AND cppcheck_cmd)
@ -142,6 +153,7 @@ list(APPEND ADD_SIMULATOR_OPTIONS
"FEATURE_DISPLAY" "FEATURE_DISPLAY"
"NO_INSTALL" "NO_INSTALL"
"BESM6_SDL_HACK" "BESM6_SDL_HACK"
"USES_AIO"
) )
## TEST: The test script name that will be executed by the simulator within CTest. ## TEST: The test script name that will be executed by the simulator within CTest.
@ -172,6 +184,12 @@ function (simh_executable_template _targ)
message(FATAL_ERROR "${_targ}: No source files?") message(FATAL_ERROR "${_targ}: No source files?")
endif (NOT DEFINED SIMH_SOURCES) endif (NOT DEFINED SIMH_SOURCES)
if (SIMH_USES_AIO AND NOT WITH_ASYNC)
message(WARNING
"!!! ${_targ}: Asynchronous I/O not enabled, but this simulator specifies USES_AIO\n"
"!!! Some features will be crippled, notably networking.")
endif ()
add_executable("${_targ}" "${SIMH_SOURCES}") add_executable("${_targ}" "${SIMH_SOURCES}")
set_target_properties(${_targ} PROPERTIES set_target_properties(${_targ} PROPERTIES
C_STANDARD 99 C_STANDARD 99
@ -227,6 +245,11 @@ function (simh_executable_template _targ)
endif () endif ()
endif () endif ()
# Uses AIO...
if (SIMH_USES_AIO)
set(SIMH_SIMLIB "${SIMH_SIMLIB}_aio")
endif()
target_link_libraries("${_targ}" PUBLIC "${SIMH_SIMLIB}") target_link_libraries("${_targ}" PUBLIC "${SIMH_SIMLIB}")
endfunction () endfunction ()

View file

@ -74,10 +74,13 @@ param (
## ------------------ ## ------------------
## vs2022 Visual Studio 2022 (default) ## vs2022 Visual Studio 2022 (default)
## vs2022-xp Visual Studio 2022 XP compat ## vs2022-xp Visual Studio 2022 XP compat
## vs2022-x64 Visual Studio 2022 64-bit
## vs2019 Visual Studio 2019 ## vs2019 Visual Studio 2019
## vs2019-xp Visual Studio 2019 XP compat ## vs2019-xp Visual Studio 2019 XP compat
## vs2019-x64 Visual Studio 2019 64-bit
## vs2017 Visual Studio 2017 ## vs2017 Visual Studio 2017
## vs2017-xp Visual Studio 2017 XP compat ## vs2017-xp Visual Studio 2017 XP compat
## vs2017-x64 Visual Studio 2017 64-bit
## vs2015 Visual Studio 2015 ## vs2015 Visual Studio 2015
## mingw-make MinGW GCC/mingw32-make ## mingw-make MinGW GCC/mingw32-make
## mingw-ninja MinGW GCC/ninja ## mingw-ninja MinGW GCC/ninja
@ -115,6 +118,15 @@ param (
[Parameter(Mandatory=$false)] [Parameter(Mandatory=$false)]
[switch] $novideo = $false, [switch] $novideo = $false,
## Compile the SIMH simulator without AIO support.
[Parameter(Mandatory=$false)]
[switch] $noaio = $false,
## Compile the SIMH simulator without AIO instrinsics ("lock-free" AIO),
## using lock-based AIO via thread mutexes instead.
[Parameter(Mandatory=$false)]
[switch] $noaiointrinsics = $false,
## Disable the build's tests. ## Disable the build's tests.
[Parameter(Mandatory=$false)] [Parameter(Mandatory=$false)]
[switch] $notest = $false, [switch] $notest = $false,
@ -196,10 +208,13 @@ $singleConfig = $true
$cmakeGenMap = @{ $cmakeGenMap = @{
"vs2022" = [GeneratorInfo]::new("Visual Studio 17 2022", $multiConfig, $false, "", @("-A", "Win32")); "vs2022" = [GeneratorInfo]::new("Visual Studio 17 2022", $multiConfig, $false, "", @("-A", "Win32"));
"vs2022-xp" = [GeneratorInfo]::new("Visual Studio 17 2022", $multiConfig, $false, "", @("-A", "Win32", "-T", "v141_xp")); "vs2022-xp" = [GeneratorInfo]::new("Visual Studio 17 2022", $multiConfig, $false, "", @("-A", "Win32", "-T", "v141_xp"));
"vs2022-x64" = [GeneratorInfo]::new("Visual Studio 17 2022", $multiConfig, $false, "", @("-A", "x64", "-T", "host=x64"));
"vs2019" = [GeneratorInfo]::new("Visual Studio 16 2019", $multiConfig, $false, "", @("-A", "Win32")); "vs2019" = [GeneratorInfo]::new("Visual Studio 16 2019", $multiConfig, $false, "", @("-A", "Win32"));
"vs2019-xp" = [GeneratorInfo]::new("Visual Studio 16 2019", $multiConfig, $false, "", @("-A", "Win32", "-T", "v141_xp")); "vs2019-xp" = [GeneratorInfo]::new("Visual Studio 16 2019", $multiConfig, $false, "", @("-A", "Win32", "-T", "v141_xp"));
"vs2019-x64" = [GeneratorInfo]::new("Visual Studio 17 2022", $multiConfig, $false, "", @("-A", "x64", "-T", "host=x64"));
"vs2017" = [GeneratorInfo]::new("Visual Studio 15 2017", $multiConfig, $false, "", @("-A", "Win32")); "vs2017" = [GeneratorInfo]::new("Visual Studio 15 2017", $multiConfig, $false, "", @("-A", "Win32"));
"vs2017-xp" = [GeneratorInfo]::new("Visual Studio 15 2017", $multiConfig, $false, "", @("-A", "Win32", "-T", "v141_xp")); "vs2017-xp" = [GeneratorInfo]::new("Visual Studio 15 2017", $multiConfig, $false, "", @("-A", "Win32", "-T", "v141_xp"));
"vs2017-x64" = [GeneratorInfo]::new("Visual Studio 17 2022", $multiConfig, $false, "", @("-A", "x64", "-T", "host=x64"));
"vs2015" = [GeneratorInfo]::new("Visual Studio 14 2015", $multiConfig, $false, "", @()); "vs2015" = [GeneratorInfo]::new("Visual Studio 14 2015", $multiConfig, $false, "", @());
"mingw-make" = [GeneratorInfo]::new("MinGW Makefiles", $singleConfig, $false, "", @()); "mingw-make" = [GeneratorInfo]::new("MinGW Makefiles", $singleConfig, $false, "", @());
"mingw-ninja" = [GeneratorInfo]::new("Ninja", $singleConfig, $false, "", @()) "mingw-ninja" = [GeneratorInfo]::new("Ninja", $singleConfig, $false, "", @())
@ -411,6 +426,14 @@ if (($scriptPhases -contains "generate") -or ($scriptPhases -contains "build"))
{ {
$generateArgs += @("-DWITH_VIDEO:Bool=Off") $generateArgs += @("-DWITH_VIDEO:Bool=Off")
} }
if ($noaio)
{
$generateArgs += @("-DWITH_ASYNC:Bool=Off")
}
if ($noaiointrinsics)
{
$generateArgs += @("-DDONT_USE_AIO_INTRINSICS:Bool=On")
}
if ($lto) if ($lto)
{ {
$generateArgs += @("-DRELEASE_LTO:Bool=On") $generateArgs += @("-DRELEASE_LTO:Bool=On")

View file

@ -7,23 +7,18 @@ showHelp()
cat <<EOF cat <<EOF
Configure and build simh simulators on Linux and *nix-like platforms. Configure and build simh simulators on Linux and *nix-like platforms.
Subdirectories: -Compile/Build options:
cmake/build-unix: Makefile-based build simulators -----------------------
cmake/build-ninja: Ninja build-based simulators
Options:
--------
--clean (-x) Remove the build subdirectory --clean (-x) Remove the build subdirectory
--generate (-g) Generate the build environment, don't compile/build --generate (-g) Generate the build environment, don't compile/build
--cache '--generate' and show CMake's variable cache
--parallel (-p) Enable build parallelism (parallel builds) --parallel (-p) Enable build parallelism (parallel builds)
--nonetwork Build simulators without network support
--novideo Build simulators without video support
--notest Do not execute 'ctest' test cases --notest Do not execute 'ctest' test cases
--noinstall Do not install SIMH simulators. --noinstall Do not install SIMH simulators.
--testonly Do not build, execute the 'ctest' test cases --testonly Do not build, execute the 'ctest' test cases
--installonly Do not build, install the SIMH simulators --installonly Do not build, install the SIMH simulators
--flavor (-f) Specifies the build flavor. Valid flavors are: --flavor (-f) [Required] Specifies the build flavor. Valid flavors are:
unix unix
ninja ninja
xcode xcode
@ -46,6 +41,19 @@ Options:
--verbose Turn on verbose build output --verbose Turn on verbose build output
SIMH feature control options:
-----------------------------
--nonetwork Build simulators without network support
--novideo Build simulators without video support
--no-aio Build simulators without AIO (asynchronous I/O). NOTE: This will
impact certain devices' functionality, notably networking.
--no-aio-intrinsics
Do not use compiler/platform intrinsics to implement AIO
functions (aka "lock-free" AIO), reverts to lock-based AIO
if threading libraries are detected.
Other options:
--------------
--help (-h) Print this help. --help (-h) Print this help.
EOF EOF
@ -57,8 +65,8 @@ generateArgs=
buildArgs= buildArgs=
buildPostArgs="" buildPostArgs=""
buildClean= buildClean=
buildFlavor="Unix Makefiles" buildFlavor=
buildSubdir=build-unix buildSubdir=
buildConfig=Release buildConfig=Release
testArgs= testArgs=
notest=no notest=no
@ -152,6 +160,7 @@ fi
longopts=clean,help,flavor:,config:,nonetwork,novideo,notest,parallel,generate,testonly longopts=clean,help,flavor:,config:,nonetwork,novideo,notest,parallel,generate,testonly
longopts=${longopts},noinstall,installonly,verbose,target:,lto,debugWall,cppcheck,cpack_suffix: longopts=${longopts},noinstall,installonly,verbose,target:,lto,debugWall,cppcheck,cpack_suffix:
longopts=${longopts},cache,no-aio,no-aio-intrinsics
ARGS=$(${getopt_prog} --longoptions $longopts --options xhf:c:pg -- "$@") ARGS=$(${getopt_prog} --longoptions $longopts --options xhf:c:pg -- "$@")
if [ $? -ne 0 ] ; then if [ $? -ne 0 ] ; then
@ -219,6 +228,14 @@ while true; do
generateArgs="${generateArgs} -DWITH_VIDEO:Bool=Off" generateArgs="${generateArgs} -DWITH_VIDEO:Bool=Off"
shift shift
;; ;;
--no-aio)
generateArgs="${generateArgs} -DWITH_ASYNC:Bool=Off"
shift
;;
--no-aio-intrinsics)
generateArgs="${generateArgs} -DDONT_USE_AIO_INTRINSICS:Bool=On"
shift
;;
--notest) --notest)
notest=yes notest=yes
shift shift
@ -251,6 +268,11 @@ while true; do
generateOnly=yes generateOnly=yes
shift shift
;; ;;
--cache)
generateOnly=yes
generateArgs="${generateArgs} -LA"
shift
;;
--testonly) --testonly)
testOnly=yes testOnly=yes
shift shift
@ -276,6 +298,14 @@ while true; do
esac esac
done done
# Sanity check: buildSubdir should be set, unless the '-f' flag wasn't present.
if [ "x${buildSubdir}" = x ]; then
echo ""
echo "${scriptName}: Build flavor is NOT SET -- see the \"--flavor\"/\"-f\" flag in the help."
echo ""
showHelp
fi
## Determine the SIMH top-level source directory: ## Determine the SIMH top-level source directory:
simhTopDir=$(${dirname} $(${realpath} $0)) simhTopDir=$(${dirname} $(${realpath} $0))
while [ "x${simhTopDir}" != x -a ! -f "${simhTopDir}/CMakeLists.txt" ]; do while [ "x${simhTopDir}" != x -a ! -f "${simhTopDir}/CMakeLists.txt" ]; do
@ -296,6 +326,7 @@ if [[ x"$buildClean" != x ]]; then
echo "${scriptName}: Cleaning ${buildSubdir}" echo "${scriptName}: Cleaning ${buildSubdir}"
rm -rf ${buildSubdir} rm -rf ${buildSubdir}
fi fi
if [[ ! -d ${buildSubdir} ]]; then if [[ ! -d ${buildSubdir} ]]; then
mkdir ${buildSubdir} mkdir ${buildSubdir}
fi fi

View file

@ -20,7 +20,14 @@ get_target_property(_aliased ${_targ} ALIASED_TARGET)
set(fixed_libs) set(fixed_libs)
get_property(orig_libs TARGET ${_targ} PROPERTY INTERFACE_LINK_LIBRARIES) get_property(orig_libs TARGET ${_targ} PROPERTY INTERFACE_LINK_LIBRARIES)
foreach(each_lib IN LISTS ${_lib}) foreach(each_lib IN LISTS ${_lib})
string(STRIP ${each_lib} stripped_lib) get_filename_component(stripped_lib "${each_lib}" DIRECTORY)
if (stripped_lib)
string(STRIP ${each_lib} stripped_lib)
file(TO_CMAKE_PATH "${stripped_lib}" stripped_lib)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.19")
file(REAL_PATH "${stripped_lib}" stripped_lib)
endif ()
endif ()
list(APPEND fixed_libs ${stripped_lib}) list(APPEND fixed_libs ${stripped_lib})
message("** \"${each_lib}\" -> \"${stripped_lib}\"") message("** \"${each_lib}\" -> \"${stripped_lib}\"")
endforeach () endforeach ()
@ -33,7 +40,14 @@ endfunction ()
function (fix_libraries _lib) function (fix_libraries _lib)
set(fixed_libs) set(fixed_libs)
foreach(each_lib IN LISTS ${_lib}) foreach(each_lib IN LISTS ${_lib})
string(STRIP ${each_lib} stripped_lib) get_filename_component(stripped_lib "${each_lib}" DIRECTORY)
if (stripped_lib)
string(STRIP ${stripped_lib} stripped_lib)
file(TO_CMAKE_PATH "${stripped_lib}" stripped_lib)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.19")
file(REAL_PATH "${stripped_lib}" stripped_lib)
endif ()
endif ()
list(APPEND fixed_libs ${stripped_lib}) list(APPEND fixed_libs ${stripped_lib})
endforeach () endforeach ()
set(${_lib} ${fixed_libs} PARENT_SCOPE) set(${_lib} ${fixed_libs} PARENT_SCOPE)
@ -48,6 +62,11 @@ IF (WITH_VIDEO)
foreach (lname ${FREETYPE_LIBRARIES} ${FREETYPE_LIBRARY} ${HARFBUZZ_LIBRARIES} ${HARFBUZZ_LIBRARY}) foreach (lname ${FREETYPE_LIBRARIES} ${FREETYPE_LIBRARY} ${HARFBUZZ_LIBRARIES} ${HARFBUZZ_LIBRARY})
get_filename_component(dirname "${lname}" DIRECTORY) get_filename_component(dirname "${lname}" DIRECTORY)
if (dirname) if (dirname)
string(STRIP ${dirname} dirname)
file(TO_CMAKE_PATH "${dirname}" dirname)
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.19")
file(REAL_PATH "${dirname}" dirname)
endif ()
list(APPEND ldirs ${dirname}) list(APPEND ldirs ${dirname})
endif() endif()
endforeach () endforeach ()
@ -128,6 +147,8 @@ IF (WITH_VIDEO)
ENDIF () ENDIF ()
IF (PNG_FOUND) IF (PNG_FOUND)
target_compile_definitions(simh_video INTERFACE HAVE_LIBPNG)
if (TARGET PNG::PNG) if (TARGET PNG::PNG)
target_link_libraries(simh_video INTERFACE PNG::PNG) target_link_libraries(simh_video INTERFACE PNG::PNG)
list(APPEND VIDEO_PKG_STATUS "interface PNG") list(APPEND VIDEO_PKG_STATUS "interface PNG")

View file

@ -6,8 +6,6 @@
set(GIT_COMMIT_ID ${GIT_COMMIT_DEST}/.git-commit-id) set(GIT_COMMIT_ID ${GIT_COMMIT_DEST}/.git-commit-id)
set(GIT_COMMIT_ID_H ${GIT_COMMIT_DEST}/.git-commit-id.h) set(GIT_COMMIT_ID_H ${GIT_COMMIT_DEST}/.git-commit-id.h)
message(STATUS "Updating GIT commit ID")
find_program(GIT_COMMAND git) find_program(GIT_COMMAND git)
if (GIT_COMMAND) if (GIT_COMMAND)
execute_process(COMMAND ${GIT_COMMAND} "log" "-1" "--pretty=%H" execute_process(COMMAND ${GIT_COMMAND} "log" "-1" "--pretty=%H"
@ -32,15 +30,12 @@ if (GIT_COMMAND AND NOT (HAVE_GIT_COMMIT_HASH OR HAVE_GIT_COMMIT_TIME))
string(REPLACE "T" " " SIMH_GIT_COMMIT_TIME ${SIMH_GIT_COMMIT_TIME}) string(REPLACE "T" " " SIMH_GIT_COMMIT_TIME ${SIMH_GIT_COMMIT_TIME})
if (HAVE_UNCOMMITTED_CHANGES) if (HAVE_UNCOMMITTED_CHANGES)
message(STATUS "Git detected uncommitted changes.") ## message(STATUS "Git detected uncommitted changes.")
string(APPEND SIMH_GIT_COMMIT_HASH "+uncommitted-changes") string(APPEND SIMH_GIT_COMMIT_HASH "+uncommitted-changes")
else () else ()
message(STATUS "Clean working directory, no uncommitted changes.") message(STATUS "Clean working directory, no uncommitted changes.")
endif () endif ()
message(STATUS "SIM_GIT_COMMIT_ID: ${SIMH_GIT_COMMIT_HASH}")
message(STATUS "SIM_GIT_COMMIT_TIME: ${SIMH_GIT_COMMIT_TIME}")
set(WRITE_GIT_COMMIT_FILES True) set(WRITE_GIT_COMMIT_FILES True)
if (EXISTS ${GIT_COMMIT_ID}) if (EXISTS ${GIT_COMMIT_ID})
set(EXISTING_GIT_COMMIT_HASH) set(EXISTING_GIT_COMMIT_HASH)
@ -55,12 +50,16 @@ if (GIT_COMMAND AND NOT (HAVE_GIT_COMMIT_HASH OR HAVE_GIT_COMMIT_TIME))
endforeach() endforeach()
if (EXISTING_GIT_COMMIT_HASH STREQUAL SIMH_GIT_COMMIT_HASH AND if (EXISTING_GIT_COMMIT_HASH STREQUAL SIMH_GIT_COMMIT_HASH AND
EXISTING_GIT_COMMIT_TIME STREQUAL SIMH_GIT_COMMIT_TIME) EXISTING_GIT_COMMIT_TIME STREQUAL SIMH_GIT_COMMIT_TIME)
message(STATUS "GIT hash and time match, not writing files.") ## message(STATUS "GIT hash and time match, not writing files.")
set(WRITE_GIT_COMMIT_FILES False) set(WRITE_GIT_COMMIT_FILES False)
endif () endif ()
endif () endif ()
if (WRITE_GIT_COMMIT_FILES) if (WRITE_GIT_COMMIT_FILES)
message(STATUS "Updating GIT commit ID")
message(STATUS "SIM_GIT_COMMIT_ID: ${SIMH_GIT_COMMIT_HASH}")
message(STATUS "SIM_GIT_COMMIT_TIME: ${SIMH_GIT_COMMIT_TIME}")
message(STATUS "Writing ${GIT_COMMIT_ID}") message(STATUS "Writing ${GIT_COMMIT_ID}")
file(WRITE ${GIT_COMMIT_ID} file(WRITE ${GIT_COMMIT_ID}
"SIM_GIT_COMMIT_ID ${SIMH_GIT_COMMIT_HASH}\n" "SIM_GIT_COMMIT_ID ${SIMH_GIT_COMMIT_HASH}\n"
@ -70,9 +69,9 @@ if (GIT_COMMAND AND NOT (HAVE_GIT_COMMIT_HASH OR HAVE_GIT_COMMIT_TIME))
file(WRITE ${GIT_COMMIT_ID_H} file(WRITE ${GIT_COMMIT_ID_H}
"#define SIM_GIT_COMMIT_ID ${SIMH_GIT_COMMIT_HASH}\n" "#define SIM_GIT_COMMIT_ID ${SIMH_GIT_COMMIT_HASH}\n"
"#define SIM_GIT_COMMIT_TIME ${SIMH_GIT_COMMIT_TIME}\n") "#define SIM_GIT_COMMIT_TIME ${SIMH_GIT_COMMIT_TIME}\n")
else () ## else ()
message(STATUS "No changes to ${GIT_COMMIT_ID}") ## message(STATUS "No changes to ${GIT_COMMIT_ID}")
message(STATUS "No changes to ${GIT_COMMIT_ID_H}") ## message(STATUS "No changes to ${GIT_COMMIT_ID_H}")
endif () endif ()
else () else ()
message(STATUS "SIM_GIT_COMMIT_ID not set.") message(STATUS "SIM_GIT_COMMIT_ID not set.")

View file

@ -7,6 +7,7 @@
#~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~= #~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=
add_library(thread_lib INTERFACE) add_library(thread_lib INTERFACE)
set(AIO_FLAGS)
if (WITH_ASYNC) if (WITH_ASYNC)
include(ExternalProject) include(ExternalProject)
@ -64,12 +65,12 @@ if (WITH_ASYNC)
set(THREADING_PKG_STATUS "Platform-detected threading support") set(THREADING_PKG_STATUS "Platform-detected threading support")
endif () endif ()
if (THREADS_FOUND OR PTW_FOUND) if (THREADS_FOUND OR PTW_FOUND OR PThreads4W_FOUND)
target_compile_definitions(thread_lib INTERFACE USE_READER_THREAD SIM_ASYNCH_IO) set(AIO_FLAGS USE_READER_THREAD SIM_ASYNCH_IO)
else () else ()
target_compile_definitions(thread_lib INTERFACE DONT_USE_READER_THREAD) set(AIO_FLAGS DONT_USE_READER_THREAD)
endif () endif ()
else (WITH_ASYNC) else()
target_compile_definitions(thread_lib INTERFACE DONT_USE_READER_THREAD) target_compile_definitions(thread_lib INTERFACE DONT_USE_READER_THREAD)
set(THREADING_PKG_STATUS "asynchronous I/O disabled.") set(THREADING_PKG_STATUS "asynchronous I/O disabled.")
endif (WITH_ASYNC) endif()

View file

@ -14,12 +14,14 @@ class SIMHBasicSimulator:
self.int64 = False self.int64 = False
self.full64 = False self.full64 = False
self.buildrom = buildrom self.buildrom = buildrom
## self.has_display -> True if there is a specific display used by the simulator. ## self.has_display -> True if there is a specific display used by the simulator.
self.has_display = False self.has_display = False
## self.uses_video -> True if USE_SIM_VIDEO appears in the simulator's preprocessor defn's. ## self.uses_video -> True if USE_SIM_VIDEO appears in the simulator's preprocessor defn's.
self.uses_video = False self.uses_video = False
## self.besm6_sdl_hack -> Only set/used by the BESM6 simulator. ## self.besm6_sdl_hack -> Only set/used by the BESM6 simulator.
self.besm6_sdl_hack = False self.besm6_sdl_hack = False
## self.uses_aio -> True if the simulator uses AIO
self.uses_aio = False
self.sources = [] self.sources = []
self.defines = [] self.defines = []
self.includes = [] self.includes = []
@ -47,27 +49,33 @@ class SIMHBasicSimulator:
if use_int64 or use_addr64: if use_int64 or use_addr64:
self.int64 = use_int64 and not use_addr64 self.int64 = use_int64 and not use_addr64
self.full64 = use_int64 and use_addr64 self.full64 = use_int64 and use_addr64
try: for defn in ['USE_INT64', 'USE_ADDR64']:
self.defines.remove('USE_INT64') try:
except: self.defines.remove(defn)
pass except:
try: pass
self.defines.remove('USE_ADDR64')
except:
pass
## Video support: ## Video support:
self.has_display = any(map(lambda s: 'DISPLAY' in SPM.shallow_expand_vars(s, defs), self.sources)) self.has_display = any(map(lambda s: 'DISPLAY' in SPM.shallow_expand_vars(s, defs), self.sources))
if self.has_display: if self.has_display:
try: for src in ['${DISPLAYL}', '$(DISPLAYL)']:
self.sources.remove('${DISPLAYL}') try:
self.sources.remove('$(DISPLAYL)') self.sources.remove(src)
except: except:
pass pass
self.uses_video = 'USE_SIM_VIDEO' in self.defines or self.has_display self.uses_video = 'USE_SIM_VIDEO' in self.defines or self.has_display
## AIO support:
self.uses_aio = 'SIM_ASYNCH_IO' in self.defines
if self.uses_aio:
for defn in ['SIM_ASYNCH_IO', 'USE_READER_THREAD']:
try:
self.defines.remove(defn)
except:
pass
def cleanup_defines(self): def cleanup_defines(self):
"""Remove command line defines that aren't needed (because the CMake interface libraries """Remove command line defines that aren't needed (because the CMake interface libraries
already define them.) already define them.)
@ -118,6 +126,8 @@ class SIMHBasicSimulator:
stream.write('\n' + indent4 + "FEATURE_DISPLAY") stream.write('\n' + indent4 + "FEATURE_DISPLAY")
if self.besm6_sdl_hack: if self.besm6_sdl_hack:
stream.write('\n' + indent4 + "BESM6_SDL_HACK") stream.write('\n' + indent4 + "BESM6_SDL_HACK")
if self.uses_aio:
stream.write('\n' + indent4 + "USES_AIO")
if self.buildrom: if self.buildrom:
stream.write('\n' + indent4 + "BUILDROMS") stream.write('\n' + indent4 + "BUILDROMS")
stream.write('\n' + indent4 + "LABEL " + test_label) stream.write('\n' + indent4 + "LABEL " + test_label)

View file

@ -16,12 +16,12 @@ if (NOT DEFINED VCPKG_TARGET_TRIPLET)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows") if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
## Default to x64, unless otherwise directed: ## Default to x64, unless otherwise directed:
set(SIMH_VCPKG_ARCH "x64") set(SIMH_VCPKG_ARCH "x64")
if(CMAKE_GENERATOR_PLATFORM MATCHES "Win32") if(CMAKE_GENERATOR_PLATFORM MATCHES "[Ww][Ii][Nn]32")
set(SIMH_VCPKG_ARCH "x86") set(SIMH_VCPKG_ARCH "x86")
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "ARM") elseif(CMAKE_GENERATOR_PLATFORM MATCHES "[Aa][Rr][Mm]64")
set(SIMH_VCPKG_ARCH "arm")
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "ARM64")
set(SIMH_VCPKG_ARCH "arm64") set(SIMH_VCPKG_ARCH "arm64")
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "[Aa][Rr][Mm]")
set(SIMH_VCPKG_ARCH "arm")
endif() endif()
if (MSVC OR CMAKE_C_COMPILER_ID MATCHES ".*Clang") if (MSVC OR CMAKE_C_COMPILER_ID MATCHES ".*Clang")
@ -79,8 +79,10 @@ message(STATUS "Executing deferred vcpkg toolchain initialization.\n"
## Initialize vcpkg after CMake detects the compiler and we've to set the platform triplet. ## Initialize vcpkg after CMake detects the compiler and we've to set the platform triplet.
## VCPKG_INSTALL_OPTIONS are additional args to 'vcpkg install'. Don't need to see the ## VCPKG_INSTALL_OPTIONS are additional args to 'vcpkg install'. Don't need to see the
## usage instructions each time... ## usage instructions each time...
list(APPEND VCPKG_INSTALL_OPTIONS if (NOT ("--no-print-usage" IN_LIST VCPKG_INSTALL_OPTIONS))
"--no-print-usage" list(APPEND VCPKG_INSTALL_OPTIONS
) "--no-print-usage"
)
endif ()
include(${SIMH_CMAKE_TOOLCHAIN_FILE}) include(${SIMH_CMAKE_TOOLCHAIN_FILE})

View file

@ -28,6 +28,7 @@ add_simulator(imlac
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
FEATURE_VIDEO FEATURE_VIDEO
FEATURE_DISPLAY FEATURE_DISPLAY
USES_AIO
LABEL imlac LABEL imlac
PKG_FAMILY imlac_family PKG_FAMILY imlac_family
TEST imlac) TEST imlac)

View file

@ -98,10 +98,14 @@
# #
# CC Command (and platform available options). (Poor man's autoconf) # CC Command (and platform available options). (Poor man's autoconf)
# #
OS_CCDEFS=
AIO_CCDEFS=
ifneq (,${GREP_OPTIONS}) ifneq (,${GREP_OPTIONS})
$(info GREP_OPTIONS is defined in your environment.) $(info GREP_OPTIONS is defined in your environment.)
$(info ) $(info )
$(info This variable interfers with the proper operation of this script.) $(info This variable interferes with the proper operation of this script.)
$(info ) $(info )
$(info The GREP_OPTIONS environment variable feature of grep is deprecated) $(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 for exactly this reason and will be removed from future versions of)
@ -361,7 +365,8 @@ ifeq (${WIN32},) #*nix Environments (&& cygwin)
LTO_EXCLUDE_VERSIONS = LTO_EXCLUDE_VERSIONS =
PCAPLIB = pcap PCAPLIB = pcap
ifeq (agcc,$(findstring agcc,${GCC})) # Android target build? ifeq (agcc,$(findstring agcc,${GCC})) # Android target build?
OS_CCDEFS += -D_GNU_SOURCE -DSIM_ASYNCH_IO OS_CCDEFS += -D_GNU_SOURCE
AIO_CCDEFS += -DSIM_ASYNCH_IO
OS_LDFLAGS = -lm OS_LDFLAGS = -lm
else # Non-Android (or Native Android) Builds else # Non-Android (or Native Android) Builds
ifeq (,$(INCLUDES)$(LIBRARIES)) ifeq (,$(INCLUDES)$(LIBRARIES))
@ -573,23 +578,23 @@ ifeq (${WIN32},) #*nix Environments (&& cygwin)
endif endif
ifneq (,$(call find_include,pthread)) ifneq (,$(call find_include,pthread))
ifneq (,$(call find_lib,pthread)) ifneq (,$(call find_lib,pthread))
OS_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO AIO_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO
OS_LDFLAGS += -lpthread OS_LDFLAGS += -lpthread
$(info using libpthread: $(call find_lib,pthread) $(call find_include,pthread)) $(info using libpthread: $(call find_lib,pthread) $(call find_include,pthread))
else else
LIBEXTSAVE := ${LIBEXT} LIBEXTSAVE := ${LIBEXT}
LIBEXT = a LIBEXT = a
ifneq (,$(call find_lib,pthread)) ifneq (,$(call find_lib,pthread))
OS_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO AIO_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO
OS_LDFLAGS += -lpthread OS_LDFLAGS += -lpthread
$(info using libpthread: $(call find_lib,pthread) $(call find_include,pthread)) $(info using libpthread: $(call find_lib,pthread) $(call find_include,pthread))
else else
ifneq (,$(findstring Haiku,$(OSTYPE))) ifneq (,$(findstring Haiku,$(OSTYPE)))
OS_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO AIO_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO
$(info using libpthread: $(call find_include,pthread)) $(info using libpthread: $(call find_include,pthread))
else else
ifeq (Darwin,$(OSTYPE)) ifeq (Darwin,$(OSTYPE))
OS_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO AIO_CCDEFS += -DUSE_READER_THREAD -DSIM_ASYNCH_IO
OS_LDFLAGS += -lpthread OS_LDFLAGS += -lpthread
$(info using macOS libpthread: $(call find_include,pthread)) $(info using macOS libpthread: $(call find_include,pthread))
endif endif
@ -1131,11 +1136,13 @@ else
$(info include paths are: ${INCPATH}) $(info include paths are: ${INCPATH})
# Give preference to any MinGW provided threading (if available) # Give preference to any MinGW provided threading (if available)
ifneq (,$(call find_include,pthread)) ifneq (,$(call find_include,pthread))
PTHREADS_CCDEFS = -DUSE_READER_THREAD -DSIM_ASYNCH_IO PTHREADS_CCDEFS =
AIO_CCDEFS = -DUSE_READER_THREAD -DSIM_ASYNCH_IO
PTHREADS_LDFLAGS = -lpthread PTHREADS_LDFLAGS = -lpthread
else else
ifeq (pthreads,$(shell if exist ..\windows-build\pthreads\Pre-built.2\include\pthread.h echo pthreads)) 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_CCDEFS = -DPTW32_STATIC_LIB -D_POSIX_C_SOURCE -I../windows-build/pthreads/Pre-built.2/include
AIO_CCDEFS = -DUSE_READER_THREAD -DSIM_ASYNCH_IO
PTHREADS_LDFLAGS = -lpthreadGC2 -L..\windows-build\pthreads\Pre-built.2\lib PTHREADS_LDFLAGS = -lpthreadGC2 -L..\windows-build\pthreads\Pre-built.2\lib
endif endif
endif endif
@ -1495,7 +1502,7 @@ PDP11 = ${PDP11D}/pdp11_fp.c ${PDP11D}/pdp11_cpu.c ${PDP11D}/pdp11_dz.c \
${PDP11D}/pdp11_ng.c ${PDP11D}/pdp11_daz.c ${PDP11D}/pdp11_tv.c \ ${PDP11D}/pdp11_ng.c ${PDP11D}/pdp11_daz.c ${PDP11D}/pdp11_tv.c \
${PDP11D}/pdp11_mb.c ${PDP11D}/pdp11_rr.c \ ${PDP11D}/pdp11_mb.c ${PDP11D}/pdp11_rr.c \
${DISPLAYL} ${DISPLAYNG} ${DISPLAYVT} ${DISPLAYL} ${DISPLAYNG} ${DISPLAYVT}
PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} ${DISPLAY_OPT} PDP11_OPT = -DVM_PDP11 -I ${PDP11D} ${NETWORK_OPT} ${DISPLAY_OPT} ${AIO_CCDEFS}
UC15D = ${SIMHD}/PDP11 UC15D = ${SIMHD}/PDP11
@ -1519,7 +1526,7 @@ VAX = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c ${VAXD}/vax_io.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.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_xq.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_dup.c
VAX_OPT = -DVM_VAX -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} VAX_OPT = -DVM_VAX -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} ${AIO_CCDEFS}
VAX410 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX410 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1530,7 +1537,7 @@ VAX410 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax4xx_rd.c ${VAXD}/vax4xx_rz80.c ${VAXD}/vax_xs.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}/vax4xx_va.c ${VAXD}/vax4xx_vc.c ${VAXD}/vax_lk.c \
${VAXD}/vax_vs.c ${VAXD}/vax_gpx.c ${VAXD}/vax_vs.c ${VAXD}/vax_gpx.c
VAX410_OPT = -DVM_VAX -DVAX_410 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} VAX410_OPT = -DVM_VAX -DVAX_410 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} ${AIO_CCDEFS}
VAX420 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX420 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1541,7 +1548,8 @@ VAX420 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax4xx_rd.c ${VAXD}/vax4xx_rz80.c ${VAXD}/vax_xs.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}/vax4xx_va.c ${VAXD}/vax4xx_vc.c ${VAXD}/vax4xx_ve.c \
${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax_gpx.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax_gpx.c
VAX420_OPT = -DVM_VAX -DVAX_420 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} VAX420_OPT = -DVM_VAX -DVAX_420 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} \
${AIO_CCDEFS}
VAX411_OPT = ${VAX420_OPT} -DVAX_411 VAX411_OPT = ${VAX420_OPT} -DVAX_411
VAX412_OPT = ${VAX420_OPT} -DVAX_412 VAX412_OPT = ${VAX420_OPT} -DVAX_412
VAX41A_OPT = ${VAX420_OPT} -DVAX_41A VAX41A_OPT = ${VAX420_OPT} -DVAX_41A
@ -1557,7 +1565,7 @@ VAX43 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax43_sysdev.c ${VAXD}/vax43_syslist.c ${VAXD}/vax4xx_dz.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_rz80.c ${VAXD}/vax_xs.c ${VAXD}/vax4xx_vc.c \
${VAXD}/vax4xx_ve.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax4xx_ve.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c
VAX43_OPT = -DVM_VAX -DVAX_43 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} VAX43_OPT = -DVM_VAX -DVAX_43 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} ${AIO_CCDEFS}
VAX440 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX440 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1566,7 +1574,7 @@ VAX440 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax4xx_stddev.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}/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 ${VAXD}/vax_xs.c ${VAXD}/vax_lk.c ${VAXD}/vax_vs.c ${VAXD}/vax4xx_rz94.c
VAX440_OPT = -DVM_VAX -DVAX_440 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} ${NETWORK_OPT} VAX440_OPT = -DVM_VAX -DVAX_440 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} ${NETWORK_OPT} ${AIO_CCDEFS}
VAX46_OPT = ${VAX440_OPT} -DVAX_46 VAX46_OPT = ${VAX440_OPT} -DVAX_46
VAX47_OPT = ${VAX440_OPT} -DVAX_47 VAX47_OPT = ${VAX440_OPT} -DVAX_47
VAX48_OPT = ${VAX440_OPT} -DVAX_48 VAX48_OPT = ${VAX440_OPT} -DVAX_48
@ -1578,7 +1586,7 @@ IS1000 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax_xs.c \ ${VAXD}/vax_watch.c ${VAXD}/vax_nar.c ${VAXD}/vax_xs.c \
${VAXD}/vax4xx_rz94.c ${VAXD}/vax4nn_stddev.c \ ${VAXD}/vax4xx_rz94.c ${VAXD}/vax4nn_stddev.c \
${VAXD}/is1000_sysdev.c ${VAXD}/is1000_syslist.c ${VAXD}/is1000_sysdev.c ${VAXD}/is1000_syslist.c
IS1000_OPT = -DVM_VAX -DIS_1000 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} ${NETWORK_OPT} IS1000_OPT = -DVM_VAX -DIS_1000 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} ${NETWORK_OPT} ${AIO_CCDEFS}
VAX610 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX610 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1591,7 +1599,8 @@ VAX610 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${PDP11D}/pdp11_dz.c ${PDP11D}/pdp11_lp.c ${PDP11D}/pdp11_tq.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_xq.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_cr.c \
${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c
VAX610_OPT = -DVM_VAX -DVAX_610 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} VAX610_OPT = -DVM_VAX -DVAX_610 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} \
${AIO_CCDEFS}
VAX630 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX630 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1606,7 +1615,8 @@ VAX630 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${PDP11D}/pdp11_xq.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_cr.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 ${PDP11D}/pdp11_td.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_dup.c
VAX620_OPT = -DVM_VAX -DVAX_620 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} 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} ${VIDEO_LDFLAGS} VAX630_OPT = -DVM_VAX -DVAX_630 -DUSE_INT64 -DUSE_ADDR64 -DUSE_SIM_VIDEO -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${VIDEO_CCDEFS} ${VIDEO_LDFLAGS} \
${AIO_CCDEFS}
VAX730 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX730 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1621,7 +1631,7 @@ VAX730 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.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_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_dup.c
VAX730_OPT = -DVM_VAX -DVAX_730 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} VAX730_OPT = -DVM_VAX -DVAX_730 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${AIO_CCDEFS}
VAX750 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX750 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1637,7 +1647,7 @@ VAX750 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.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_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c
VAX750_OPT = -DVM_VAX -DVAX_750 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} VAX750_OPT = -DVM_VAX -DVAX_750 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${AIO_CCDEFS}
VAX780 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX780 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1653,7 +1663,7 @@ VAX780 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.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_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c
VAX780_OPT = -DVM_VAX -DVAX_780 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} VAX780_OPT = -DVM_VAX -DVAX_780 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${AIO_CCDEFS}
VAX8200 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX8200 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1668,7 +1678,7 @@ VAX8200 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${PDP11D}/pdp11_hk.c ${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.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_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_dup.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_dup.c
VAX8200_OPT = -DVM_VAX -DVAX_820 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} VAX8200_OPT = -DVM_VAX -DVAX_820 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${AIO_CCDEFS}
VAX8600 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \ VAX8600 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
@ -1684,7 +1694,7 @@ VAX8600 = ${VAXD}/vax_cpu.c ${VAXD}/vax_cpu1.c ${VAXD}/vax_fpa.c \
${PDP11D}/pdp11_vh.c ${PDP11D}/pdp11_dmc.c ${PDP11D}/pdp11_dup.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_td.c ${PDP11D}/pdp11_tc.c ${PDP11D}/pdp11_rk.c \
${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c ${PDP11D}/pdp11_io_lib.c ${PDP11D}/pdp11_ch.c
VAX8600_OPT = -DVM_VAX -DVAX_860 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} VAX8600_OPT = -DVM_VAX -DVAX_860 -DUSE_INT64 -DUSE_ADDR64 -I ${VAXD} -I ${PDP11D} ${NETWORK_OPT} ${AIO_CCDEFS}
PDP10D = ${SIMHD}/PDP10 PDP10D = ${SIMHD}/PDP10
@ -1703,7 +1713,7 @@ IMLAC = ${IMLACD}/imlac_sys.c ${IMLACD}/imlac_cpu.c \
${IMLACD}/imlac_dp.c ${IMLACD}/imlac_crt.c ${IMLACD}/imlac_kbd.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 \ ${IMLACD}/imlac_tty.c ${IMLACD}/imlac_pt.c ${IMLACD}/imlac_bel.c \
${DISPLAYL} ${DISPLAYL}
IMLAC_OPT = -I ${IMLACD} ${DISPLAY_OPT} IMLAC_OPT = -I ${IMLACD} ${DISPLAY_OPT} ${AIO_CCDEFS}
STUBD = ${SIMHD}/stub STUBD = ${SIMHD}/stub
@ -1716,7 +1726,7 @@ TT2500 = ${TT2500D}/tt2500_sys.c ${TT2500D}/tt2500_cpu.c \
${TT2500D}/tt2500_dpy.c ${TT2500D}/tt2500_crt.c ${TT2500D}/tt2500_tv.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 \ ${TT2500D}/tt2500_key.c ${TT2500D}/tt2500_uart.c ${TT2500D}/tt2500_rom.c \
${DISPLAYL} ${DISPLAYL}
TT2500_OPT = -I ${TT2500D} ${DISPLAY_OPT} TT2500_OPT = -I ${TT2500D} ${DISPLAY_OPT} ${AIO_CCDEFS}
PDP8D = ${SIMHD}/PDP8 PDP8D = ${SIMHD}/PDP8
@ -2038,7 +2048,8 @@ PDP6 = ${PDP6D}/kx10_cpu.c ${PDP6D}/kx10_sys.c ${PDP6D}/kx10_cty.c \
${PDP6D}/kx10_cp.c ${PDP6D}/pdp6_dct.c ${PDP6D}/pdp6_dtc.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}/pdp6_mtc.c ${PDP6D}/pdp6_dsk.c ${PDP6D}/pdp6_dcs.c \
${PDP6D}/kx10_dpy.c ${PDP6D}/pdp6_slave.c ${DISPLAYL} ${DISPLAY340} ${PDP6D}/kx10_dpy.c ${PDP6D}/pdp6_slave.c ${DISPLAYL} ${DISPLAY340}
PDP6_OPT = -DPDP6=1 -DUSE_INT64 -I ${PDP6D} -DUSE_SIM_CARD ${DISPLAY_OPT} ${PDP6_DISPLAY_OPT} PDP6_OPT = -DPDP6=1 -DUSE_INT64 -I ${PDP6D} -DUSE_SIM_CARD ${DISPLAY_OPT} ${PDP6_DISPLAY_OPT} \
${AIO_CCDEFS}
KA10D = ${SIMHD}/PDP10 KA10D = ${SIMHD}/PDP10
ifneq (,${DISPLAY_OPT}) ifneq (,${DISPLAY_OPT})
@ -2115,7 +2126,7 @@ ATT3B2M400 = ${ATT3B2D}/3b2_cpu.c ${ATT3B2D}/3b2_sys.c \
${ATT3B2D}/3b2_dmac.c ${ATT3B2D}/3b2_io.c \ ${ATT3B2D}/3b2_dmac.c ${ATT3B2D}/3b2_io.c \
${ATT3B2D}/3b2_ports.c ${ATT3B2D}/3b2_ctc.c \ ${ATT3B2D}/3b2_ports.c ${ATT3B2D}/3b2_ctc.c \
${ATT3B2D}/3b2_ni.c ${ATT3B2D}/3b2_ni.c
ATT3B2M400_OPT = -DUSE_INT64 -DUSE_ADDR64 -DREV2 -I ${ATT3B2D} ${NETWORK_OPT} ATT3B2M400_OPT = -DUSE_INT64 -DUSE_ADDR64 -DREV2 -I ${ATT3B2D} ${NETWORK_OPT} ${AIO_CCDEFS}
ATT3B2M700 = ${ATT3B2D}/3b2_cpu.c ${ATT3B2D}/3b2_sys.c \ ATT3B2M700 = ${ATT3B2D}/3b2_cpu.c ${ATT3B2D}/3b2_sys.c \
${ATT3B2D}/3b2_rev3_sys.c ${ATT3B2D}/3b2_rev3_mmu.c \ ${ATT3B2D}/3b2_rev3_sys.c ${ATT3B2D}/3b2_rev3_mmu.c \
@ -2125,7 +2136,7 @@ ATT3B2M700 = ${ATT3B2D}/3b2_cpu.c ${ATT3B2D}/3b2_sys.c \
${ATT3B2D}/3b2_if.c ${ATT3B2D}/3b2_dmac.c \ ${ATT3B2D}/3b2_if.c ${ATT3B2D}/3b2_dmac.c \
${ATT3B2D}/3b2_io.c ${ATT3B2D}/3b2_ports.c \ ${ATT3B2D}/3b2_io.c ${ATT3B2D}/3b2_ports.c \
${ATT3B2D}/3b2_scsi.c ${ATT3B2D}/3b2_ni.c ${ATT3B2D}/3b2_scsi.c ${ATT3B2D}/3b2_ni.c
ATT3B2M700_OPT = -DUSE_INT64 -DUSE_ADDR64 -DREV3 -I ${ATT3B2D} ${NETWORK_OPT} ATT3B2M700_OPT = -DUSE_INT64 -DUSE_ADDR64 -DREV3 -I ${ATT3B2D} ${NETWORK_OPT} ${AIO_CCDEFS}
SIGMAD = ${SIMHD}/sigma SIGMAD = ${SIMHD}/sigma
SIGMA = ${SIGMAD}/sigma_cpu.c ${SIGMAD}/sigma_sys.c ${SIGMAD}/sigma_cis.c \ SIGMA = ${SIGMAD}/sigma_cpu.c ${SIGMAD}/sigma_sys.c ${SIGMAD}/sigma_cis.c \

View file

@ -28,6 +28,7 @@ add_simulator(tt2500
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
FEATURE_VIDEO FEATURE_VIDEO
FEATURE_DISPLAY FEATURE_DISPLAY
USES_AIO
LABEL tt2500 LABEL tt2500
PKG_FAMILY default_family PKG_FAMILY default_family
TEST tt2500) TEST tt2500)