diff --git a/.editorconfig b/.editorconfig index 3b8291ef7..8c5c392e5 100644 --- a/.editorconfig +++ b/.editorconfig @@ -20,3 +20,11 @@ tab_width = 8 [*.manifest] indent_style = space indent_size = 2 + +[*.yml] +indent_style = space +indent_size = 2 + +[**/CMakeLists.txt] +indent_style = space +indent_size = 4 diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 08d4522ff..aa0368735 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -84,7 +84,7 @@ jobs: - uses: actions/upload-artifact@v2 with: name: '86Box-${{ matrix.build.name }}-MSYS2-${{ matrix.environment.msystem }}-${{ github.sha }}' - path: build/artifacts/bin/** + path: build/artifacts/** vs2019: name: VS2019 ${{ matrix.build.name }} ${{ matrix.target-arch }} build (${{ matrix.toolset }}) @@ -130,7 +130,7 @@ jobs: - uses: actions/upload-artifact@v2 with: name: '86Box-${{ matrix.build.name }}-VS2019-${{ matrix.target-arch }}-${{ matrix.toolset }}-${{ github.sha }}' - path: build/artifacts/bin/** + path: build/artifacts/** linux: name: "Linux GCC 11" diff --git a/.gitignore b/.gitignore index eb01732fb..fe3a35b37 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ CMakeFiles Makefile *.a -*.cmake /src/*.exe /src/86Box /src/include/86box/version.h @@ -22,7 +21,6 @@ Makefile /src/*.log /src/*.dmp /src/nvr/ -/src/printer/ /src/roms/ /src/screenshots/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fef0e593..50ca88922 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,16 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # cmake_minimum_required(VERSION 3.16) @@ -18,22 +18,28 @@ cmake_minimum_required(VERSION 3.16) cmake_policy(SET CMP0091 NEW) cmake_policy(SET CMP0079 NEW) -if(VCPKG_TOOLCHAIN AND VCPKG_TARGET_TRIPLET MATCHES "static") - set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") -endif() - project(86Box - VERSION 3.1 - DESCRIPTION "Emulator of x86-based systems" - HOMEPAGE_URL "https://86box.net" - LANGUAGES C CXX) + VERSION 3.1 + DESCRIPTION "Emulator of x86-based systems" + HOMEPAGE_URL "https://86box.net" + LANGUAGES C CXX) + +if(WIN32 AND VCPKG_TOOLCHAIN) + if(VCPKG_TARGET_TRIPLET MATCHES "-windows-static$") + # `-static` triplet, use the statically linked CRT + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + else() + # Regular triplet (or `-static-md`), use the dynamically linked CRT + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>DLL") + endif() +endif() # Detect the target architecture by trying to compile `src/arch_detect.c` try_compile(RESULT_VAR ${CMAKE_BINARY_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/src/arch_detect.c" OUTPUT_VARIABLE ARCH) string(REGEX MATCH "ARCH ([a-zA-Z0-9_]+)" ARCH "${ARCH}") string(REPLACE "ARCH " "" ARCH "${ARCH}") if (NOT ARCH) - set(ARCH unknown) + set(ARCH unknown) endif() include(CPack) @@ -44,82 +50,91 @@ add_compile_definitions(CMAKE) add_compile_definitions("$<$:DEBUG>") if(WIN32) - # Disables *_s function warnings - add_compile_definitions(_CRT_SECURE_NO_WARNINGS) + # Disables *_s function warnings + add_compile_definitions(_CRT_SECURE_NO_WARNINGS) - # Disables POSIX name warnings - add_compile_definitions(_CRT_NONSTDC_NO_WARNINGS) + # Disables POSIX name warnings + add_compile_definitions(_CRT_NONSTDC_NO_WARNINGS) - # Disables WinSock deprecation warnings - add_compile_definitions(_WINSOCK_DEPRECATED_NO_WARNINGS) + # Disables WinSock deprecation warnings + add_compile_definitions(_WINSOCK_DEPRECATED_NO_WARNINGS) endif() set(CMAKE_CXX_STANDARD 11) -option(RELEASE "Release build" OFF) -option(USB "USB support" OFF) -option(DYNAREC "Dynamic recompiler" ON) -option(FLUIDSYNTH "FluidSynth" ON) -option(MUNT "MUNT" ON) -option(VRAMDUMP "Video RAM dumping" OFF) -option(DINPUT "DirectInput" OFF) -option(DISCORD "Discord integration" ON) -option(QT "QT GUI" ON) -option(CPPTHREADS "C++11 threads" ON) +# Optional features +# +# Option Description Def. +# ------ ----------- ---- +option(RELEASE "Release build" OFF) +option(USB "USB support" OFF) +option(DYNAREC "Dynamic recompiler" ON) +option(FLUIDSYNTH "FluidSynth" ON) +option(MUNT "MUNT" ON) +option(VRAMDUMP "Video RAM dumping" OFF) +option(DINPUT "DirectInput" OFF) +option(DISCORD "Discord integration" ON) +option(CPPTHREADS "C++11 threads" ON) +option(NEW_DYNAREC "Use the PCem v15 (\"new\") dynamic recompiler" OFF) +option(MINITRACE "Enable Chrome tracing using the modified minitrace library" OFF) +option(DEV_BRANCH "Development branch" OFF) +option(QT "QT GUI" ON) -option(NEW_DYNAREC "Use the PCem v15 (\"new\") dynamic recompiler" OFF) +# Development branch features +# +# Option Description Def. Condition Otherwise +# ------ ----------- ---- --------- --------- +cmake_dependent_option(AMD_K5 "AMD K5" ON "DEV_BRANCH" OFF) +cmake_dependent_option(CYRIX_6X86 "Cyrix 6x86" ON "DEV_BRANCH" OFF) +cmake_dependent_option(GUSMAX "Gravis UltraSound MAX" ON "DEV_BRANCH" OFF) +cmake_dependent_option(HEDAKA "Hedaka HED-919" ON "DEV_BRANCH" OFF) +cmake_dependent_option(I450KX "Intel i450KX" ON "DEV_BRANCH" OFF) +cmake_dependent_option(LASERXT "VTech Laser XT" ON "DEV_BRANCH" OFF) +cmake_dependent_option(MGA "Matrox Mystique graphics adapters" ON "DEV_BRANCH" OFF) +cmake_dependent_option(NO_SIO "Machines without emulated Super I/O chips" ON "DEV_BRANCH" OFF) +cmake_dependent_option(OLIVETTI "Olivetti M290" ON "DEV_BRANCH" OFF) +cmake_dependent_option(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF) +cmake_dependent_option(OPENGL "OpenGL 3.0 Core renderer" ON "DEV_BRANCH" OFF) +cmake_dependent_option(PAS16 "Pro Audio Spectrum 16" OFF "DEV_BRANCH" OFF) +cmake_dependent_option(PS2M70T4 "IBM PS/2 model 70 (type 4)" ON "DEV_BRANCH" OFF) +cmake_dependent_option(S3TRIO3D2X "S3 Trio3D/2X" ON "DEV_BRANCH" OFF) +cmake_dependent_option(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF) +cmake_dependent_option(M154X "ALi ALADDiN IV" ON "DEV_BRANCH" OFF) +cmake_dependent_option(M6117 "ALi M6117" ON "DEV_BRANCH" OFF) +cmake_dependent_option(VGAWONDER "ATI VGA Wonder (ATI-18800)" ON "DEV_BRANCH" OFF) +cmake_dependent_option(VNC "VNC renderer" OFF "DEV_BRANCH" OFF) +cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF) +cmake_dependent_option(VECT486VL "HP Vectra 486VL" ON "DEV_BRANCH" OFF) -option(MINITRACE "Enable Chrome tracing using the modified minitrace library" OFF) - -option(DEV_BRANCH "Development branch" OFF) -CMAKE_DEPENDENT_OPTION(AMD_K5 "AMD K5" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(CYRIX_6X86 "Cyrix 6x86" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(GUSMAX "Gravis UltraSound MAX" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(HEDAKA "Hedaka HED-919" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(I450KX "Intel i450KX" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(LASERXT "VTech Laser XT" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(MGA "Matrox Mystique graphics adapters" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(NO_SIO "Machines without emulated Super I/O chips" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(OLIVETTI "Olivetti M290" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(OPEN_AT "OpenAT" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(OPENGL "OpenGL 3.0 Core renderer" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(PAS16 "Pro Audio Spectrum 16" OFF "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(PS2M70T4 "IBM PS/2 model 70 (type 4)" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(S3TRIO3D2X "S3 Trio3D/2X" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(SIO_DETECT "Super I/O Detection Helper" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(M154X "ALi ALADDiN IV" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(M6117 "ALi M6117" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(VGAWONDER "ATI VGA Wonder (ATI-18800)" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(VNC "VNC renderer" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF) -CMAKE_DEPENDENT_OPTION(VECT486VL "HP Vectra 486VL" ON "DEV_BRANCH" OFF) +# Determine the build type +set(RELEASE_BUILD OFF) +set(BETA_BUILD OFF) +set(ALPHA_BUILD OFF) string(TOLOWER "${BUILD_TYPE}" BUILD_TYPE_LOWER) if(BUILD_TYPE_LOWER STREQUAL "release") - add_compile_definitions(RELEASE_BUILD) + # Release build + set(RELEASE_BUILD ON) + add_compile_definitions(RELEASE_BUILD) elseif(BUILD_TYPE_LOWER STREQUAL "beta") - add_compile_definitions(BETA_BUILD) + # Beta build + set(BETA_BUILD ON) + add_compile_definitions(BETA_BUILD) elseif(BUILD_TYPE_LOWER STREQUAL "alpha") - add_compile_definitions(ALPHA_BUILD) + # Alpha build + set(ALPHA_BUILD ON) + add_compile_definitions(ALPHA_BUILD) endif() -# HACK: Avoid a MSVC2019 compiler bug on ARM64 Debug builds -if(MSVC_TOOLSET_VERSION GREATER_EQUAL 142 AND ARCH STREQUAL "arm64") - # Define a cache option in case somebody wants to disable this workaround - set(AVOID_LNK1322 ON CACHE BOOL "Prevent LNK1322 on MSVC2019 ARM64 debug builds") - - if(AVOID_LNK1322) - message(STATUS "Working around LNK1322 (86Box#1268)") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Gy") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Gy") - endif() +# Variables introduced by richardg867 for versioning stuff +if(NOT CMAKE_PROJECT_VERSION_PATCH) + set(CMAKE_PROJECT_VERSION_PATCH 0) endif() - -# HACK: MinGW and macOS <10.15 does not have `timespec_get` -include(CheckSymbolExists) -check_symbol_exists(timespec_get time.h HAS_TIMESPEC_GET) -if(HAS_TIMESPEC_GET) - add_compile_definitions(HAS_TIMESPEC_GET) +if(NOT EMU_BUILD_NUM) + set(EMU_BUILD_NUM 0) +endif() +if(NOT EMU_COPYRIGHT_YEAR) + set(EMU_COPYRIGHT_YEAR 2021) endif() add_subdirectory(src) diff --git a/cmake/flags-gcc-arm64.cmake b/cmake/flags-gcc-arm64.cmake new file mode 100644 index 000000000..9aa21f4a6 --- /dev/null +++ b/cmake/flags-gcc-arm64.cmake @@ -0,0 +1,4 @@ +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) + +set(CMAKE_C_FLAGS "-march=armv8-a -mfloat-abi=hard ${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS "-march=armv8-a -mfloat-abi=hard ${CMAKE_CXX_FLAGS}") \ No newline at end of file diff --git a/cmake/flags-gcc-armv7.cmake b/cmake/flags-gcc-armv7.cmake new file mode 100644 index 000000000..c832a389e --- /dev/null +++ b/cmake/flags-gcc-armv7.cmake @@ -0,0 +1,4 @@ +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) + +set(CMAKE_C_FLAGS "-march=armv7-a -mfloat-abi=hard ${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=hard ${CMAKE_CXX_FLAGS}") \ No newline at end of file diff --git a/cmake/flags-gcc-i686.cmake b/cmake/flags-gcc-i686.cmake new file mode 100644 index 000000000..fd0a7618c --- /dev/null +++ b/cmake/flags-gcc-i686.cmake @@ -0,0 +1,4 @@ +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) + +set(CMAKE_C_FLAGS "-m32 -march=i686 -msse2 -mfpmath=sse ${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS "-m32 -march=i686 -msse2 -mfpmath=sse ${CMAKE_CXX_FLAGS}") \ No newline at end of file diff --git a/cmake/flags-gcc-x86_64.cmake b/cmake/flags-gcc-x86_64.cmake new file mode 100644 index 000000000..1b8385661 --- /dev/null +++ b/cmake/flags-gcc-x86_64.cmake @@ -0,0 +1,4 @@ +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc.cmake) + +set(CMAKE_C_FLAGS "-m64 -march=x86-64 -msse2 -mfpmath=sse ${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS "-m64 -march=x86-64 -msse2 -mfpmath=sse ${CMAKE_CXX_FLAGS}") \ No newline at end of file diff --git a/cmake/flags-gcc.cmake b/cmake/flags-gcc.cmake new file mode 100644 index 000000000..437b2e39e --- /dev/null +++ b/cmake/flags-gcc.cmake @@ -0,0 +1,10 @@ +set(CMAKE_CONFIGURATION_TYPES Debug;Release;Optimized) + +set(CMAKE_C_FLAGS "-fomit-frame-pointer -mstackrealign -Wall -fno-strict-aliasing") +set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS}) +set(CMAKE_C_FLAGS_RELEASE "-g0 -O3") +set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE}) +set(CMAKE_C_FLAGS_DEBUG "-ggdb -Og") +set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG}) +set(CMAKE_C_FLAGS_OPTIMIZED "-march=native -mtune=native -O3 -ffp-contract=fast -flto") +set(CMAKE_CXX_FLAGS_OPTIMIZED ${CMAKE_C_FLAGS_OPTIMIZED}) \ No newline at end of file diff --git a/cmake/llvm-win32-arm64.cmake b/cmake/llvm-win32-arm64.cmake new file mode 100644 index 000000000..1648382c3 --- /dev/null +++ b/cmake/llvm-win32-arm64.cmake @@ -0,0 +1,10 @@ +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-arm64.cmake) + +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_RC_COMPILER rc) + +set(CMAKE_C_COMPILER_TARGET aarch64-pc-windows-msvc) +set(CMAKE_CXX_COMPILER_TARGET aarch64-pc-windows-msvc) + +set(CMAKE_SYSTEM_PROCESSOR ARM64) \ No newline at end of file diff --git a/cmake/llvm-win32-i686.cmake b/cmake/llvm-win32-i686.cmake new file mode 100644 index 000000000..c7fec1749 --- /dev/null +++ b/cmake/llvm-win32-i686.cmake @@ -0,0 +1,10 @@ +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-i686.cmake) + +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_RC_COMPILER rc) + +set(CMAKE_C_COMPILER_TARGET i686-pc-windows-msvc) +set(CMAKE_CXX_COMPILER_TARGET i686-pc-windows-msvc) + +set(CMAKE_SYSTEM_PROCESSOR X86) \ No newline at end of file diff --git a/cmake/llvm-win32-x86_64.cmake b/cmake/llvm-win32-x86_64.cmake new file mode 100644 index 000000000..c26940aaa --- /dev/null +++ b/cmake/llvm-win32-x86_64.cmake @@ -0,0 +1,10 @@ +include(${CMAKE_CURRENT_LIST_DIR}/flags-gcc-x86_64.cmake) + +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_RC_COMPILER rc) + +set(CMAKE_C_COMPILER_TARGET x86_64-pc-windows-msvc) +set(CMAKE_CXX_COMPILER_TARGET x86_64-pc-windows-msvc) + +set(CMAKE_SYSTEM_PROCESSOR AMD64) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c66ad82e5..c85246a49 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,136 +1,80 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, -# dob205 +# Authors: David Hrdlička, +# dob205 # -# Copyright 2020,2021 David Hrdlička. -# Copyright 2021 dob205. +# Copyright 2020,2021 David Hrdlička. +# Copyright 2021 dob205. # -# Prepare the macOS app bundle icon depending on the release channel -set(APP_ICON_MACOSX) -if (APPLE) - if(RELEASE_BUILD) - set(APP_ICON_MACOSX ${CMAKE_CURRENT_SOURCE_DIR}/mac/icons/release/86Box.icns) - elseif(BETA_BUILD) - set(APP_ICON_MACOSX ${CMAKE_CURRENT_SOURCE_DIR}/mac/icons/beta/86Box.icns) - elseif(ALPHA_BUILD) - set(APP_ICON_MACOSX ${CMAKE_CURRENT_SOURCE_DIR}/mac/icons/dev/86Box.icns) - else() - set(APP_ICON_MACOSX ${CMAKE_CURRENT_SOURCE_DIR}/mac/icons/branch/86Box.icns) - endif() - -set_source_files_properties(${APP_ICON_MACOSX} PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources") -endif() - # WIN32 marks us as a GUI app on Windows -# MACOSX_BUNDLE prepares a macOS application bundle including with the app icon add_executable(86Box WIN32 MACOSX_BUNDLE 86box.c config.c log.c random.c timer.c io.c acpi.c apm.c - dma.c ddma.c nmi.c pic.c pit.c port_6x.c port_92.c ppi.c pci.c mca.c usb.c fifo8.c - device.c nvr.c nvr_at.c nvr_ps2.c ${APP_ICON_MACOSX}) + dma.c ddma.c nmi.c pic.c pit.c port_6x.c port_92.c ppi.c pci.c mca.c usb.c fifo8.c + device.c nvr.c nvr_at.c nvr_ps2.c) if(CPPTHREADS) - target_sources(86Box PRIVATE thread.cpp) -endif() - -if(APPLE) - target_link_libraries(86Box "-framework AppKit") + target_sources(86Box PRIVATE thread.cpp) endif() if(NEW_DYNAREC) - add_compile_definitions(USE_NEW_DYNAREC) + add_compile_definitions(USE_NEW_DYNAREC) endif() if(RELEASE) - add_compile_definitions(RELEASE_BUILD) + add_compile_definitions(RELEASE_BUILD) endif() if(DYNAREC) - add_compile_definitions(USE_DYNAREC) + add_compile_definitions(USE_DYNAREC) endif() if(VRAMDUMP) - add_compile_definitions(ENABLE_VRAM_DUMP) + add_compile_definitions(ENABLE_VRAM_DUMP) endif() if(DEV_BRANCH) - add_compile_definitions(DEV_BRANCH) + add_compile_definitions(DEV_BRANCH) endif() if(VNC) - add_compile_definitions(USE_VNC) - add_library(vnc OBJECT vnc.c vnc_keymap.c) - target_link_libraries(86Box vnc vncserver) - if (WIN32) - target_link_libraries(86Box ws2_32) - endif() + add_compile_definitions(USE_VNC) + add_library(vnc OBJECT vnc.c vnc_keymap.c) + target_link_libraries(86Box vnc vncserver) + if (WIN32) + target_link_libraries(86Box ws2_32) + endif() endif() target_link_libraries(86Box cpu chipset mch dev mem fdd game cdrom zip mo hdd - net print scsi sio snd vid voodoo plat ui) + net print scsi sio snd vid voodoo plat ui) if(WIN32 AND ARCH STREQUAL "i386") - if(MSVC) - target_link_options(86Box PRIVATE "/LARGEADDRESSAWARE") - else() - target_link_options(86Box PRIVATE "LINKER:--large-address-aware") - endif() + if(MINGW) + target_link_options(86Box PRIVATE "LINKER:--large-address-aware") + else() + target_link_options(86Box PRIVATE "LINKER:/LARGEADDRESSAWARE") + endif() endif() if(MINGW) - target_link_options(86Box PRIVATE "-static") - set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".dll.a") + target_link_options(86Box PRIVATE "-static") + set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".dll.a") endif() -# Variables introduced by richardg867 for versioning stuff -if(NOT CMAKE_PROJECT_VERSION_PATCH) - set(CMAKE_PROJECT_VERSION_PATCH 0) -endif() -if(NOT EMU_BUILD_NUM) - set(EMU_BUILD_NUM 0) -endif() -if(NOT EMU_COPYRIGHT_YEAR) - set(EMU_COPYRIGHT_YEAR 2021) -endif() - -#some macOS specific configuration steps if(APPLE) -# Force using the newest library if it's installed by homebrew - set(CMAKE_FIND_FRAMEWORK LAST) - + # Force using the newest library if it's installed by homebrew + set(CMAKE_FIND_FRAMEWORK LAST) - # prepare stuff for macOS app bundles - set(CMAKE_MACOSX_BUNDLE 1) - - # setting our compilation target to macOS 10.13 High Sierra - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") - - # set the Info.plist properly - set_target_properties(86Box PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/mac/Info.plist.in) - set(MACOSX_BUNDLE_GUI_IDENTIFIER net.86Box.86Box) - set(MACOSX_BUNDLE_BUNDLE_NAME 86Box) - set(MACOSX_BUNDLE_BUNDLE_VERSION 3.1.${EMU_BUILD_NUM}) - set(MACOSX_BUNDLE_SHORT_VERSION_STRING "3.1.${EMU_BUILD_NUM}") - set(MACOSX_BUNDLE_LONG_VERSION_STRING "3.1.${EMU_BUILD_NUM}") - set(MACOSX_BUNDLE_ICON_FILE 86Box.icns) - set(MACOSX_BUNDLE_INFO_STRING "A emulator of old computers") - set(MACOSX_BUNDLE_COPYRIGHT "© 2007-${EMU_COPYRIGHT_YEAR} 86Box contributors") - - - # preparing the code signing for easier distribution, Apple dev certificate needed at one point - #set(XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES") - #set(XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-") - #set(XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/mac/codesign/dev/app.entitlements) - + # setting our compilation target to macOS 10.13 High Sierra + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") endif() if(QT) @@ -149,7 +93,9 @@ endif() find_package(Freetype REQUIRED) include_directories(${FREETYPE_INCLUDE_DIRS}) if(APPLE) - target_link_libraries(86Box Freetype::Freetype) # bundles freetype for the macOS app bundle + # Freetype is dynamically loaded by the emulator, however, we link it + # on macOS so it gets copied to the bundle by the installation process + target_link_libraries(86Box Freetype::Freetype) endif() find_package(OpenAL REQUIRED) @@ -158,16 +104,12 @@ target_link_libraries(86Box ${OPENAL_LIBRARY}) find_package(SDL2 REQUIRED) include_directories(${SDL2_INCLUDE_DIRS}) -if(MINGW) - target_link_libraries(86Box SDL2::SDL2-static) -elseif(WIN32) - target_link_libraries(86Box SDL2::SDL2) +if(WIN32 AND TARGET SDL2::SDL2-static) + target_link_libraries(86Box SDL2::SDL2-static) +elseif(TARGET SDL2::SDL2) + target_link_libraries(86Box SDL2::SDL2) else() - if (TARGET SDL2::SDL2) - target_link_libraries(86Box SDL2::SDL2) - else() - target_link_libraries(86Box ${SDL2_LIBRARIES}) - endif() + target_link_libraries(86Box ${SDL2_LIBRARIES}) endif() find_package(PNG REQUIRED) @@ -175,17 +117,17 @@ include_directories(${PNG_INCLUDE_DIRS}) target_link_libraries(86Box PNG::PNG) if(VCPKG_TOOLCHAIN) - # vcpkg includes a config file for rtmidi - find_package(RtMidi REQUIRED) - target_link_libraries(86Box RtMidi::rtmidi) + # vcpkg includes a config file for rtmidi + find_package(RtMidi REQUIRED) + target_link_libraries(86Box RtMidi::rtmidi) else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(RTMIDI REQUIRED IMPORTED_TARGET rtmidi) - target_link_libraries(86Box PkgConfig::RTMIDI) + find_package(PkgConfig REQUIRED) + pkg_check_modules(RTMIDI REQUIRED IMPORTED_TARGET rtmidi) + target_link_libraries(86Box PkgConfig::RTMIDI) - if(WIN32) - target_link_libraries(PkgConfig::RTMIDI INTERFACE winmm) - endif() + if(WIN32) + target_link_libraries(PkgConfig::RTMIDI INTERFACE winmm) + endif() endif() configure_file(include/86box/version.h.in include/86box/version.h @ONLY) @@ -193,9 +135,9 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) include_directories(include) if(NEW_DYNAREC) - include_directories(cpu codegen_new) + include_directories(cpu codegen_new) else() - include_directories(cpu codegen) + include_directories(cpu codegen) endif() add_subdirectory(cdrom) @@ -203,9 +145,9 @@ add_subdirectory(chipset) add_subdirectory(cpu) if(NEW_DYNAREC) - add_subdirectory(codegen_new) + add_subdirectory(codegen_new) else() - add_subdirectory(codegen) + add_subdirectory(codegen) endif() if(MINITRACE) @@ -214,22 +156,24 @@ if(MINITRACE) target_link_libraries(86Box minitrace) endif() -if(APPLE) - install(TARGETS 86Box DESTINATION "bin") +if(WIN32 OR APPLE) + # Copy the binary to the root of the install prefix on Windows and macOS + install(TARGETS 86Box DESTINATION ".") else() - install(TARGETS 86Box) + # On Linux we want to copy the binary to the `bin` folder. + install(TARGETS 86Box) endif() -# adjustments for macOS app bundles +# Install our dependencies to the macOS bundle if(APPLE) - set(APPS ${CMAKE_CURRENT_BINARY_DIR}/86Box.app) - install(CODE " - include(InstallRequiredSystemLibraries) - include(BundleUtilities) - fixup_bundle(\"${APPS}\" \"\" \"\")" - COMPONENT Runtime) + install(CODE " + include(BundleUtilities) + get_filename_component(CMAKE_INSTALL_PREFIX_ABSOLUTE \${CMAKE_INSTALL_PREFIX} ABSOLUTE) + fixup_bundle(\"\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/86Box.app\" \"\" \"\")" + COMPONENT Runtime) - # needed for Qt packaging + if (QT) + # needed for Qt packaging # get the macdeployqt path get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION) get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY) @@ -242,16 +186,29 @@ if(APPLE) -always-overwrite COMMENT "Running macdeployqt..." ) + endif() endif() +# Install our dependencies if using vcpkg if(VCPKG_TOOLCHAIN) - x_vcpkg_install_local_dependencies(TARGETS 86Box DESTINATION "bin") + x_vcpkg_install_local_dependencies(TARGETS 86Box DESTINATION ".") endif() +# Install the PDB file on Windows builds if(MSVC) - install(FILES $ - CONFIGURATIONS Debug RelWithDebInfo - DESTINATION "bin") + # CMake fully supports PDB files on MSVC-compatible compilers + install(FILES $ + CONFIGURATIONS Debug RelWithDebInfo + DESTINATION ".") +elseif(WIN32) + # Other compilers/linkers (such as Clang in GCC-compatible mode) also + # emit PDB files when targeting Windows, however, CMake only supports + # the relevant properties with MSVC and clones. Try to install + # the PDB file assuming it's in the same path as the EXE. + install(FILES "$/$.pdb" + CONFIGURATIONS Debug RelWithDebInfo + DESTINATION "." + OPTIONAL) endif() add_subdirectory(device) @@ -273,7 +230,7 @@ endif() if (QT) add_subdirectory(qt) elseif(WIN32) - add_subdirectory(win) + add_subdirectory(win) else() - add_subdirectory(unix) + add_subdirectory(unix) endif() diff --git a/src/cdrom/CMakeLists.txt b/src/cdrom/CMakeLists.txt index 6b6c89022..eaa50bf2c 100644 --- a/src/cdrom/CMakeLists.txt +++ b/src/cdrom/CMakeLists.txt @@ -1,16 +1,16 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(cdrom OBJECT cdrom.c cdrom_image_backend.c cdrom_image.c) \ No newline at end of file diff --git a/src/chipset/CMakeLists.txt b/src/chipset/CMakeLists.txt index 050db7519..5be4490af 100644 --- a/src/chipset/CMakeLists.txt +++ b/src/chipset/CMakeLists.txt @@ -1,26 +1,26 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(chipset OBJECT 82c100.c acc2168.c cs8230.c ali1429.c ali1489.c ali1531.c ali1541.c ali1543.c - ali1621.c ali6117.c headland.c ims8848.c intel_82335.c contaq_82c59x.c cs4031.c intel_420ex.c - intel_4x0.c intel_i450kx.c intel_sio.c intel_piix.c ../ioapic.c neat.c opti283.c opti291.c opti391.c - opti495.c opti822.c opti895.c opti5x7.c scamp.c scat.c sis_85c310.c sis_85c4xx.c - sis_85c496.c sis_85c50x.c sis_5511.c sis_5571.c via_vt82c49x.c via_vt82c505.c sis_85c310.c - sis_85c4xx.c sis_85c496.c sis_85c50x.c gc100.c stpc.c umc_8886.c umc_hb4.c via_apollo.c - via_pipc.c vl82c480.c wd76c10.c) + ali1621.c ali6117.c headland.c ims8848.c intel_82335.c contaq_82c59x.c cs4031.c intel_420ex.c + intel_4x0.c intel_i450kx.c intel_sio.c intel_piix.c ../ioapic.c neat.c opti283.c opti291.c opti391.c + opti495.c opti822.c opti895.c opti5x7.c scamp.c scat.c sis_85c310.c sis_85c4xx.c + sis_85c496.c sis_85c50x.c sis_5511.c sis_5571.c via_vt82c49x.c via_vt82c505.c sis_85c310.c + sis_85c4xx.c sis_85c496.c sis_85c50x.c gc100.c stpc.c umc_8886.c umc_hb4.c via_apollo.c + via_pipc.c vl82c480.c wd76c10.c) if(OLIVETTI) - target_sources(chipset PRIVATE olivetti_eva.c) + target_sources(chipset PRIVATE olivetti_eva.c) endif() \ No newline at end of file diff --git a/src/codegen/CMakeLists.txt b/src/codegen/CMakeLists.txt index 1d310c0de..68b13f24d 100644 --- a/src/codegen/CMakeLists.txt +++ b/src/codegen/CMakeLists.txt @@ -1,31 +1,31 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # if(DYNAREC) - add_library(dynarec OBJECT codegen.c codegen_ops.c) + add_library(dynarec OBJECT codegen.c codegen_ops.c) - if(ARCH STREQUAL "i386") - target_sources(dynarec PRIVATE codegen_x86.c - codegen_accumulate_x86.c) - elseif(ARCH STREQUAL "x86_64") - target_sources(dynarec PRIVATE codegen_x86-64.c - codegen_accumulate_x86-64.c) - else() - message(SEND_ERROR - "Dynarec is incompatible with target platform ${ARCH}") - endif() + if(ARCH STREQUAL "i386") + target_sources(dynarec PRIVATE codegen_x86.c + codegen_accumulate_x86.c) + elseif(ARCH STREQUAL "x86_64") + target_sources(dynarec PRIVATE codegen_x86-64.c + codegen_accumulate_x86-64.c) + else() + message(SEND_ERROR + "Dynarec is incompatible with target platform ${ARCH}") + endif() - target_link_libraries(86Box dynarec cgt) + target_link_libraries(86Box dynarec cgt) endif() \ No newline at end of file diff --git a/src/codegen_new/CMakeLists.txt b/src/codegen_new/CMakeLists.txt index 15f1874f8..54f3b3c6b 100644 --- a/src/codegen_new/CMakeLists.txt +++ b/src/codegen_new/CMakeLists.txt @@ -1,51 +1,51 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # if(DYNAREC) - add_library(dynarec OBJECT codegen.c codegen_accumulate.c - codegen_allocator.c codegen_block.c codegen_ir.c codegen_ops.c - codegen_ops_3dnow.c codegen_ops_branch.c codegen_ops_arith.c - codegen_ops_fpu_arith.c codegen_ops_fpu_constant.c - codegen_ops_fpu_loadstore.c codegen_ops_fpu_misc.c - codegen_ops_helpers.c codegen_ops_jump.c codegen_ops_logic.c - codegen_ops_misc.c codegen_ops_mmx_arith.c codegen_ops_mmx_cmp.c - codegen_ops_mmx_loadstore.c codegen_ops_mmx_logic.c - codegen_ops_mmx_pack.c codegen_ops_mmx_shift.c codegen_ops_mov.c - codegen_ops_shift.c codegen_ops_stack.c codegen_reg.c) + add_library(dynarec OBJECT codegen.c codegen_accumulate.c + codegen_allocator.c codegen_block.c codegen_ir.c codegen_ops.c + codegen_ops_3dnow.c codegen_ops_branch.c codegen_ops_arith.c + codegen_ops_fpu_arith.c codegen_ops_fpu_constant.c + codegen_ops_fpu_loadstore.c codegen_ops_fpu_misc.c + codegen_ops_helpers.c codegen_ops_jump.c codegen_ops_logic.c + codegen_ops_misc.c codegen_ops_mmx_arith.c codegen_ops_mmx_cmp.c + codegen_ops_mmx_loadstore.c codegen_ops_mmx_logic.c + codegen_ops_mmx_pack.c codegen_ops_mmx_shift.c codegen_ops_mov.c + codegen_ops_shift.c codegen_ops_stack.c codegen_reg.c) - if(ARCH STREQUAL "i386") - target_sources(dynarec PRIVATE codegen_backend_x86.c - codegen_backend_x86_ops.c codegen_backend_x86_ops_fpu.c - codegen_backend_x86_ops_sse.c - codegen_backend_x86_uops.c) - elseif(ARCH STREQUAL "x86_64") - target_sources(dynarec PRIVATE codegen_backend_x86-64.c - codegen_backend_x86-64_ops.c - codegen_backend_x86-64_ops_sse.c - codegen_backend_x86-64_uops.c) - elseif(ARCH STREQUAL "arm64") - target_sources(dynarec PRIVATE codegen_backend_arm64.c - codegen_backend_arm64_ops.c codegen_backend_arm64_uops.c - codegen_backend_arm64_imm.c) - elseif(ARCH STREQUAL "arm") - target_sources(dynarec PRIVATE codegen_backend_arm.c - codegen_backend_arm_ops.c codegen_backend_arm_uops.c) - else() - message(SEND_ERROR - "Dynarec is incompatible with target platform ${ARCH}") - endif() + if(ARCH STREQUAL "i386") + target_sources(dynarec PRIVATE codegen_backend_x86.c + codegen_backend_x86_ops.c codegen_backend_x86_ops_fpu.c + codegen_backend_x86_ops_sse.c + codegen_backend_x86_uops.c) + elseif(ARCH STREQUAL "x86_64") + target_sources(dynarec PRIVATE codegen_backend_x86-64.c + codegen_backend_x86-64_ops.c + codegen_backend_x86-64_ops_sse.c + codegen_backend_x86-64_uops.c) + elseif(ARCH STREQUAL "arm64") + target_sources(dynarec PRIVATE codegen_backend_arm64.c + codegen_backend_arm64_ops.c codegen_backend_arm64_uops.c + codegen_backend_arm64_imm.c) + elseif(ARCH STREQUAL "arm") + target_sources(dynarec PRIVATE codegen_backend_arm.c + codegen_backend_arm_ops.c codegen_backend_arm_uops.c) + else() + message(SEND_ERROR + "Dynarec is incompatible with target platform ${ARCH}") + endif() - target_link_libraries(86Box dynarec cgt) + target_link_libraries(86Box dynarec cgt) endif() \ No newline at end of file diff --git a/src/cpu/CMakeLists.txt b/src/cpu/CMakeLists.txt index ab27b77c0..543ad8ff5 100644 --- a/src/cpu/CMakeLists.txt +++ b/src/cpu/CMakeLists.txt @@ -1,32 +1,32 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(cpu OBJECT cpu.c cpu_table.c fpu.c x86.c 808x.c 386.c 386_common.c 386_dynarec.c - 386_dynarec_ops.c x86seg.c x87.c x87_timings.c) + 386_dynarec_ops.c x86seg.c x87.c x87_timings.c) if(AMD_K5) - target_compile_definitions(cpu PRIVATE USE_AMD_K5) + target_compile_definitions(cpu PRIVATE USE_AMD_K5) endif() if(CYRIX_6X86) - target_compile_definitions(cpu PRIVATE USE_CYRIX_6X86) + target_compile_definitions(cpu PRIVATE USE_CYRIX_6X86) endif() if(DYNAREC) - add_library(cgt OBJECT codegen_timing_486.c codegen_timing_686.c - codegen_timing_common.c codegen_timing_k6.c - codegen_timing_pentium.c codegen_timing_p6.c - codegen_timing_winchip.c codegen_timing_winchip2.c) + add_library(cgt OBJECT codegen_timing_486.c codegen_timing_686.c + codegen_timing_common.c codegen_timing_k6.c + codegen_timing_pentium.c codegen_timing_p6.c + codegen_timing_winchip.c codegen_timing_winchip2.c) endif() \ No newline at end of file diff --git a/src/device/CMakeLists.txt b/src/device/CMakeLists.txt index cbb312aa1..17a9ca1bb 100644 --- a/src/device/CMakeLists.txt +++ b/src/device/CMakeLists.txt @@ -1,24 +1,24 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(dev OBJECT bugger.c cassette.c cartridge.c hasp.c hwm.c hwm_lm75.c hwm_lm78.c hwm_gl518sm.c - hwm_vt82c686.c ibm_5161.c isamem.c isartc.c ../lpt.c pci_bridge.c - postcard.c serial.c clock_ics9xxx.c isapnp.c i2c.c i2c_gpio.c - smbus_piix4.c smbus_ali7101.c keyboard.c keyboard_xt.c keyboard_at.c - mouse.c mouse_bus.c mouse_serial.c mouse_ps2.c phoenix_486_jumper.c) + hwm_vt82c686.c ibm_5161.c isamem.c isartc.c ../lpt.c pci_bridge.c + postcard.c serial.c clock_ics9xxx.c isapnp.c i2c.c i2c_gpio.c + smbus_piix4.c smbus_ali7101.c keyboard.c keyboard_xt.c keyboard_at.c + mouse.c mouse_bus.c mouse_serial.c mouse_ps2.c phoenix_486_jumper.c) if(LASERXT) - target_compile_definitions(dev PRIVATE USE_LASERXT) + target_compile_definitions(dev PRIVATE USE_LASERXT) endif() \ No newline at end of file diff --git a/src/disk/CMakeLists.txt b/src/disk/CMakeLists.txt index 9a5c72e00..f1a101516 100644 --- a/src/disk/CMakeLists.txt +++ b/src/disk/CMakeLists.txt @@ -1,21 +1,21 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(hdd OBJECT hdd.c hdd_image.c hdd_table.c hdc.c hdc_st506_xt.c - hdc_st506_at.c hdc_xta.c hdc_esdi_at.c hdc_esdi_mca.c hdc_xtide.c - hdc_ide.c hdc_ide_opti611.c hdc_ide_cmd640.c hdc_ide_cmd646.c hdc_ide_sff8038i.c) + hdc_st506_at.c hdc_xta.c hdc_esdi_at.c hdc_esdi_mca.c hdc_xtide.c + hdc_ide.c hdc_ide_opti611.c hdc_ide_cmd640.c hdc_ide_cmd646.c hdc_ide_sff8038i.c) add_library(zip OBJECT zip.c) diff --git a/src/disk/minivhd/CMakeLists.txt b/src/disk/minivhd/CMakeLists.txt index 8afcd4265..a96b871b8 100644 --- a/src/disk/minivhd/CMakeLists.txt +++ b/src/disk/minivhd/CMakeLists.txt @@ -1,18 +1,18 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(minivhd STATIC cwalk.c libxml2_encoding.c minivhd_convert.c - minivhd_create.c minivhd_io.c minivhd_manage.c minivhd_struct_rw.c - minivhd_util.c) \ No newline at end of file + minivhd_create.c minivhd_io.c minivhd_manage.c minivhd_struct_rw.c + minivhd_util.c) \ No newline at end of file diff --git a/src/floppy/CMakeLists.txt b/src/floppy/CMakeLists.txt index 75e7b5947..4517bc634 100644 --- a/src/floppy/CMakeLists.txt +++ b/src/floppy/CMakeLists.txt @@ -1,17 +1,17 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(fdd OBJECT fdd.c fdc.c fdc_magitronic.c fdc_pii15xb.c fdi2raw.c fdd_common.c - fdd_86f.c fdd_fdi.c fdd_imd.c fdd_img.c fdd_json.c fdd_mfm.c fdd_td0.c) \ No newline at end of file + fdd_86f.c fdd_fdi.c fdd_imd.c fdd_img.c fdd_json.c fdd_mfm.c fdd_td0.c) \ No newline at end of file diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt index 06f700cca..c8fbb41ff 100644 --- a/src/game/CMakeLists.txt +++ b/src/game/CMakeLists.txt @@ -1,17 +1,17 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(game OBJECT gameport.c joystick_standard.c - joystick_ch_flightstick_pro.c joystick_sw_pad.c joystick_tm_fcs.c) \ No newline at end of file + joystick_ch_flightstick_pro.c joystick_sw_pad.c joystick_tm_fcs.c) \ No newline at end of file diff --git a/src/game/gameport.c b/src/game/gameport.c index a8a2e685b..32fa572e6 100644 --- a/src/game/gameport.c +++ b/src/game/gameport.c @@ -80,16 +80,18 @@ static const struct { const char *internal_name; const joystick_if_t *joystick; } joysticks[] = { - { "none", &joystick_none }, - { "standard_2button", &joystick_standard }, - { "standard_4button", &joystick_standard_4button }, - { "standard_6button", &joystick_standard_6button }, - { "standard_8button", &joystick_standard_8button }, - { "4axis_4button", &joystick_4axis_4button }, + { "none", &joystick_none }, + { "2axis_2button", &joystick_2axis_2button }, + { "2axis_4button", &joystick_2axis_4button }, + { "2axis_6button", &joystick_2axis_6button }, + { "2axis_8button", &joystick_2axis_8button }, + { "3axis_2button", &joystick_3axis_2button }, + { "3axis_4button", &joystick_3axis_4button }, + { "4axis_4button", &joystick_4axis_4button }, { "ch_flighstick_pro", &joystick_ch_flightstick_pro }, { "sidewinder_pad", &joystick_sw_pad }, { "thrustmaster_fcs", &joystick_tm_fcs }, - { "", NULL } + { "", NULL } }; static joystick_instance_t *joystick_instance = NULL; @@ -452,6 +454,15 @@ const device_t gameport_201_device = { NULL }; +const device_t gameport_208_device = { + "Game port (Port 208h-20fh)", + 0, 0x080208, + gameport_init, + gameport_close, + NULL, { NULL }, NULL, + NULL +}; + const device_t gameport_pnp_device = { "Game port (Plug and Play only)", 0, 0x080000, diff --git a/src/game/joystick_standard.c b/src/game/joystick_standard.c index e72d066cb..75e2ecdf3 100644 --- a/src/game/joystick_standard.c +++ b/src/game/joystick_standard.c @@ -145,6 +145,26 @@ static int joystick_standard_read_axis_4button(void *p, int axis) } } +static int joystick_standard_read_axis_3axis(void *p, int axis) +{ + if (!JOYSTICK_PRESENT(0)) + return AXIS_NOT_PRESENT; + + switch (axis) + { + case 0: + return joystick_state[0].axis[0]; + case 1: + return joystick_state[0].axis[1]; + case 2: + return joystick_state[0].axis[2]; + case 3: + return 0; + default: + return 0; + } +} + static int joystick_standard_read_axis_4axis(void *p, int axis) { if (!JOYSTICK_PRESENT(0)) @@ -216,9 +236,9 @@ static void joystick_standard_a0_over(void *p) { } -const joystick_if_t joystick_standard = +const joystick_if_t joystick_2axis_2button = { - "Standard 2-button joystick(s)", + "2-axis, 2-button joystick(s)", joystick_standard_init, joystick_standard_close, joystick_standard_read, @@ -232,9 +252,9 @@ const joystick_if_t joystick_standard = {"X axis", "Y axis"}, {"Button 1", "Button 2"} }; -const joystick_if_t joystick_standard_4button = +const joystick_if_t joystick_2axis_4button = { - "Standard 4-button joystick", + "2-axis, 4-button joystick", joystick_standard_init, joystick_standard_close, joystick_standard_read_4button, @@ -248,9 +268,41 @@ const joystick_if_t joystick_standard_4button = {"X axis", "Y axis"}, {"Button 1", "Button 2", "Button 3", "Button 4"} }; +const joystick_if_t joystick_3axis_2button = +{ + "3-axis, 2-button joystick", + joystick_standard_init, + joystick_standard_close, + joystick_standard_read, + joystick_standard_write, + joystick_standard_read_axis_3axis, + joystick_standard_a0_over, + 3, + 2, + 0, + 1, + {"X axis", "Y axis", "Z axis"}, + {"Button 1", "Button 2"} +}; +const joystick_if_t joystick_3axis_4button = +{ + "3-axis, 4-button joystick", + joystick_standard_init, + joystick_standard_close, + joystick_standard_read_4button, + joystick_standard_write, + joystick_standard_read_axis_3axis, + joystick_standard_a0_over, + 3, + 4, + 0, + 1, + {"X axis", "Y axis", "Z axis"}, + {"Button 1", "Button 2", "Button 3", "Button 4"} +}; const joystick_if_t joystick_4axis_4button = { - "4-axis 4-button joystick", + "4-axis, 4-button joystick", joystick_standard_init, joystick_standard_close, joystick_standard_read_4button, @@ -264,9 +316,9 @@ const joystick_if_t joystick_4axis_4button = {"X axis", "Y axis", "Z axis", "zX axis"}, {"Button 1", "Button 2", "Button 3", "Button 4"} }; -const joystick_if_t joystick_standard_6button = +const joystick_if_t joystick_2axis_6button = { - "Standard 6-button joystick", + "2-axis, 6-button joystick", joystick_standard_init, joystick_standard_close, joystick_standard_read_4button, @@ -280,9 +332,9 @@ const joystick_if_t joystick_standard_6button = {"X axis", "Y axis"}, {"Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6"} }; -const joystick_if_t joystick_standard_8button = +const joystick_if_t joystick_2axis_8button = { - "Standard 8-button joystick", + "2-axis, 8-button joystick", joystick_standard_init, joystick_standard_close, joystick_standard_read_4button, diff --git a/src/game/joystick_sw_pad.c b/src/game/joystick_sw_pad.c index b42f0d55a..172b6826d 100644 --- a/src/game/joystick_sw_pad.c +++ b/src/game/joystick_sw_pad.c @@ -15,7 +15,7 @@ * connected * - Packet preceeded by high data (currently 50us), and * followed by low data (currently 160us) - timings are - * probably wrong, but good enoughfor everything I've tried + * probably wrong, but good enough for everything I've tried * - Analog inputs are only used to time ID packet request. * If A0 timing out is followed after ~64us by another 0x201 * write then an ID packet is triggered @@ -259,7 +259,7 @@ static void sw_a0_over(void *p) { sw_data *sw = (sw_data *)p; - timer_set_delay_u64(&sw->trigger_timer, TIMER_USEC * 10000); + timer_set_delay_u64(&sw->trigger_timer, TIMER_USEC * 10000); } const joystick_if_t joystick_sw_pad = @@ -273,7 +273,7 @@ const joystick_if_t joystick_sw_pad = sw_a0_over, 2, 10, - 0, + 0, 4, {"X axis", "Y axis"}, {"A", "B", "C", "X", "Y", "Z", "L", "R", "Start", "M"} diff --git a/src/include/86box/gameport.h b/src/include/86box/gameport.h index 25027d59e..486939af9 100644 --- a/src/include/86box/gameport.h +++ b/src/include/86box/gameport.h @@ -108,6 +108,7 @@ extern "C" { #ifdef EMU_DEVICE_H extern const device_t gameport_device; extern const device_t gameport_201_device; +extern const device_t gameport_208_device; extern const device_t gameport_pnp_device; extern const device_t gameport_pnp_6io_device; extern const device_t gameport_sio_device; diff --git a/src/include/86box/joystick_standard.h b/src/include/86box/joystick_standard.h index eb35c384b..9bc86b204 100644 --- a/src/include/86box/joystick_standard.h +++ b/src/include/86box/joystick_standard.h @@ -35,8 +35,10 @@ * USA. */ -extern const joystick_if_t joystick_standard; -extern const joystick_if_t joystick_standard_4button; +extern const joystick_if_t joystick_2axis_2button; +extern const joystick_if_t joystick_2axis_4button; +extern const joystick_if_t joystick_3axis_2button; +extern const joystick_if_t joystick_3axis_4button; extern const joystick_if_t joystick_4axis_4button; -extern const joystick_if_t joystick_standard_6button; -extern const joystick_if_t joystick_standard_8button; +extern const joystick_if_t joystick_2axis_6button; +extern const joystick_if_t joystick_2axis_8button; diff --git a/src/mac/CMakeLists.txt b/src/mac/CMakeLists.txt index 1bfd8c11e..91759690f 100644 --- a/src/mac/CMakeLists.txt +++ b/src/mac/CMakeLists.txt @@ -1,3 +1,53 @@ -include_directories("./mac") -target_sources(86Box PUBLIC "./macOSXGlue.m") +# +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. +# +# This file is part of the 86Box distribution. +# +# CMake build script. +# +# Authors: dob205, +# Jerome Vernet +# David Hrdlička, +# +# Copyright 2021 dob205. +# Copyright 2021 Jerome Vernet. +# Copyright 2021 David Hrdlička. +# +# Pick the bundle icon depending on the release channel +if(RELEASE_BUILD) + set(APP_ICON_MACOSX icons/release/86Box.icns) +elseif(BETA_BUILD) + set(APP_ICON_MACOSX icons/beta/86Box.icns) +elseif(ALPHA_BUILD) + set(APP_ICON_MACOSX icons/dev/86Box.icns) +else() + set(APP_ICON_MACOSX icons/branch/86Box.icns) +endif() + +target_link_libraries(86Box "-framework AppKit") +target_sources(86Box PRIVATE macOSXGlue.m ${APP_ICON_MACOSX}) + +# Make sure the icon is copied to the bundle +set_source_files_properties(${APP_ICON_MACOSX} + TARGET_DIRECTORY 86Box + PROPERTIES MACOSX_PACKAGE_LOCATION "Resources") + +# Prepare long version string +if(EMU_BUILD) + set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION} [${EMU_BUILD}]") +else() + set(LONG_VER_STRING "${CMAKE_PROJECT_VERSION}") +endif() + +# Generate Info.plist +configure_file(Info.plist.in Info.plist @ONLY) +set_target_properties(86Box + PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) + +#set(XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES") +#set(XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "-") +#set(XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS ${CMAKE_CURRENT_SOURCE_DIR}/mac/codesign/dev/app.entitlements) \ No newline at end of file diff --git a/src/mac/Info.plist.in b/src/mac/Info.plist.in index e06b17ecf..2f2080460 100644 --- a/src/mac/Info.plist.in +++ b/src/mac/Info.plist.in @@ -7,29 +7,29 @@ CFBundleExecutable ${MACOSX_BUNDLE_EXECUTABLE_NAME} CFBundleGetInfoString - ${MACOSX_BUNDLE_INFO_STRING} + An emulator of old computers CFBundleIconFile - ${MACOSX_BUNDLE_ICON_FILE} + 86Box.icns CFBundleIdentifier - ${MACOSX_BUNDLE_GUI_IDENTIFIER} + net.86Box.86Box CFBundleInfoDictionaryVersion 6.0 CFBundleLongVersionString - ${MACOSX_BUNDLE_LONG_VERSION_STRING} + @LONG_VER_STRING@ CFBundleName - ${MACOSX_BUNDLE_BUNDLE_NAME} + 86Box CFBundlePackageType APPL CFBundleShortVersionString - ${MACOSX_BUNDLE_SHORT_VERSION_STRING} + @CMAKE_PROJECT_VERSION@ CFBundleSignature ???? CFBundleVersion - ${MACOSX_BUNDLE_BUNDLE_VERSION} + @CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@.@CMAKE_PROJECT_VERSION_PATCH@.@EMU_BUILD_NUM@ CSResourcesFileMapped NSHumanReadableCopyright - ${MACOSX_BUNDLE_COPYRIGHT} + © 2007-@EMU_COPYRIGHT_YEAR@ 86Box contributors NSPrincipalClass NSApplication NSHighResolutionCapable diff --git a/src/machine/CMakeLists.txt b/src/machine/CMakeLists.txt index d2500561a..79da0e550 100644 --- a/src/machine/CMakeLists.txt +++ b/src/machine/CMakeLists.txt @@ -1,42 +1,42 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(mch OBJECT machine.c machine_table.c m_xt.c m_xt_compaq.c - m_xt_philips.c - m_xt_t1000.c m_xt_t1000_vid.c m_xt_xi8088.c m_xt_zenith.c m_pcjr.c - m_amstrad.c m_europc.c m_xt_olivetti.c m_tandy.c m_v86p.c - m_at.c m_at_commodore.c - m_at_t3100e.c m_at_t3100e_vid.c m_ps1.c m_ps1_hdc.c m_ps2_isa.c - m_ps2_mca.c m_at_compaq.c m_at_286_386sx.c m_at_386dx_486.c - m_at_socket4.c m_at_socket5.c m_at_socket7_3v.c m_at_socket7.c - m_at_sockets7.c m_at_socket8.c m_at_slot1.c m_at_slot2.c m_at_socket370.c - m_at_misc.c) + m_xt_philips.c + m_xt_t1000.c m_xt_t1000_vid.c m_xt_xi8088.c m_xt_zenith.c m_pcjr.c + m_amstrad.c m_europc.c m_xt_olivetti.c m_tandy.c m_v86p.c + m_at.c m_at_commodore.c + m_at_t3100e.c m_at_t3100e_vid.c m_ps1.c m_ps1_hdc.c m_ps2_isa.c + m_ps2_mca.c m_at_compaq.c m_at_286_386sx.c m_at_386dx_486.c + m_at_socket4.c m_at_socket5.c m_at_socket7_3v.c m_at_socket7.c + m_at_sockets7.c m_at_socket8.c m_at_slot1.c m_at_slot2.c m_at_socket370.c + m_at_misc.c) if(LASERXT) - target_sources(mch PRIVATE m_xt_laserxt.c) - target_compile_definitions(mch PRIVATE USE_LASERXT) + target_sources(mch PRIVATE m_xt_laserxt.c) + target_compile_definitions(mch PRIVATE USE_LASERXT) endif() if(NO_SIO) - target_compile_definitions(mch PRIVATE NO_SIO) + target_compile_definitions(mch PRIVATE NO_SIO) endif() if(OPEN_AT) - target_compile_definitions(mch PRIVATE USE_OPEN_AT) + target_compile_definitions(mch PRIVATE USE_OPEN_AT) endif() if(M154X) - target_compile_definitions(mch PRIVATE USE_M154X) + target_compile_definitions(mch PRIVATE USE_M154X) endif() \ No newline at end of file diff --git a/src/mem/CMakeLists.txt b/src/mem/CMakeLists.txt index 6bf044762..4e9e7917d 100644 --- a/src/mem/CMakeLists.txt +++ b/src/mem/CMakeLists.txt @@ -1,17 +1,17 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(mem OBJECT catalyst_flash.c i2c_eeprom.c intel_flash.c mem.c rom.c - smram.c spd.c sst_flash.c) \ No newline at end of file + smram.c spd.c sst_flash.c) \ No newline at end of file diff --git a/src/network/CMakeLists.txt b/src/network/CMakeLists.txt index e8db1a01e..434daa407 100644 --- a/src/network/CMakeLists.txt +++ b/src/network/CMakeLists.txt @@ -1,20 +1,20 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(net OBJECT network.c net_pcap.c net_slirp.c net_dp8390.c net_3c503.c - net_ne2000.c net_pcnet.c net_wd8003.c net_plip.c) + net_ne2000.c net_pcnet.c net_wd8003.c net_plip.c) add_subdirectory(slirp) target_link_libraries(86Box slirp) \ No newline at end of file diff --git a/src/network/slirp/CMakeLists.txt b/src/network/slirp/CMakeLists.txt index afc64a382..7d8c9a044 100644 --- a/src/network/slirp/CMakeLists.txt +++ b/src/network/slirp/CMakeLists.txt @@ -1,16 +1,16 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(slirp STATIC arp_table.c bootp.c cksum.c dnssearch.c if.c ip_icmp.c diff --git a/src/printer/CMakeLists.txt b/src/printer/CMakeLists.txt index ace9ac0c8..0f6c0e38d 100644 --- a/src/printer/CMakeLists.txt +++ b/src/printer/CMakeLists.txt @@ -1,16 +1,16 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(print OBJECT png.c prt_cpmap.c prt_escp.c prt_text.c prt_ps.c) \ No newline at end of file diff --git a/src/scsi/CMakeLists.txt b/src/scsi/CMakeLists.txt index 444c87b70..6b0ebd10e 100644 --- a/src/scsi/CMakeLists.txt +++ b/src/scsi/CMakeLists.txt @@ -1,18 +1,18 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(scsi OBJECT scsi.c scsi_device.c scsi_cdrom.c scsi_disk.c - scsi_x54x.c scsi_aha154x.c scsi_buslogic.c scsi_ncr5380.c - scsi_ncr53c8xx.c scsi_pcscsi.c scsi_spock.c) \ No newline at end of file + scsi_x54x.c scsi_aha154x.c scsi_buslogic.c scsi_ncr5380.c + scsi_ncr53c8xx.c scsi_pcscsi.c scsi_spock.c) \ No newline at end of file diff --git a/src/sio/CMakeLists.txt b/src/sio/CMakeLists.txt index 856f6aaa6..482c2c2d6 100644 --- a/src/sio/CMakeLists.txt +++ b/src/sio/CMakeLists.txt @@ -1,26 +1,26 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(sio OBJECT sio_acc3221.c sio_f82c710.c sio_82091aa.c sio_fdc37c6xx.c - sio_fdc37c67x.c sio_fdc37c669.c sio_fdc37c93x.c sio_fdc37m60x.c - sio_it8661f.c - sio_pc87306.c sio_pc87307.c sio_pc87309.c sio_pc87310.c sio_pc87311.c sio_pc87332.c - sio_prime3b.c sio_prime3c.c - sio_w83787f.c sio_w83877f.c sio_w83977f.c sio_um8669f.c - sio_vt82c686.c) + sio_fdc37c67x.c sio_fdc37c669.c sio_fdc37c93x.c sio_fdc37m60x.c + sio_it8661f.c + sio_pc87306.c sio_pc87307.c sio_pc87309.c sio_pc87310.c sio_pc87311.c sio_pc87332.c + sio_prime3b.c sio_prime3c.c + sio_w83787f.c sio_w83877f.c sio_w83977f.c sio_um8669f.c + sio_vt82c686.c) if(SIO_DETECT) - target_sources(sio PRIVATE sio_detect.c) + target_sources(sio PRIVATE sio_detect.c) endif() \ No newline at end of file diff --git a/src/sound/CMakeLists.txt b/src/sound/CMakeLists.txt index 553f3d4f2..e3420ac01 100644 --- a/src/sound/CMakeLists.txt +++ b/src/sound/CMakeLists.txt @@ -1,44 +1,44 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(snd OBJECT sound.c openal.c snd_opl.c snd_opl_nuked.c snd_resid.cc - midi.c midi_rtmidi.cpp snd_speaker.c snd_pssj.c snd_lpt_dac.c snd_ac97_codec.c snd_ac97_via.c - snd_lpt_dss.c snd_adlib.c snd_adlibgold.c snd_ad1848.c snd_audiopci.c - snd_azt2316a.c snd_cms.c snd_cs423x.c snd_gus.c snd_sb.c snd_sb_dsp.c - snd_emu8k.c snd_mpu401.c snd_sn76489.c snd_ssi2001.c snd_wss.c snd_ym7128.c) + midi.c midi_rtmidi.cpp snd_speaker.c snd_pssj.c snd_lpt_dac.c snd_ac97_codec.c snd_ac97_via.c + snd_lpt_dss.c snd_adlib.c snd_adlibgold.c snd_ad1848.c snd_audiopci.c + snd_azt2316a.c snd_cms.c snd_cs423x.c snd_gus.c snd_sb.c snd_sb_dsp.c + snd_emu8k.c snd_mpu401.c snd_sn76489.c snd_ssi2001.c snd_wss.c snd_ym7128.c) if(FLUIDSYNTH) - target_compile_definitions(snd PRIVATE USE_FLUIDSYNTH) - target_sources(snd PRIVATE midi_fluidsynth.c) + target_compile_definitions(snd PRIVATE USE_FLUIDSYNTH) + target_sources(snd PRIVATE midi_fluidsynth.c) endif() if(MUNT) - target_compile_definitions(snd PRIVATE USE_MUNT) - target_sources(snd PRIVATE midi_mt32.c) + target_compile_definitions(snd PRIVATE USE_MUNT) + target_sources(snd PRIVATE midi_mt32.c) - add_subdirectory(munt) - target_link_libraries(86Box mt32emu) + add_subdirectory(munt) + target_link_libraries(86Box mt32emu) endif() if(PAS16) - target_compile_definitions(snd PRIVATE USE_PAS16) - target_sources(snd PRIVATE snd_pas16.c) + target_compile_definitions(snd PRIVATE USE_PAS16) + target_sources(snd PRIVATE snd_pas16.c) endif() if(GUSMAX) - target_compile_definitions(snd PRIVATE USE_GUSMAX) + target_compile_definitions(snd PRIVATE USE_GUSMAX) endif() add_subdirectory(resid-fp) diff --git a/src/sound/munt/CMakeLists.txt b/src/sound/munt/CMakeLists.txt index e694bc7ae..79ac7b2d9 100644 --- a/src/sound/munt/CMakeLists.txt +++ b/src/sound/munt/CMakeLists.txt @@ -1,26 +1,26 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(mt32emu STATIC Analog.cpp BReverbModel.cpp File.cpp FileStream.cpp - LA32Ramp.cpp LA32FloatWaveGenerator.cpp LA32WaveGenerator.cpp - MidiStreamParser.cpp Part.cpp Partial.cpp PartialManager.cpp - Poly.cpp ROMInfo.cpp SampleRateConverter.cpp - srchelper/srctools/src/FIRResampler.cpp - srchelper/srctools/src/IIR2xResampler.cpp - srchelper/srctools/src/LinearResampler.cpp - srchelper/srctools/src/ResamplerModel.cpp - srchelper/srctools/src/SincResampler.cpp - srchelper/InternalResampler.cpp Synth.cpp Tables.cpp TVA.cpp TVF.cpp - TVP.cpp sha1/sha1.cpp c_interface/c_interface.cpp) \ No newline at end of file + LA32Ramp.cpp LA32FloatWaveGenerator.cpp LA32WaveGenerator.cpp + MidiStreamParser.cpp Part.cpp Partial.cpp PartialManager.cpp + Poly.cpp ROMInfo.cpp SampleRateConverter.cpp + srchelper/srctools/src/FIRResampler.cpp + srchelper/srctools/src/IIR2xResampler.cpp + srchelper/srctools/src/LinearResampler.cpp + srchelper/srctools/src/ResamplerModel.cpp + srchelper/srctools/src/SincResampler.cpp + srchelper/InternalResampler.cpp Synth.cpp Tables.cpp TVA.cpp TVF.cpp + TVP.cpp sha1/sha1.cpp c_interface/c_interface.cpp) \ No newline at end of file diff --git a/src/sound/resid-fp/CMakeLists.txt b/src/sound/resid-fp/CMakeLists.txt index 8b5a16f40..fb9b5396e 100644 --- a/src/sound/resid-fp/CMakeLists.txt +++ b/src/sound/resid-fp/CMakeLists.txt @@ -1,19 +1,19 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(resid-fp STATIC convolve-sse.cc convolve.cc envelope.cc extfilt.cc - filter.cc pot.cc sid.cc voice.cc wave.cc wave6581_PST.cc - wave6581_PS_.cc wave6581_P_T.cc wave6581__ST.cc wave8580_PST.cc - wave8580_PS_.cc wave8580_P_T.cc wave8580__ST.cc) \ No newline at end of file + filter.cc pot.cc sid.cc voice.cc wave.cc wave6581_PST.cc + wave6581_PS_.cc wave6581_P_T.cc wave6581__ST.cc wave8580_PST.cc + wave8580_PS_.cc wave8580_P_T.cc wave8580__ST.cc) \ No newline at end of file diff --git a/src/unix/CMakeLists.txt b/src/unix/CMakeLists.txt index 85961f920..ca0a6a6e4 100644 --- a/src/unix/CMakeLists.txt +++ b/src/unix/CMakeLists.txt @@ -1,3 +1,20 @@ +# +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. +# +# This file is part of the 86Box distribution. +# +# CMake build script. +# +# Authors: Cacodemon345 +# David Hrdlička, +# +# Copyright 2021 Cacodemon345. +# Copyright 2021 David Hrdlička. +# + add_library(plat OBJECT unix.c) if (NOT CPPTHREADS) diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt index b42bd21cb..c58b2f054 100644 --- a/src/video/CMakeLists.txt +++ b/src/video/CMakeLists.txt @@ -1,55 +1,55 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # add_library(vid OBJECT agpgart.c video.c vid_table.c vid_cga.c vid_cga_comp.c - vid_compaq_cga.c vid_mda.c vid_hercules.c vid_herculesplus.c - vid_incolor.c vid_colorplus.c vid_genius.c vid_pgc.c vid_im1024.c - vid_sigma.c vid_wy700.c vid_ega.c vid_ega_render.c vid_svga.c - vid_svga_render.c vid_ddc.c vid_vga.c vid_ati_eeprom.c vid_ati18800.c - vid_ati28800.c vid_ati_mach64.c vid_ati68860_ramdac.c vid_bt48x_ramdac.c - vid_av9194.c vid_icd2061.c vid_ics2494.c vid_ics2595.c vid_cl54xx.c - vid_et4000.c vid_sc1148x_ramdac.c vid_sc1502x_ramdac.c vid_et4000w32.c - vid_stg_ramdac.c vid_ht216.c vid_oak_oti.c vid_paradise.c vid_rtg310x.c - vid_f82c425.c vid_ti_cf62011.c vid_tvga.c vid_tgui9440.c vid_tkd8001_ramdac.c - vid_att20c49x_ramdac.c vid_s3.c vid_s3_virge.c vid_ibm_rgb528_ramdac.c - vid_sdac_ramdac.c vid_ogc.c vid_nga.c vid_tvp3026_ramdac.c vid_att2xc498_ramdac.c) + vid_compaq_cga.c vid_mda.c vid_hercules.c vid_herculesplus.c + vid_incolor.c vid_colorplus.c vid_genius.c vid_pgc.c vid_im1024.c + vid_sigma.c vid_wy700.c vid_ega.c vid_ega_render.c vid_svga.c + vid_svga_render.c vid_ddc.c vid_vga.c vid_ati_eeprom.c vid_ati18800.c + vid_ati28800.c vid_ati_mach64.c vid_ati68860_ramdac.c vid_bt48x_ramdac.c + vid_av9194.c vid_icd2061.c vid_ics2494.c vid_ics2595.c vid_cl54xx.c + vid_et4000.c vid_sc1148x_ramdac.c vid_sc1502x_ramdac.c vid_et4000w32.c + vid_stg_ramdac.c vid_ht216.c vid_oak_oti.c vid_paradise.c vid_rtg310x.c + vid_f82c425.c vid_ti_cf62011.c vid_tvga.c vid_tgui9440.c vid_tkd8001_ramdac.c + vid_att20c49x_ramdac.c vid_s3.c vid_s3_virge.c vid_ibm_rgb528_ramdac.c + vid_sdac_ramdac.c vid_ogc.c vid_nga.c vid_tvp3026_ramdac.c vid_att2xc498_ramdac.c) if(MGA) - target_compile_definitions(vid PRIVATE USE_MGA) - target_sources(vid PRIVATE vid_mga.c) + target_compile_definitions(vid PRIVATE USE_MGA) + target_sources(vid PRIVATE vid_mga.c) endif() if(VGAWONDER) - target_compile_definitions(vid PRIVATE USE_VGAWONDER) + target_compile_definitions(vid PRIVATE USE_VGAWONDER) endif() if(XL24) - target_compile_definitions(vid PRIVATE USE_XL24) + target_compile_definitions(vid PRIVATE USE_XL24) endif() add_library(voodoo OBJECT vid_voodoo.c vid_voodoo_banshee.c - vid_voodoo_banshee_blitter.c vid_voodoo_blitter.c vid_voodoo_display.c - vid_voodoo_fb.c vid_voodoo_fifo.c vid_voodoo_reg.c vid_voodoo_render.c - vid_voodoo_setup.c vid_voodoo_texture.c) + vid_voodoo_banshee_blitter.c vid_voodoo_blitter.c vid_voodoo_display.c + vid_voodoo_fb.c vid_voodoo_fifo.c vid_voodoo_reg.c vid_voodoo_render.c + vid_voodoo_setup.c vid_voodoo_texture.c) if(NOT MSVC AND (ARCH STREQUAL "i386" OR ARCH STREQUAL "x86_64")) - target_compile_options(voodoo PRIVATE "-msse2") + target_compile_options(voodoo PRIVATE "-msse2") endif() # Suppress GCC false positive warnings in vid_voodoo_codegen_x86[-64].h # that cause ~3000 lines to be output into the logs each time if(CMAKE_C_COMPILER_ID STREQUAL "GNU") - target_compile_options(voodoo PRIVATE "-Wstringop-overflow=0") + target_compile_options(voodoo PRIVATE "-Wstringop-overflow=0") endif() \ No newline at end of file diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt index 9b0016e6f..ff59612ce 100644 --- a/src/win/CMakeLists.txt +++ b/src/win/CMakeLists.txt @@ -1,53 +1,53 @@ # -# 86Box A hypervisor and IBM PC system emulator that specializes in -# running old operating systems and software designed for IBM -# PC systems and compatibles from 1981 through fairly recent -# system designs based on the PCI bus. +# 86Box A hypervisor and IBM PC system emulator that specializes in +# running old operating systems and software designed for IBM +# PC systems and compatibles from 1981 through fairly recent +# system designs based on the PCI bus. # -# This file is part of the 86Box distribution. +# This file is part of the 86Box distribution. # -# CMake build script. +# CMake build script. # -# Authors: David Hrdlička, +# Authors: David Hrdlička, # -# Copyright 2020,2021 David Hrdlička. +# Copyright 2020,2021 David Hrdlička. # enable_language(RC) add_library(plat OBJECT win.c win_dynld.c win_cdrom.c win_keyboard.c - win_crashdump.c win_mouse.c) + win_crashdump.c win_mouse.c) add_library(ui OBJECT win_ui.c win_icon.c win_stbar.c win_sdl.c win_dialog.c win_about.c - win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c - win_jsconf.c win_media_menu.c win_preferences.c win_discord.c glad.c win_opengl.c - win_opengl_glslp.c 86Box.rc) + win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c + win_jsconf.c win_media_menu.c win_preferences.c win_discord.c glad.c win_opengl.c + win_opengl_glslp.c 86Box.rc) if(NOT CPPTHREADS) - target_sources(plat PRIVATE win_thread.c) -endif() - -if(MSVC) - # MSVC complains when we include the manifest from 86Box.rc... - # On the bright side, CMake supports passing the manifest as a source - # file when using MSVC, so we might just as well do that! - target_compile_definitions(ui PRIVATE NO_INCLUDE_MANIFEST) - target_sources(86Box PRIVATE 86Box.manifest) - - # Append null to resource strings (fixes file dialogs) - set_property(SOURCE 86Box.rc PROPERTY COMPILE_FLAGS -n) + target_sources(plat PRIVATE win_thread.c) endif() if(NOT MINGW) - target_sources(plat PRIVATE win_opendir.c) + # MSVC linker adds its own manifest to the executable, which fails if + # we include ours in 86Box.rc. We therefore need to pass the manifest + # directly as as a source file, so the linker can use that instead. + set_property(SOURCE 86Box.rc PROPERTY COMPILE_DEFINITIONS NO_INCLUDE_MANIFEST) + target_sources(86Box PRIVATE 86Box.manifest) + + # Append null to resource strings (fixes file dialogs) + set_property(SOURCE 86Box.rc PROPERTY COMPILE_FLAGS -n) + + # `opendir` is only included in MinGW, so include an implementation + # for other builds. + target_sources(plat PRIVATE win_opendir.c) endif() if(DINPUT) - target_sources(plat PRIVATE win_joystick.cpp) - target_link_libraries(86Box dinput8) + target_sources(plat PRIVATE win_joystick.cpp) + target_link_libraries(86Box dinput8) else() - target_sources(plat PRIVATE win_joystick_rawinput.c) + target_sources(plat PRIVATE win_joystick_rawinput.c) endif() target_link_libraries(86Box advapi32 comctl32 comdlg32 gdi32 shell32 iphlpapi - dxguid imm32 hid setupapi uxtheme version winmm psapi) + dxguid imm32 hid setupapi uxtheme version winmm psapi) diff --git a/vcpkg.json b/vcpkg.json index f1837d129..9cf35af71 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -1,6 +1,6 @@ { "name": "86box", - "version-string": "3.0", + "version-string": "3.1", "homepage": "https://86box.net/", "documentation": "http://86box.readthedocs.io/", "license": "GPL-2.0-only",