Add PCRE2 support as an alternative to the original PCRE. PCRE2 is
actively maintained and has a cleaner API than its predecessor.
- Use a function interface around regular expressions to isolate and
reduce the preprocessor #if/#endif forest. Abide by a single function
declaration/implementation approach, vs. multiple function
implentations within an #if/#endif forest.
- Clean up the code so that work isn't recreated or duplicated, such as
compiling regexps.
Platform notes:
- cmake: PCRE2 is the default RegEx support. To revert to PCRE, add
"-DPREFER_PCRE" to the cmake configuration command line.
- makefile: PCRE remains the default RegEx support out of respect for
tradition (cue Chaim Topol singing "Tradition".) Enable PCRE2 by
defining "USE_PCRE2=<some value>" from the make command line or shell
environment.
- Visual Studio Projects: Untouched. Externally built libraries provide
regular expression support residing in a specific place in the file
system, which is outside the control of SIMH proper.
sim_defs.h:
- Change EXPECT::size from int32 to size_t for increased
cross-platform/64-bit compatibility (i.e., array indices and offsets
should be size_t, where practicable.)
- Add typedefs for EXPECT regex support independence: sim_regex_t,
sim_re_capture_t.
- Add regular expression context to EXPTAB that maintains state when
processing the captured matches, making the function interface clean.
Tracks intermediate state while processing captured matches.
On FreeBSD, one must actually link against libpcap
(or give the path to a shared object at link
time). That is, it is not a header-only library
on that platform.
Account for this by adding a new boolean variable
in `platform-quirks.cmake`: `NEED_PCAP_LIBRARY`,
which defaults to false. Condition pcap library
discovery and link argument modifications on that
variable in `FindPCAP.cmake` and `dep-link.cmake`.
Require targeting macOS 10.10, in case the user builds with an older SDK
or sets the target version to an older release. This shouldn't be a
problem with modern macOS SDKs, but users using or targeting older macOS
should have a better message available rather than a compile message.
The check is ugly, but it should work.
A similar check is done for block support; this should only be a problem
with users using GCC instead of clang, which is default on macOS.
Also add a message for vmnet support when printing the build config.
On macOS, tap devices for L2 networking are not supported out of the
box. While a kext can be added to provide tap support, the kext
experience is not very good; Apple has strongly recommended against
their usage.
As a replacement that's documented and recommended, Apple introduced the
vmnet framework, intended for emulators and virtualization software
explicitly. This API requires macOS 10.10, with bridged network support
coming in macOS 10.15.
This introduces basic support for vmnet.framework in SIMH. I've tested
it by booting an emulated MicroVAX 3800 from an emulated InfoServer 150,
where it was able to reach OpenVMS 7.3 standalone BACKUP.
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.
* CMake build infrastructure
The squashed commit that builds and packages releases for the SIMH
simulator suite with CMake, version 3.14 or newer.
See README-CMake.md for documentation.