Make generate.py resuable outside of open-simh, as suggested and motivated by Richard Cornwell's simulator repository. - Make the "experimental" rule optional. Do not generate a Python "KeyError" if the rule is missing. - Add documentation on how to use the CMake infrastructure outside of open-simh: Customize the packaging.py script, season to taste. - Update the KA10 simulator customization, moving it to its own Python script, simgen/pdp10_simulator.py. Preparatory move that anticipates additional frontpanel and display options. - generate.py option "--skip-orphans": Skip the orphaned simulator check (i.e., don't cross-reference the simulators in packaging.py with what was scraped from the makefile.) - Add "TEST_ARGS" argument to CMake's add_simulator function so that the IBM 1130 simulator can pass to "-g" on the command line to disable the GUI when running RegisterSanityCheck, i.e.: ibm1130 RegisterSanityCheck -g This fixes an edge case Heisenbug encountered during Github CI/CD tests where ibm1130 appears to hang indefinitely on the Windows runners. The cause is the GUI's Pump() thread function being prematurely terminated before all GUI resources are acquired. The net result is an infinite loop in the MS C runtime trying to exit the process with unstable internal state. (Separate patch: synchronization across main and Pump() threads to ensure resource acquisition completes.) This issue never shows up on non-Windows platforms or the SIMH makefile. - cmake/generator.py, cmake/simgen: Add a "test_args" keyword argument to the BasicSimulator constructor that holds the tests argument parameter emitted as the "TEST_ARGS" argument to a simulator's add_simulator(). Ensure that the IBM 1130 emits 'TEST_ARG "-g"' in its add_simulator(). - scp.c: reset_all_p() adds 'P' to the existing switches, versus saving sim_switches and ONLY setting the 'P' power-up reset switch. Net effect is that the IBM 1130 simulator actually sees the 'G' flag that inhibits the GUI during the console device reset.
529 lines
20 KiB
CMake
529 lines
20 KiB
CMake
## Note: pthreads4w requires 3.14 or better.
|
|
cmake_minimum_required(VERSION 3.14)
|
|
|
|
if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
|
message(FATAL_ERROR
|
|
""
|
|
"!!! DO NOT BUILD CMake artifacts in the SIMH source directory !!!\n"
|
|
""
|
|
"Create a subdirectory and build in that subdirectory, e.g.:"
|
|
"\n"
|
|
" $ mkdir cmake-build\n"
|
|
" $ cd cmake-build\n"
|
|
" $ cmake -G \"your generator here\" ..\n"
|
|
""
|
|
"Preventing in-tree source build.")
|
|
endif ()
|
|
|
|
if (CMAKE_VERSION VERSION_LESS "3.21" AND NOT DEFINED SIMH_INSTALLER_WARNING)
|
|
message(WARNING "!!! DO NOT CREATE INSTALLERS WITH THIS VERSION OF CMAKE (${CMAKE_VERSION}) !!!"
|
|
"\n"
|
|
"Do not create a release or installers with this version of CMake. It does not have "
|
|
"the required install(RUNTIME_DEPENDENCY_SET) or install(IMPORTED_RUNTIME_ARTIFACTS) "
|
|
"functionality to collect runtime executable dependencies as part of the installation"
|
|
" packages, such as Mac OS bundles or Windows DLLs."
|
|
"\n"
|
|
"Minimum version for creating installers with CPack is 3.21."
|
|
)
|
|
set(SIMH_INSTALLER_WARNING TRUE CACHE BOOL "Installer/CPack warning issued when CMAKE_VERSION < 3.21" FORCE)
|
|
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
|
|
set(SIMH_INCLUDE_PATH_LIST
|
|
${CMAKE_SOURCE_DIR}/cmake
|
|
${CMAKE_SOURCE_DIR}/cmake/installer-customizations)
|
|
list(APPEND CMAKE_MODULE_PATH ${SIMH_INCLUDE_PATH_LIST})
|
|
message(STATUS "CMAKE_MODULE_PATH: ${CMAKE_MODULE_PATH}")
|
|
|
|
## vcpkg sanity checking: Cannot use vcpkg and XP toolkit together. If this is
|
|
## a XP build, disable vcpkg:
|
|
set(USING_VCPKG FALSE)
|
|
if (DEFINED ENV{VCPKG_ROOT})
|
|
if (CMAKE_GENERATOR_TOOLSET MATCHES "v[0-9][0-9][0-9]_xp")
|
|
message(FATAL_ERROR
|
|
"Configuration conflict: Cannot build XP binaries with vcpkg. Either "
|
|
"unset VCPKG_ROOT in your environment or remove the '-T' toolkit option."
|
|
"\n"
|
|
"Also remove CMakeCache.txt and recursively remove the CMakeFiles "
|
|
"subdirectory in your build folder before reconfiguring.")
|
|
endif ()
|
|
|
|
set(USING_VCPKG TRUE)
|
|
|
|
## Defer loading the CMAKE_TOOLCHAIN_FILE:
|
|
set(SIMH_CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
|
|
if(DEFINED CMAKE_TOOLCHAIN_FILE)
|
|
## Use the user's provided toolchain file, but load it later.
|
|
message(STATUS "Deferring CMAKE_TOOLCHAIN_FILE load.")
|
|
set(SIMH_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}")
|
|
unset(CMAKE_TOOLCHAIN_FILE)
|
|
unset(CMAKE_TOOLCHAIN_FILE CACHE)
|
|
endif()
|
|
|
|
file(TO_CMAKE_PATH "${SIMH_CMAKE_TOOLCHAIN_FILE}" SIMH_CMAKE_TOOLCHAIN_FILE)
|
|
message(STATUS "SIMH_CMAKE_TOOLCHAIN_FILE is ${SIMH_CMAKE_TOOLCHAIN_FILE}")
|
|
endif ()
|
|
|
|
## Respect MSVC_RUNTIME_LIBRARY's setting. the policy has to be set before
|
|
## project(), otherwise it'd have been put into platform-quirks.
|
|
##
|
|
## Note: See cmake\build_dep_matrix.cmake to see how this is propagated down
|
|
## into the dependency libraries.
|
|
if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.15)
|
|
cmake_policy(SET CMP0091 NEW)
|
|
endif()
|
|
|
|
project(simh VERSION "${SIMH_VERSION}" LANGUAGES C CXX)
|
|
|
|
include(vcpkg-setup)
|
|
include(GNUInstallDirs)
|
|
|
|
## Provide a default CMAKE_BUILD_TYPE if CMAKE_CONFIGURATION_TYPES is empty or not defined.
|
|
if (NOT CMAKE_CONFIGURATION_TYPES)
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "Release")
|
|
message(STATUS "CMAKE_BUILD_TYPE defaulted to ${CMAKE_BUILD_TYPE}")
|
|
else (NOT CMAKE_BUILD_TYPE)
|
|
message(STATUS "CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}")
|
|
endif (NOT CMAKE_BUILD_TYPE)
|
|
endif ()
|
|
|
|
# SIMH_SYSTEM_ID: Roughly analogous to the autoconf system triple. Used (almost exclusively)
|
|
# as part of the depedencies' top-level directory name.
|
|
set(SIMH_SYSTEM_ID ${CMAKE_SYSTEM_NAME})
|
|
string(REPLACE "." ";" version_list ${CMAKE_SYSTEM_VERSION})
|
|
list(GET version_list 0 version_major)
|
|
string(APPEND SIMH_SYSTEM_ID "-" ${version_major})
|
|
|
|
if (CMAKE_C_LIBRARY_ARCHITECTURE)
|
|
string(APPEND SIMH_SYSTEM_ID -${CMAKE_C_LIBRARY_ARCHITECTURE})
|
|
endif (CMAKE_C_LIBRARY_ARCHITECTURE)
|
|
string(APPEND SIMH_SYSTEM_ID -${CMAKE_C_COMPILER_ID})
|
|
string(REPLACE "." ";" version_list ${CMAKE_C_COMPILER_VERSION})
|
|
list(GET version_list 0 version_major)
|
|
list(GET version_list 1 version_minor)
|
|
if (NOT version_minor)
|
|
set(version_minor 0)
|
|
endif ()
|
|
string(APPEND SIMH_SYSTEM_ID "-${version_major}.${version_minor}")
|
|
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
string(APPEND SIMH_SYSTEM_ID "-64")
|
|
else ()
|
|
string(APPEND SIMH_SYSTEM_ID "-32")
|
|
endif ()
|
|
if (CMAKE_GENERATOR MATCHES "Visual Studio .*" AND CMAKE_GENERATOR_TOOLSET MATCHES "v[0-9][0-9][0-9]_xp")
|
|
string(APPEND SIMH_SYSTEM_ID "-XP")
|
|
endif ()
|
|
|
|
# SIMH_DEP_TOPDIR: This is the top-level directory where dependencies live. It's cached so that
|
|
# scripts (e.g., cmake-builder.ps1) can update PATH to find shared objects and DLLs.
|
|
#
|
|
# Only add to search paths if NO_DEP_BUILD is False
|
|
set(SIMH_DEP_TOPDIR
|
|
${CMAKE_SOURCE_DIR}/cmake/dependencies/${SIMH_SYSTEM_ID}
|
|
CACHE PATH "Top-level directory for SIMH library dependencies")
|
|
|
|
# SIMH_DEP_PATCHES: This is where various external package patches live. Also cached just in case
|
|
# it's needed by a script.
|
|
set(SIMH_DEP_PATCHES ${CMAKE_SOURCE_DIR}/cmake/patches
|
|
CACHE PATH "Top-level directory for external dependency patches")
|
|
|
|
##-- Options --##
|
|
set(NO_DEP_BUILD_OPTVAL FALSE)
|
|
if (NOT DEFINED NO_DEP_BUILD)
|
|
## For Windows, always build dependencies
|
|
if (WIN32 AND NOT DEFINED ENV{MSYSTEM} AND NOT USING_VCPKG)
|
|
message(STATUS "Setting NO_DEP_BUILD to FALSE, will BUILD missing dependencies")
|
|
set(NO_DEP_BUILD_OPTVAL FALSE)
|
|
else ()
|
|
message(STATUS "Setting NO_DEP_BUILD to TRUE, will NOT BUILD missing dependencies")
|
|
set(NO_DEP_BUILD_OPTVAL TRUE)
|
|
endif ()
|
|
else ()
|
|
set(NO_DEP_BUILD_OPTVAL ${NO_DEP_BUILD})
|
|
if (NO_DEP_BUILD_OPTVAL)
|
|
message(STATUS "Missing dependencies WILL NOT BE BUILT.")
|
|
else ()
|
|
message(STATUS "Missing dependencies WILL BE BUILT.")
|
|
endif ()
|
|
endif ()
|
|
|
|
set(MAC_UNIVERSAL_OPTVAL FALSE)
|
|
if (NOT DEFINED MAC_UNIVERSAL)
|
|
if (APPLE)
|
|
message("macOS universal binaries WILL NOT BE BUILT")
|
|
endif ()
|
|
else ()
|
|
set(MAC_UNIVERSAL_OPTVAL ${MAC_UNIVERSAL})
|
|
if (MAC_UNIVERSAL_OPTVAL)
|
|
message(STATUS "macOS unversal binaries WILL BE BUILT.")
|
|
else ()
|
|
message(STATUS "macOS unversal binaries NOT WILL BE BUILT.")
|
|
endif ()
|
|
endif ()
|
|
|
|
option(NO_DEP_BUILD
|
|
"Enable (=1)/disable (=0) Dependency library builds (def: enabled)"
|
|
${NO_DEP_BUILD_OPTVAL})
|
|
option(BUILD_SHARED_DEPS
|
|
"Enable (=1)/disable (=0) building dependencies as shared libraries/DLLs (def: disabled)"
|
|
FALSE)
|
|
option(WITH_ASYNC
|
|
"Enable (=1)/disable (=0) Asynchronous I/O and threading."
|
|
TRUE)
|
|
option(WITH_REGEX
|
|
"Enable (=1)/disable (=0) PCRE/PCRE2 regular expression support (def: enabled)"
|
|
TRUE)
|
|
option(PREFER_PCRE
|
|
"Prefer (=1)/ignore (=0) Prefer PCRE over PCRE2 (def: ignore)"
|
|
TRUE)
|
|
option(WITH_NETWORK
|
|
"Enable (=1)/disable (=0) simulator networking support. (def: enabled)"
|
|
TRUE)
|
|
option(WITH_PCAP
|
|
"Enable (=1)/disable (=0) libpcap (packet capture) support. (def: enabled)"
|
|
TRUE)
|
|
option(WITH_SLIRP
|
|
"Enable (=1)/disable (=0) SLIRP network support. (def: enabled)"
|
|
TRUE)
|
|
option(WITH_VDE
|
|
"Enable (=1)/disable (=0) VDE2/VDE4 network support. (def: enabled)"
|
|
TRUE)
|
|
option(WITH_TAP
|
|
"Enable (=1)/disable (=0) TAP/TUN device network support. (def: enabled)"
|
|
TRUE)
|
|
option(WITH_VIDEO
|
|
"Enable (=1)/disable (=0) simulator display and graphics support (def: enabled)"
|
|
TRUE)
|
|
option(DONT_USE_ROMS
|
|
"Enable (=1)/disable (=0) building support ROMs. (def: disabled)"
|
|
FALSE)
|
|
option(ENABLE_CPPCHECK
|
|
"Enable (=1)/disable (=0) 'cppcheck' static code analysis. (def: disabled.)"
|
|
FALSE)
|
|
option(WINAPI_DEPRECATION
|
|
"Show (=1)/mute (=0) Various WinAPI deprecation warning (def: mute.)"
|
|
FALSE)
|
|
option(WARNINGS_FATAL
|
|
"Compile-time warnings are errors (e.g., \"-Werror\" on GCC)"
|
|
FALSE)
|
|
option(RELEASE_LTO
|
|
"Use Link Time Optimization (LTO) in Release builds."
|
|
FALSE)
|
|
option(DEBUG_WALL
|
|
"Turn on maximal compiler warnings in Debug builds (e.g., \"-Wall\" or \"/W4\")"
|
|
FALSE)
|
|
option(SIMH_PACKAGE_SUFFIX
|
|
"The packaging suffix for CPack artifacts, e.g. simh-SIMH_VERSION-SIMH_PACKAGE_SUFFIX."
|
|
"")
|
|
option(MAC_UNIVERSAL
|
|
"macOS universal binary flag: TRUE -> build universal binaries, FALSE -> don't."
|
|
${MAC_UNIVERSAL_OPTVAL})
|
|
|
|
# Places where CMake should look for dependent package configuration fragments and artifacts:
|
|
set(SIMH_PREFIX_PATH_LIST)
|
|
if (NOT (USING_VCPKG OR NO_DEP_BUILD))
|
|
list(APPEND CMAKE_INCLUDE_PATH ${SIMH_DEP_TOPDIR})
|
|
list(APPEND SIMH_PREFIX_PATH_LIST ${SIMH_DEP_TOPDIR})
|
|
list(APPEND CMAKE_PREFIX_PATH ${SIMH_PREFIX_PATH_LIST})
|
|
endif ()
|
|
|
|
## libpcap, if not found, will put its headers in $CMAKE_BINARY_DIR/include.
|
|
## Make sure we can find them.
|
|
list(APPEND CMAKE_INCLUDE_PATH "${CMAKE_BINARY_DIR}/include")
|
|
|
|
## Additional command line arguments for dependencies. Need this because Powershell will report
|
|
## an error if anything is sent to stderr and $ErrorDefaultAction is set to "Stop".
|
|
set(DEP_CMAKE_ARGS "-Wno-dev" "--no-warn-unused-cli")
|
|
|
|
## build-stage directory hierarchy for dependency installs:
|
|
if (NOT (USING_VCPKG OR NO_DEP_BUILD) AND NOT EXISTS ${SIMH_DEP_TOPDIR})
|
|
message(STATUS "Creating dependency library directory hierarchy")
|
|
execute_process(
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${SIMH_DEP_TOPDIR} ${SIMH_DEP_TOPDIR}/include ${SIMH_DEP_TOPDIR}/lib
|
|
${SIMH_DEP_TOPDIR}/bin
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
)
|
|
endif ()
|
|
|
|
## Default install location is ${CMAKE_SOURCE_DIR}/SIMH-install if not otherwise set
|
|
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/SIMH-install" CACHE PATH "${CMAKE_SOURCE_DIR}/SIMH-install default install prefix" FORCE)
|
|
endif()
|
|
|
|
## The default runtime output directory is the BIN subdirectory in the source tree's top
|
|
set(SIMH_LEGACY_INSTALL "${CMAKE_SOURCE_DIR}/BIN")
|
|
if (WIN32)
|
|
string(APPEND SIMH_LEGACY_INSTALL "/Win32")
|
|
endif()
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${SIMH_LEGACY_INSTALL})
|
|
|
|
## Source directory is always on the global include path.
|
|
include_directories(${CMAKE_SOURCE_DIR})
|
|
|
|
if (NOT USING_VCPKG AND NOT NO_DEP_BUILD)
|
|
# Make sure we can include and link from the dependency directory
|
|
list(APPEND CMAKE_LIBRARY_PATH ${SIMH_DEP_TOPDIR}/lib)
|
|
link_directories(${SIMH_DEP_TOPDIR}/lib)
|
|
list(APPEND CMAKE_INCLUDE_PATH ${SIMH_DEP_TOPDIR}/include)
|
|
include_directories(${SIMH_DEP_TOPDIR}/include)
|
|
endif ()
|
|
|
|
## CMake policy tweaks
|
|
|
|
if (CMAKE_VERSION GREATER_EQUAL 3.24)
|
|
## Until I figure out a way to add DOWNLOAD_EXTRACT_TIMESTAMP to the call to
|
|
## ExternalProject_Add cleanly..
|
|
cmake_policy(SET CMP0135 NEW)
|
|
endif()
|
|
|
|
## "Standard" includes
|
|
include(CheckCSourceCompiles)
|
|
include(CheckIncludeFile)
|
|
include(CheckSymbolExists)
|
|
include(CheckTypeSize)
|
|
include(CheckCCompilerFlag)
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
## Deal with platform quirkiness
|
|
include(platform-quirks)
|
|
|
|
# Find packages, arrange for dependency download/compile/install:
|
|
#
|
|
# SIMH_BUILD_DEPS is the list of the dependecies' names, for pretty-printing.
|
|
# SIMH_DEP_TARGETS is the list of dependency targets' names that we'll actually build.
|
|
|
|
set(SIMH_BUILD_DEPS)
|
|
set(SIMH_DEP_TARGETS)
|
|
|
|
set(THREADING_PKG_STATUS "unknown")
|
|
set(ZLIB_PKG_STATUS "unknown")
|
|
set(PCRE_PKG_STATUS "unknown")
|
|
set(VIDEO_PKG_STATUS)
|
|
set(NETWORK_PKG_STATUS)
|
|
|
|
# if (USING_VCPKG)
|
|
# ## Sanity checking output: Ensure that vcpkg picked up the correct triplet
|
|
# message(STATUS "VCPKG sanity check:\n"
|
|
# " .. VCPKG target triplet is ${VCPKG_TARGET_TRIPLET}\n"
|
|
# " .. VCPKG_CRT_LINKAGE is ${VCPKG_CRT_LINKAGE}"
|
|
# ## " .. CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}\n"
|
|
# ## " .. CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}
|
|
# )
|
|
# endif ()
|
|
|
|
# SIMH local packages:
|
|
include(build_dep_matrix)
|
|
include(os-features)
|
|
include(dep-locate)
|
|
include(dep-link)
|
|
|
|
if (VIDEO_PKG_STATUS)
|
|
string(REPLACE ";" ", " VIDEO_PKG_STATUS "${VIDEO_PKG_STATUS}")
|
|
else (VIDEO_PKG_STATUS)
|
|
set(VIDEO_PKG_STATUS "unknown")
|
|
endif (VIDEO_PKG_STATUS)
|
|
|
|
if (NETWORK_PKG_STATUS)
|
|
string(REPLACE ";" ", " NETWORK_PKG_STATUS "${NETWORK_PKG_STATUS}")
|
|
else (NETWORK_PKG_STATUS)
|
|
set(NETWORK_PKG_STATUS "unknown")
|
|
endif (NETWORK_PKG_STATUS)
|
|
|
|
set(CPPCHECK_STATUS "disabled.")
|
|
|
|
if (ENABLE_CPPCHECK)
|
|
find_program(cppcheck_cmd NAMES cppcheck)
|
|
if (cppcheck_cmd)
|
|
list(APPEND cppcheck_cmd
|
|
"--language=c"
|
|
"--enable=warning,style,performance,portability,information,missingInclude"
|
|
"--suppress=missingIncludeSystem"
|
|
"--inline-suppr"
|
|
"--std=c99"
|
|
"--force")
|
|
set(CPPCHECK_STATUS "found and enabled.")
|
|
if (WIN32)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
list(APPEND cppcheck_cmd
|
|
"--platform=win64")
|
|
set(CPPCHECK_STATUS "found, Win64 platform.")
|
|
else ()
|
|
list(APPEND cppcheck_cmd
|
|
"--platform=win32A")
|
|
set(CPPCHECK_STATUS "found, Win32 ASCII platform.")
|
|
endif ()
|
|
endif ()
|
|
else (cppcheck_cmd)
|
|
set(CPPCHECK_STATUS "'cppcheck' not installed.")
|
|
endif ()
|
|
endif ()
|
|
|
|
set(_feature_text "Libraries and features:\n")
|
|
string(APPEND _feature_text "\n * Build with video/graphics support. ${BUILD_WITH_VIDEO}")
|
|
string(APPEND _feature_text "\n * Build with networking support .... ${BUILD_WITH_NETWORK}")
|
|
string(APPEND _feature_text "\n * Build internal ROMS .............. ")
|
|
if (DONT_SET_ROMS)
|
|
string(APPEND _feature_text "No")
|
|
else ()
|
|
string(APPEND _feature_text "Yes")
|
|
endif ()
|
|
string(APPEND _feature_text "\n * Thread support ................... ${THREADING_PKG_STATUS}")
|
|
string(APPEND _feature_text "\n * zlib ............................. ${ZLIB_PKG_STATUS}")
|
|
string(APPEND _feature_text "\n * Perl-Compatible RegExps........... ${PCRE_PKG_STATUS}")
|
|
string(APPEND _feature_text "\n * PNG, Freetype, SDL2, SDL2_ttf .... ${VIDEO_PKG_STATUS}")
|
|
string(APPEND _feature_text "\n * Network support .................. ${NETWORK_PKG_STATUS}")
|
|
|
|
get_target_property(OS_FEATURE_DEFS os_features INTERFACE_COMPILE_DEFINITIONS)
|
|
list(LENGTH OS_FEATURE_DEFS len_os_features)
|
|
string(APPEND _feature_text "\n * OS Feature definitions")
|
|
if (OS_FEATURE_DEFS)
|
|
string(APPEND _feature_text ":")
|
|
foreach (feature ${OS_FEATURE_DEFS})
|
|
string(APPEND _feature_text "\n .. ${feature}")
|
|
endforeach()
|
|
else ()
|
|
string(APPEND _feature_text " ........... None defined.")
|
|
endif ()
|
|
|
|
get_target_property(OS_FEATURE_LIBS os_features INTERFACE_LINK_LIBRARIES)
|
|
list(LENGTH OS_FEATURE_LIBS len_os_features)
|
|
string(APPEND _feature_text "\n * OS Feature libraries")
|
|
if (OS_FEATURE_LIBS)
|
|
string(APPEND _feature_text ":")
|
|
foreach (feature ${OS_FEATURE_LIBS})
|
|
string(APPEND _feature_text "\n .. ${feature}")
|
|
endforeach ()
|
|
else ()
|
|
string(APPEND _feature_text " ............. None required.")
|
|
endif ()
|
|
|
|
string(APPEND _feature_text "\n * 'cppcheck' ....................... ${CPPCHECK_STATUS}")
|
|
string(APPEND _feature_text "\n")
|
|
|
|
message(STATUS ${_feature_text})
|
|
unset(_feature_text)
|
|
|
|
unset(ROM_STATUS)
|
|
|
|
if (NO_DEP_BUILD AND SIMH_BUILD_DEPS)
|
|
## Don't build dependencies. Just wail about them.
|
|
message("")
|
|
message("Missing SIMH dependencies:")
|
|
foreach (dep ${SIMH_BUILD_DEPS})
|
|
message(STATUS " ${dep}")
|
|
endforeach()
|
|
message("")
|
|
message("Please install the above dependencies via your platform package management or")
|
|
message("software installation system and reconfigure.")
|
|
message("")
|
|
message("Also see the .travis/deps.h file for Brew and apt packages installed during")
|
|
message("github.com workflow actions.")
|
|
message(FATAL_ERROR "Missing dependencies, cannot continue.")
|
|
|
|
## TODO: Assume that these dependencies are optional?
|
|
endif ()
|
|
|
|
if (NOT DEFINED DO_DEPENDENCY_BUILD OR SIMH_BUILD_DEPS)
|
|
if (DEFINED DO_DEPENDENCY_BUILD AND NOT DO_DEPENDENCY_BUILD AND SIMH_BUILD_DEPS)
|
|
message(FATAL_ERROR "Dependency libraries did not build successfully!!??")
|
|
endif()
|
|
|
|
if (SIMH_BUILD_DEPS)
|
|
message(STATUS "Building dependency libraries as a superbuild")
|
|
set(DO_DEPENDENCY_BUILD ON CACHE BOOL "Superbuild flag" FORCE)
|
|
else ()
|
|
set(DO_DEPENDENCY_BUILD OFF CACHE BOOL "Superbuild flag" FORCE)
|
|
endif ()
|
|
else ()
|
|
set(DO_DEPENDENCY_BUILD ${DO_DEPENDENCY_BUILD} CACHE BOOL "Superbuild flag" FORCE)
|
|
endif ()
|
|
|
|
if (NOT DO_DEPENDENCY_BUILD)
|
|
include (add_simulator)
|
|
if (WITH_SLIRP)
|
|
add_subdirectory(slirp)
|
|
endif (WITH_SLIRP)
|
|
|
|
## Don't delete yet ## set(Python_ADDITIONAL_VERSIONS 3)
|
|
## Don't delete yet ## include(FindPythonInterp)
|
|
## Don't delete yet ## if (PYTHONINTERP_FOUND AND PYTHON_VERSION_MAJOR GREATER_EQUAL 3)
|
|
## Don't delete yet ## add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/cmake/simh-simulators.cmake
|
|
## Don't delete yet ## COMMAND ${PYTHON_EXECUTABLE} "-m" generate "--srcdir" "${CMAKE_SOURCE_DIR}"
|
|
## Don't delete yet ## MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/makefile
|
|
## Don't delete yet ## COMMENT "Updating cmake/simh-simulators.cmake"
|
|
## Don't delete yet ## WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake
|
|
## Don't delete yet ## COMMAND_EXPAND_LISTS)
|
|
## Don't delete yet ## message(STATUS "Added makefile update rule.")
|
|
## Don't delete yet ## endif (PYTHONINTERP_FOUND AND PYTHON_VERSION_MAJOR GREATER_EQUAL 3)
|
|
## Don't delete yet ##
|
|
## Don't delete yet ## if (${CMAKE_SOURCE_DIR}/makefile IS_NEWER_THAN ${CMAKE_SOURCE_DIR}/cmake/simh-simulators.cmake)
|
|
## Don't delete yet ## if (NOT PYTHONINTERP_FOUND OR PYTHON_VERSION_MAJOR LESS 3)
|
|
## Don't delete yet ## if (NOT PYTHONINTERP_FOUND)
|
|
## Don't delete yet ## message("!! Python not found")
|
|
## Don't delete yet ## elseif (PYTHON_VERSION_MAJOR LESS 3)
|
|
## Don't delete yet ## message("!! Python is not python3")
|
|
## Don't delete yet ## endif (NOT PYTHONINTERP_FOUND)
|
|
## Don't delete yet ##
|
|
## Don't delete yet ## message("!!")
|
|
## Don't delete yet ## message("!! Cannot update cmake/simh-simulators.cmake, using older version.")
|
|
## Don't delete yet ## message("!! Proceed with caution: This build might not succeed.")
|
|
## Don't delete yet ## message("!!")
|
|
## Don't delete yet ## message(STATUS "Keeping existing cmake/simh-simulators.cmake")
|
|
## Don't delete yet ## else (NOT PYTHONINTERP_FOUND OR PYTHON_VERSION_MAJOR LESS 3)
|
|
## Don't delete yet ## message(STATUS "Updating cmake/simh-simulators.cmake")
|
|
## Don't delete yet ## execute_process(COMMAND ${PYTHON_EXECUTABLE} "-m" generate "--srcdir" "${CMAKE_SOURCE_DIR}"
|
|
## Don't delete yet ## WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/cmake)
|
|
## Don't delete yet ## endif (NOT PYTHONINTERP_FOUND OR PYTHON_VERSION_MAJOR LESS 3)
|
|
## Don't delete yet ## endif ()
|
|
|
|
message(STATUS "Adding simulators")
|
|
include(simh-simulators)
|
|
|
|
include(cpack-setup)
|
|
include(simh-packaging)
|
|
else ()
|
|
message(STATUS "")
|
|
message(STATUS "Building the following dependency libraries:")
|
|
message(STATUS "")
|
|
foreach(dep ${SIMH_BUILD_DEPS})
|
|
message(STATUS " ${dep}")
|
|
endforeach ()
|
|
message(STATUS "")
|
|
|
|
ExternalProject_Add (simh_superbuild
|
|
DEPENDS
|
|
${SIMH_DEP_TARGETS}
|
|
SOURCE_DIR
|
|
${CMAKE_SOURCE_DIR}
|
|
CMAKE_ARGS
|
|
-DDO_DEPENDENCY_BUILD:BOOL=OFF
|
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
|
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
|
INSTALL_COMMAND ""
|
|
BINARY_DIR
|
|
${CMAKE_BINARY_DIR}
|
|
USES_TERMINAL_CONFIGURE TRUE
|
|
USES_TERMINAL_BUILD TRUE
|
|
)
|
|
|
|
## Ensure that the next build rechecks the dependency
|
|
## libraries that were just built and finds them.
|
|
unset(Freetype_FOUND CACHE)
|
|
unset(PCAP_FOUND CACHE)
|
|
unset(PCRE_FOUND CACHE)
|
|
unset(PCRE2_FOUND CACHE)
|
|
unset(PNG_FOUND CACHE)
|
|
unset(PTW_FOUND CACHE)
|
|
unset(SDL2_FOUND CACHE)
|
|
unset(SDL2_ttf_FOUND CACHE)
|
|
unset(ZLIB_FOUND CACHE)
|
|
endif ()
|