mirror of
https://github.com/project-slippi/Ishiiruka.git
synced 2025-10-06 00:12:42 +02:00
* Add support for Rust in CMake via Corrosion * Tweak .gitignore to handle Rust target dir * It's 3AM and I have no desire to deal with this * Initial scaffolding for loading Rust library in Dolphin * Expose the Dolphin logging mechanisms to Rust via some callback trickery * Attempt patching Core.vcxproj to support building Rust dylib * Attempt patching Core.vcxproj to support building Rust dylib, take 2 OR * Instruct the build to actually use the steps * Attempt the older style vcxproj definition format * Push build targets to end * Just don't use va_args when calling through from Rust * Enable Windows project linking, move to generic project structure, start moving out of HW * Add note to README about Rust requirement * Update slippi-rust-extensions to have proper EXI Device skeleton * Attach shadow EXI device to cpp EXI device, add feature flag for playback-specific code, rewrite README for rust extensions slightly * Remove unused log file * Ongoing logging work * Tweak Dolphin LogContainer to auto forward enabled/level status over to Rust, expose more methods on Rust side for control, rebuild logger layer subscriber * Remove debug flag for release mode but add note about it * Reorganize module definitions, pass in sampler handler fn for SoundStream * Fix log target * Rename to SlippiRustExtensions, separate out into cargo workspace, rename General Rust log * Tweak logging layer so that we don't double-allocate strings on all log messages, properly surface log locations * cargo fmt * initial port of slippi-jukebox code * minor cleanup and leverage channels rather than atomic bool for stopping threads * Add config option for enabling/disabling Jukebox * Invert shutdown order for Memory and ExpansionInterface so we avoid a null ptr race in the Jukebox, as we need Memory to still be valid at Jukebox shutdown * update dolphin additional include dirs to facilitate new slippi config pane changes * Ensure Core is running before trying to find an EXI device, as ExpansionInterface isn't initialized unless Core is running - fixes a crash on bad access * Expose streaming sampler to jukebox, disable DVDInterface streaming sampler pushes to avoid null data being pushed in * Expose setters for streaming sample rate and streaming volume to Rust * jukebox: renaming variables for clarity * try to use new jukebox sample functions * jukebox: add support for all star rest area * jukebox: add support for adventure mode field stages * jukebox: continuously send chunks of pcm data to dolphin's audio mixer * Audio somewhat coming through now, albeit with pops and pitch issues... * Force-log samples to wav * jukebox: switch from dolphin mixer back to rodio for music playback * Mark doc example as notest * Attempt an initial CI pass * Tinkering with CI * Specify CI working directory for cargo fmt * Specify CI working directory for cargo fmt * Specify CI working directory for cargo fmt * Specify CI working directory for cargo fmt * Specify CI working directory for cargo fmt * Specify CI working directory for cargo fmt * [CI] More permissive for compiling code * jukebox: replace rand with fastrand * jukebox: dont use static memory for menu & tournament tracks * Attempt to resolve Windows playback lib loading oddity * Add a method for grabbing the current volume level * Have Dolphin pass over the iso path and a getter for the volume level * Cargo fmt pass * Include rustfmt.toml * Remove the Jukebox config option from playback builds entirely, do not start the jukebox if we're in WASAPI Exclusive mode * Ix-nay the bad check I copied by accident, lol * SlippiRustExtensions: add build instructions for windows * jukebox: make proper use of dolphin's volume + remove unused dependencies * SlippiRustExtensions(readme): simplify suggested out-of-band build command * jukebox: remove 'anyhow' dependency * jukebox: simplify read_dolphin_state fn * jukebox: reduce hps fingerprint size for track matching * jukebox: remove 'bus' dependency and improve comments * jukebox: add readme * jukebox: add description field to Cargo.toml * README cleanup, extra writeup for logcontainer creation * Cleanup unused imports * Rename DolphinState to DolphinGameState * Pin to Rust 1.70.0 * Re-enable SFX, stop force-dumping WAV DTK audiograph logs * Revert attempted change of disabling DTK reads * Revise documentation surrounding logging infrastructure changes * Ensure the Volume getter is outside of a C++ namespace, just to try and be careful with ABI oddities * Add an extra LogContainer. - A generic Rust dependencies log container that we can use if we need to ever inspect dependency tracing logs. - Moves the AudioCommon::GetVolume call out of the namespace for now since I want someone (or me, when I get more time) to verify that being inside a C++ namespace is safe. - Remove once_cell as a dependency now that this is pinned to `1.70.0`. * Fix the typo, because C++ * Additional README contexts * ifndef PLAYBACK for GUI toggles * Always publish an artifact for macOS even if we're not signing and notarizing * Try changing into the directory - why is there so little documentation about what is supported in these files...? * Pin toolchain in CI to 1.70.0, update Visual Studio to change into working directory for pre-build Rust step so that toolchain file is actually detected * Opt for a root symlink to the toolchain config per Nikki's idea, comment out forced 1.70.0 in CI build flow * Revert symlink toolchain to see if there's a CI bug for Linux * jukebox: reduce music volume by 20% * jukebox: link to hps_decode crate in the docs * ci: sed out rust version from rust-toolchain.toml * ci: add id field for rust_ver * jukebox: stop blocking the main thread when scanning iso for tracks * jukebox: respect melee's volume setting when restarting jukebox during emulation * jukebox: improve code readability * jukebox: leverage disc filesystem table to locate .hps files * jukebox: minor fst parsing code improvements * remove '.unwrap()' from Jukebox destructor --------- Co-authored-by: Ryan McGrath <ryan@rymc.io> Co-authored-by: Nikhil Narayana <nikhil.narayana@live.com>
135 lines
3.7 KiB
CMake
135 lines
3.7 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(Corrosion
|
|
VERSION 0.4.0
|
|
LANGUAGES NONE
|
|
HOMEPAGE_URL "https://corrosion-rs.github.io/corrosion/"
|
|
)
|
|
|
|
# Default behavior:
|
|
# - If the project is being used as a subdirectory, then don't build tests and
|
|
# don't enable any languages.
|
|
# - If this is a top level project, then build tests and enable the C++ compiler
|
|
if (NOT CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
|
set(_CORROSION_TOP_LEVEL OFF)
|
|
else()
|
|
set(_CORROSION_TOP_LEVEL ON)
|
|
endif()
|
|
|
|
# ==== Corrosion Configuration ====
|
|
|
|
option(
|
|
CORROSION_DEV_MODE
|
|
"Enables some additional features if you're developing Corrosion"
|
|
${_CORROSION_TOP_LEVEL}
|
|
)
|
|
|
|
option(
|
|
CORROSION_BUILD_TESTS
|
|
"Build Corrosion test project"
|
|
${_CORROSION_TOP_LEVEL}
|
|
)
|
|
|
|
set(
|
|
CORROSION_GENERATOR_EXECUTABLE CACHE STRING
|
|
"Use prebuilt, non-bootstrapped corrosion-generator")
|
|
mark_as_advanced(CORROSION_GENERATOR_EXECUTABLE)
|
|
|
|
if (CORROSION_GENERATOR_EXECUTABLE)
|
|
add_executable(Corrosion::Generator IMPORTED GLOBAL)
|
|
set_property(
|
|
TARGET Corrosion::Generator
|
|
PROPERTY IMPORTED_LOCATION ${CORROSION_GENERATOR_EXECUTABLE})
|
|
set(CORROSION_INSTALL_EXECUTABLE_DEFAULT OFF)
|
|
elseif(CORROSION_NATIVE_TOOLING OR CMAKE_VERSION VERSION_LESS 3.19.0)
|
|
set(CORROSION_INSTALL_EXECUTABLE_DEFAULT "ON")
|
|
else()
|
|
set(CORROSION_INSTALL_EXECUTABLE_DEFAULT OFF)
|
|
endif()
|
|
|
|
option(
|
|
CORROSION_INSTALL_EXECUTABLE
|
|
"Controls whether corrosion-generator is installed with the package"
|
|
${CORROSION_INSTALL_EXECUTABLE_DEFAULT}
|
|
)
|
|
mark_as_advanced(CORROSION_INSTALL_EXECUTABLE)
|
|
|
|
if (_CORROSION_TOP_LEVEL)
|
|
# We need to enable a language for corrosions test to work.
|
|
# For projects using corrosion this is not needed
|
|
enable_language(C)
|
|
endif()
|
|
|
|
# This little bit self-hosts the Corrosion toolchain to build the generator
|
|
# tool.
|
|
#
|
|
# It is strongly encouraged to install Corrosion separately and use
|
|
# `find_package(Corrosion REQUIRED)` instead if that works with your workflow.
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
include(Corrosion)
|
|
|
|
# Testing
|
|
if (CORROSION_BUILD_TESTS)
|
|
include(CTest)
|
|
add_subdirectory(test)
|
|
endif()
|
|
|
|
# If Corrosion is a subdirectory, do not enable its install code
|
|
if (NOT _CORROSION_TOP_LEVEL)
|
|
return()
|
|
endif()
|
|
|
|
# Installation
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
if(CORROSION_INSTALL_EXECUTABLE)
|
|
# Builds the generator executable
|
|
corrosion_import_crate(MANIFEST_PATH generator/Cargo.toml)
|
|
|
|
set(_CORROSION_GENERATOR_DESTINATION "${CMAKE_INSTALL_FULL_LIBEXECDIR}")
|
|
|
|
corrosion_install(
|
|
TARGETS corrosion-generator
|
|
DESTINATION "${_CORROSION_GENERATOR_DESTINATION}"
|
|
)
|
|
else()
|
|
message(DEBUG "Not installing corrosion-generator since "
|
|
"`CORROSION_INSTALL_EXECUTABLE` is set to ${CORROSION_INSTALL_EXECUTABLE}"
|
|
)
|
|
endif()
|
|
|
|
# Generate the Config file
|
|
include(CMakePackageConfigHelpers)
|
|
|
|
configure_package_config_file(
|
|
cmake/CorrosionConfig.cmake.in CorrosionConfig.cmake
|
|
INSTALL_DESTINATION
|
|
"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/Corrosion"
|
|
)
|
|
|
|
write_basic_package_version_file(
|
|
"${CMAKE_CURRENT_BINARY_DIR}/CorrosionConfigVersion.cmake"
|
|
VERSION ${PROJECT_VERSION}
|
|
COMPATIBILITY
|
|
SameMinorVersion # TODO: Should be SameMajorVersion when 1.0 is released
|
|
ARCH_INDEPENDENT
|
|
)
|
|
|
|
install(
|
|
FILES
|
|
"${CMAKE_CURRENT_BINARY_DIR}/CorrosionConfig.cmake"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/CorrosionConfigVersion.cmake"
|
|
DESTINATION
|
|
"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/Corrosion"
|
|
)
|
|
|
|
# These CMake scripts are needed both for the install and as a subdirectory
|
|
install(
|
|
FILES
|
|
cmake/Corrosion.cmake
|
|
cmake/CorrosionGenerator.cmake
|
|
cmake/FindRust.cmake
|
|
DESTINATION
|
|
"${CMAKE_INSTALL_FULL_DATADIR}/cmake"
|
|
)
|