android stuff

This commit is contained in:
DH 2025-02-24 01:21:21 +03:00 committed by Megamouse
parent 11e214f332
commit 798c194025
11 changed files with 304 additions and 236 deletions

View file

@ -84,8 +84,12 @@ endif()
# hidapi # hidapi
add_subdirectory(hidapi) if (NOT ANDROID)
add_subdirectory(hidapi)
else()
add_library(3rdparty_hidapi INTERFACE)
target_compile_definitions(3rdparty_hidapi INTERFACE WITHOUT_HIDAPI=1)
endif()
# glslang # glslang
add_subdirectory(glslang EXCLUDE_FROM_ALL) add_subdirectory(glslang EXCLUDE_FROM_ALL)
@ -99,24 +103,28 @@ add_subdirectory(yaml-cpp)
# OpenGL # OpenGL
find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS EGL) if (NOT ANDROID)
find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS EGL)
add_library(3rdparty_opengl INTERFACE) add_library(3rdparty_opengl INTERFACE)
target_include_directories(3rdparty_opengl INTERFACE GL) target_include_directories(3rdparty_opengl INTERFACE GL)
if (WIN32) if (WIN32)
if(NOT MSVC) if(NOT MSVC)
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU)
else()
target_link_libraries(3rdparty_opengl INTERFACE dxgi.lib d2d1.lib dwrite.lib)
endif()
elseif(APPLE)
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU) target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU)
else() else()
target_link_libraries(3rdparty_opengl INTERFACE dxgi.lib d2d1.lib dwrite.lib) target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX)
endif() endif()
elseif(APPLE)
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU)
else() else()
target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX) add_library(3rdparty_opengl INTERFACE)
target_compile_definitions(3rdparty_opengl INTERFACE WITHOUT_OPENGL=1)
endif() endif()
# stblib # stblib
add_subdirectory(stblib) add_subdirectory(stblib)
@ -181,7 +189,7 @@ if(USE_VULKAN)
target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN) target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN)
target_link_libraries(3rdparty_vulkan INTERFACE Vulkan::Vulkan) target_link_libraries(3rdparty_vulkan INTERFACE Vulkan::Vulkan)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE AND NOT ANDROID)
find_package(Wayland) find_package(Wayland)
if (WAYLAND_FOUND) if (WAYLAND_FOUND)
target_include_directories(3rdparty_vulkan target_include_directories(3rdparty_vulkan
@ -205,7 +213,12 @@ endif()
add_subdirectory(asmjit EXCLUDE_FROM_ALL) add_subdirectory(asmjit EXCLUDE_FROM_ALL)
# OpenAL # OpenAL
add_subdirectory(OpenAL EXCLUDE_FROM_ALL) if (NOT ANDROID)
add_subdirectory(OpenAL EXCLUDE_FROM_ALL)
else()
add_library(3rdparty_openal INTERFACE)
target_compile_definitions(3rdparty_openal INTERFACE WITHOUT_OPENAL=1)
endif()
# FAudio # FAudio
set(FAUDIO_TARGET 3rdparty_dummy_lib) set(FAUDIO_TARGET 3rdparty_dummy_lib)
@ -246,47 +259,48 @@ set_property(TARGET ${FAUDIO_TARGET} PROPERTY FOLDER "3rdparty/")
# FFMPEG # FFMPEG
add_library(3rdparty_ffmpeg INTERFACE) if(NOT ANDROID)
add_library(3rdparty_ffmpeg INTERFACE)
# Select the version of ffmpeg to use, default is builtin # Select the version of ffmpeg to use, default is builtin
if(USE_SYSTEM_FFMPEG) if(USE_SYSTEM_FFMPEG)
message(STATUS "RPCS3: using shared ffmpeg") message(STATUS "RPCS3: using shared ffmpeg")
find_package(FFMPEG REQUIRED) find_package(FFMPEG REQUIRED)
target_include_directories(3rdparty_ffmpeg INTERFACE ${FFMPEG_INCLUDE_DIR}) target_include_directories(3rdparty_ffmpeg INTERFACE ${FFMPEG_INCLUDE_DIR})
target_link_libraries(3rdparty_ffmpeg INTERFACE ${FFMPEG_LIBRARIES}) target_link_libraries(3rdparty_ffmpeg INTERFACE ${FFMPEG_LIBRARIES})
else() else()
message(STATUS "RPCS3: using builtin ffmpeg") message(STATUS "RPCS3: using builtin ffmpeg")
add_subdirectory(ffmpeg EXCLUDE_FROM_ALL) add_subdirectory(ffmpeg EXCLUDE_FROM_ALL)
# ffmpeg-core libraries are extracted to CMAKE_BINARY_DIR # ffmpeg-core libraries are extracted to CMAKE_BINARY_DIR
set(FFMPEG_LIB_DIR "${CMAKE_BINARY_DIR}/3rdparty/ffmpeg/lib") set(FFMPEG_LIB_DIR "${CMAKE_BINARY_DIR}/3rdparty/ffmpeg/lib")
if (WIN32) if (WIN32)
target_link_libraries(3rdparty_ffmpeg INTERFACE "Bcrypt.lib") target_link_libraries(3rdparty_ffmpeg INTERFACE "Bcrypt.lib")
endif()
else()
find_library(FFMPEG_LIB_AVFORMAT avformat PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_AVCODEC avcodec PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_AVUTIL avutil PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_SWSCALE swscale PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_SWRESAMPLE swresample PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
target_link_libraries(3rdparty_ffmpeg
INTERFACE
${FFMPEG_LIB_AVFORMAT}
${FFMPEG_LIB_AVCODEC}
${FFMPEG_LIB_AVUTIL}
${FFMPEG_LIB_SWSCALE}
${FFMPEG_LIB_SWRESAMPLE}
)
endif()
target_include_directories(3rdparty_ffmpeg INTERFACE "ffmpeg/include")
endif() endif()
find_library(FFMPEG_LIB_AVFORMAT avformat PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_AVCODEC avcodec PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_AVUTIL avutil PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_SWSCALE swscale PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
find_library(FFMPEG_LIB_SWRESAMPLE swresample PATHS ${FFMPEG_LIB_DIR} NO_DEFAULT_PATH)
target_link_libraries(3rdparty_ffmpeg
INTERFACE
${FFMPEG_LIB_AVFORMAT}
${FFMPEG_LIB_AVCODEC}
${FFMPEG_LIB_AVUTIL}
${FFMPEG_LIB_SWSCALE}
${FFMPEG_LIB_SWRESAMPLE}
)
target_include_directories(3rdparty_ffmpeg INTERFACE "ffmpeg/include")
endif() endif()
# GLEW # GLEW
add_library(3rdparty_glew INTERFACE) add_library(3rdparty_glew INTERFACE)
if(NOT MSVC) if(NOT MSVC AND NOT ANDROID)
find_package(GLEW REQUIRED) find_package(GLEW REQUIRED)
target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW) target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW)
endif() endif()

View file

@ -77,7 +77,7 @@ int main()
elseif (UNIX) elseif (UNIX)
# Unix is for all *NIX systems including OSX # Unix is for all *NIX systems including OSX
add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME) add_compile_definitions(PLATFORM_POSIX=1 HAVE_CLOCK_GETTIME)
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux" OR ANDROID)
set(OS_LINUX 1) set(OS_LINUX 1)
set(PLATFORM_SRC set(PLATFORM_SRC
@ -87,7 +87,9 @@ elseif (UNIX)
events_posix.c events_posix.c
) )
list(APPEND LIBUSB_LIBRARIES rt) if(NOT ANDROID)
list(APPEND LIBUSB_LIBRARIES rt)
endif()
endif() endif()
endif() endif()

View file

@ -1997,7 +1997,7 @@ static void signal_handler(int /*sig*/, siginfo_t* info, void* uct) noexcept
#else #else
const u32 insn = is_executing ? 0 : *reinterpret_cast<u32*>(RIP(context)); const u32 insn = is_executing ? 0 : *reinterpret_cast<u32*>(RIP(context));
const bool is_writing = const bool is_writing =
(insn & 0xbfff0000) == 0x0c000000 || // STR <Wt>, [<Xn>, #<imm>] (store word with immediate offset) (insn & 0xbfff0000) == 0x0c000000 || // STR <Wt>, [<Xn>, #<imm>] (store word with immediate offset)
(insn & 0xbfe00000) == 0x0c800000 || // STP <Wt1>, <Wt2>, [<Xn>, #<imm>] (store pair of registers with immediate offset) (insn & 0xbfe00000) == 0x0c800000 || // STP <Wt1>, <Wt2>, [<Xn>, #<imm>] (store pair of registers with immediate offset)
(insn & 0xbfdf0000) == 0x0d000000 || // STR <Wt>, [<Xn>, <Xm>] (store word with register offset) (insn & 0xbfdf0000) == 0x0d000000 || // STR <Wt>, [<Xn>, <Xm>] (store word with register offset)
@ -2172,7 +2172,11 @@ void thread_base::start()
void thread_base::initialize(void (*error_cb)()) void thread_base::initialize(void (*error_cb)())
{ {
#ifndef _WIN32 #ifndef _WIN32
#ifdef ANDROID
m_thread.release(pthread_self());
#else
m_thread.release(reinterpret_cast<u64>(pthread_self())); m_thread.release(reinterpret_cast<u64>(pthread_self()));
#endif
#endif #endif
// Initialize TLS variables // Initialize TLS variables
@ -2617,6 +2621,8 @@ thread_base::~thread_base() noexcept
const HANDLE handle0 = reinterpret_cast<HANDLE>(m_thread.load()); const HANDLE handle0 = reinterpret_cast<HANDLE>(m_thread.load());
WaitForSingleObject(handle0, INFINITE); WaitForSingleObject(handle0, INFINITE);
CloseHandle(handle0); CloseHandle(handle0);
#elif defined(ANDROID)
pthread_join(m_thread.load(), nullptr);
#else #else
pthread_join(reinterpret_cast<pthread_t>(m_thread.load()), nullptr); pthread_join(reinterpret_cast<pthread_t>(m_thread.load()), nullptr);
#endif #endif
@ -2691,7 +2697,13 @@ u64 thread_base::get_cycles()
#else #else
clockid_t _clock; clockid_t _clock;
struct timespec thread_time; struct timespec thread_time;
if (!pthread_getcpuclockid(reinterpret_cast<pthread_t>(handle), &_clock) && !clock_gettime(_clock, &thread_time)) pthread_t thread_id;
#ifdef ANDROID
thread_id = handle;
#else
thread_id = reinterpret_cast<pthread_t>(handle);
#endif
if (!pthread_getcpuclockid(thread_id, &_clock) && !clock_gettime(_clock, &thread_time))
{ {
cycles = static_cast<u64>(thread_time.tv_sec) * 1'000'000'000 + thread_time.tv_nsec; cycles = static_cast<u64>(thread_time.tv_sec) * 1'000'000'000 + thread_time.tv_nsec;
#endif #endif
@ -3194,7 +3206,7 @@ void thread_ctrl::set_thread_affinity_mask(u64 mask)
thread_affinity_policy_data_t policy = { static_cast<integer_t>(std::countr_zero(mask)) }; thread_affinity_policy_data_t policy = { static_cast<integer_t>(std::countr_zero(mask)) };
thread_port_t mach_thread = pthread_mach_thread_np(pthread_self()); thread_port_t mach_thread = pthread_mach_thread_np(pthread_self());
thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, reinterpret_cast<thread_policy_t>(&policy), !mask ? 0 : 1); thread_policy_set(mach_thread, THREAD_AFFINITY_POLICY, reinterpret_cast<thread_policy_t>(&policy), !mask ? 0 : 1);
#elif defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) #elif !defined(ANDROID) && (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__))
if (!mask) if (!mask)
{ {
// Reset affinity mask // Reset affinity mask
@ -3246,7 +3258,7 @@ u64 thread_ctrl::get_thread_affinity_mask()
sig_log.error("Failed to get thread affinity mask."); sig_log.error("Failed to get thread affinity mask.");
return 0; return 0;
#elif defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__) #elif !defined(ANDROID) && (defined(__linux__) || defined(__DragonFly__) || defined(__FreeBSD__))
cpu_set_t cs; cpu_set_t cs;
CPU_ZERO(&cs); CPU_ZERO(&cs);
@ -3313,6 +3325,8 @@ u64 thread_ctrl::get_tid()
{ {
#ifdef _WIN32 #ifdef _WIN32
return GetCurrentThreadId(); return GetCurrentThreadId();
#elif defined(ANDROID)
return static_cast<u64>(pthread_self());
#elif defined(__linux__) #elif defined(__linux__)
return syscall(SYS_gettid); return syscall(SYS_gettid);
#else #else

View file

@ -126,15 +126,17 @@ namespace utils
std::vector<void*> get_backtrace(int max_depth) std::vector<void*> get_backtrace(int max_depth)
{ {
std::vector<void*> result(max_depth); std::vector<void*> result(max_depth);
#ifndef ANDROID
int depth = backtrace(result.data(), max_depth); int depth = backtrace(result.data(), max_depth);
result.resize(depth); result.resize(depth);
#endif
return result; return result;
} }
std::vector<std::string> get_backtrace_symbols(const std::vector<void*>& stack) std::vector<std::string> get_backtrace_symbols(const std::vector<void*>& stack)
{ {
std::vector<std::string> result; std::vector<std::string> result;
#ifndef ANDROID
result.reserve(stack.size()); result.reserve(stack.size());
const auto symbols = backtrace_symbols(stack.data(), static_cast<int>(stack.size())); const auto symbols = backtrace_symbols(stack.data(), static_cast<int>(stack.size()));
@ -144,6 +146,7 @@ namespace utils
} }
free(symbols); free(symbols);
#endif
return result; return result;
} }
#endif #endif

View file

@ -20,7 +20,7 @@ elseif(NOT WIN32 AND NOT CMAKE_CXX_FLAGS MATCHES "LIBICONV_PLUG")
set(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} "iconv") set(ADDITIONAL_LIBS ${ADDITIONAL_LIBS} "iconv")
endif() endif()
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE AND NOT ANDROID)
add_definitions(-DDATADIR="${CMAKE_INSTALL_FULL_DATADIR}/rpcs3") add_definitions(-DDATADIR="${CMAKE_INSTALL_FULL_DATADIR}/rpcs3")
# Optionally enable X11 for window management # Optionally enable X11 for window management
find_package(X11) find_package(X11)
@ -33,162 +33,171 @@ if(UNIX AND NOT APPLE)
endif() endif()
endif() endif()
# Qt if (NOT ANDROID)
# finds Qt libraries and setups custom commands for MOC and UIC # Qt
# Must be done here because generated MOC and UIC targets cant # finds Qt libraries and setups custom commands for MOC and UIC
# be found otherwise # Must be done here because generated MOC and UIC targets cant
include(${CMAKE_SOURCE_DIR}/3rdparty/qt6.cmake) # be found otherwise
include(${CMAKE_SOURCE_DIR}/3rdparty/qt6.cmake)
endif()
# subdirectories # subdirectories
add_subdirectory(Emu) add_subdirectory(Emu)
add_subdirectory(rpcs3qt)
if(WIN32) if (NOT ANDROID)
add_executable(rpcs3 WIN32) add_subdirectory(rpcs3qt)
target_sources(rpcs3 PRIVATE rpcs3.rc)
target_compile_definitions(rpcs3 PRIVATE UNICODE _UNICODE)
elseif(APPLE)
add_executable(rpcs3 MACOSX_BUNDLE)
target_sources(rpcs3 PRIVATE rpcs3.icns update_helper.sh)
set_source_files_properties(update_helper.sh PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
set_target_properties(rpcs3
PROPERTIES
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/rpcs3.plist.in")
else()
add_executable(rpcs3)
endif() endif()
target_sources(rpcs3
PRIVATE
display_sleep_control.cpp
headless_application.cpp
main.cpp
main_application.cpp
module_verifier.cpp
rpcs3_version.cpp
stb_image.cpp
stdafx.cpp
Input/basic_keyboard_handler.cpp
Input/basic_mouse_handler.cpp
Input/ds3_pad_handler.cpp
Input/ds4_pad_handler.cpp
Input/dualsense_pad_handler.cpp
Input/evdev_joystick_handler.cpp
Input/evdev_gun_handler.cpp
Input/gui_pad_thread.cpp
Input/hid_pad_handler.cpp
Input/keyboard_pad_handler.cpp
Input/mm_joystick_handler.cpp
Input/pad_thread.cpp
Input/product_info.cpp
Input/ps_move_calibration.cpp
Input/ps_move_config.cpp
Input/ps_move_handler.cpp
Input/ps_move_tracker.cpp
Input/raw_mouse_config.cpp
Input/raw_mouse_handler.cpp
Input/sdl_pad_handler.cpp
Input/skateboard_pad_handler.cpp
Input/xinput_pad_handler.cpp
)
gen_git_version(${CMAKE_CURRENT_SOURCE_DIR}) gen_git_version(${CMAKE_CURRENT_SOURCE_DIR})
set_target_properties(rpcs3
PROPERTIES
AUTOMOC ON
AUTOUIC ON)
target_link_libraries(rpcs3 if (NOT ANDROID)
PRIVATE if(WIN32)
rpcs3_emu add_executable(rpcs3 WIN32)
rpcs3_ui target_sources(rpcs3 PRIVATE rpcs3.rc)
3rdparty::discordRPC target_compile_definitions(rpcs3 PRIVATE UNICODE _UNICODE)
3rdparty::qt6 elseif(APPLE)
3rdparty::hidapi add_executable(rpcs3 MACOSX_BUNDLE)
3rdparty::libusb target_sources(rpcs3 PRIVATE rpcs3.icns update_helper.sh)
3rdparty::wolfssl set_source_files_properties(update_helper.sh PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
3rdparty::libcurl set_target_properties(rpcs3
3rdparty::zlib PROPERTIES
3rdparty::opencv MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/rpcs3.plist.in")
3rdparty::fusion
${ADDITIONAL_LIBS})
# Unix display manager
if(X11_FOUND)
target_link_libraries(rpcs3 PRIVATE X11::X11)
elseif(USE_VULKAN AND UNIX AND NOT WAYLAND_FOUND AND NOT APPLE)
# Wayland has been checked in 3rdparty/CMakeLists.txt already.
message(FATAL_ERROR "RPCS3 requires either X11 or Wayland (or both) for Vulkan.")
endif()
if(UNIX)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
target_link_libraries(rpcs3 PRIVATE Threads::Threads)
endif()
if(WIN32)
target_link_libraries(rpcs3 PRIVATE bcrypt ws2_32 Iphlpapi Winmm Psapi gdi32 setupapi pdh)
else()
target_link_libraries(rpcs3 PRIVATE ${CMAKE_DL_LIBS})
endif()
if(USE_PRECOMPILED_HEADERS)
target_precompile_headers(rpcs3 PRIVATE stdafx.h)
endif()
# Copy icons to executable directory
if(APPLE)
if (CMAKE_BUILD_TYPE MATCHES "Debug" OR CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
set(QT_DEPLOY_FLAGS "-no-strip")
else() else()
set(QT_DEPLOY_FLAGS "") add_executable(rpcs3)
endif() endif()
qt_finalize_target(rpcs3)
add_custom_command(TARGET rpcs3 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/rpcs3.icns $<TARGET_FILE_DIR:rpcs3>/../Resources/rpcs3.icns
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Icons $<TARGET_FILE_DIR:rpcs3>/../Resources/Icons
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/GuiConfigs $<TARGET_FILE_DIR:rpcs3>/../Resources/GuiConfigs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/git $<TARGET_FILE_DIR:rpcs3>/../Resources/git
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${PROJECT_BINARY_DIR}/bin/rpcs3.app" "${QT_DEPLOY_FLAGS}")
elseif(UNIX)
add_custom_command(TARGET rpcs3 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Icons $<TARGET_FILE_DIR:rpcs3>/Icons
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/GuiConfigs $<TARGET_FILE_DIR:rpcs3>/GuiConfigs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/git $<TARGET_FILE_DIR:rpcs3>/git)
elseif(WIN32)
add_custom_command(TARGET rpcs3 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:OpenAL::OpenAL> $<TARGET_FILE_DIR:rpcs3>
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Icons $<TARGET_FILE_DIR:rpcs3>/Icons
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/GuiConfigs $<TARGET_FILE_DIR:rpcs3>/GuiConfigs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/git $<TARGET_FILE_DIR:rpcs3>/git
COMMAND "${WINDEPLOYQT_EXECUTABLE}" --no-compiler-runtime --no-opengl-sw --no-patchqt
--no-translations --no-system-d3d-compiler --no-quick-import
--plugindir "$<IF:$<CXX_COMPILER_ID:MSVC>,$<TARGET_FILE_DIR:rpcs3>/plugins,$<TARGET_FILE_DIR:rpcs3>/share/qt6/plugins>"
--verbose 0 "$<TARGET_FILE:rpcs3>")
endif()
# Unix installation target_sources(rpcs3
if(UNIX AND NOT APPLE) PRIVATE
# Install the binary display_sleep_control.cpp
install(TARGETS rpcs3 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) headless_application.cpp
# Install the application icon and menu item main.cpp
install(FILES rpcs3.svg main_application.cpp
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps) module_verifier.cpp
install(FILES rpcs3.png rpcs3_version.cpp
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps) stb_image.cpp
install(FILES rpcs3.desktop stdafx.cpp
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
install(FILES rpcs3.metainfo.xml Input/basic_keyboard_handler.cpp
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo) Input/basic_mouse_handler.cpp
# Install other files Input/ds3_pad_handler.cpp
install(DIRECTORY ../bin/Icons Input/ds4_pad_handler.cpp
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3) Input/dualsense_pad_handler.cpp
install(DIRECTORY ../bin/GuiConfigs Input/evdev_joystick_handler.cpp
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3) Input/evdev_gun_handler.cpp
install(DIRECTORY ../bin/git Input/gui_pad_thread.cpp
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3) Input/hid_pad_handler.cpp
install(DIRECTORY ../bin/test Input/keyboard_pad_handler.cpp
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3) Input/mm_joystick_handler.cpp
Input/pad_thread.cpp
Input/product_info.cpp
Input/ps_move_calibration.cpp
Input/ps_move_config.cpp
Input/ps_move_handler.cpp
Input/ps_move_tracker.cpp
Input/raw_mouse_config.cpp
Input/raw_mouse_handler.cpp
Input/sdl_pad_handler.cpp
Input/skateboard_pad_handler.cpp
Input/xinput_pad_handler.cpp
)
set_target_properties(rpcs3
PROPERTIES
AUTOMOC ON
AUTOUIC ON)
target_link_libraries(rpcs3
PRIVATE
rpcs3_emu
rpcs3_ui
3rdparty::discordRPC
3rdparty::qt6
3rdparty::hidapi
3rdparty::libusb
3rdparty::wolfssl
3rdparty::libcurl
3rdparty::zlib
3rdparty::opencv
3rdparty::fusion
${ADDITIONAL_LIBS})
# Unix display manager
if(X11_FOUND)
target_link_libraries(rpcs3 PRIVATE X11::X11)
elseif(USE_VULKAN AND UNIX AND NOT WAYLAND_FOUND AND NOT APPLE AND NOT ANDROID)
# Wayland has been checked in 3rdparty/CMakeLists.txt already.
message(FATAL_ERROR "RPCS3 requires either X11 or Wayland (or both) for Vulkan.")
endif()
if(UNIX)
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
target_link_libraries(rpcs3 PRIVATE Threads::Threads)
endif()
if(WIN32)
target_link_libraries(rpcs3 PRIVATE bcrypt ws2_32 Iphlpapi Winmm Psapi gdi32 setupapi pdh)
else()
target_link_libraries(rpcs3 PRIVATE ${CMAKE_DL_LIBS})
endif()
if(USE_PRECOMPILED_HEADERS)
target_precompile_headers(rpcs3 PRIVATE stdafx.h)
endif()
# Copy icons to executable directory
if(APPLE)
if (CMAKE_BUILD_TYPE MATCHES "Debug" OR CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
set(QT_DEPLOY_FLAGS "-no-strip")
else()
set(QT_DEPLOY_FLAGS "")
endif()
qt_finalize_target(rpcs3)
add_custom_command(TARGET rpcs3 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/rpcs3.icns $<TARGET_FILE_DIR:rpcs3>/../Resources/rpcs3.icns
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Icons $<TARGET_FILE_DIR:rpcs3>/../Resources/Icons
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/GuiConfigs $<TARGET_FILE_DIR:rpcs3>/../Resources/GuiConfigs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/git $<TARGET_FILE_DIR:rpcs3>/../Resources/git
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "${PROJECT_BINARY_DIR}/bin/rpcs3.app" "${QT_DEPLOY_FLAGS}")
elseif(UNIX)
add_custom_command(TARGET rpcs3 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Icons $<TARGET_FILE_DIR:rpcs3>/Icons
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/GuiConfigs $<TARGET_FILE_DIR:rpcs3>/GuiConfigs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/git $<TARGET_FILE_DIR:rpcs3>/git)
elseif(WIN32)
add_custom_command(TARGET rpcs3 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:OpenAL::OpenAL> $<TARGET_FILE_DIR:rpcs3>
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/Icons $<TARGET_FILE_DIR:rpcs3>/Icons
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/GuiConfigs $<TARGET_FILE_DIR:rpcs3>/GuiConfigs
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/bin/git $<TARGET_FILE_DIR:rpcs3>/git
COMMAND "${WINDEPLOYQT_EXECUTABLE}" --no-compiler-runtime --no-opengl-sw --no-patchqt
--no-translations --no-system-d3d-compiler --no-quick-import
--plugindir "$<IF:$<CXX_COMPILER_ID:MSVC>,$<TARGET_FILE_DIR:rpcs3>/plugins,$<TARGET_FILE_DIR:rpcs3>/share/qt6/plugins>"
--verbose 0 "$<TARGET_FILE:rpcs3>")
endif()
# Unix installation
if(UNIX AND NOT APPLE)
# Install the binary
install(TARGETS rpcs3 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
# Install the application icon and menu item
install(FILES rpcs3.svg
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps)
install(FILES rpcs3.png
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps)
install(FILES rpcs3.desktop
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
install(FILES rpcs3.metainfo.xml
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo)
# Install other files
install(DIRECTORY ../bin/Icons
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3)
install(DIRECTORY ../bin/GuiConfigs
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3)
install(DIRECTORY ../bin/git
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3)
install(DIRECTORY ../bin/test
DESTINATION ${CMAKE_INSTALL_DATADIR}/rpcs3)
endif()
endif() endif()

View file

@ -46,7 +46,14 @@ target_link_libraries(rpcs3_emu
# For stdafx.h # For stdafx.h
target_include_directories(rpcs3_emu target_include_directories(rpcs3_emu
PUBLIC PUBLIC
${PROJECT_SOURCE_DIR}/rpcs3) ${CMAKE_CURRENT_SOURCE_DIR}/../..
${CMAKE_CURRENT_SOURCE_DIR}/..
)
target_include_directories(rpcs3_emu
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty
)
# Utilities # Utilities
target_sources(rpcs3_emu PRIVATE target_sources(rpcs3_emu PRIVATE
@ -494,34 +501,6 @@ target_sources(rpcs3_emu PRIVATE
RSX/Core/RSXDrawCommands.cpp RSX/Core/RSXDrawCommands.cpp
RSX/gcm_enums.cpp RSX/gcm_enums.cpp
RSX/gcm_printing.cpp RSX/gcm_printing.cpp
RSX/GL/GLCommonDecompiler.cpp
RSX/GL/GLCompute.cpp
RSX/GL/GLDMA.cpp
RSX/GL/GLDraw.cpp
RSX/GL/GLFragmentProgram.cpp
RSX/GL/GLGSRender.cpp
RSX/GL/GLHelpers.cpp
RSX/GL/GLOverlays.cpp
RSX/GL/GLPipelineCompiler.cpp
RSX/GL/GLPresent.cpp
RSX/GL/GLRenderTargets.cpp
RSX/GL/GLResolveHelper.cpp
RSX/GL/GLShaderInterpreter.cpp
RSX/GL/GLTexture.cpp
RSX/GL/GLTextureCache.cpp
RSX/GL/glutils/blitter.cpp
RSX/GL/glutils/buffer_object.cpp
RSX/GL/glutils/capabilities.cpp
RSX/GL/glutils/common.cpp
RSX/GL/glutils/fbo.cpp
RSX/GL/glutils/image.cpp
RSX/GL/glutils/program.cpp
RSX/GL/glutils/ring_buffer.cpp
RSX/GL/glutils/sampler.cpp
RSX/GL/GLVertexBuffers.cpp
RSX/GL/GLVertexProgram.cpp
RSX/GL/OpenGL.cpp
RSX/GL/upscalers/fsr1/fsr_pass.cpp
RSX/GSRender.cpp RSX/GSRender.cpp
RSX/Host/MM.cpp RSX/Host/MM.cpp
RSX/Host/RSXDMAWriter.cpp RSX/Host/RSXDMAWriter.cpp
@ -590,6 +569,39 @@ target_sources(rpcs3_emu PRIVATE
RSX/rsx_vertex_data.cpp RSX/rsx_vertex_data.cpp
) )
if(NOT ANDROID)
target_sources(rpcs3_emu PRIVATE
RSX/GL/GLCommonDecompiler.cpp
RSX/GL/GLCompute.cpp
RSX/GL/GLDMA.cpp
RSX/GL/GLDraw.cpp
RSX/GL/GLFragmentProgram.cpp
RSX/GL/GLGSRender.cpp
RSX/GL/GLHelpers.cpp
RSX/GL/GLOverlays.cpp
RSX/GL/GLPipelineCompiler.cpp
RSX/GL/GLPresent.cpp
RSX/GL/GLRenderTargets.cpp
RSX/GL/GLResolveHelper.cpp
RSX/GL/GLShaderInterpreter.cpp
RSX/GL/GLTexture.cpp
RSX/GL/GLTextureCache.cpp
RSX/GL/glutils/blitter.cpp
RSX/GL/glutils/buffer_object.cpp
RSX/GL/glutils/capabilities.cpp
RSX/GL/glutils/common.cpp
RSX/GL/glutils/fbo.cpp
RSX/GL/glutils/image.cpp
RSX/GL/glutils/program.cpp
RSX/GL/glutils/ring_buffer.cpp
RSX/GL/glutils/sampler.cpp
RSX/GL/GLVertexBuffers.cpp
RSX/GL/GLVertexProgram.cpp
RSX/GL/OpenGL.cpp
RSX/GL/upscalers/fsr1/fsr_pass.cpp
)
endif()
if(TARGET 3rdparty_vulkan) if(TARGET 3rdparty_vulkan)
target_sources(rpcs3_emu PRIVATE target_sources(rpcs3_emu PRIVATE
RSX/VK/upscalers/fsr1/fsr_pass.cpp RSX/VK/upscalers/fsr1/fsr_pass.cpp
@ -658,7 +670,7 @@ endif()
if(USE_PRECOMPILED_HEADERS) if(USE_PRECOMPILED_HEADERS)
target_precompile_headers(rpcs3_emu PRIVATE "${PROJECT_SOURCE_DIR}/rpcs3/stdafx.h") target_precompile_headers(rpcs3_emu PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../stdafx.h")
endif() endif()
if(WAYLAND_FOUND) if(WAYLAND_FOUND)

View file

@ -133,12 +133,12 @@ sys_net_sockaddr native_addr_to_sys_net_addr(const ::sockaddr_storage& native_ad
sys_net_sockaddr sn_addr; sys_net_sockaddr sn_addr;
sys_net_sockaddr_in* paddr = reinterpret_cast<sys_net_sockaddr_in*>(&sn_addr); sys_net_sockaddr_in* paddr = reinterpret_cast<sys_net_sockaddr_in*>(&sn_addr);
*paddr = {};
paddr->sin_len = sizeof(sys_net_sockaddr_in); paddr->sin_len = sizeof(sys_net_sockaddr_in);
paddr->sin_family = SYS_NET_AF_INET; paddr->sin_family = SYS_NET_AF_INET;
paddr->sin_port = std::bit_cast<be_t<u16>, u16>(reinterpret_cast<const sockaddr_in*>(&native_addr)->sin_port); paddr->sin_port = std::bit_cast<be_t<u16>, u16>(reinterpret_cast<const sockaddr_in*>(&native_addr)->sin_port);
paddr->sin_addr = std::bit_cast<be_t<u32>, u32>(reinterpret_cast<const sockaddr_in*>(&native_addr)->sin_addr.s_addr); paddr->sin_addr = std::bit_cast<be_t<u32>, u32>(reinterpret_cast<const sockaddr_in*>(&native_addr)->sin_addr.s_addr);
paddr->sin_zero = 0;
return sn_addr; return sn_addr;
} }

View file

@ -3,7 +3,7 @@
#include "Utilities/Thread.h" #include "Utilities/Thread.h"
#include "util/logs.hpp" #include "util/logs.hpp"
#include "Emu/Memory/vm.h" #include "Emu/Memory/vm.h"
#include "../pine/pine_server.h" #include "pine/pine_server.h"
LOG_CHANNEL(IPC); LOG_CHANNEL(IPC);

View file

@ -1,11 +1,17 @@
#pragma once #pragma once
#include "util/endian.hpp" #include "util/endian.hpp"
#include "Emu/RSX/GL/GLVertexProgram.h" #include "Emu/RSX/Program/RSXVertexProgram.h"
#include "Emu/RSX/GL/GLFragmentProgram.h" #include "Emu/RSX/Program/RSXFragmentProgram.h"
#include "Emu/RSX/Program/ProgramStateCache.h" #include "Emu/RSX/Program/ProgramStateCache.h"
#include "Emu/RSX/Program/ShaderParam.h"
#include "Utilities/File.h" #include "Utilities/File.h"
#ifndef WITHOUT_OPENGL
#include "Emu/RSX/GL/GLVertexProgram.h"
#include "Emu/RSX/GL/GLFragmentProgram.h"
#endif
using CGprofile = u32; using CGprofile = u32;
using CGbool = s32; using CGbool = s32;
using CGresource = u32; using CGresource = u32;
@ -368,7 +374,9 @@ public:
prog.total_length = metadata.program_ucode_length + metadata.program_start_offset; prog.total_length = metadata.program_ucode_length + metadata.program_start_offset;
prog.data = reinterpret_cast<u8*>(be_data.data()) + metadata.program_start_offset; prog.data = reinterpret_cast<u8*>(be_data.data()) + metadata.program_start_offset;
for (u32 i = 0; i < 16; ++i) prog.texture_state.set_dimension(rsx::texture_dimension_extended::texture_dimension_2d, i); for (u32 i = 0; i < 16; ++i) prog.texture_state.set_dimension(rsx::texture_dimension_extended::texture_dimension_2d, i);
#ifndef WITHOUT_OPENGL
GLFragmentDecompilerThread(m_glsl_shader, param_array, prog, unused).Task(); GLFragmentDecompilerThread(m_glsl_shader, param_array, prog, unused).Task();
#endif
} }
else else
@ -411,7 +419,9 @@ public:
RSXVertexProgram prog; RSXVertexProgram prog;
program_hash_util::vertex_program_utils::analyse_vertex_program(vdata, 0, prog); program_hash_util::vertex_program_utils::analyse_vertex_program(vdata, 0, prog);
for (u32 i = 0; i < 4; ++i) prog.texture_state.set_dimension(rsx::texture_dimension_extended::texture_dimension_2d, i); for (u32 i = 0; i < 4; ++i) prog.texture_state.set_dimension(rsx::texture_dimension_extended::texture_dimension_2d, i);
#ifndef WITHOUT_OPENGL
GLVertexDecompilerThread(prog, m_glsl_shader, param_array).Task(); GLVertexDecompilerThread(prog, m_glsl_shader, param_array).Task();
#endif
} }
} }

View file

@ -28,6 +28,8 @@ using display_handle_t = std::variant<
std::pair<Display*, Window> std::pair<Display*, Window>
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR) #elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
std::pair<wl_display*, wl_surface*> std::pair<wl_display*, wl_surface*>
#elif defined(ANDROID)
void *
#endif #endif
>; >;
#endif #endif

View file

@ -170,6 +170,8 @@ namespace
{ {
#ifdef _WIN32 #ifdef _WIN32
tid = GetCurrentThreadId(); tid = GetCurrentThreadId();
#elif defined(ANDROID)
tid = pthread_self();
#else #else
tid = reinterpret_cast<u64>(pthread_self()); tid = reinterpret_cast<u64>(pthread_self());
#endif #endif