2022-11-13 16:37:58 -05:00
|
|
|
#
|
|
|
|
|
# 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.
|
|
|
|
|
#
|
|
|
|
|
|
2021-11-25 10:20:56 +01:00
|
|
|
# Find includes in corresponding build directories
|
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
|
set(CMAKE_AUTORCC ON)
|
2022-02-07 20:25:31 +01:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
|
|
|
|
|
|
if (USE_QT6)
|
|
|
|
|
set(QT_MAJOR 6)
|
|
|
|
|
else()
|
|
|
|
|
set(QT_MAJOR 5)
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
set(QT_STATIC ${STATIC_BUILD})
|
|
|
|
|
|
|
|
|
|
if(QT_STATIC AND MINGW)
|
2022-02-07 20:37:10 +01:00
|
|
|
set(CMAKE_PREFIX_PATH "$ENV{MSYSTEM_PREFIX}/qt${QT_MAJOR}-static")
|
2022-02-07 20:25:31 +01:00
|
|
|
endif()
|
2021-11-25 10:20:56 +01:00
|
|
|
|
2022-05-29 00:16:51 +02:00
|
|
|
if(VCPKG_TOOLCHAIN AND VCPKG_USE_HOST_TOOLS)
|
2022-05-25 22:22:36 +02:00
|
|
|
set(QT_HOST_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_HOST_TRIPLET}/tools/Qt${QT_MAJOR}")
|
|
|
|
|
set(QT_HOST_PATH_CMAKE_DIR ${VCPKG_INSTALLED_DIR}/${VCPKG_HOST_TRIPLET})
|
2022-05-29 12:16:40 +02:00
|
|
|
set(Qt${QT_MAJOR}LinguistTools_ROOT ${QT_HOST_PATH_CMAKE_DIR})
|
2022-05-25 22:22:36 +02:00
|
|
|
endif()
|
|
|
|
|
|
2022-05-29 00:16:51 +02:00
|
|
|
# CMake is a bitch and calls the Harfbuzz config twice on MinGW + Qt6
|
|
|
|
|
# if config mode is preferred :)
|
|
|
|
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG OFF)
|
|
|
|
|
|
2021-11-28 20:54:32 +01:00
|
|
|
find_package(Threads REQUIRED)
|
2022-02-27 15:30:35 +06:00
|
|
|
find_package(Qt${QT_MAJOR} COMPONENTS Core Widgets Network OpenGL REQUIRED)
|
2022-05-29 12:16:40 +02:00
|
|
|
find_package(Qt${QT_MAJOR}LinguistTools REQUIRED NO_CMAKE_FIND_ROOT_PATH)
|
2022-05-25 22:22:36 +02:00
|
|
|
|
2022-03-19 00:44:42 +00:00
|
|
|
# TODO: Is this the correct way to do this, and is it required on any
|
|
|
|
|
# other platforms or with Qt 5?
|
|
|
|
|
if(APPLE AND USE_QT6)
|
|
|
|
|
find_package(Qt6Gui/Qt6QCocoaIntegrationPlugin REQUIRED)
|
|
|
|
|
find_package(Qt6Widgets/Qt6QMacStylePlugin REQUIRED)
|
|
|
|
|
find_package(Qt6Gui/Qt6QICOPlugin REQUIRED)
|
|
|
|
|
find_package(Qt6Gui/Qt6QICNSPlugin REQUIRED)
|
|
|
|
|
endif()
|
2021-11-28 20:54:32 +01:00
|
|
|
|
2021-12-13 22:45:37 +01:00
|
|
|
add_library(plat STATIC
|
|
|
|
|
qt.c
|
|
|
|
|
qt_main.cpp
|
|
|
|
|
qt_platform.cpp
|
|
|
|
|
)
|
2021-12-17 21:33:11 +02:00
|
|
|
|
2021-11-25 10:20:56 +01:00
|
|
|
add_library(ui STATIC
|
|
|
|
|
qt_ui.cpp
|
|
|
|
|
qt_cdrom.c
|
|
|
|
|
|
|
|
|
|
qt_mainwindow.cpp
|
|
|
|
|
qt_mainwindow.hpp
|
|
|
|
|
qt_mainwindow.ui
|
2021-11-28 20:49:05 +01:00
|
|
|
qt_machinestatus.cpp
|
|
|
|
|
qt_machinestatus.hpp
|
2021-12-03 11:38:00 +01:00
|
|
|
qt_mediamenu.cpp
|
|
|
|
|
qt_mediamenu.hpp
|
2021-12-04 21:33:04 +01:00
|
|
|
qt_rendererstack.cpp
|
|
|
|
|
qt_rendererstack.hpp
|
|
|
|
|
qt_rendererstack.ui
|
2022-01-30 22:13:41 +02:00
|
|
|
qt_renderercommon.cpp
|
|
|
|
|
qt_renderercommon.hpp
|
2021-12-04 21:33:04 +01:00
|
|
|
qt_softwarerenderer.cpp
|
|
|
|
|
qt_softwarerenderer.hpp
|
|
|
|
|
qt_hardwarerenderer.cpp
|
|
|
|
|
qt_hardwarerenderer.hpp
|
2022-02-28 08:43:14 +02:00
|
|
|
qt_openglrenderer.cpp
|
|
|
|
|
qt_openglrenderer.hpp
|
|
|
|
|
qt_opengloptions.cpp
|
|
|
|
|
qt_opengloptions.hpp
|
|
|
|
|
qt_opengloptionsdialog.cpp
|
|
|
|
|
qt_opengloptionsdialog.hpp
|
|
|
|
|
qt_opengloptionsdialog.ui
|
2021-11-30 16:26:49 +06:00
|
|
|
|
2021-11-25 10:20:56 +01:00
|
|
|
qt_settings.cpp
|
|
|
|
|
qt_settings.hpp
|
|
|
|
|
qt_settings.ui
|
|
|
|
|
|
|
|
|
|
qt_settingsmachine.cpp
|
|
|
|
|
qt_settingsmachine.hpp
|
|
|
|
|
qt_settingsmachine.ui
|
|
|
|
|
qt_settingsdisplay.cpp
|
|
|
|
|
qt_settingsdisplay.hpp
|
|
|
|
|
qt_settingsdisplay.ui
|
|
|
|
|
qt_settingsinput.cpp
|
|
|
|
|
qt_settingsinput.hpp
|
|
|
|
|
qt_settingsinput.ui
|
|
|
|
|
qt_settingssound.cpp
|
|
|
|
|
qt_settingssound.hpp
|
|
|
|
|
qt_settingssound.ui
|
|
|
|
|
qt_settingsnetwork.cpp
|
|
|
|
|
qt_settingsnetwork.hpp
|
|
|
|
|
qt_settingsnetwork.ui
|
|
|
|
|
qt_settingsports.cpp
|
|
|
|
|
qt_settingsports.hpp
|
|
|
|
|
qt_settingsports.ui
|
|
|
|
|
qt_settingsstoragecontrollers.cpp
|
|
|
|
|
qt_settingsstoragecontrollers.hpp
|
|
|
|
|
qt_settingsstoragecontrollers.ui
|
|
|
|
|
qt_settingsharddisks.cpp
|
|
|
|
|
qt_settingsharddisks.hpp
|
|
|
|
|
qt_settingsharddisks.ui
|
|
|
|
|
qt_settingsfloppycdrom.cpp
|
|
|
|
|
qt_settingsfloppycdrom.hpp
|
|
|
|
|
qt_settingsfloppycdrom.ui
|
|
|
|
|
qt_settingsotherremovable.cpp
|
|
|
|
|
qt_settingsotherremovable.hpp
|
|
|
|
|
qt_settingsotherremovable.ui
|
|
|
|
|
qt_settingsotherperipherals.cpp
|
|
|
|
|
qt_settingsotherperipherals.hpp
|
|
|
|
|
qt_settingsotherperipherals.ui
|
2022-01-09 16:41:03 +06:00
|
|
|
qt_settings_bus_tracking.cpp
|
|
|
|
|
qt_settings_bus_tracking.hpp
|
2021-11-25 10:20:56 +01:00
|
|
|
|
|
|
|
|
qt_deviceconfig.cpp
|
|
|
|
|
qt_deviceconfig.hpp
|
|
|
|
|
qt_deviceconfig.ui
|
2021-12-13 22:45:37 +01:00
|
|
|
qt_joystickconfiguration.cpp
|
|
|
|
|
qt_joystickconfiguration.hpp
|
|
|
|
|
qt_joystickconfiguration.ui
|
2021-11-25 10:20:56 +01:00
|
|
|
|
|
|
|
|
qt_filefield.cpp
|
|
|
|
|
qt_filefield.hpp
|
|
|
|
|
qt_filefield.ui
|
2021-12-03 11:38:00 +01:00
|
|
|
qt_newfloppydialog.cpp
|
|
|
|
|
qt_newfloppydialog.hpp
|
|
|
|
|
qt_newfloppydialog.ui
|
2021-11-25 10:20:56 +01:00
|
|
|
qt_harddiskdialog.cpp
|
|
|
|
|
qt_harddiskdialog.hpp
|
|
|
|
|
qt_harddiskdialog.ui
|
|
|
|
|
|
|
|
|
|
qt_harddrive_common.cpp
|
|
|
|
|
qt_harddrive_common.hpp
|
|
|
|
|
qt_models_common.cpp
|
|
|
|
|
qt_models_common.hpp
|
|
|
|
|
|
2021-12-12 01:16:27 +06:00
|
|
|
qt_specifydimensions.h
|
|
|
|
|
qt_specifydimensions.cpp
|
|
|
|
|
qt_specifydimensions.ui
|
2021-12-12 16:22:35 +06:00
|
|
|
qt_soundgain.hpp
|
|
|
|
|
qt_soundgain.cpp
|
|
|
|
|
qt_soundgain.ui
|
2021-12-12 01:16:27 +06:00
|
|
|
|
2021-12-12 18:19:44 +02:00
|
|
|
qt_styleoverride.cpp
|
|
|
|
|
qt_styleoverride.hpp
|
2021-12-28 16:47:10 +06:00
|
|
|
qt_progsettings.hpp
|
|
|
|
|
qt_progsettings.cpp
|
|
|
|
|
qt_progsettings.ui
|
2022-01-23 22:48:36 +02:00
|
|
|
qt_util.hpp
|
|
|
|
|
qt_util.cpp
|
2021-12-12 18:19:44 +02:00
|
|
|
|
2022-02-27 15:30:35 +06:00
|
|
|
qt_unixmanagerfilter.cpp
|
|
|
|
|
qt_unixmanagerfilter.hpp
|
|
|
|
|
|
2022-04-21 16:32:46 +06:00
|
|
|
qt_vulkanwindowrenderer.hpp
|
|
|
|
|
qt_vulkanwindowrenderer.cpp
|
|
|
|
|
|
2022-04-21 16:32:48 +06:00
|
|
|
qt_vulkanrenderer.hpp
|
|
|
|
|
qt_vulkanrenderer.cpp
|
|
|
|
|
|
2022-05-23 17:29:45 +06:00
|
|
|
qt_mcadevicelist.hpp
|
|
|
|
|
qt_mcadevicelist.cpp
|
|
|
|
|
qt_mcadevicelist.ui
|
|
|
|
|
|
2022-08-30 17:18:51 -04:00
|
|
|
qt_mediahistorymanager.cpp
|
|
|
|
|
qt_mediahistorymanager.hpp
|
|
|
|
|
|
2021-11-25 10:20:56 +01:00
|
|
|
../qt_resources.qrc
|
|
|
|
|
)
|
2021-12-17 21:33:11 +02:00
|
|
|
|
2022-03-11 20:41:00 +01:00
|
|
|
if(RTMIDI)
|
|
|
|
|
target_compile_definitions(ui PRIVATE USE_RTMIDI)
|
|
|
|
|
endif()
|
|
|
|
|
|
2022-02-04 17:07:44 +05:00
|
|
|
if(WIN32)
|
|
|
|
|
enable_language(RC)
|
|
|
|
|
target_sources(86Box PUBLIC ../win/86Box-qt.rc)
|
2022-07-24 03:54:47 +02:00
|
|
|
target_sources(plat PRIVATE win_dynld.c)
|
2022-08-31 17:35:32 -04:00
|
|
|
if(DINPUT)
|
|
|
|
|
target_sources(plat PRIVATE win_joystick.cpp)
|
|
|
|
|
target_link_libraries(86Box dinput8)
|
|
|
|
|
else()
|
|
|
|
|
target_sources(plat PRIVATE win_joystick_rawinput.c)
|
|
|
|
|
endif()
|
2022-06-22 16:36:38 +06:00
|
|
|
target_sources(ui PRIVATE qt_d3d9renderer.hpp qt_d3d9renderer.cpp)
|
|
|
|
|
target_link_libraries(86Box hid d3d9)
|
2022-02-04 17:07:44 +05:00
|
|
|
|
|
|
|
|
# CMake 3.22 messed this up for clang/clang++
|
|
|
|
|
# See https://gitlab.kitware.com/cmake/cmake/-/issues/22611
|
|
|
|
|
if(MSVC OR (NOT MINGW AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.22))
|
|
|
|
|
# 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.
|
2022-05-24 23:09:29 +02:00
|
|
|
set_property(SOURCE ../win/86Box-qt.rc DIRECTORY .. PROPERTY COMPILE_DEFINITIONS NO_INCLUDE_MANIFEST)
|
2022-02-04 17:07:44 +05:00
|
|
|
target_sources(86Box PRIVATE ../win/86Box.manifest)
|
|
|
|
|
endif()
|
2022-02-12 19:27:27 +02:00
|
|
|
|
|
|
|
|
if (MINGW)
|
|
|
|
|
add_compile_definitions(NTDDI_VERSION=0x06010000)
|
|
|
|
|
endif()
|
2022-02-05 13:28:18 +06:00
|
|
|
else()
|
|
|
|
|
target_sources(plat PRIVATE sdl_joystick.cpp)
|
2022-02-04 17:07:44 +05:00
|
|
|
endif()
|
|
|
|
|
|
2021-12-20 21:54:25 +02:00
|
|
|
if(WIN32 AND NOT MINGW)
|
2021-12-19 23:49:47 +02:00
|
|
|
target_sources(plat PRIVATE ../win/win_opendir.c)
|
|
|
|
|
endif()
|
|
|
|
|
|
2023-02-14 20:37:58 -05:00
|
|
|
if(WIN32)
|
|
|
|
|
target_sources(plat PRIVATE ../win/win_serial_passthrough.c)
|
|
|
|
|
else()
|
|
|
|
|
target_sources(plat PRIVATE ../unix/unix_serial_passthrough.c)
|
|
|
|
|
endif()
|
|
|
|
|
|
2021-11-30 20:18:13 +01:00
|
|
|
if (APPLE)
|
|
|
|
|
target_sources(ui PRIVATE macos_event_filter.mm)
|
2022-08-31 14:59:29 -04:00
|
|
|
if(MOLTENVK)
|
|
|
|
|
find_path(MOLTENVK_INCLUDE "vulkan/vulkan.h" PATHS "/opt/homebrew/opt/molten-vk/libexec/include" "/usr/local/opt/molten-vk/libexec/include" ${MOLTENVK_INCLUDE_DIR})
|
|
|
|
|
if (NOT MOLTENVK_INCLUDE)
|
|
|
|
|
message(FATAL_ERROR "Could not find vulkan/vulkan.h. If the headers are installed please use -DMOLTENVK_INCLUDE_DIR=/path/to/headers")
|
|
|
|
|
endif()
|
|
|
|
|
target_include_directories(ui PRIVATE ${MOLTENVK_INCLUDE})
|
|
|
|
|
find_library(MOLTENVK_LIB MoltenVK)
|
|
|
|
|
if (NOT MOLTENVK_LIB)
|
|
|
|
|
message(FATAL_ERROR "Could not find MoltenVK library")
|
|
|
|
|
endif()
|
|
|
|
|
target_link_libraries(ui PRIVATE "${MOLTENVK_LIB}")
|
|
|
|
|
endif()
|
2021-11-30 20:18:13 +01:00
|
|
|
endif()
|
2021-11-25 10:20:56 +01:00
|
|
|
|
2021-12-09 20:59:50 +02:00
|
|
|
if (WIN32)
|
2022-01-22 01:10:11 +02:00
|
|
|
target_sources(ui PRIVATE
|
|
|
|
|
qt_winrawinputfilter.hpp
|
|
|
|
|
qt_winrawinputfilter.cpp
|
|
|
|
|
qt_winmanagerfilter.hpp
|
|
|
|
|
qt_winmanagerfilter.cpp
|
|
|
|
|
)
|
2021-12-09 20:59:50 +02:00
|
|
|
endif()
|
|
|
|
|
|
2021-11-25 10:20:56 +01:00
|
|
|
target_link_libraries(
|
|
|
|
|
plat
|
|
|
|
|
PRIVATE
|
2021-12-31 16:47:49 +06:00
|
|
|
Qt${QT_MAJOR}::Widgets
|
|
|
|
|
Qt${QT_MAJOR}::Gui
|
2022-02-27 15:30:35 +06:00
|
|
|
Qt${QT_MAJOR}::Network
|
2021-11-28 20:54:32 +01:00
|
|
|
Threads::Threads
|
2021-11-25 10:20:56 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
target_link_libraries(
|
|
|
|
|
ui
|
|
|
|
|
PRIVATE
|
2021-12-31 16:47:49 +06:00
|
|
|
Qt${QT_MAJOR}::Widgets
|
|
|
|
|
Qt${QT_MAJOR}::Gui
|
|
|
|
|
Qt${QT_MAJOR}::OpenGL
|
2022-02-27 15:30:35 +06:00
|
|
|
Qt${QT_MAJOR}::Network
|
2021-11-28 20:54:32 +01:00
|
|
|
Threads::Threads
|
2021-11-25 10:20:56 +01:00
|
|
|
)
|
2021-11-30 16:26:49 +06:00
|
|
|
|
2022-05-29 00:16:51 +02:00
|
|
|
if(WIN32)
|
|
|
|
|
if(STATIC_BUILD)
|
|
|
|
|
# needed for static builds
|
|
|
|
|
qt_import_plugins(plat INCLUDE Qt${QT_MAJOR}::QWindowsIntegrationPlugin Qt${QT_MAJOR}::QICOPlugin Qt${QT_MAJOR}::QWindowsVistaStylePlugin)
|
|
|
|
|
else()
|
2022-06-29 18:55:15 +02:00
|
|
|
if(USE_QT6)
|
|
|
|
|
install(CODE "
|
|
|
|
|
get_filename_component(CMAKE_INSTALL_PREFIX_ABSOLUTE \${CMAKE_INSTALL_PREFIX} ABSOLUTE)
|
|
|
|
|
execute_process(
|
|
|
|
|
COMMAND $<TARGET_FILE:Qt${QT_MAJOR}::windeployqt>
|
|
|
|
|
\"\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/$<TARGET_FILE_NAME:86Box>\")
|
|
|
|
|
")
|
|
|
|
|
else()
|
|
|
|
|
find_program(WINDEPLOYQT_EXECUTABLE windeployqt)
|
|
|
|
|
if(WINDEPLOYQT_EXECUTABLE)
|
|
|
|
|
install(CODE "
|
|
|
|
|
get_filename_component(CMAKE_INSTALL_PREFIX_ABSOLUTE \${CMAKE_INSTALL_PREFIX} ABSOLUTE)
|
|
|
|
|
execute_process(
|
|
|
|
|
COMMAND ${WINDEPLOYQT_EXECUTABLE}
|
|
|
|
|
\"\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/$<TARGET_FILE_NAME:86Box>\")
|
|
|
|
|
")
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
2022-05-29 00:16:51 +02:00
|
|
|
endif()
|
2021-12-06 17:31:25 +02:00
|
|
|
endif()
|
|
|
|
|
|
2022-02-07 21:08:28 +01:00
|
|
|
# loads a macro to install Qt5 plugins on macOS
|
|
|
|
|
# based on https://stackoverflow.com/questions/35612687/cmake-macos-x-bundle-with-bundleutiliies-for-qt-application
|
2023-04-14 13:48:14 -04:00
|
|
|
macro(install_qt5_plugin _qt_plugin_name _runtime_plugins_var _prefix)
|
2022-02-07 21:08:28 +01:00
|
|
|
get_target_property(_qt_plugin_path "${_qt_plugin_name}" LOCATION)
|
|
|
|
|
if(EXISTS "${_qt_plugin_path}")
|
|
|
|
|
get_filename_component(_qt_plugin_file "${_qt_plugin_path}" NAME)
|
|
|
|
|
get_filename_component(_qt_plugin_type "${_qt_plugin_path}" PATH)
|
|
|
|
|
get_filename_component(_qt_plugin_type "${_qt_plugin_type}" NAME)
|
|
|
|
|
set(_qt_plugin_dest "${_prefix}/PlugIns/${_qt_plugin_type}")
|
2022-02-19 16:20:20 +01:00
|
|
|
install(FILES "${_qt_plugin_path}" DESTINATION "${_qt_plugin_dest}")
|
2023-04-14 13:48:14 -04:00
|
|
|
list(APPEND ${_runtime_plugins_var} "\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/${_qt_plugin_dest}/${_qt_plugin_file}")
|
2022-02-07 21:08:28 +01:00
|
|
|
else()
|
|
|
|
|
message(FATAL_ERROR "QT plugin ${_qt_plugin_name} not found")
|
|
|
|
|
endif()
|
|
|
|
|
endmacro()
|
|
|
|
|
|
|
|
|
|
if (APPLE AND CMAKE_MACOSX_BUNDLE)
|
2022-02-07 23:05:59 +01:00
|
|
|
set(prefix "86Box.app/Contents")
|
2022-02-07 21:08:28 +01:00
|
|
|
set(INSTALL_RUNTIME_DIR "${prefix}/MacOS")
|
|
|
|
|
set(INSTALL_CMAKE_DIR "${prefix}/Resources")
|
2022-08-31 14:59:29 -04:00
|
|
|
set(INSTALL_LIB_DIR "${prefix}/Frameworks")
|
2022-02-07 21:08:28 +01:00
|
|
|
|
|
|
|
|
# using the install_qt5_plugin to add Qt plugins into the macOS app bundle
|
2023-04-14 13:48:14 -04:00
|
|
|
install_qt5_plugin("Qt${QT_MAJOR}::QCocoaIntegrationPlugin" RUNTIME_PLUGINS ${prefix})
|
|
|
|
|
install_qt5_plugin("Qt${QT_MAJOR}::QMacStylePlugin" RUNTIME_PLUGINS ${prefix})
|
|
|
|
|
install_qt5_plugin("Qt${QT_MAJOR}::QICOPlugin" RUNTIME_PLUGINS ${prefix})
|
|
|
|
|
install_qt5_plugin("Qt${QT_MAJOR}::QICNSPlugin" RUNTIME_PLUGINS ${prefix})
|
|
|
|
|
|
|
|
|
|
# Install libraries that are loaded at runtime and not linked
|
|
|
|
|
if (GHOSTSCRIPT_LIB)
|
|
|
|
|
set(GS_LIBRARY_NAME "libgs.dylib")
|
|
|
|
|
file(REAL_PATH ${GHOSTSCRIPT_LIB} GS_LIB_RESOLVED)
|
|
|
|
|
install(FILES ${GS_LIB_RESOLVED} DESTINATION ${INSTALL_LIB_DIR} RENAME ${GS_LIBRARY_NAME})
|
|
|
|
|
list(APPEND RUNTIME_PLUGINS "\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/${INSTALL_LIB_DIR}/${GS_LIBRARY_NAME}")
|
|
|
|
|
endif ()
|
|
|
|
|
|
|
|
|
|
if (FLUIDSYNTH_LIB)
|
|
|
|
|
set(FLUIDSYNTH_LIBRARY_NAME "libfluidsynth.dylib")
|
|
|
|
|
file(REAL_PATH ${FLUIDSYNTH_LIB} FLUIDSYNTH_LIB_RESOLVED)
|
|
|
|
|
install(FILES ${FLUIDSYNTH_LIB_RESOLVED} DESTINATION ${INSTALL_LIB_DIR} RENAME ${FLUIDSYNTH_LIBRARY_NAME})
|
|
|
|
|
list(APPEND RUNTIME_PLUGINS "\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/${INSTALL_LIB_DIR}/${FLUIDSYNTH_LIBRARY_NAME}")
|
|
|
|
|
endif ()
|
2022-04-12 15:58:57 +05:00
|
|
|
|
2022-02-07 21:08:28 +01:00
|
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
|
2022-03-19 00:44:42 +00:00
|
|
|
"[Paths]\nPlugins = PlugIns\n")
|
2022-02-07 21:08:28 +01:00
|
|
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
|
|
|
|
|
DESTINATION "${INSTALL_CMAKE_DIR}")
|
|
|
|
|
|
|
|
|
|
# Path used for searching by FIND_XXX(), with appropriate suffixes added
|
|
|
|
|
if(CMAKE_PREFIX_PATH)
|
|
|
|
|
foreach(dir ${CMAKE_PREFIX_PATH})
|
|
|
|
|
list(APPEND DIRS "${dir}/bin" "${dir}/lib")
|
|
|
|
|
endforeach()
|
|
|
|
|
endif()
|
|
|
|
|
|
2022-03-19 00:44:42 +00:00
|
|
|
# Append Qt's lib folder which is two levels above Qt*Widgets_DIR
|
|
|
|
|
list(APPEND DIRS "${Qt${QT_MAJOR}Widgets_DIR}/../..")
|
2022-02-07 21:08:28 +01:00
|
|
|
|
|
|
|
|
include(InstallRequiredSystemLibraries)
|
|
|
|
|
|
2022-02-14 09:16:14 +01:00
|
|
|
install(CODE "
|
2022-02-07 21:08:28 +01:00
|
|
|
include(BundleUtilities)
|
2022-02-14 08:33:03 +01:00
|
|
|
get_filename_component(CMAKE_INSTALL_PREFIX_ABSOLUTE \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX} ABSOLUTE)
|
2023-04-14 13:48:14 -04:00
|
|
|
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/86Box.app\" \"${RUNTIME_PLUGINS}\" \"${DIRS}\")
|
2022-08-27 10:47:55 -04:00
|
|
|
execute_process(
|
|
|
|
|
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath \"@executable_path/../Frameworks/\"
|
|
|
|
|
\"\${CMAKE_INSTALL_PREFIX_ABSOLUTE}/${INSTALL_RUNTIME_DIR}/86Box\")
|
|
|
|
|
")
|
2022-08-31 14:59:29 -04:00
|
|
|
if(MOLTENVK)
|
|
|
|
|
install(CODE "
|
|
|
|
|
execute_process(
|
|
|
|
|
COMMAND bash -c \"set -e
|
|
|
|
|
echo \\\"-- Creating vulkan dylib symlink for QT (libVulkan.dylib -> libMoltenVK.dylib)\\\"
|
|
|
|
|
cd \${CMAKE_INSTALL_PREFIX_ABSOLUTE}/${INSTALL_LIB_DIR}
|
|
|
|
|
ln -sf libMoltenVK.dylib libVulkan.dylib
|
|
|
|
|
\")
|
|
|
|
|
")
|
|
|
|
|
endif()
|
2022-02-07 21:08:28 +01:00
|
|
|
endif()
|
|
|
|
|
|
2022-03-11 12:03:54 +06:00
|
|
|
if (UNIX AND NOT APPLE AND NOT HAIKU)
|
2021-11-30 16:26:49 +06:00
|
|
|
find_package(X11 REQUIRED)
|
2022-02-15 02:34:13 +06:00
|
|
|
target_link_libraries(ui PRIVATE X11::X11 X11::Xi)
|
2023-04-08 17:58:55 -03:00
|
|
|
target_sources(ui PRIVATE evdev_keyboard.cpp xinput2_mouse.cpp)
|
2021-12-10 01:03:20 +06:00
|
|
|
find_package(PkgConfig REQUIRED)
|
|
|
|
|
pkg_check_modules(LIBEVDEV IMPORTED_TARGET libevdev)
|
|
|
|
|
if (LIBEVDEV_FOUND)
|
|
|
|
|
target_compile_definitions(ui PRIVATE EVDEV_INPUT)
|
|
|
|
|
target_link_libraries(ui PUBLIC PkgConfig::LIBEVDEV)
|
|
|
|
|
target_sources(ui PRIVATE evdev_mouse.cpp)
|
|
|
|
|
endif()
|
2023-04-07 22:33:53 -03:00
|
|
|
pkg_check_modules(XKBCOMMON IMPORTED_TARGET xkbcommon)
|
|
|
|
|
if (XKBCOMMON_FOUND)
|
|
|
|
|
target_compile_definitions(ui PRIVATE XKBCOMMON)
|
|
|
|
|
target_link_libraries(ui PUBLIC PkgConfig::XKBCOMMON)
|
|
|
|
|
target_sources(ui PRIVATE xkbcommon_keyboard.cpp)
|
|
|
|
|
|
|
|
|
|
if (X11_xcb_FOUND)
|
|
|
|
|
pkg_check_modules(XKBCOMMON_X11 IMPORTED_TARGET xkbcommon-x11)
|
|
|
|
|
if (XKBCOMMON_X11_FOUND)
|
|
|
|
|
target_compile_definitions(ui PRIVATE XKBCOMMON_X11)
|
|
|
|
|
target_link_libraries(ui PRIVATE X11::xcb PUBLIC PkgConfig::XKBCOMMON_X11)
|
|
|
|
|
target_sources(ui PRIVATE xkbcommon_x11_keyboard.cpp)
|
2023-04-11 20:38:03 -03:00
|
|
|
set(QT5_PRIVATE_HEADERS ON)
|
2023-04-07 22:33:53 -03:00
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
2021-12-03 16:42:31 +06:00
|
|
|
|
2021-12-02 16:26:33 +06:00
|
|
|
find_package(ECM NO_MODULE)
|
|
|
|
|
if (ECM_FOUND)
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
|
|
|
|
find_package(Wayland COMPONENTS Client)
|
|
|
|
|
if (Wayland_FOUND)
|
|
|
|
|
target_link_libraries(ui PRIVATE Wayland::Client)
|
|
|
|
|
find_package(WaylandScanner REQUIRED)
|
|
|
|
|
if (WaylandScanner_FOUND)
|
|
|
|
|
set(WL_SOURCE_VAR)
|
|
|
|
|
ecm_add_wayland_client_protocol(WL_SOURCE_VAR PROTOCOL ${CMAKE_SOURCE_DIR}/wl_protocols/relative-pointer-unstable-v1.xml BASENAME relative-pointer-unstable-v1)
|
|
|
|
|
ecm_add_wayland_client_protocol(WL_SOURCE_VAR PROTOCOL ${CMAKE_SOURCE_DIR}/wl_protocols/pointer-constraints-unstable-v1.xml BASENAME pointer-constraints-unstable-v1)
|
2021-12-31 16:47:49 +06:00
|
|
|
target_include_directories(ui PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${Qt${QT_MAJOR}Gui_PRIVATE_INCLUDE_DIRS})
|
2021-12-02 16:26:33 +06:00
|
|
|
target_sources(ui PRIVATE ${WL_SOURCE_VAR} wl_mouse.cpp)
|
2023-04-08 00:31:25 -03:00
|
|
|
if (XKBCOMMON_FOUND)
|
|
|
|
|
target_sources(ui PRIVATE xkbcommon_wl_keyboard.cpp)
|
|
|
|
|
endif()
|
2021-12-02 16:26:33 +06:00
|
|
|
target_compile_definitions(ui PRIVATE WAYLAND)
|
2023-04-11 20:38:03 -03:00
|
|
|
set(QT5_PRIVATE_HEADERS ON)
|
2021-12-02 16:26:33 +06:00
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
2023-04-11 20:38:03 -03:00
|
|
|
|
|
|
|
|
# Add private headers for Qt5 if required.
|
|
|
|
|
if (NOT USE_QT6 AND DEFINED QT5_PRIVATE_HEADERS)
|
|
|
|
|
find_package(Qt${QT_MAJOR}Gui)
|
|
|
|
|
if (Qt${QT_MAJOR}Gui_FOUND)
|
|
|
|
|
include_directories(${Qt${QT_MAJOR}Gui_PRIVATE_INCLUDE_DIRS})
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
2021-11-30 20:18:13 +01:00
|
|
|
endif()
|
2022-01-04 01:24:10 +06:00
|
|
|
set(QM_FILES)
|
|
|
|
|
file(GLOB po_files "${CMAKE_CURRENT_SOURCE_DIR}/languages/*.po")
|
|
|
|
|
foreach(po_file ${po_files})
|
|
|
|
|
get_filename_component(PO_FILE_NAME ${po_file} NAME_WE)
|
|
|
|
|
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm"
|
2022-05-29 12:16:40 +02:00
|
|
|
COMMAND "$<TARGET_FILE:Qt${QT_MAJOR}::lconvert>" -i ${po_file} -o ${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm
|
2022-01-05 01:33:15 +06:00
|
|
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
|
|
|
DEPENDS "${po_file}")
|
2022-01-04 01:24:10 +06:00
|
|
|
list(APPEND QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/86box_${PO_FILE_NAME}.qm")
|
2022-01-05 01:17:07 +06:00
|
|
|
list(APPEND QM_FILES "${po_file}")
|
2022-01-04 01:24:10 +06:00
|
|
|
endforeach()
|
2021-12-31 12:36:55 +06:00
|
|
|
configure_file(qt_translations.qrc ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
|
|
|
|
|
target_sources(ui PRIVATE ${QM_FILES} ${CMAKE_CURRENT_BINARY_DIR}/qt_translations.qrc)
|