Skip to content

Commit

Permalink
[steam-audio] Adding port (#40942)
Browse files Browse the repository at this point in the history
Co-authored-by: Kai Pastor <[email protected]>
Co-authored-by: Billy Robert O'Neal III <[email protected]>
  • Loading branch information
3 people authored Feb 4, 2025
1 parent cbf6fe2 commit d80311e
Show file tree
Hide file tree
Showing 7 changed files with 390 additions and 0 deletions.
13 changes: 13 additions & 0 deletions ports/steam-audio/fix-arm64-windows.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index ab49461..9d53dce 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -43,6 +43,8 @@ endif()
if (IPL_OS_WINDOWS)
if (CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64")
set(IPL_CPU_ARMV8 TRUE)
+ elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
+ set(IPL_CPU_ARMV8 TRUE)
elseif (CMAKE_SIZEOF_VOID_P EQUAL 8)
set(IPL_CPU_X64 TRUE)
else()
75 changes: 75 additions & 0 deletions ports/steam-audio/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
if(VCPKG_TARGET_IS_UWP)
vcpkg_check_linkage(ONLY_DYNAMIC_CRT) # also sets STEAMAUDIO_STATIC_RUNTIME=OFF
endif()

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO ValveSoftware/steam-audio
REF "3a030b0ec02311a9778563313f2db1ba4a490a67"
SHA512 c0f0fe678f7b82b95b1736dbc308e041621873a57fdb5b1ba9ec5acf8bf6f06718566ade05b2193e24ae7295c4ea2383e45cf95c70ccd36308ed4cdfbfb045a9
HEAD_REF "v${VERSION}"
PATCHES
use-vcpkg-deps.patch
fix-arm64-windows.patch
)

if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_IOS)
if("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x64")
set(MACOS_ARCH "x86_64")
elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm64")
set(MACOS_ARCH "arm64")
else()
message(FATAL "Unsupported arch")
endif()
set(VCPKG_MACOS_ARCH "-DVCPKG_MACOS_ARCH=${MACOS_ARCH}")
endif()

# Set STEAMAUDIO_STATIC_RUNTIME, which is only used on Windows to set /M[TD]d?
if(VCPKG_TARGET_IS_WINDOWS)
string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" STATIC_CRT)
set(WINDOWS_STATIC_RUNTIME "-DSTEAMAUDIO_STATIC_RUNTIME=${STATIC_CRT}")
endif()

# We need to find flatc for steam-audio
find_program(FlatBuffers_EXECUTABLE NAMES flatc PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools/flatbuffers" "bin" NO_DEFAULT_PATHS)

vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}/core"
OPTIONS
-DFlatBuffers_EXECUTABLE=${FlatBuffers_EXECUTABLE}
-DSTEAMAUDIO_BUILD_TESTS=OFF
-DSTEAMAUDIO_BUILD_ITESTS=OFF
-DSTEAMAUDIO_BUILD_SAMPLES=OFF
-DSTEAMAUDIO_BUILD_BENCHMARKS=OFF
-DSTEAMAUDIO_BUILD_DOCS=OFF
-DSTEAMAUDIO_ENABLE_AVX=OFF # Windows only. Maybe expose as a feature?
# Below features all require closed source third party dependencies
${WINDOWS_STATIC_RUNTIME}
-DSTEAMAUDIO_ENABLE_IPP=OFF
-DSTEAMAUDIO_ENABLE_FFTS=OFF
-DSTEAMAUDIO_ENABLE_EMBREE=OFF
-DSTEAMAUDIO_ENABLE_RADEONRAYS=OFF
-DSTEAMAUDIO_ENABLE_TRUEAUDIONEXT=OFF
${VCPKG_MACOS_ARCH}
)

vcpkg_cmake_install()
vcpkg_copy_pdbs()
vcpkg_fixup_pkgconfig()
vcpkg_cmake_config_fixup()


file(REMOVE_RECURSE
"${CURRENT_PACKAGES_DIR}/debug/include"
"${CURRENT_PACKAGES_DIR}/git" # readme/docs
"${CURRENT_PACKAGES_DIR}/debug/git"
"${CURRENT_PACKAGES_DIR}/root" # duplicate of THIRDPARTY.md
)

file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
vcpkg_install_copyright(COMMENT
[[steam-audio's license and third party notices are included below. In steam-audio's third party
notices, PFFT and MySOFA are provided by other ports upon which this one depends. IPP, FFTS,
Embree, RadeonRays, and TrueAudioNext are all disabled in this build. However, the CIPIC HRTF
Database and Google Spherical Harmonics library components may be used here.]]
FILE_LIST "${SOURCE_PATH}/LICENSE.md" "${SOURCE_PATH}/core/THIRDPARTY.md")
4 changes: 4 additions & 0 deletions ports/steam-audio/usage
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
steam-audio provides CMake targets:

find_package(steam-audio CONFIG REQUIRED)
target_link_libraries(main PRIVATE unofficial::steam-audio::phonon)
260 changes: 260 additions & 0 deletions ports/steam-audio/use-vcpkg-deps.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,260 @@
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index ab49461..8b81aca 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -192,7 +192,7 @@ endif()

# macOS flags
if (IPL_OS_MACOS)
- set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
+ set(CMAKE_OSX_ARCHITECTURES "${VCPKG_MACOS_ARCH}")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13")
add_compile_options(-Wno-extern-c-compat) # Suppress warning about empty API structs.
add_compile_options(-Wno-unknown-attributes) # Suppress warning in FlatBuffers.
@@ -240,7 +240,7 @@ if (STEAMAUDIO_ENABLE_FFTS)
endif()

if (NOT FFT_LIBRARY)
- find_package(PFFFT REQUIRED)
+ find_package(PFFFT CONFIG REQUIRED)
set(FFT_LIBRARY PFFFT)
endif()

@@ -252,8 +252,8 @@ if (STEAMAUDIO_ENABLE_MKL)
endif()
endif()

-find_package(MySOFA REQUIRED)
-find_package(FlatBuffers REQUIRED)
+find_package(mysofa CONFIG REQUIRED)
+find_package(FlatBuffers CONFIG REQUIRED)

if (STEAMAUDIO_ENABLE_EMBREE)
find_package(ISPC 1.12 EXACT)
diff --git a/core/src/core/CMakeLists.txt b/core/src/core/CMakeLists.txt
index 7c9226f..56c4c44 100644
--- a/core/src/core/CMakeLists.txt
+++ b/core/src/core/CMakeLists.txt
@@ -176,7 +180,8 @@ endif()
#

add_library(hrtf OBJECT hrtf.cpp)
-target_include_directories(hrtf PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+target_include_directories(hrtf PUBLIC
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>")


#
@@ -582,7 +587,8 @@ if (STEAMAUDIO_BUILD_CSHARP_BINDINGS)
endif()

# This is needed so we can include generated headers
-target_include_directories(core PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
+target_include_directories(core PUBLIC
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>")

if (IPL_OS_WINDOWS)
target_link_libraries(core PUBLIC delayimp)
@@ -596,7 +602,7 @@ if (IPL_OS_LINUX)
target_link_libraries(core PUBLIC -Wl,--start-group)
endif()

-target_link_libraries(core PUBLIC FlatBuffers::FlatBuffers)
+target_link_libraries(core PUBLIC flatbuffers::flatbuffers)

if (STEAMAUDIO_ENABLE_IPP AND (IPL_OS_WINDOWS OR IPL_OS_LINUX OR IPL_OS_MACOS))
target_link_libraries(core PUBLIC IPP::IPP)
@@ -610,10 +616,10 @@ if (FFT_LIBRARY STREQUAL "IPP")
elseif (FFT_LIBRARY STREQUAL "FFTS")
target_link_libraries(core PUBLIC FFTS::FFTS)
elseif (FFT_LIBRARY STREQUAL "PFFFT")
- target_link_libraries(core PUBLIC PFFFT::PFFFT)
+ target_link_libraries(core PUBLIC pffft::pffft)
endif()

-target_link_libraries(core PUBLIC MySOFA::MySOFA)
+target_link_libraries(core PUBLIC $<IF:$<TARGET_EXISTS:mysofa::mysofa-shared>,mysofa::mysofa-shared,mysofa::mysofa-static>)
add_dependencies(core fbschemas)

if (STEAMAUDIO_ENABLE_EMBREE)
@@ -639,7 +645,7 @@ source_group("OpenCL Files" FILES ${CL_SOURCE})

target_compile_definitions(core PRIVATE STEAMAUDIO_BUILDING_CORE)

-target_precompile_headers(core PUBLIC pch.h)
+target_precompile_headers(core PRIVATE pch.h)


#
@@ -671,7 +677,7 @@ if (IPL_OS_LINUX)
endif()

if (IPL_OS_WINDOWS AND IPL_CPU_X64 AND BUILD_SHARED_LIBS)
- set_target_properties(phonon PROPERTIES LINK_FLAGS "/DELAYLOAD:opencl.dll /DELAYLOAD:gpuutilities.dll /DELAYLOAD:trueaudionext.dll")
+ #set_target_properties(phonon PROPERTIES LINK_FLAGS "/DELAYLOAD:opencl.dll /DELAYLOAD:gpuutilities.dll /DELAYLOAD:trueaudionext.dll")
endif()

if (IPL_OS_LINUX AND BUILD_SHARED_LIBS AND (NOT IPL_CPU_ARMV8))
@@ -729,8 +735,8 @@ if (NOT FMOD_LIB_DIR STREQUAL "")
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/phonon.h ${FMOD_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/phonon_version.h ${FMOD_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/phonon_interfaces.h ${FMOD_INCLUDE_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:PFFFT::PFFFT> ${FMOD_LIB_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:MySOFA::MySOFA> ${FMOD_LIB_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pffft::pffft> ${FMOD_LIB_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:$<IF:$<TARGET_EXISTS:mysofa::mysofa-shared>,mysofa::mysofa-shared,mysofa::mysofa-static>> ${FMOD_LIB_DIR}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:phonon> ${FMOD_LIB_DIR}
)
else()
@@ -851,8 +857,8 @@ if (NOT UNITY_PLUGIN_DIR STREQUAL "")
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/phonon_version.h ${UNITY_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/phonon_interfaces.h ${UNITY_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:phonon> ${UNITY_LIB_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:PFFFT::PFFFT> ${UNITY_PLUGIN_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:MySOFA::MySOFA> ${UNITY_PLUGIN_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pffft::pffft> ${UNITY_PLUGIN_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:$<IF:$<TARGET_EXISTS:mysofa::mysofa-shared>,mysofa::mysofa-shared,mysofa::mysofa-static>> ${UNITY_PLUGIN_DIR}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:phonon> ${UNITY_PLUGIN_DIR}
)
else()
@@ -913,8 +919,8 @@ if (NOT UNREAL_PLUGIN_DIR STREQUAL "")
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/phonon.h ${UNREAL_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/phonon_version.h ${UNREAL_INCLUDE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/phonon_interfaces.h ${UNREAL_INCLUDE_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:PFFFT::PFFFT> ${UNREAL_PLUGIN_DIR}
- COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:MySOFA::MySOFA> ${UNREAL_PLUGIN_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:pffft::pffft> ${UNREAL_PLUGIN_DIR}
+ COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:$<IF:$<TARGET_EXISTS:mysofa::mysofa-shared>,mysofa::mysofa-shared,mysofa::mysofa-static>> ${UNREAL_PLUGIN_DIR}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:phonon> ${UNREAL_PLUGIN_DIR}
)
elseif (IPL_OS_MACOS)
@@ -953,30 +959,34 @@ get_bin_subdir(IPL_BIN_SUBDIR)

install(
TARGETS phonon
- ARCHIVE DESTINATION lib/${IPL_BIN_SUBDIR}
- LIBRARY DESTINATION lib/${IPL_BIN_SUBDIR}
- RUNTIME DESTINATION lib/${IPL_BIN_SUBDIR}
+ EXPORT steam-audio_exports
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION bin
)

if (IPL_OS_MACOS)
install(
TARGETS phonon_bundle
- ARCHIVE DESTINATION lib/${IPL_BIN_SUBDIR}
- LIBRARY DESTINATION lib/${IPL_BIN_SUBDIR}
- RUNTIME DESTINATION lib/${IPL_BIN_SUBDIR}
+ EXPORT steam-audio_exports
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION bin
)
endif()

-if (IPL_OS_WINDOWS)
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/phonon.pdb
- DESTINATION symbols/${IPL_BIN_SUBDIR}
- )
-elseif (IPL_OS_LINUX AND NOT IPL_CPU_ARMV8)
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/libphonon.so.dbg
- DESTINATION symbols/${IPL_BIN_SUBDIR}
- )
+if(BUILD_SHARED_LIBS)
+ if (IPL_OS_WINDOWS)
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/phonon.pdb
+ DESTINATION bin
+ )
+ elseif (IPL_OS_LINUX AND NOT IPL_CPU_ARMV8)
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/libphonon.so.dbg
+ DESTINATION bin
+ )
+ endif()
endif()

install(
@@ -986,6 +996,7 @@ install(
DESTINATION include
)

+#[[
if (IPL_OS_WINDOWS AND IPL_CPU_X64)
install(
FILES ${CMAKE_HOME_DIRECTORY}/deps/trueaudionext/bin/windows-x64/$<LOWER_CASE:$<CONFIG>>/TrueAudioNext.dll
@@ -993,5 +1004,30 @@ if (IPL_OS_WINDOWS AND IPL_CPU_X64)
DESTINATION lib/${IPL_BIN_SUBDIR}
)
endif()
+]]#
+
+export(EXPORT steam-audio_exports
+ NAMESPACE unofficial::steam-audio::
+ FILE ${CMAKE_CURRENT_BINARY_DIR}/steam-audioTargets.cmake
+)
+
+# required to resolve object libraries on import
+install(TARGETS core hrtf EXPORT steam-audio_exports)
+
+install(EXPORT steam-audio_exports
+ NAMESPACE unofficial::steam-audio::
+ FILE steam-audioTargets.cmake
+ DESTINATION share/steam-audio
+)
+
+include(CMakePackageConfigHelpers)
+configure_package_config_file(steam-audio-config.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/steam-audio-config.cmake
+ INSTALL_DESTINATION share/steam-audio)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/steam-audio-config.cmake
+ DESTINATION share/steam-audio )
+
+

include(CMakeListsInternal.txt OPTIONAL)
diff --git a/core/src/core/float4.h b/core/src/core/float4.h
index a221372..03428db 100644
--- a/core/src/core/float4.h
+++ b/core/src/core/float4.h
@@ -41,7 +41,7 @@ namespace float4

}

-#if defined(IPL_OS_WINDOWS)
+#if defined(IPL_OS_WINDOWS) && !defined(__clang__)

namespace ipl {

diff --git a/core/src/core/pffft_fft.cpp b/core/src/core/pffft_fft.cpp
index 0a37114..4f5debe 100644
--- a/core/src/core/pffft_fft.cpp
+++ b/core/src/core/pffft_fft.cpp
@@ -16,7 +16,7 @@

#include "fft.h"

-#include <pffft.h>
+#include <pffft/pffft.h>

#include "array.h"
#include "array_math.h"
diff --git a/core/src/core/steam-audio-config.cmake.in b/core/src/core/steam-audio-config.cmake.in
new file mode 100644
index 0000000..776f7aa
--- /dev/null
+++ b/core/src/core/steam-audio-config.cmake.in
@@ -0,0 +1,7 @@
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+
+include(${CMAKE_CURRENT_LIST_DIR}/steam-audioTargets.cmake)
+
+check_required_components(steam-audio)
\ No newline at end of file
25 changes: 25 additions & 0 deletions ports/steam-audio/vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "steam-audio",
"version": "4.5.3",
"description": "Valve's steam audio library",
"homepage": "https://github.com/ValveSoftware/steam-audio",
"license": "Apache-2.0",
"supports": "!uwp",
"dependencies": [
"flatbuffers",
{
"name": "flatbuffers",
"host": true
},
"libmysofa",
"pffft",
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
]
}
4 changes: 4 additions & 0 deletions versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -8764,6 +8764,10 @@
"baseline": "1.2.3",
"port-version": 0
},
"steam-audio": {
"baseline": "4.5.3",
"port-version": 0
},
"stftpitchshift": {
"baseline": "1.4.1",
"port-version": 0
Expand Down
Loading

0 comments on commit d80311e

Please sign in to comment.