mirror of
https://github.com/lenticularis39/axpbox.git
synced 2026-01-13 07:20:10 +00:00
* Update Windows github action build to build with npcap so networking should work on the downloadable version. Added a test script to run the emulator on Windows and check if the SRM ROM is downloaded and executed correctly up until the P00>>> prompt (just like the linux versions) --------- Co-authored-by: Remy van Elst <git@relst.nl>
221 lines
8.1 KiB
CMake
221 lines
8.1 KiB
CMake
cmake_minimum_required(VERSION 3.10)
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
project(AXPBox VERSION 1.1.3)
|
|
|
|
# Source files
|
|
file(GLOB srcs src/*.cpp src/base/*.cpp src/gui/*.cpp)
|
|
file(GLOB include_sources src/base/*WIN32.cpp src/base/*POSIX.cpp)
|
|
list(REMOVE_ITEM srcs ${include_sources})
|
|
|
|
add_executable(axpbox ${srcs} src/Main.cpp)
|
|
target_include_directories(axpbox PRIVATE src src/base src/gui ${CMAKE_BINARY_DIR}/src)
|
|
|
|
# Path to additional CMake modules
|
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
|
|
|
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
|
add_definitions(-DNOMINMAX -D_WIN32_WINNT=0x0A00 -DLANG_CXX11 -DCOMPILER_MSVC -D__VERSION__=\"MSVC\")
|
|
add_definitions(-DWIN32 -DOS_WIN -D_MBCS -DWIN64 -DWIN32_LEAN_AND_MEAN -DNOGDI -DPLATFORM_WINDOWS)
|
|
add_definitions(/bigobj /nologo /EHsc /GF /FC /MP /Gm-)
|
|
# Suppress warnings to reduce build log size.
|
|
add_definitions(/wd4267 /wd4244 /wd4800 /wd4503 /wd4554 /wd4996 /wd4348 /wd4018)
|
|
add_definitions(/wd4099 /wd4146 /wd4267 /wd4305 /wd4307)
|
|
add_definitions(/wd4715 /wd4722 /wd4723 /wd4838 /wd4309 /wd4334)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
|
endif()
|
|
|
|
find_package(Threads REQUIRED)
|
|
target_link_libraries(axpbox Threads::Threads)
|
|
|
|
# Configuration options
|
|
include(CheckSymbolExists)
|
|
include(CheckIncludeFile)
|
|
include(CheckLibraryExists)
|
|
include(CheckTypeSize)
|
|
include(CheckIncludeFiles)
|
|
include(TestBigEndian)
|
|
include(CheckLargeFiles)
|
|
|
|
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
|
|
if(IS_BIG_ENDIAN)
|
|
set(ES40_BIG_ENDIAN 1)
|
|
else()
|
|
set(ES40_LITTLE_ENDIAN 1)
|
|
endif()
|
|
|
|
check_symbol_exists(alarm "unistd.h" HAVE_ALARM)
|
|
check_include_file("arpa/inet.h" HAVE_ARPA_INET_H)
|
|
check_include_file("arpa/telnet.h" HAVE_ARPA_TELNET_H)
|
|
check_symbol_exists(atexit "stdlib.h" HAVE_ATEXIT)
|
|
check_include_file("ctype.h" HAVE_CTYPE_H)
|
|
check_include_file("errno.h" HAVE_ERRNO_H)
|
|
check_include_file("fcntl.h" HAVE_FCNTL_H)
|
|
check_symbol_exists(fopen "stdio.h" HAVE_FOPEN)
|
|
check_symbol_exists(fopen64 "stdio.h" HAVE_FOPEN64)
|
|
check_symbol_exists(fork "unistd.h" HAVE_FORK)
|
|
check_symbol_exists(fseek "stdio.h" HAVE_FSEEK)
|
|
check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO)
|
|
check_symbol_exists(fseeko64 "stdio.h" HAVE_FSEEKO64)
|
|
check_symbol_exists(ftell "stdio.h" HAVE_FTELL)
|
|
check_symbol_exists(ftello "stdio.h" HAVE_FTELLO)
|
|
check_symbol_exists(ftello64 "stdio.h" HAVE_FTELLO64)
|
|
check_symbol_exists(gmtime_s "time.h" HAVE_GMTIME_S)
|
|
check_symbol_exists(inet_aton "arpa/inet.h" HAVE_INET_ATON)
|
|
check_include_file("inet.h" HAVE_INET_H)
|
|
check_include_file("inttypes.h" HAVE_INTTYPES_H)
|
|
check_include_file("in.h" HAVE_IN_H)
|
|
check_symbol_exists(isblank "ctype.h" HAVE_ISBLANK)
|
|
check_symbol_exists(localtime_s "time.h" HAVE_LOCALTIME_S)
|
|
check_symbol_exists(malloc "stdlib.h" HAVE_MALLOC)
|
|
check_include_file("malloc.h" HAVE_MALLOC_H)
|
|
check_include_file("memory.h" HAVE_MEMORY_H)
|
|
check_symbol_exists(memset "string.h" HAVE_MEMSET)
|
|
check_include_file("netinet/in.h" HAVE_NETINET_IN_H)
|
|
check_symbol_exists(pow "math.h" HAVE_POW)
|
|
check_include_file("process.h" HAVE_PROCESS_H)
|
|
check_library_exists(pthread pthread_self "" HAVE_PTHREAD)
|
|
check_include_file("pthread.h" HAVE_PTHREAD_H)
|
|
check_symbol_exists(realloc "stdlib.h" HAVE_REALLOC)
|
|
check_symbol_exists(select "sys/select.h" HAVE_SELECT)
|
|
check_include_file("signal.h" HAVE_SIGNAL_H)
|
|
check_symbol_exists(socket "sys/socket.h" HAVE_SOCKET)
|
|
check_include_file("socket.h" HAVE_SOCKET_H)
|
|
check_symbol_exists(sqrt "math.h" HAVE_SQRT)
|
|
check_include_file("stdbool.h" HAVE_STDBOOL_H)
|
|
check_include_file("stdint.h" HAVE_STDINT_H)
|
|
check_include_file("stdlib.h" HAVE_STDLIB_H)
|
|
check_symbol_exists(strcasecmp "string.h" HAVE_STRCASECMP)
|
|
check_symbol_exists(strchr "string.h" HAVE_STRCHR)
|
|
check_symbol_exists(strdup "string.h" HAVE_STRDUP)
|
|
check_include_file("stddef.h" HAVE_STDDEF_H)
|
|
check_include_file("strings.h" HAVE_STRINGS_H)
|
|
check_include_file("string.h" HAVE_STRING_H)
|
|
check_symbol_exists(strncasecmp "string.h" HAVE_STRNCASECMP)
|
|
check_symbol_exists(strspn "string.h" HAVE_STRSPN)
|
|
check_include_file("sys/param.h" HAVE_SYS_PARAM_H)
|
|
check_include_file("sys/select.h" HAVE_SYS_SELECT_H)
|
|
check_include_file("sys/socket.h" HAVE_SYS_SOCKET_H)
|
|
check_include_file("sys/stat.h" HAVE_SYS_STAT_H)
|
|
check_include_file("sys/time.h" HAVE_SYS_TIME_H)
|
|
check_include_file("sys/types.h" HAVE_SYS_TYPES_H)
|
|
check_include_file("sys/wait.h" HAVE_SYS_WAIT_H)
|
|
check_include_file("unistd.h" HAVE_UNISTD_H)
|
|
check_symbol_exists(vfork "unistd.h" HAVE_VFORK)
|
|
check_include_file("vfork.h" HAVE_VFORK_H)
|
|
check_include_file("windows.h" HAVE_WINDOWS_H)
|
|
check_include_file("winsock2.h" HAVE_WINSOCK2_H)
|
|
set(HAVE_WORKING_FORK ${HAVE_FORK})
|
|
set(HAVE_WORKING_VFORK ${HAVE_VFORK})
|
|
check_include_file("ws2tcpip.h" HAVE_WS2TCPIP_H)
|
|
check_type_size(_Bool _BOOL)
|
|
check_symbol_exists(_fseeki64 "stdio.h" HAVE__FSEEKI64)
|
|
check_symbol_exists(_ftelli64 "stdio.h" HAVE__FTELLI64)
|
|
check_symbol_exists(_strdup "string.h" HAVE__STRDUP)
|
|
check_symbol_exists(_stricasecmp "string.h" HAVE__STRICASECMP)
|
|
check_symbol_exists(_stricmp "string.h" HAVE__STRICMP)
|
|
|
|
# Features
|
|
check_include_file("SDL/SDL.h" HAVE_SDL)
|
|
check_include_file("X11/X.h" HAVE_X11)
|
|
# Large file support (fopen64 / disk files > 2 GB)
|
|
AXPBOX_TEST_LARGE_FILES(HAVE_LARGE_FILES)
|
|
|
|
if (DISABLE_PCAP STREQUAL "yes")
|
|
set(WANT_PCAP 0)
|
|
else()
|
|
set(WANT_PCAP 1)
|
|
endif()
|
|
|
|
if(WANT_PCAP)
|
|
find_package(PCAP)
|
|
if(PCAP_FOUND)
|
|
message(STATUS "pcap found. Networking support enabled")
|
|
include_directories(${PCAP_INCLUDE_DIR})
|
|
target_link_libraries(axpbox ${PCAP_LIBRARY})
|
|
else()
|
|
message(STATUS "pcap not found. Networking support disabled")
|
|
endif()
|
|
else()
|
|
message(STATUS "pcap disabled. Networking support disabled")
|
|
endif()
|
|
|
|
if (DISABLE_SDL STREQUAL "yes")
|
|
set(HAVE_SDL 0)
|
|
endif()
|
|
if (DISABLE_X11 STREQUAL "yes")
|
|
set(HAVE_X11 0)
|
|
endif()
|
|
|
|
if(HAVE_SDL)
|
|
target_link_libraries(axpbox SDL)
|
|
message(STATUS "sdl found. SDL graphics support enabled")
|
|
else()
|
|
message(WARNING "sdl not found. Building without SDL graphics support")
|
|
endif()
|
|
if(HAVE_X11)
|
|
target_link_libraries(axpbox X11)
|
|
message(STATUS "x11 found. x11 graphics support enabled")
|
|
else()
|
|
message(WARNING "x11 not found. Building without x11 graphics support")
|
|
endif()
|
|
|
|
if (STATIC_COMPILE STREQUAL "yes")
|
|
message(STATUS "Static compilation")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static -lpthread -lrt -Wl,--whole-archive -lpthread -Wl,--no-whole-archive")
|
|
set(CMAKE_EXE_LINKER_FLAGS "-static")
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
endif()
|
|
|
|
if (NOT CMAKE_GENERATOR MATCHES "Visual Studio")
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ggdb")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og -ggdb")
|
|
elseif (CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG")
|
|
endif()
|
|
endif()
|
|
|
|
if(HAVE_LARGE_FILES)
|
|
message(STATUS "Large file support enabled")
|
|
else()
|
|
message(WARNING "Building without large file graphics support")
|
|
endif()
|
|
|
|
find_package(Git)
|
|
if (GIT_FOUND)
|
|
execute_process(COMMAND
|
|
"${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=40 --dirty
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
OUTPUT_VARIABLE GIT_SHA
|
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
set(PACKAGE_GITSHA "\"${GIT_SHA}\"")
|
|
endif()
|
|
|
|
set(PACKAGE ${PROJECT_NAME})
|
|
set(PACKAGE_BUGREPORT "tglozar@gmail.com")
|
|
set(PACKAGE_NAME string(TOLOWER ${PROJECT_NAME}))
|
|
set(PACKAGE_VERSION ${PROJECT_VERSION})
|
|
set(PACKAGE_STRING ${PACKAGE_NAME}-${PACKAGE_VERSION})
|
|
set(PACKAGE_TARNAME ${PACKAGE_STRING}.tar.gz)
|
|
set(PACKAGE_URL "http://github.com/lenticularis39/axpbox")
|
|
|
|
set(PTHREAD_CREATE_JOINABLE "PTHREAD_CREATE_JOINABLE")
|
|
set(SELECT_TYPE_ARG1 "int")
|
|
set(SELECT_TYPE_ARG234 "fd_set *")
|
|
set(SELECT_TYPE_ARG5 "struct timeval *")
|
|
set(RETSIGTYPE "void")
|
|
set(STDC_HEADERS 1)
|
|
check_include_files("time.h;sys/time.h" TIME_WITH_SYS_TIME)
|
|
|
|
configure_file(src/config.hpp.in src/config.hpp)
|
|
|
|
install(TARGETS axpbox DESTINATION bin)
|
|
|
|
message(STATUS "C++ compiler flags : ${CMAKE_CXX_FLAGS}")
|
|
message(STATUS "C compiler flags : ${CMAKE_C_FLAGS}")
|
|
message(STATUS "Linker flags : ${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_STATIC_LINKER_FLAGS}")
|