diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 54c313d..485d40e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,16 +3,12 @@ run-name: Build release on: [push] jobs: - build-release: + build-linux-windows-android: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 with: submodules: recursive - - name: Set short git commit SHA - id: vars - run: | - echo "COMMIT_SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV - uses: nttld/setup-ndk@v1 id: setup-ndk with: @@ -22,58 +18,90 @@ jobs: - uses: actions/setup-python@v5 - name: install-deps run: | - # install scons PIP_BREAK_SYSTEM_PACKAGES=1 python -m pip install scons==4.4.0 scons --version - # install windows deps sudo apt-get install mingw-w64 sudo update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix - # download steamaudio curl -LO https://github.com/ValveSoftware/steam-audio/releases/download/v4.8.0/steamaudio_4.8.0.zip unzip steamaudio_4.8.0.zip 'steamaudio/lib/**/*' -d src/lib cp src/lib/steamaudio/lib/linux-x64/* project/addons/godot-steam-audio/bin/ cp src/lib/steamaudio/lib/windows-x64/* project/addons/godot-steam-audio/bin/ cp src/lib/steamaudio/lib/android-armv8/* project/addons/godot-steam-audio/bin/android/arm64 cp src/lib/steamaudio/lib/android-x64/* project/addons/godot-steam-audio/bin/android/x86_64 - - name: build-ext + - name: build run: | - make release - - uses: actions/upload-artifact@v4 - with: - name: godot-steam-audio-${{ env.COMMIT_SHORT_SHA }} - path: ${{ github.workspace }}/godot-steam-audio/ - - uses: actions/upload-artifact@v4 + scons platform=android arch=arm64 target=template_release && \ + scons platform=android arch=x86_64 target=template_release && \ + scons platform=android arch=arm64 target=template_debug && \ + scons platform=android arch=x86_64 target=template_debug && \ + scons platform=linux target=template_debug && \ + scons platform=windows target=template_debug && \ + scons platform=linux target=template_release && \ + scons platform=windows target=template_release + - name: Upload bin artifacts + uses: actions/upload-artifact@v4 with: - name: godot-steam-audio-demo-${{ env.COMMIT_SHORT_SHA }} - path: ${{ github.workspace }}/godot-steam-audio-demo/ - build-macos-release: + name: bin-linux-windows-android + path: project/addons/godot-steam-audio/bin/ + + build-macos-ios: runs-on: macos-latest steps: - uses: actions/checkout@v4 with: submodules: recursive - - name: Set short git commit SHA - id: vars - run: | - echo "COMMIT_SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV - uses: actions/setup-python@v5 - name: install-deps run: | - # install scons PIP_BREAK_SYSTEM_PACKAGES=1 python -m pip install scons==4.4.0 scons --version curl -LO https://github.com/ValveSoftware/steam-audio/releases/download/v4.8.0/steamaudio_4.8.0.zip unzip steamaudio_4.8.0.zip 'steamaudio/lib/**/*' -d src/lib cp -r src/lib/steamaudio/lib/osx/* project/addons/godot-steam-audio/bin/ - - name: build-ext + cp src/lib/steamaudio/lib/ios/* project/addons/godot-steam-audio/bin/ios/ + - name: build-ios-deps + run: make ios-deps + - name: build run: | - make macos-release + scons platform=macos target=template_debug && \ + scons platform=macos target=template_release && \ + scons platform=ios arch=arm64 target=template_debug && \ + scons platform=ios arch=arm64 target=template_release + cp src/lib/godot-cpp/bin/libgodot-cpp.ios.template_debug.arm64.a project/addons/godot-steam-audio/bin/ios/ + cp src/lib/godot-cpp/bin/libgodot-cpp.ios.template_release.arm64.a project/addons/godot-steam-audio/bin/ios/ + - name: Upload bin artifacts + uses: actions/upload-artifact@v4 + with: + name: bin-macos-ios + path: project/addons/godot-steam-audio/bin/ + + package: + needs: [build-linux-windows-android, build-macos-ios] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set short git commit SHA + run: | + echo "COMMIT_SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + - name: Package + run: | + cp -r artifacts/bin-linux-windows-android/* project/addons/godot-steam-audio/bin/ + cp -r artifacts/bin-macos-ios/* project/addons/godot-steam-audio/bin/ + rm -f project/addons/godot-steam-audio/bin/libphonon.so.dbg + mkdir godot-steam-audio + cp -r project/addons godot-steam-audio/ + mkdir godot-steam-audio-demo + cp -r project/* godot-steam-audio-demo/ - uses: actions/upload-artifact@v4 with: - name: godot-steam-audio-macos-${{ env.COMMIT_SHORT_SHA }} - path: ${{ github.workspace }}/godot-steam-audio/ + name: godot-steam-audio-${{ env.COMMIT_SHORT_SHA }} + path: godot-steam-audio/ - uses: actions/upload-artifact@v4 with: - name: godot-steam-audio-demo-macos-${{ env.COMMIT_SHORT_SHA }} - path: ${{ github.workspace }}/godot-steam-audio-demo/ + name: godot-steam-audio-demo-${{ env.COMMIT_SHORT_SHA }} + path: godot-steam-audio-demo/ diff --git a/.gitmodules b/.gitmodules index b3f3e91..8aaac39 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,3 +6,9 @@ path = src/lib/steamaudio url = https://github.com/ValveSoftware/steam-audio branch = 4.8.0 +[submodule "src/lib/pffft"] + path = src/lib/pffft + url = https://github.com/marton78/pffft.git +[submodule "src/lib/libmysofa"] + path = src/lib/libmysofa + url = https://github.com/hoene/libmysofa.git diff --git a/Makefile b/Makefile index 9b6fbbd..6854793 100644 --- a/Makefile +++ b/Makefile @@ -9,6 +9,7 @@ install-steam-audio: cp src/lib/steamaudio/lib/osx/* project/addons/godot-steam-audio/bin/ cp src/lib/steamaudio/lib/android-armv8/* project/addons/godot-steam-audio/bin/android/arm64 cp src/lib/steamaudio/lib/android-x64/* project/addons/godot-steam-audio/bin/android/x86_64 + cp src/lib/steamaudio/lib/ios/* project/addons/godot-steam-audio/bin/ios/ release: scons platform=android arch=arm64 target=template_release && scons platform=android arch=x86_64 target=template_release && \ @@ -28,3 +29,30 @@ macos-release: cp -r ./project/* ./godot-steam-audio-demo rm -rf ./godot-steam-audio-demo/addons/godot-steam-audio/bin/libphonon.so.dbg cp -r ./godot-steam-audio-demo/addons ./godot-steam-audio + +ios-deps: + # Build pffft for iOS arm64 + IOS_SDK=$$(xcrun --sdk iphoneos --show-sdk-path) && \ + xcrun --sdk iphoneos clang -arch arm64 -isysroot "$$IOS_SDK" -miphoneos-version-min=12.0 -O2 -DPFFFT_ENABLE_NEON \ + -c src/lib/pffft/pffft.c -o src/lib/pffft/pffft.o && \ + xcrun --sdk iphoneos clang -arch arm64 -isysroot "$$IOS_SDK" -miphoneos-version-min=12.0 -O2 -DPFFFT_ENABLE_NEON \ + -c src/lib/pffft/pffft_common.c -o src/lib/pffft/pffft_common.o && \ + ar rcs project/addons/godot-steam-audio/bin/ios/libpffft.a src/lib/pffft/pffft.o src/lib/pffft/pffft_common.o + # Build libmysofa for iOS arm64 + IOS_SDK=$$(xcrun --sdk iphoneos --show-sdk-path) && \ + cmake -S src/lib/libmysofa -B src/lib/libmysofa/build-ios \ + -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=12.0 -DCMAKE_OSX_SYSROOT="$$IOS_SDK" \ + -DBUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF && \ + cmake --build src/lib/libmysofa/build-ios --config Release + cp src/lib/libmysofa/build-ios/src/libmysofa.a project/addons/godot-steam-audio/bin/ios/ + +ios-release: ios-deps + scons platform=ios arch=arm64 target=template_debug && scons platform=ios arch=arm64 target=template_release + cp src/lib/godot-cpp/bin/libgodot-cpp.ios.template_debug.arm64.a project/addons/godot-steam-audio/bin/ios/ + cp src/lib/godot-cpp/bin/libgodot-cpp.ios.template_release.arm64.a project/addons/godot-steam-audio/bin/ios/ + mkdir -p godot-steam-audio-demo + mkdir -p godot-steam-audio + cp -r ./project/* ./godot-steam-audio-demo + rm -rf ./godot-steam-audio-demo/addons/godot-steam-audio/bin/libphonon.so.dbg + cp -r ./godot-steam-audio-demo/addons ./godot-steam-audio diff --git a/SConstruct b/SConstruct index 1c869c2..4a0c649 100644 --- a/SConstruct +++ b/SConstruct @@ -47,14 +47,22 @@ elif env["platform"] == "android": env.Append(LIBPATH=[f'{steam_audio_lib_path}/android-x64']) if env["arch"] == "x86_32": env.Append(LIBPATH=[f'{steam_audio_lib_path}/android-x32']) +elif env["platform"] == "ios": + env.Append(LIBPATH=[f'{steam_audio_lib_path}/ios']) if env["target"] in ["editor", "template_debug"]: doc_data = env.GodotCPPDocData("src/gen/doc_data.gen.cpp", source=Glob("doc_classes/*.xml")) sources.append(doc_data) -library = env.SharedLibrary( - "project/addons/godot-steam-audio/bin/libgodot-steam-audio{}{}".format(env["suffix"], env["SHLIBSUFFIX"]), - source=sources, -) +if env["platform"] == "ios": + library = env.StaticLibrary( + "project/addons/godot-steam-audio/bin/libgodot-steam-audio{}{}".format(env["suffix"], env["LIBSUFFIX"]), + source=sources, + ) +else: + library = env.SharedLibrary( + "project/addons/godot-steam-audio/bin/libgodot-steam-audio{}{}".format(env["suffix"], env["SHLIBSUFFIX"]), + source=sources, + ) Default(library) diff --git a/project/addons/godot-steam-audio/bin/ios/.gitkeep b/project/addons/godot-steam-audio/bin/ios/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/project/addons/godot-steam-audio/bin/libgodot-steam-audio.gdextension b/project/addons/godot-steam-audio/bin/libgodot-steam-audio.gdextension index 14e78c7..f74df31 100644 --- a/project/addons/godot-steam-audio/bin/libgodot-steam-audio.gdextension +++ b/project/addons/godot-steam-audio/bin/libgodot-steam-audio.gdextension @@ -15,6 +15,8 @@ windows.x86_64.debug = "res://addons/godot-steam-audio/bin/libgodot-steam-audio. windows.x86_64.release = "res://addons/godot-steam-audio/bin/libgodot-steam-audio.windows.template_release.x86_64.dll" macos.debug = "res://addons/godot-steam-audio/bin/libgodot-steam-audio.macos.template_debug.universal.dylib" macos.release = "res://addons/godot-steam-audio/bin/libgodot-steam-audio.macos.template_release.universal.dylib" +ios.arm64.debug = "res://addons/godot-steam-audio/bin/libgodot-steam-audio.ios.template_debug.arm64.a" +ios.arm64.release = "res://addons/godot-steam-audio/bin/libgodot-steam-audio.ios.template_release.arm64.a" [icons] @@ -62,3 +64,15 @@ android.arm64.debug = { android.arm64.release = { "res://addons/godot-steam-audio/bin/android/arm64/libphonon.so": "" } +ios.arm64.debug = { + "res://addons/godot-steam-audio/bin/ios/libphonon.a": "", + "res://addons/godot-steam-audio/bin/ios/libgodot-cpp.ios.template_debug.arm64.a": "", + "res://addons/godot-steam-audio/bin/ios/libpffft.a": "", + "res://addons/godot-steam-audio/bin/ios/libmysofa.a": "" +} +ios.arm64.release = { + "res://addons/godot-steam-audio/bin/ios/libphonon.a": "", + "res://addons/godot-steam-audio/bin/ios/libgodot-cpp.ios.template_release.arm64.a": "", + "res://addons/godot-steam-audio/bin/ios/libpffft.a": "", + "res://addons/godot-steam-audio/bin/ios/libmysofa.a": "" +} diff --git a/src/lib/libmysofa b/src/lib/libmysofa new file mode 160000 index 0000000..3f4cb66 --- /dev/null +++ b/src/lib/libmysofa @@ -0,0 +1 @@ +Subproject commit 3f4cb663f171ecb5c6fc3262fb6156efb3f1ddd2 diff --git a/src/lib/pffft b/src/lib/pffft new file mode 160000 index 0000000..d321d00 --- /dev/null +++ b/src/lib/pffft @@ -0,0 +1 @@ +Subproject commit d321d006467fcdcafc4298901c27541a18da598c diff --git a/src/server_init.cpp b/src/server_init.cpp index a7e17c8..541085d 100644 --- a/src/server_init.cpp +++ b/src/server_init.cpp @@ -85,6 +85,10 @@ IPLSceneSettings create_scene_cfg(IPLContext ctx) { OS::get_singleton()->get_name() == "Android") { SteamAudioConfig::scene_type = IPL_SCENETYPE_DEFAULT; SteamAudio::log(SteamAudio::log_info, "Embree is not supported on Android, reverting to default scene type."); + } else if (SteamAudioConfig::scene_type == IPL_SCENETYPE_EMBREE && + OS::get_singleton()->get_name() == "iOS") { + SteamAudioConfig::scene_type = IPL_SCENETYPE_DEFAULT; + SteamAudio::log(SteamAudio::log_info, "Embree is not supported on iOS, reverting to default scene type."); } scene_cfg.type = SteamAudioConfig::scene_type;