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.
89 lines
3.5 KiB
CMake
89 lines
3.5 KiB
CMake
## git-commit-id.cmake
|
|
##
|
|
## Get the current Git commit hash code and commit time, update
|
|
## .git-commit-id and .git-commit-id.h
|
|
|
|
set(GIT_COMMIT_ID ${GIT_COMMIT_DEST}/.git-commit-id)
|
|
set(GIT_COMMIT_ID_H ${GIT_COMMIT_DEST}/.git-commit-id.h)
|
|
|
|
find_program(GIT_COMMAND git)
|
|
if (GIT_COMMAND)
|
|
execute_process(COMMAND ${GIT_COMMAND} "log" "-1" "--pretty=%H"
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
RESULT_VARIABLE HAVE_GIT_COMMIT_HASH
|
|
OUTPUT_VARIABLE SIMH_GIT_COMMIT_HASH)
|
|
|
|
execute_process(COMMAND ${GIT_COMMAND} "log" "-1" "--pretty=%aI"
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
RESULT_VARIABLE HAVE_GIT_COMMIT_TIME
|
|
OUTPUT_VARIABLE SIMH_GIT_COMMIT_TIME)
|
|
|
|
execute_process(COMMAND ${GIT_COMMAND} "update-index" "--refresh" "--"
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
RESULT_VARIABLE HAVE_UNCOMMITTED_CHANGES
|
|
OUTPUT_VARIABLE SIMH_UNCOMMITTED_CHANGES)
|
|
endif ()
|
|
|
|
if (GIT_COMMAND AND NOT (HAVE_GIT_COMMIT_HASH OR HAVE_GIT_COMMIT_TIME))
|
|
string(STRIP ${SIMH_GIT_COMMIT_HASH} SIMH_GIT_COMMIT_HASH)
|
|
string(STRIP ${SIMH_GIT_COMMIT_TIME} SIMH_GIT_COMMIT_TIME)
|
|
string(REPLACE "T" " " SIMH_GIT_COMMIT_TIME ${SIMH_GIT_COMMIT_TIME})
|
|
|
|
if (HAVE_UNCOMMITTED_CHANGES)
|
|
## message(STATUS "Git detected uncommitted changes.")
|
|
string(APPEND SIMH_GIT_COMMIT_HASH "+uncommitted-changes")
|
|
else ()
|
|
message(STATUS "Clean working directory, no uncommitted changes.")
|
|
endif ()
|
|
|
|
set(WRITE_GIT_COMMIT_FILES True)
|
|
if (EXISTS ${GIT_COMMIT_ID})
|
|
set(EXISTING_GIT_COMMIT_HASH)
|
|
set(EXISTING_GIT_COMMIT_TIME)
|
|
file(STRINGS ${GIT_COMMIT_ID} git_info)
|
|
foreach (inp IN LISTS git_info)
|
|
if (inp MATCHES "SIM_GIT_COMMIT_ID (.*)")
|
|
set(EXISTING_GIT_COMMIT_HASH ${CMAKE_MATCH_1})
|
|
elseif (inp MATCHES "SIM_GIT_COMMIT_TIME (.*)")
|
|
set(EXISTING_GIT_COMMIT_TIME ${CMAKE_MATCH_1})
|
|
endif ()
|
|
endforeach()
|
|
if (EXISTING_GIT_COMMIT_HASH STREQUAL SIMH_GIT_COMMIT_HASH AND
|
|
EXISTING_GIT_COMMIT_TIME STREQUAL SIMH_GIT_COMMIT_TIME)
|
|
## message(STATUS "GIT hash and time match, not writing files.")
|
|
set(WRITE_GIT_COMMIT_FILES False)
|
|
endif ()
|
|
endif ()
|
|
|
|
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}")
|
|
file(WRITE ${GIT_COMMIT_ID}
|
|
"SIM_GIT_COMMIT_ID ${SIMH_GIT_COMMIT_HASH}\n"
|
|
"SIM_GIT_COMMIT_TIME ${SIMH_GIT_COMMIT_TIME}\n")
|
|
|
|
message(STATUS "Writing ${GIT_COMMIT_ID_H}")
|
|
file(WRITE ${GIT_COMMIT_ID_H}
|
|
"#define SIM_GIT_COMMIT_ID ${SIMH_GIT_COMMIT_HASH}\n"
|
|
"#define SIM_GIT_COMMIT_TIME ${SIMH_GIT_COMMIT_TIME}\n")
|
|
## else ()
|
|
## message(STATUS "No changes to ${GIT_COMMIT_ID}")
|
|
## message(STATUS "No changes to ${GIT_COMMIT_ID_H}")
|
|
endif ()
|
|
else ()
|
|
message(STATUS "SIM_GIT_COMMIT_ID not set.")
|
|
message(STATUS "SIM_GIT_COMMIT_TIME not set.")
|
|
|
|
if (NOT EXISTS ${GIT_COMMIT_ID_H})
|
|
message(STATUS "Writing default ${GIT_COMMIT_ID_H}")
|
|
file(WRITE ${GIT_COMMIT_ID_H}
|
|
"#undef SIM_GIT_COMMIT_ID\n"
|
|
"#undef SIM_GIT_COMMIT_TIME\n"
|
|
)
|
|
else ()
|
|
message(STATUS "Leaving ${GIT_COMMIT_ID_H} intact")
|
|
endif ()
|
|
endif()
|