From c05b709d43b15c703d461baac0034a9e736d5f74 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 08:47:36 +1000 Subject: [PATCH 01/17] Updated viewer_manifest for Linux CEF updates --- indra/newview/viewer_manifest.py | 84 +++++--------------------------- 1 file changed, 13 insertions(+), 71 deletions(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index d5191235bb..e09be6d752 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1901,25 +1901,23 @@ class LinuxManifest(ViewerManifest): # CEF files with self.prefix(src=os.path.join(pkgdir, 'lib', 'release'), dst="lib"): self.path( "libcef.so" ) - self.path( "libEGL.so" ) - self.path( "libGLESv2.so" ) - self.path( "libvk_swiftshader.so" ) - self.path_optional( "libminigbm.so" ) + self.path( "libEGL*" ) + self.path( "libvulkan*" ) + self.path( "libvk_swiftshader*" ) + self.path( "libGLESv2*" ) with self.prefix(src=os.path.join(pkgdir, 'bin', 'release'), dst="bin"): self.path( "chrome-sandbox" ) self.path( "dullahan_host" ) - self.path( "snapshot_blob.bin" ) - self.path( "v8_context_snapshot.bin" ) - with self.prefix(src=os.path.join(pkgdir, 'bin', 'release'), dst="lib"): - self.path( "snapshot_blob.bin" ) - self.path( "v8_context_snapshot.bin" ) - with self.prefix(src=os.path.join(pkgdir, 'resources'), dst="bin"): - self.path( "chrome_100_percent.pak" ) - self.path( "chrome_200_percent.pak" ) - self.path( "resources.pak" ) - self.path( "icudtl.dat" ) + with self.prefix(src=os.path.join(pkgdir, 'lib', 'release'), dst="bin"): + self.path( "v8_context_snapshot.bin" ) + self.path( "vk_swiftshader_icd.json") + + with self.prefix(src=os.path.join(pkgdir, 'lib', 'release'), dst="lib"): + self.path( "v8_context_snapshot.bin" ) + self.path( "vk_swiftshader_icd.json") + with self.prefix(src=os.path.join(pkgdir, 'resources'), dst="lib"): self.path( "chrome_100_percent.pak" ) self.path( "chrome_200_percent.pak" ) @@ -1927,63 +1925,7 @@ class LinuxManifest(ViewerManifest): self.path( "icudtl.dat" ) with self.prefix(src=os.path.join(pkgdir, 'resources', 'locales'), dst=os.path.join('lib', 'locales')): - self.path("am.pak") - self.path("ar.pak") - self.path("bg.pak") - self.path("bn.pak") - self.path("ca.pak") - self.path("cs.pak") - self.path("da.pak") - self.path("de.pak") - self.path("el.pak") - self.path("en-GB.pak") - self.path("en-US.pak") - self.path("es-419.pak") - self.path("es.pak") - self.path("et.pak") - self.path("fa.pak") - self.path("fi.pak") - self.path("fil.pak") - self.path("fr.pak") - self.path("gu.pak") - self.path("he.pak") - self.path("hi.pak") - self.path("hr.pak") - self.path("hu.pak") - self.path("id.pak") - self.path("it.pak") - self.path("ja.pak") - self.path("kn.pak") - self.path("ko.pak") - self.path("lt.pak") - self.path("lv.pak") - self.path("ml.pak") - self.path("mr.pak") - self.path("ms.pak") - self.path("nb.pak") - self.path("nl.pak") - self.path("pl.pak") - self.path("pt-BR.pak") - self.path("pt-PT.pak") - self.path("ro.pak") - self.path("ru.pak") - self.path("sk.pak") - self.path("sl.pak") - self.path("sr.pak") - self.path("sv.pak") - self.path("sw.pak") - self.path("ta.pak") - self.path("te.pak") - self.path("th.pak") - self.path("tr.pak") - self.path("uk.pak") - self.path("vi.pak") - self.path("zh-CN.pak") - self.path("zh-TW.pak") - - # llcommon - #if not self.path("../llcommon/libllcommon.so", "lib/libllcommon.so"): - # print("Skipping llcommon.so (assuming llcommon was linked statically))" + self.path("*.pak") self.path("featuretable_linux.txt") self.path("cube.dae") From 4961ed126fd1d05e8a3b7ce97e449ca27c631272 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 09:32:42 +1000 Subject: [PATCH 02/17] Fixed --build flag to work with VS2026+ --- scripts/configure_firestorm.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/scripts/configure_firestorm.sh b/scripts/configure_firestorm.sh index 8ecc4981b7..8f8eba388d 100755 --- a/scripts/configure_firestorm.sh +++ b/scripts/configure_firestorm.sh @@ -615,7 +615,16 @@ if [ $WANTS_BUILD -eq $TRUE ] ; then make -j $JOBS | tee -a "$LOG" fi elif [ $TARGET_PLATFORM == "windows" ] ; then - msbuild.exe Firestorm.sln -p:Configuration=${BTYPE} -flp:LogFile="logs\\FirestormBuild_win-${AUTOBUILD_ADDRSIZE}.log" \ + # VS2026+ now uses .slnx so determine which one exists + if [ -f "Firestorm.slnx" ]; then + SOLUTION="Firestorm.slnx" + elif [ -f "Firestorm.sln" ]; then + SOLUTION="Firestorm.sln" + else + echo "Build failed! No Firestorm.slnx or Firestorm.sln found" + exit 1 + fi + msbuild.exe "$SOLUTION" -p:Configuration=${BTYPE} -flp:LogFile="logs\\FirestormBuild_win-${AUTOBUILD_ADDRSIZE}.log" \ -flp1:"errorsonly;LogFile=logs\\FirestormBuild_win-${AUTOBUILD_ADDRSIZE}.err" -p:Platform=${AUTOBUILD_WIN_VSPLATFORM} -t:Build -p:useenv=true \ -verbosity:normal -toolsversion:Current -p:"VCBuildAdditionalOptions= /incremental" fi From aa4d3732121ba927665e149d78d7e29dc27a1f80 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 10:50:53 +1000 Subject: [PATCH 03/17] Attempted fix for building with Havok_TPV --- indra/newview/CMakeLists.txt | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 84d30727db..2964233df5 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2517,16 +2517,26 @@ elseif (DARWIN) # We can only do these if building with Havok ) - if(HAVOK OR HAVOK_TPV) - set_target_properties(${VIEWER_BINARY_NAME} - PROPERTIES - # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 - XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL" - XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=arm64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_STUB" - # only generate the .MAP file for llphysicsextensions_tpv on x86_64 - XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${CMAKE_CURRENT_BINARY_DIR}/llphysicsextensions/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensions -Xlinker -map -Xlinker ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME}.MAP" - XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) -L${CMAKE_CURRENT_BINARY_DIR}/llphysicsextensionsstub/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensionsstub" - ) + if(HAVOK) + set_target_properties(${VIEWER_BINARY_NAME} + PROPERTIES + # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL" + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=arm64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_STUB" + # only generate the .MAP file for llphysicsextensions_tpv on x86_64 + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${CMAKE_CURRENT_BINARY_DIR}/llphysicsextensions/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensions -Xlinker -map -Xlinker ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME}.MAP" + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) -L${CMAKE_BINARY_DIR}/llphysicsextensionsstub/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensionsstub" + ) + elseif(HAVOK_TPV) + set_target_properties(${VIEWER_BINARY_NAME} + PROPERTIES + # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL" + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=arm64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_STUB" + # only generate the .MAP file for llphysicsextensions_tpv on x86_64 + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${ARCH_PREBUILT_DIRS}/ -lllphysicsextensions_tpv" + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) -L${CMAKE_BINARY_DIR}/llphysicsextensionsstub/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensionsstub" + ) endif() # else (WINDOWS) From 7f24a0e8ab5968445832e7e4a9324b62fef9e8d5 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 12:26:08 +1000 Subject: [PATCH 04/17] Workaround to fix deep signing on macOS with universal build --- indra/newview/viewer_manifest.py | 118 +++++++++++++++++-------------- 1 file changed, 64 insertions(+), 54 deletions(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index e09be6d752..535beb7155 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1754,63 +1754,73 @@ class Darwin_x86_64_Manifest(ViewerManifest): self.run_command(['security', 'unlock-keychain', '-p', keychain_pwd, viewer_keychain]) - sign_retry_wait=15 - resources = app_in_dmg + "/Contents/Resources/" - plain_sign = glob.glob(resources + "llplugin/*.dylib") + with tempfile.TemporaryDirectory() as tmpdir: + tmp_app_path = os.path.join(tmpdir, self.app_name() + ".app") + print("Copying app to temporary folder for signing:", tmp_app_path) + subprocess.run(['ditto', app_in_dmg, tmp_app_path], check=True) - # Even though we got some dylibs in Resources signed by LL, we also got some there that are *NOT* - # At least: fmod, growl, GLOD - # We could selectively sign those, or repackage them and then sign them. For an easy clean sweet we just resign them al - plain_sign += glob.glob(resources + "*.dylib") - plain_sign += glob.glob(resources + "llplugin/lib/*.dylib") - plain_sign += glob.glob(resources + "SLPlugin.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/*.dylib") + sign_retry_wait=15 + resources = tmp_app_path + "/Contents/Resources/" + plain_sign = glob.glob(resources + "llplugin/*.dylib") - deep_sign = [ - # Firestorm does not ship SLVersionChecker - #resources + "updater/SLVersionChecker", - resources + "SLPlugin.app/Contents/MacOS/SLPlugin", - resources + "SLVoice", - app_in_dmg, - ] - for attempt in range(3): - if attempt: # second or subsequent iteration - print("codesign failed, waiting {:d} seconds before retrying".format(sign_retry_wait), - file=sys.stderr) - time.sleep(sign_retry_wait) - sign_retry_wait*=2 + # Even though we got some dylibs in Resources signed by LL, we also got some there that are *NOT* + # At least: fmod, growl, GLOD + # We could selectively sign those, or repackage them and then sign them. For an easy clean sweet we just resign them al + plain_sign += glob.glob(resources + "*.dylib") + plain_sign += glob.glob(resources + "llplugin/lib/*.dylib") + plain_sign += glob.glob(resources + "SLPlugin.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/*.dylib") - try: - # Note: See blurb above about names of keychains - for signee in plain_sign: - args = [ - 'codesign', - '--force', - '--timestamp' - ] - if not ad_hoc_sign: - args += ['--keychain', viewer_keychain] - args += ['--sign', identity, signee] - self.run_command(args) - for signee in deep_sign: - args = [ - 'codesign', - '--verbose', - '--deep', - '--force', - '--entitlements', self.src_path_of("slplugin.entitlements"), - '--options', 'runtime' - ] - if not ad_hoc_sign: - args += ['--keychain', viewer_keychain] - args += ['--sign', identity, signee] - self.run_command(args) - break # if no exception was raised, the codesign worked - except ManifestError as err: - # 'err' goes out of scope - sign_failed = err - else: - print("Maximum codesign attempts exceeded; giving up", file=sys.stderr) - raise sign_failed + deep_sign = [ + # Firestorm does not ship SLVersionChecker + #resources + "updater/SLVersionChecker", + resources + "SLPlugin.app/Contents/MacOS/SLPlugin", + resources + "SLVoice", + tmp_app_path, + ] + for attempt in range(3): + if attempt: # second or subsequent iteration + print("codesign failed, waiting {:d} seconds before retrying".format(sign_retry_wait), + file=sys.stderr) + time.sleep(sign_retry_wait) + sign_retry_wait*=2 + + try: + # Note: See blurb above about names of keychains + for signee in plain_sign: + args = [ + 'codesign', + '--force', + '--timestamp' + ] + if not ad_hoc_sign: + args += ['--keychain', viewer_keychain] + args += ['--sign', identity, signee] + self.run_command(args) + for signee in deep_sign: + args = [ + 'codesign', + '--verbose', + '--deep', + '--force', + '--entitlements', self.src_path_of("slplugin.entitlements"), + '--options', 'runtime' + ] + if not ad_hoc_sign: + args += ['--keychain', viewer_keychain] + args += ['--sign', identity, signee] + self.run_command(args) + break # if no exception was raised, the codesign worked + except ManifestError as err: + # 'err' goes out of scope + sign_failed = err + else: + print("Maximum codesign attempts exceeded; giving up", file=sys.stderr) + raise sign_failed + + # Copy signed app back into mounted sparse image + print("Copying signed app back into mounted sparse image") + shutil.rmtree(app_in_dmg) + subprocess.run(['ditto', tmp_app_path, app_in_dmg], check=True) if not ad_hoc_sign: # This fails sometimes and works other times. Even when notarization (down below) is a success From fc7a909b8da32a58d57c4c32fabea6e7ee905f53 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 12:59:01 +1000 Subject: [PATCH 05/17] Further attempted fixes for building with Havok_TPV on macOS --- indra/cmake/LLPhysicsExtensions.cmake | 7 +++++-- indra/newview/CMakeLists.txt | 6 ++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake index 6b8f50419c..2d4734c61c 100644 --- a/indra/cmake/LLPhysicsExtensions.cmake +++ b/indra/cmake/LLPhysicsExtensions.cmake @@ -40,8 +40,9 @@ elseif (HAVOK_TPV) # havok lib get installed to packages/lib link_directories( ${LIBS_PREBUILT_DIR}/lib ) # +endif () -else (HAVOK) +if ((NOT HAVOK AND NOT HAVOK_TPV) OR DARWIN) # ARM64 requires ndPhyicsStub use_prebuilt_binary( ndPhysicsStub ) # Don't set this variable, there is no need to build any stub source if using ndPhysicsStub @@ -68,7 +69,9 @@ else (HAVOK) libnd_Pathing.a PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - target_link_libraries(llphysicsextensions_impl INTERFACE ${ND_HACDCONVEXDECOMPOSITION_LIBRARY} ${HACD_LIBRARY} ${ND_PATHING_LIBRARY}) + if (NOT DARWIN) # Done in newview/CMakeLists.txt for darwin + target_link_libraries(llphysicsextensions_impl INTERFACE ${ND_HACDCONVEXDECOMPOSITION_LIBRARY} ${HACD_LIBRARY} ${ND_PATHING_LIBRARY}) + endif() # # include paths for LLs version and ours are different. diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 2964233df5..ef597a01c4 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2532,10 +2532,12 @@ elseif (DARWIN) PROPERTIES # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL" - XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=arm64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_STUB" # only generate the .MAP file for llphysicsextensions_tpv on x86_64 XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${ARCH_PREBUILT_DIRS}/ -lllphysicsextensions_tpv" - XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) -L${CMAKE_BINARY_DIR}/llphysicsextensionsstub/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensionsstub" + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) \ + ${ND_HACDCONVEXDECOMPOSITION_LIBRARY} \ + ${HACD_LIBRARY} \ + ${ND_PATHING_LIBRARY}" ) endif() # From a9c9522189f445e7b413238220c051d70be049bd Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 13:06:45 +1000 Subject: [PATCH 06/17] Fixed cmake argument mismatch warning --- indra/cmake/LLPhysicsExtensions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake index 2d4734c61c..291af3a58b 100644 --- a/indra/cmake/LLPhysicsExtensions.cmake +++ b/indra/cmake/LLPhysicsExtensions.cmake @@ -78,7 +78,7 @@ if ((NOT HAVOK AND NOT HAVOK_TPV) OR DARWIN) # ARM64 requires ndPhyicsSt target_include_directories( llphysicsextensions_impl INTERFACE ${LIBS_PREBUILT_DIR}/include/ ) # -endif (HAVOK) +endif () # include paths for LLs version and ours are different. #target_include_directories( llphysicsextensions_impl INTERFACE ${LIBS_PREBUILT_DIR}/include/llphysicsextensions) From b4bef3964b7e77e1303f0452049bf26b23f67ba0 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 13:18:39 +1000 Subject: [PATCH 07/17] Corrected ndPhysicsStub usage check for macOS --- indra/cmake/LLPhysicsExtensions.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake index 291af3a58b..26727f3f29 100644 --- a/indra/cmake/LLPhysicsExtensions.cmake +++ b/indra/cmake/LLPhysicsExtensions.cmake @@ -69,7 +69,7 @@ if ((NOT HAVOK AND NOT HAVOK_TPV) OR DARWIN) # ARM64 requires ndPhyicsSt libnd_Pathing.a PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - if (NOT DARWIN) # Done in newview/CMakeLists.txt for darwin + if (NOT HAVOK AND NOT HAVOK_TPV) # Done in newview/CMakeLists.txt for darwin if Havok is enabled target_link_libraries(llphysicsextensions_impl INTERFACE ${ND_HACDCONVEXDECOMPOSITION_LIBRARY} ${HACD_LIBRARY} ${ND_PATHING_LIBRARY}) endif() # From 54212f1b6c37aa354f3b7a4042130f6d6d49b469 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 20:10:20 +1000 Subject: [PATCH 08/17] More fixes for Havok_TPV to try compile on macOS with universal build --- indra/cmake/LLPhysicsExtensions.cmake | 14 ++++++++++---- indra/newview/CMakeLists.txt | 14 +++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake index 26727f3f29..8b4faa50b7 100644 --- a/indra/cmake/LLPhysicsExtensions.cmake +++ b/indra/cmake/LLPhysicsExtensions.cmake @@ -29,10 +29,16 @@ if (HAVOK) #target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensionsstub) else() target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions) + target_compile_definitions( llphysicsextensions_impl INTERFACE LL_HAVOK=1 ) endif() elseif (HAVOK_TPV) use_prebuilt_binary(llphysicsextensions_tpv) - target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions_tpv) + # Done in newview/CMakeLists.txt for darwin if Havok is enabled + if (NOT DARWIN) + target_link_libraries( llphysicsextensions_impl INTERFACE llphysicsextensions_tpv) + target_compile_definitions( llphysicsextensions_impl INTERFACE LL_HAVOK=1 ) + endif() + # # include paths for LLs version and ours are different. target_include_directories( llphysicsextensions_impl INTERFACE ${LIBS_PREBUILT_DIR}/include/llphysicsextensions) # @@ -42,7 +48,7 @@ elseif (HAVOK_TPV) # endif () -if ((NOT HAVOK AND NOT HAVOK_TPV) OR DARWIN) # ARM64 requires ndPhyicsStub +if ((NOT HAVOK AND NOT HAVOK_TPV) OR DARWIN) # ARM64 requires ndPhysicsStub use_prebuilt_binary( ndPhysicsStub ) # Don't set this variable, there is no need to build any stub source if using ndPhysicsStub @@ -69,7 +75,7 @@ if ((NOT HAVOK AND NOT HAVOK_TPV) OR DARWIN) # ARM64 requires ndPhyicsSt libnd_Pathing.a PATHS "${ARCH_PREBUILT_DIRS_RELEASE}" REQUIRED NO_DEFAULT_PATH) - if (NOT HAVOK AND NOT HAVOK_TPV) # Done in newview/CMakeLists.txt for darwin if Havok is enabled + if (NOT HAVOK AND NOT HAVOK_TPV) # Done in newview/CMakeLists.txt for darwin if Havok is enabled target_link_libraries(llphysicsextensions_impl INTERFACE ${ND_HACDCONVEXDECOMPOSITION_LIBRARY} ${HACD_LIBRARY} ${ND_PATHING_LIBRARY}) endif() # @@ -82,4 +88,4 @@ endif () # include paths for LLs version and ours are different. #target_include_directories( llphysicsextensions_impl INTERFACE ${LIBS_PREBUILT_DIR}/include/llphysicsextensions) -# \ No newline at end of file +# diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index ef597a01c4..bc9256ac7b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -60,7 +60,7 @@ include(Discord) if (LLPHYSICSEXTENSIONS_SRC_DIR) # -if (NOT HAVOK_TPV) +if (HAVOK) # When using HAVOK_TPV, the library is precompiled, so no need for this # Stub and probably havok lib itself is a hack, autobuild loads a 3p that really is a source tarball @@ -86,7 +86,7 @@ if (NOT HAVOK_TPV) target_compile_options( llphysicsextensions PRIVATE -Wno-unused-local-typedef) endif (DARWIN) endif() -endif (NOT HAVOK_TPV) +endif () # endif (LLPHYSICSEXTENSIONS_SRC_DIR) @@ -2233,10 +2233,6 @@ if (WINDOWS) list(APPEND viewer_SOURCE_FILES ${viewer_INSTALLER_FILES}) endif (WINDOWS) -if (HAVOK OR HAVOK_TPV) - set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_HAVOK") -endif (HAVOK OR HAVOK_TPV) - if( DEFINED LLSTARTUP_COMPILE_FLAGS ) # progress view disables/enables icons based on available packages set_source_files_properties(llprogressview.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}") @@ -2521,7 +2517,7 @@ elseif (DARWIN) set_target_properties(${VIEWER_BINARY_NAME} PROPERTIES # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 - XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL" + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL -DLL_HAVOK=1" XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=arm64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_STUB" # only generate the .MAP file for llphysicsextensions_tpv on x86_64 XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${CMAKE_CURRENT_BINARY_DIR}/llphysicsextensions/$,$,${CMAKE_CFG_INTDIR}>/ -lllphysicsextensions -Xlinker -map -Xlinker ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_BINARY_NAME}.MAP" @@ -2531,9 +2527,9 @@ elseif (DARWIN) set_target_properties(${VIEWER_BINARY_NAME} PROPERTIES # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 - XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL" + XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL -DLL_HAVOK=1" # only generate the .MAP file for llphysicsextensions_tpv on x86_64 - XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${ARCH_PREBUILT_DIRS}/ -lllphysicsextensions_tpv" + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -lllphysicsextensions_tpv" XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) \ ${ND_HACDCONVEXDECOMPOSITION_LIBRARY} \ ${HACD_LIBRARY} \ From be91f40da3f1c8716d1c46e87f3ac08f59f6b2eb Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Tue, 18 Nov 2025 21:41:53 +1000 Subject: [PATCH 09/17] Try looking for Havok_TPV in /lib instead... --- indra/newview/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index bc9256ac7b..4744c14a15 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -2529,7 +2529,7 @@ elseif (DARWIN) # arch specific flags for universal builds: https://stackoverflow.com/a/77942065 XCODE_ATTRIBUTE_OTHER_CFLAGS[arch=x86_64] "$(inherited) -DLLPHYSICSEXTENSIONS_USE_FULL -DLL_HAVOK=1" # only generate the .MAP file for llphysicsextensions_tpv on x86_64 - XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -lllphysicsextensions_tpv" + XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=x86_64] "$(inherited) -L${ARCH_PREBUILT_DIRS}/lib -lllphysicsextensions_tpv" XCODE_ATTRIBUTE_OTHER_LDFLAGS[arch=arm64] "$(inherited) \ ${ND_HACDCONVEXDECOMPOSITION_LIBRARY} \ ${HACD_LIBRARY} \ From f6276fa43310f62d8c51898da9bf75a0e7fa75b4 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Tue, 18 Nov 2025 13:18:35 +0100 Subject: [PATCH 10/17] FIRE-36116 Experimental outfits list refresh optimization (debounce redundant refreshList() calls, the onIdleRefreshList() should take care of the updates) - disabled by default Use FSExperimentalOutfitsReturn debug setting to access it Signed-off-by: PanteraPolnocy --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/lloutfitslist.cpp | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b5cc87f659..33788d2d84 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -27072,5 +27072,16 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSExperimentalOutfitsReturn + + Comment + FIRE-36116 - debounce redundant refreshList calls + Persist + 1 + Type + Boolean + Value + 0 + diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index fae02f4e05..2d0780d2b9 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -1072,6 +1072,15 @@ void LLOutfitListBase::refreshList(const LLUUID& category_id) return; } bool wasNull = mRefreshListState.CategoryUUID.isNull(); + + // FIRE-36116 (saving a second outfit freezes Firestorm indefinitely) + static LLCachedControl fsExperimentalOutfitsReturn(gSavedSettings, "FSExperimentalOutfitsReturn"); + if (fsExperimentalOutfitsReturn && !wasNull && mRefreshListState.CategoryUUID == category_id) + { + return; + } + // + mRefreshListState.CategoryUUID.setNull(); LLInventoryModel::cat_array_t cat_array; From ee69eb747a3fe49d7d2ad2cf75e726ad635ff8b8 Mon Sep 17 00:00:00 2001 From: Hecklezz Date: Wed, 19 Nov 2025 00:47:28 +1000 Subject: [PATCH 11/17] Notarize on macOS outside the dmg sparse image due to size constraints --- indra/newview/viewer_manifest.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 535beb7155..c1c286cf04 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1817,16 +1817,16 @@ class Darwin_x86_64_Manifest(ViewerManifest): print("Maximum codesign attempts exceeded; giving up", file=sys.stderr) raise sign_failed - # Copy signed app back into mounted sparse image - print("Copying signed app back into mounted sparse image") + # Signing succeeded, now delete the original app in the mounted sparse image and notarize if needed shutil.rmtree(app_in_dmg) - subprocess.run(['ditto', tmp_app_path, app_in_dmg], check=True) + if not ad_hoc_sign: + # This fails sometimes and works other times. Even when notarization (down below) is a success + # Remove it for now and investigate after we did notarize a few times + #self.run_command(['spctl', '-a', '-texec', '-vvvv', app_in_dmg]) + self.run_command([self.src_path_of("installers/darwin/apple-notarize.sh"), tmp_app_path]) - if not ad_hoc_sign: - # This fails sometimes and works other times. Even when notarization (down below) is a success - # Remove it for now and investigate after we did notarize a few times - #self.run_command(['spctl', '-a', '-texec', '-vvvv', app_in_dmg]) - self.run_command([self.src_path_of("installers/darwin/apple-notarize.sh"), app_in_dmg]) + print("Copying signed app back into mounted sparse image") + subprocess.run(['ditto', tmp_app_path, app_in_dmg], check=True) finally: # Unmount the image even if exceptions from any of the above From 821c9e049706736d26a57cf7671fd9ee40fec4b4 Mon Sep 17 00:00:00 2001 From: PanteraPolnocy Date: Tue, 18 Nov 2025 17:09:55 +0100 Subject: [PATCH 12/17] FIRE-36123 Update Japanese translation, by Logue Takacs Signed-off-by: PanteraPolnocy --- .../ansastorm/xui/ja/panel_main_inventory.xml | 1 + .../skins/default/xui/ja/floater_marketplace.xml | 14 ++++++++++++++ .../skins/default/xui/ja/floater_search.xml | 14 ++++++++++++++ .../newview/skins/default/xui/ja/notifications.xml | 12 ++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 indra/newview/skins/default/xui/ja/floater_marketplace.xml create mode 100644 indra/newview/skins/default/xui/ja/floater_search.xml diff --git a/indra/newview/skins/ansastorm/xui/ja/panel_main_inventory.xml b/indra/newview/skins/ansastorm/xui/ja/panel_main_inventory.xml index 20b97988a6..6d9508abc1 100644 --- a/indra/newview/skins/ansastorm/xui/ja/panel_main_inventory.xml +++ b/indra/newview/skins/ansastorm/xui/ja/panel_main_inventory.xml @@ -126,6 +126,7 @@ + diff --git a/indra/newview/skins/default/xui/ja/floater_marketplace.xml b/indra/newview/skins/default/xui/ja/floater_marketplace.xml new file mode 100644 index 0000000000..dca52a486b --- /dev/null +++ b/indra/newview/skins/default/xui/ja/floater_marketplace.xml @@ -0,0 +1,14 @@ + + + + +