Make devices compilation cmake options

This commit is contained in:
Lorenzooone 2024-09-14 16:34:55 +02:00
parent b9e6e34342
commit 91b891718b
8 changed files with 226 additions and 131 deletions

View File

@ -5,6 +5,10 @@ set(TARGET_LANGUAGES CXX C)
project(cc3dsfs VERSION 1.0.0 LANGUAGES ${TARGET_LANGUAGES})
include(ExternalProject)
set(FTD3XX_USE 1)
set(FTD2XX_USE 1)
set(USB_IS_NITRO_USE 1)
set(USB_OLD_DS_3DS_USE 1)
set(WINDOWS_ARM64 0)
set(WINDOWS_x86_32 0)
set(FETCHCONTENT_UPDATES_DISCONNECTED ON)
@ -29,7 +33,7 @@ set(RASPBERRY_PI_COMPILATION FALSE CACHE BOOL "Option for compiling the Raspberr
set(SFML_BUILD_NETWORK FALSE)
set(EXTRA_LIBRARIES "")
if(MINGW_CROSS_COMPILATION)
set(EXTRA_LIBRARIES "libpthread.a")
list(APPEND EXTRA_LIBRARIES libpthread.a)
endif()
set(FINAL_EXTENSION "")
set(HOST_FINAL_EXTENSION "")
@ -38,8 +42,12 @@ set(USB_RULES_DIR ${CMAKE_SOURCE_DIR}/usb_rules)
set(SCRIPT_EXTENSION "")
if (RASPBERRY_PI_COMPILATION)
set(EXTRA_LIBRARIES "gpiod")
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS}-DRASPI 1 ")
list(APPEND EXTRA_LIBRARIES gpiod)
if(MSVC)
list(APPEND EXTRA_CXX_FLAGS "/DRASPI 1")
else()
list(APPEND EXTRA_CXX_FLAGS "-DRASPI 1")
endif()
endif()
if((${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND ((${CMAKE_GENERATOR_PLATFORM} MATCHES "ARM64") OR (("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "") AND (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ARM64"))))
@ -60,9 +68,11 @@ FetchContent_Declare(SFML
GIT_REPOSITORY https://github.com/SFML/SFML.git
GIT_TAG master)
FetchContent_Declare(libusb1
GIT_REPOSITORY https://github.com/libusb/libusb-cmake.git
GIT_TAG main)
if(USB_IS_NITRO_USE OR USB_OLD_DS_3DS_USE)
FetchContent_Declare(libusb1
GIT_REPOSITORY https://github.com/libusb/libusb-cmake.git
GIT_TAG main)
endif()
if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
set(HOST_FINAL_EXTENSION ".exe")
@ -75,76 +85,80 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(FINAL_EXTENSION ".exe")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
else()
set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS}-DXLIB_BASED 1 ")
if(MSVC)
list(APPEND EXTRA_CXX_FLAGS "/DXLIB_BASED 1")
else()
list(APPEND EXTRA_CXX_FLAGS "-DXLIB_BASED 1")
endif()
endif()
set(FTD3XX_BASE_URL https://ftdichip.com/wp-content/uploads/)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/windows_setup_ftd3xx)
set(FTD3XX_URL_TIME 2024/01)
set(FTD3XX_VER 1.3.0.9)
set(FTD3XX_VOL FTD3XXLibrary_v${FTD3XX_VER})
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.zip)
set(FTD3XX_SUBFOLDER win)
set(FTD3XX_LIB FTD3XX.lib)
set(FTD3XX_DLL FTD3XX.dll)
if(WINDOWS_ARM64)
set(FTD3XX_LIB FTD3XXWU.lib)
set(FTD3XX_DLL FTD3XXWU.dll)
set(FTD3XX_URL_TIME 2024/06)
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/windows_setup_ftd3xx_winusb)
set(FTD3XX_ARCHIVE FTD3XX_WinUSB_Package.zip)
set(FTD3XX_PATH_WINDOWS_ARCH ARM64)
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(FTD3XX_PATH_WINDOWS_ARCH Win32)
else ()
set(FTD3XX_PATH_WINDOWS_ARCH x64)
endif()
if(${WINDOWS_FTD3XX_USE_SHARED_LIB})
set(FTD3XX_BUILD_COMMAND ${FTD3XX_BUILD_COMMAND}_dll)
set(FTD3XX_WINDOWS_PATH_SPECIFIER DLL)
if(WINDOWS_ARM64)
set(FTD3XX_WINDOWS_PATH_SPECIFIER Dynamic)
endif()
else()
set(FTD3XX_WINDOWS_PATH_SPECIFIER Static_Lib)
if(WINDOWS_ARM64)
set(FTD3XX_WINDOWS_PATH_SPECIFIER Static)
endif()
endif()
set(FTD3XX_PRE_WINDOWS_PATH ${FTD3XX_PATH_WINDOWS_ARCH}/${FTD3XX_WINDOWS_PATH_SPECIFIER})
if(WINDOWS_ARM64)
set(FTD3XX_PRE_WINDOWS_PATH ${FTD3XX_WINDOWS_PATH_SPECIFIER}/${FTD3XX_PATH_WINDOWS_ARCH})
endif()
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/windows_setup_ftd3xx)
set(FTD3XX_URL_TIME 2024/01)
set(FTD3XX_VER 1.3.0.9)
set(FTD3XX_VOL FTD3XXLibrary_v${FTD3XX_VER})
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.zip)
set(FTD3XX_SUBFOLDER win)
set(FTD3XX_LIB FTD3XX.lib)
set(FTD3XX_DLL FTD3XX.dll)
if(WINDOWS_ARM64)
set(FTD3XX_LIB FTD3XXWU.lib)
set(FTD3XX_DLL FTD3XXWU.dll)
set(FTD3XX_URL_TIME 2024/06)
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/windows_setup_ftd3xx_winusb)
set(FTD3XX_ARCHIVE FTD3XX_WinUSB_Package.zip)
set(FTD3XX_PATH_WINDOWS_ARCH ARM64)
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(FTD3XX_PATH_WINDOWS_ARCH Win32)
else ()
set(FTD3XX_PATH_WINDOWS_ARCH x64)
endif()
if(${WINDOWS_FTD3XX_USE_SHARED_LIB})
set(FTD3XX_BUILD_COMMAND ${FTD3XX_BUILD_COMMAND}_dll)
set(FTD3XX_WINDOWS_PATH_SPECIFIER DLL)
if(WINDOWS_ARM64)
set(FTD3XX_WINDOWS_PATH_SPECIFIER Dynamic)
endif()
else()
set(FTD3XX_WINDOWS_PATH_SPECIFIER Static_Lib)
if(WINDOWS_ARM64)
set(FTD3XX_WINDOWS_PATH_SPECIFIER Static)
endif()
endif()
set(FTD3XX_PRE_WINDOWS_PATH ${FTD3XX_PATH_WINDOWS_ARCH}/${FTD3XX_WINDOWS_PATH_SPECIFIER})
if(WINDOWS_ARM64)
set(FTD3XX_PRE_WINDOWS_PATH ${FTD3XX_WINDOWS_PATH_SPECIFIER}/${FTD3XX_PATH_WINDOWS_ARCH})
endif()
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/macos_setup_ftd3xx)
set(FTD3XX_URL_TIME 2023/03)
set(FTD3XX_VER 1.0.5)
set(FTD3XX_VOL d3xx-osx.${FTD3XX_VER})
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.dmg)
set(FTD3XX_LIB libftd3xx-static.a)
set(FTD3XX_MOUNTED_FOLDER /Volumes/${FTD3XX_VOL})
set(FTD3XX_SUBFOLDER macos)
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/macos_setup_ftd3xx)
set(FTD3XX_URL_TIME 2023/03)
set(FTD3XX_VER 1.0.5)
set(FTD3XX_VOL d3xx-osx.${FTD3XX_VER})
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.dmg)
set(FTD3XX_LIB libftd3xx-static.a)
set(FTD3XX_MOUNTED_FOLDER /Volumes/${FTD3XX_VOL})
set(FTD3XX_SUBFOLDER macos)
else()
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/linux_setup_ftd3xx)
set(FTD3XX_URL_TIME 2023/03)
set(FTD3XX_VER 1.0.5)
if((${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch") OR (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm"))
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(FTD3XX_VOL libftd3xx-linux-arm-v8-${FTD3XX_VER})
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(FTD3XX_VOL libftd3xx-linux-arm-v7_32-${FTD3XX_VER})
endif()
else()
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(FTD3XX_VOL libftd3xx-linux-x86_64-${FTD3XX_VER})
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(FTD3XX_VOL libftd3xx-linux-x86_32-${FTD3XX_VER})
endif()
endif()
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.tgz)
set(FTD3XX_LIB libftd3xx-static.a)
set(FTD3XX_SUBFOLDER linux)
set(FTD3XX_BUILD_COMMAND ${SETUP_SCRIPTS_DIR}/linux_setup_ftd3xx)
set(FTD3XX_URL_TIME 2023/03)
set(FTD3XX_VER 1.0.5)
if((${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch") OR (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm"))
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(FTD3XX_VOL libftd3xx-linux-arm-v8-${FTD3XX_VER})
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(FTD3XX_VOL libftd3xx-linux-arm-v7_32-${FTD3XX_VER})
endif()
else()
if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(FTD3XX_VOL libftd3xx-linux-x86_64-${FTD3XX_VER})
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
set(FTD3XX_VOL libftd3xx-linux-x86_32-${FTD3XX_VER})
endif()
endif()
set(FTD3XX_ARCHIVE ${FTD3XX_VOL}.tgz)
set(FTD3XX_LIB libftd3xx-static.a)
set(FTD3XX_SUBFOLDER linux)
endif()
set(FTD2XX_BASE_URL https://ftdichip.com/wp-content/uploads/)
@ -226,40 +240,112 @@ else()
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
FetchContent_Declare(FTD3XX
URL ${FTD3XX_BASE_URL}${FTD3XX_URL_TIME}/${FTD3XX_ARCHIVE}
DOWNLOAD_NO_EXTRACT TRUE
)
FetchContent_Declare(FTD2XX
URL ${FTD2XX_BASE_URL}${FTD2XX_URL_TIME}/${FTD2XX_ARCHIVE}
DOWNLOAD_NO_EXTRACT TRUE
)
if(FTD3XX_USE)
FetchContent_Declare(FTD3XX
URL ${FTD3XX_BASE_URL}${FTD3XX_URL_TIME}/${FTD3XX_ARCHIVE}
DOWNLOAD_NO_EXTRACT TRUE
)
endif()
if(FTD2XX_USE)
FetchContent_Declare(FTD2XX
URL ${FTD2XX_BASE_URL}${FTD2XX_URL_TIME}/${FTD2XX_ARCHIVE}
DOWNLOAD_NO_EXTRACT TRUE
)
endif()
else()
FetchContent_Declare(FTD3XX
URL ${FTD3XX_BASE_URL}${FTD3XX_URL_TIME}/${FTD3XX_ARCHIVE}
)
FetchContent_Declare(FTD2XX
URL ${FTD2XX_BASE_URL}${FTD2XX_URL_TIME}/${FTD2XX_ARCHIVE}
)
if(FTD3XX_USE)
FetchContent_Declare(FTD3XX
URL ${FTD3XX_BASE_URL}${FTD3XX_URL_TIME}/${FTD3XX_ARCHIVE}
)
endif()
if(FTD2XX_USE)
FetchContent_Declare(FTD2XX
URL ${FTD2XX_BASE_URL}${FTD2XX_URL_TIME}/${FTD2XX_ARCHIVE}
)
endif()
endif()
FetchContent_MakeAvailable(SFML FTD3XX FTD2XX libusb1)
set(FETCH_CONTENT_MAKE_AVAILABLE_LIBRARIES "")
set(SOURCE_CPP_EXTRA_FILES "")
set(EXTRA_DEPENDENCIES "")
if(FTD3XX_USE)
list(APPEND FETCH_CONTENT_MAKE_AVAILABLE_LIBRARIES FTD3XX)
list(APPEND SOURCE_CPP_EXTRA_FILES source/3dscapture_ftd3.cpp)
list(APPEND EXTRA_DEPENDENCIES FTD3XX_BUILD_PROJECT)
if(MSVC)
list(APPEND EXTRA_CXX_FLAGS "/DUSE_FTD3")
else()
list(APPEND EXTRA_CXX_FLAGS "-DUSE_FTD3")
endif()
endif()
if(FTD2XX_USE)
list(APPEND FETCH_CONTENT_MAKE_AVAILABLE_LIBRARIES FTD2XX)
list(APPEND SOURCE_CPP_EXTRA_FILES source/dscapture_ftd2.cpp)
list(APPEND EXTRA_DEPENDENCIES FTD2XX_BUILD_PROJECT)
if(MSVC)
list(APPEND EXTRA_CXX_FLAGS "/DUSE_FTD2")
else()
list(APPEND EXTRA_CXX_FLAGS "-DUSE_FTD2")
endif()
endif()
if(USB_IS_NITRO_USE OR USB_OLD_DS_3DS_USE)
list(APPEND EXTRA_LIBRARIES usb-1.0)
list(APPEND FETCH_CONTENT_MAKE_AVAILABLE_LIBRARIES libusb1)
list(APPEND SOURCE_CPP_EXTRA_FILES source/usb_generic.cpp)
if(USB_IS_NITRO_USE)
list(APPEND SOURCE_CPP_EXTRA_FILES source/usb_is_nitro.cpp source/usb_is_nitro_capture.cpp)
if(MSVC)
list(APPEND EXTRA_CXX_FLAGS "/DUSE_IS_NITRO_USB")
else()
list(APPEND EXTRA_CXX_FLAGS "-DUSE_IS_NITRO_USB")
endif()
endif()
if(USB_OLD_DS_3DS_USE)
list(APPEND SOURCE_CPP_EXTRA_FILES source/usb_ds_3ds_capture.cpp)
if(MSVC)
list(APPEND EXTRA_CXX_FLAGS "/DUSE_DS_3DS_USB")
else()
list(APPEND EXTRA_CXX_FLAGS "-DUSE_DS_3DS_USB")
endif()
endif()
endif()
FetchContent_MakeAvailable(SFML ${FETCH_CONTENT_MAKE_AVAILABLE_LIBRARIES})
set(EXTRA_LINK_DIRECTORIES "")
set(EXTRA_INCLUDE_DIRECTORIES "")
if(FTD3XX_USE)
list(APPEND EXTRA_LIBRARIES ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER}/${FTD3XX_LIB})
list(APPEND EXTRA_LINK_DIRECTORIES ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER})
list(APPEND EXTRA_INCLUDE_DIRECTORIES ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER})
endif()
if(FTD2XX_USE)
list(APPEND EXTRA_LIBRARIES ${ftd2xx_BINARY_DIR}/${FTD2XX_SUBFOLDER}/${FTD2XX_LIB})
list(APPEND EXTRA_LINK_DIRECTORIES ${ftd2xx_BINARY_DIR}/${FTD2XX_SUBFOLDER})
list(APPEND EXTRA_INCLUDE_DIRECTORIES ${ftd2xx_BINARY_DIR}/${FTD2XX_SUBFOLDER})
endif()
if(IS_DIRECTORY "${sfml_SOURCE_DIR}")
set_property(DIRECTORY ${sfml_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL YES)
endif()
if(IS_DIRECTORY "${libusb1_SOURCE_DIR}")
set_property(DIRECTORY ${libusb1_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL YES)
if(USB_IS_NITRO_USE OR USB_OLD_DS_3DS_USE)
if(IS_DIRECTORY "${libusb1_SOURCE_DIR}")
set_property(DIRECTORY ${libusb1_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL YES)
endif()
endif()
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/win)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/macos)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/linux)
if(FTD3XX_USE)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/win)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/macos)
file(MAKE_DIRECTORY ${ftd3xx_BINARY_DIR}/linux)
endif()
file(MAKE_DIRECTORY ${ftd2xx_BINARY_DIR}/win)
file(MAKE_DIRECTORY ${ftd2xx_BINARY_DIR}/macos)
file(MAKE_DIRECTORY ${ftd2xx_BINARY_DIR}/linux)
if(FTD2XX_USE)
file(MAKE_DIRECTORY ${ftd2xx_BINARY_DIR}/win)
file(MAKE_DIRECTORY ${ftd2xx_BINARY_DIR}/macos)
file(MAKE_DIRECTORY ${ftd2xx_BINARY_DIR}/linux)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(FTD3XX_BUILD_COMMAND_PARAMETERS ${ftd3xx_SOURCE_DIR}/${FTD3XX_ARCHIVE} ${FTD3XX_MOUNTED_FOLDER} ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER} ${FTD3XX_LIB})
@ -277,22 +363,26 @@ else()
set(FTD3XX_BUILD_COMMAND_PARAMETERS ${ftd3xx_SOURCE_DIR} ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER} ${FTD3XX_LIB})
set(FTD2XX_BUILD_COMMAND_PARAMETERS ${ftd2xx_SOURCE_DIR} ${ftd2xx_BINARY_DIR}/${FTD2XX_SUBFOLDER} build/${FTD2XX_LIB})
endif()
ExternalProject_Add(FTD3XX_BUILD_PROJECT
SOURCE_DIR ${ftd3xx_SOURCE_DIR}
BINARY_DIR ${ftd3xx_BINARY_DIR}
BUILD_COMMAND ${FTD3XX_BUILD_COMMAND}${SCRIPT_EXTENSION} ${FTD3XX_BUILD_COMMAND_PARAMETERS}
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
INSTALL_COMMAND ""
)
ExternalProject_Add(FTD2XX_BUILD_PROJECT
SOURCE_DIR ${ftd2xx_SOURCE_DIR}
BINARY_DIR ${ftd2xx_BINARY_DIR}
BUILD_COMMAND ${FTD2XX_BUILD_COMMAND}${SCRIPT_EXTENSION} ${FTD2XX_BUILD_COMMAND_PARAMETERS}
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
INSTALL_COMMAND ""
)
if(FTD3XX_USE)
ExternalProject_Add(FTD3XX_BUILD_PROJECT
SOURCE_DIR ${ftd3xx_SOURCE_DIR}
BINARY_DIR ${ftd3xx_BINARY_DIR}
BUILD_COMMAND ${FTD3XX_BUILD_COMMAND}${SCRIPT_EXTENSION} ${FTD3XX_BUILD_COMMAND_PARAMETERS}
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
INSTALL_COMMAND ""
)
endif()
if(FTD2XX_USE)
ExternalProject_Add(FTD2XX_BUILD_PROJECT
SOURCE_DIR ${ftd2xx_SOURCE_DIR}
BINARY_DIR ${ftd2xx_BINARY_DIR}
BUILD_COMMAND ${FTD2XX_BUILD_COMMAND}${SCRIPT_EXTENSION} ${FTD2XX_BUILD_COMMAND_PARAMETERS}
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
INSTALL_COMMAND ""
)
endif()
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
@ -307,11 +397,13 @@ execute_process(COMMAND ${CMAKE_COMMAND} --build ${TOOLS_DATA_DIR})
set(OUTPUT_NAME cc3dsfs)
add_executable(${OUTPUT_NAME} source/cc3dsfs.cpp source/utils.cpp source/audio_data.cpp source/audio.cpp source/frontend.cpp source/TextRectangle.cpp source/WindowScreen.cpp source/WindowScreen_Menu.cpp source/3dscapture_ftd3.cpp source/dscapture_ftd2.cpp source/usb_ds_3ds_capture.cpp source/devicecapture.cpp source/conversions.cpp source/ExtraButtons.cpp source/Menus/ConnectionMenu.cpp source/Menus/OptionSelectionMenu.cpp source/Menus/MainMenu.cpp source/Menus/VideoMenu.cpp source/Menus/CropMenu.cpp source/Menus/PARMenu.cpp source/Menus/RotationMenu.cpp source/Menus/OffsetMenu.cpp source/Menus/AudioMenu.cpp source/Menus/BFIMenu.cpp source/Menus/RelativePositionMenu.cpp source/Menus/ResolutionMenu.cpp source/Menus/FileConfigMenu.cpp source/Menus/ExtraSettingsMenu.cpp source/Menus/StatusMenu.cpp source/Menus/LicenseMenu.cpp source/WindowCommands.cpp source/Menus/ShortcutMenu.cpp source/Menus/ActionSelectionMenu.cpp source/Menus/ScalingRatioMenu.cpp source/usb_is_nitro.cpp source/usb_is_nitro_capture.cpp source/usb_generic.cpp source/Menus/ISNitroMenu.cpp ${TOOLS_DATA_DIR}/font_ttf.cpp)
add_dependencies(${OUTPUT_NAME} FTD3XX_BUILD_PROJECT FTD2XX_BUILD_PROJECT)
target_link_libraries(${OUTPUT_NAME} PRIVATE SFML::Graphics SFML::Audio SFML::Window SFML::System usb-1.0 ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER}/${FTD3XX_LIB} ${ftd2xx_BINARY_DIR}/${FTD2XX_SUBFOLDER}/${FTD2XX_LIB} ${EXTRA_LIBRARIES})
target_link_directories(${OUTPUT_NAME} PRIVATE ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER} ${ftd2xx_BINARY_DIR}/${FTD2XX_SUBFOLDER})
target_include_directories(${OUTPUT_NAME} PRIVATE ${ftd3xx_BINARY_DIR}/${FTD3XX_SUBFOLDER} ${ftd2xx_BINARY_DIR}/${FTD2XX_SUBFOLDER} ${TOOLS_DATA_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/include/Menus)
add_executable(${OUTPUT_NAME} source/cc3dsfs.cpp source/utils.cpp source/audio_data.cpp source/audio.cpp source/frontend.cpp source/TextRectangle.cpp source/WindowScreen.cpp source/WindowScreen_Menu.cpp source/devicecapture.cpp source/conversions.cpp source/ExtraButtons.cpp source/Menus/ConnectionMenu.cpp source/Menus/OptionSelectionMenu.cpp source/Menus/MainMenu.cpp source/Menus/VideoMenu.cpp source/Menus/CropMenu.cpp source/Menus/PARMenu.cpp source/Menus/RotationMenu.cpp source/Menus/OffsetMenu.cpp source/Menus/AudioMenu.cpp source/Menus/BFIMenu.cpp source/Menus/RelativePositionMenu.cpp source/Menus/ResolutionMenu.cpp source/Menus/FileConfigMenu.cpp source/Menus/ExtraSettingsMenu.cpp source/Menus/StatusMenu.cpp source/Menus/LicenseMenu.cpp source/WindowCommands.cpp source/Menus/ShortcutMenu.cpp source/Menus/ActionSelectionMenu.cpp source/Menus/ScalingRatioMenu.cpp source/Menus/ISNitroMenu.cpp ${TOOLS_DATA_DIR}/font_ttf.cpp ${SOURCE_CPP_EXTRA_FILES})
if(NOT ("${EXTRA_DEPENDENCIES}" STREQUAL ""))
add_dependencies(${OUTPUT_NAME} ${EXTRA_DEPENDENCIES})
endif()
target_link_libraries(${OUTPUT_NAME} PRIVATE SFML::Graphics SFML::Audio SFML::Window SFML::System ${EXTRA_LIBRARIES})
target_link_directories(${OUTPUT_NAME} PRIVATE ${EXTRA_LINK_DIRECTORIES})
target_include_directories(${OUTPUT_NAME} PRIVATE ${EXTRA_INCLUDE_DIRECTORIES} ${TOOLS_DATA_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/include/Menus)
target_compile_features(${OUTPUT_NAME} PRIVATE cxx_std_20)
target_compile_options(${OUTPUT_NAME} PRIVATE ${EXTRA_CXX_FLAGS})
@ -323,7 +415,7 @@ add_custom_command(
)
if(WIN32)
if(WINDOWS_FTD3XX_USE_SHARED_LIB)
if(FTD3XX_USE AND WINDOWS_FTD3XX_USE_SHARED_LIB)
add_custom_command(
TARGET ${OUTPUT_NAME}
COMMENT "Copy FTD3XX DLL"
@ -331,7 +423,7 @@ if(WIN32)
VERBATIM
)
endif()
if(WINDOWS_FTD2XX_USE_SHARED_LIB)
if(FTD2XX_USE AND WINDOWS_FTD2XX_USE_SHARED_LIB)
add_custom_command(
TARGET ${OUTPUT_NAME}
COMMENT "Copy FTD2XX DLL"
@ -356,17 +448,17 @@ endif()
install(FILES LICENSE README.md DESTINATION .)
install(DIRECTORY "other licenses" DESTINATION .)
if(WIN32)
if(WINDOWS_FTD3XX_USE_SHARED_LIB)
if(FTD3XX_USE AND WINDOWS_FTD3XX_USE_SHARED_LIB)
install(FILES ${FTD3XX_DLL} DESTINATION .)
endif()
if(WINDOWS_FTD2XX_USE_SHARED_LIB)
if(FTD2XX_USE AND WINDOWS_FTD2XX_USE_SHARED_LIB)
install(FILES ${FTD2XX_DLL} DESTINATION .)
endif()
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(FW_APP ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${OUTPUT_NAME}.app)
set(FW_DIRS ${sfml_SOURCE_DIR}/extlibs/libs-osx/Frameworks)
set(FW_DIRS ${sfml_SOURCE_DIR}/extlibs/libs-macos/Frameworks)
set_target_properties(${OUTPUT_NAME} PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_BUNDLE_NAME ${OUTPUT_NAME}

View File

@ -7,8 +7,6 @@
#include "capture_structs.hpp"
#include "display_structs.hpp"
#define USE_FTD3
void list_devices_ftd3(std::vector<CaptureDevice> &devices_list);
bool connect_ftd3(bool print_failed, CaptureData* capture_data, CaptureDevice* device);
void ftd3_capture_main_loop(CaptureData* capture_data);

View File

@ -16,7 +16,7 @@ struct Sample {
class Audio : public sf::SoundStream {
public:
bool restart = false;
volatile bool restart = false;
std::queue<Sample> samples;
ConsumerMutex samples_wait;
@ -30,7 +30,8 @@ public:
private:
AudioData *audio_data;
int final_volume = -1;
bool terminate;
volatile bool inside_onGetData = false;
volatile bool terminate = false;
int num_consecutive_fast_seek;
std::int16_t *buffer;
std::chrono::time_point<std::chrono::high_resolution_clock> clock_time_start;

View File

@ -7,8 +7,6 @@
#include "capture_structs.hpp"
#include "display_structs.hpp"
#define USE_FTD2
void list_devices_ftd2(std::vector<CaptureDevice> &devices_list);
bool connect_ftd2(bool print_failed, CaptureData* capture_data, CaptureDevice* device);
void ftd2_capture_main_loop(CaptureData* capture_data);

View File

@ -7,8 +7,6 @@
#include "capture_structs.hpp"
#include "display_structs.hpp"
#define USE_DS_3DS_USB
void list_devices_usb_ds_3ds(std::vector<CaptureDevice> &devices_list);
bool connect_usb(bool print_failed, CaptureData* capture_data, CaptureDevice* device);
void usb_capture_main_loop(CaptureData* capture_data);

View File

@ -7,8 +7,6 @@
#include "capture_structs.hpp"
#include "display_structs.hpp"
#define USE_IS_NITRO_USB
void list_devices_is_nitro(std::vector<CaptureDevice> &devices_list);
bool is_nitro_connect_usb(bool print_failed, CaptureData* capture_data, CaptureDevice* device);
void is_nitro_capture_main_loop(CaptureData* capture_data);

View File

@ -2,6 +2,7 @@
#include "utils.hpp"
#include "audio.hpp"
#include "hw_defs.hpp"
#include "frontend.hpp"
#include <chrono>
#include <queue>
@ -46,6 +47,7 @@ void Audio::update_volume() {
void Audio::start_audio() {
samples_wait.try_lock();
inside_onGetData = false;
terminate = false;
num_consecutive_fast_seek = 0;
this->clock_time_start = std::chrono::high_resolution_clock::now();
@ -54,6 +56,8 @@ void Audio::start_audio() {
void Audio::stop_audio() {
terminate = true;
samples_wait.unlock();
while(inside_onGetData)
default_sleep();
}
bool Audio::hasTooMuchTimeElapsed() {
@ -74,11 +78,14 @@ bool Audio::onGetData(sf::SoundStream::Chunk &data) {
return false;
}
inside_onGetData = true;
int loaded_samples = samples.size();
while(loaded_samples <= 0) {
samples_wait.lock();
if(terminate)
if(terminate) {
inside_onGetData = false;
return false;
}
loaded_samples = samples.size();
}
data.samples = (const std::int16_t*)buffer;
@ -130,6 +137,7 @@ bool Audio::onGetData(sf::SoundStream::Chunk &data) {
// Basically, look into how low the time between calls of the function is
clock_time_start = std::chrono::high_resolution_clock::now();
inside_onGetData = false;
return true;
}

View File

@ -256,8 +256,10 @@ static void soundCall(AudioData *audio_data, CaptureData* capture_data) {
}
else {
if(loaded_samples > 0) {
if(audio.hasTooMuchTimeElapsed())
if(audio.hasTooMuchTimeElapsed()) {
audio.stop_audio();
executeSoundRestart(audio, audio_data, true);
}
}
audio.update_volume();
}