determinism_check.yml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. name: Determinism Check
  2. env:
  3. CONVEX_VS_MESH_HASH: '0x10139effe747511'
  4. RAGDOLL_HASH: '0x777396947c3fff6a'
  5. EMSCRIPTEN_VERSION: 3.1.64
  6. UBUNTU_CLANG_VERSION: clang++-15
  7. UBUNTU_GCC_VERSION: g++-12
  8. UBUNTU_GCC_AARCH64_VERSION: aarch64-linux-gnu-g++-12
  9. on:
  10. push:
  11. branches: [ master ]
  12. paths-ignore:
  13. - 'Docs/**'
  14. - '**.md'
  15. pull_request:
  16. branches: [ master ]
  17. paths-ignore:
  18. - 'Docs/**'
  19. - '**.md'
  20. jobs:
  21. linux_clang:
  22. runs-on: ubuntu-latest
  23. name: Linux Clang Determinism Check
  24. steps:
  25. - name: Checkout Code
  26. uses: actions/checkout@v4
  27. - name: Configure CMake
  28. working-directory: ${{github.workspace}}/Build
  29. run: ./cmake_linux_clang_gcc.sh Distribution ${{env.UBUNTU_CLANG_VERSION}} -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  30. - name: Build
  31. run: cmake --build ${{github.workspace}}/Build/Linux_Distribution -j $(nproc)
  32. - name: Unit Tests
  33. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  34. run: ctest --output-on-failure --verbose
  35. - name: Test ConvexVsMesh
  36. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  37. run: ./PerformanceTest -q=LinearCast -t=max -s=ConvexVsMesh -validate_hash=${CONVEX_VS_MESH_HASH}
  38. - name: Test Ragdoll
  39. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  40. run: ./PerformanceTest -q=LinearCast -t=max -s=Ragdoll -validate_hash=${RAGDOLL_HASH}
  41. linux_gcc:
  42. runs-on: ubuntu-latest
  43. name: Linux GCC Determinism Check
  44. steps:
  45. - name: Checkout Code
  46. uses: actions/checkout@v4
  47. - name: Configure CMake
  48. working-directory: ${{github.workspace}}/Build
  49. run: ./cmake_linux_clang_gcc.sh Distribution ${{env.UBUNTU_GCC_VERSION}} -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  50. - name: Build
  51. run: cmake --build ${{github.workspace}}/Build/Linux_Distribution -j $(nproc)
  52. - name: Unit Tests
  53. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  54. run: ctest --output-on-failure --verbose
  55. - name: Test ConvexVsMesh
  56. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  57. run: ./PerformanceTest -q=LinearCast -t=max -s=ConvexVsMesh -validate_hash=${CONVEX_VS_MESH_HASH}
  58. - name: Test Ragdoll
  59. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  60. run: ./PerformanceTest -q=LinearCast -t=max -s=Ragdoll -validate_hash=${RAGDOLL_HASH}
  61. msvc_cl:
  62. runs-on: windows-latest
  63. name: Visual Studio CL Determinism Check
  64. steps:
  65. - name: Checkout Code
  66. uses: actions/checkout@v4
  67. - name: Add msbuild to PATH
  68. uses: microsoft/setup-msbuild@v2
  69. - name: Configure CMake
  70. working-directory: ${{github.workspace}}/Build
  71. run: ./cmake_vs2022_cl.bat -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  72. - name: Build
  73. run: msbuild Build\VS2022_CL\JoltPhysics.sln /property:Configuration=Distribution
  74. - name: Unit Tests
  75. working-directory: ${{github.workspace}}/Build/VS2022_CL/Distribution
  76. run: ./UnitTests.exe
  77. - name: Test ConvexVsMesh
  78. working-directory: ${{github.workspace}}/Build/VS2022_CL/Distribution
  79. run: ./PerformanceTest -q=LinearCast -t=max -s=ConvexVsMesh "-validate_hash=$env:CONVEX_VS_MESH_HASH"
  80. - name: Test Ragdoll
  81. working-directory: ${{github.workspace}}/Build/VS2022_CL/Distribution
  82. run: ./PerformanceTest -q=LinearCast -t=max -s=Ragdoll "-validate_hash=$env:RAGDOLL_HASH"
  83. msvc_cl_32:
  84. runs-on: windows-latest
  85. name: Visual Studio CL 32-bit Determinism Check
  86. steps:
  87. - name: Checkout Code
  88. uses: actions/checkout@v4
  89. - name: Add msbuild to PATH
  90. uses: microsoft/setup-msbuild@v2
  91. - name: Configure CMake
  92. working-directory: ${{github.workspace}}/Build
  93. run: ./cmake_vs2022_cl_32bit.bat -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  94. - name: Build
  95. run: msbuild Build\VS2022_CL_32BIT\JoltPhysics.sln /property:Configuration=Distribution
  96. - name: Unit Tests
  97. working-directory: ${{github.workspace}}/Build/VS2022_CL_32BIT/Distribution
  98. run: ./UnitTests.exe
  99. - name: Test ConvexVsMesh
  100. working-directory: ${{github.workspace}}/Build/VS2022_CL_32BIT/Distribution
  101. run: ./PerformanceTest -q=LinearCast -t=max -s=ConvexVsMesh "-validate_hash=$env:CONVEX_VS_MESH_HASH"
  102. - name: Test Ragdoll
  103. working-directory: ${{github.workspace}}/Build/VS2022_CL_32BIT/Distribution
  104. run: ./PerformanceTest -q=LinearCast -t=max -s=Ragdoll "-validate_hash=$env:RAGDOLL_HASH"
  105. macos:
  106. runs-on: macos-latest
  107. name: macOS Determinism Check
  108. steps:
  109. - name: Checkout Code
  110. uses: actions/checkout@v4
  111. - name: Configure CMake
  112. working-directory: ${{github.workspace}}/Build
  113. run: ./cmake_linux_clang_gcc.sh Distribution clang++ -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  114. - name: Build
  115. run: cmake --build ${{github.workspace}}/Build/Linux_Distribution -j $(nproc)
  116. - name: Unit Tests
  117. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  118. run: ctest --output-on-failure --verbose
  119. - name: Test ConvexVsMesh
  120. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  121. run: ./PerformanceTest -q=LinearCast -t=max -s=ConvexVsMesh -validate_hash=${CONVEX_VS_MESH_HASH}
  122. - name: Test Ragdoll
  123. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  124. run: ./PerformanceTest -q=LinearCast -t=max -s=Ragdoll -validate_hash=${RAGDOLL_HASH}
  125. arm_clang:
  126. runs-on: ubuntu-latest
  127. name: ARM Clang Determinism Check
  128. steps:
  129. - name: Checkout Code
  130. uses: actions/checkout@v4
  131. - name: Update index
  132. run: sudo apt-get update
  133. - name: Install Cross Compiler
  134. run: sudo apt-get install gcc-12-aarch64-linux-gnu gcc-12-multilib g++-12-multilib libstdc++-12-dev-arm64-cross qemu-user -y
  135. - name: Configure CMake
  136. working-directory: ${{github.workspace}}/Build
  137. run: ./cmake_linux_clang_gcc.sh Distribution ${{env.UBUNTU_CLANG_VERSION}} -DCROSS_COMPILE_ARM=ON -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  138. - name: Build
  139. run: cmake --build ${{github.workspace}}/Build/Linux_Distribution -j $(nproc)
  140. - name: Unit Tests
  141. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  142. run: qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./UnitTests
  143. - name: Test ConvexVsMesh
  144. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  145. run: qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./PerformanceTest -q=LinearCast -t=max -s=ConvexVsMesh -validate_hash=${CONVEX_VS_MESH_HASH}
  146. - name: Test Ragdoll
  147. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  148. run: qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./PerformanceTest -q=LinearCast -t=max -s=Ragdoll -validate_hash=${RAGDOLL_HASH}
  149. arm_gcc:
  150. runs-on: ubuntu-latest
  151. name: ARM GCC Determinism Check
  152. steps:
  153. - name: Checkout Code
  154. uses: actions/checkout@v4
  155. - name: Update index
  156. run: sudo apt-get update
  157. - name: Install Cross Compiler
  158. run: sudo apt-get install g++-12-aarch64-linux-gnu gcc-12-multilib g++-12-multilib libstdc++-12-dev-arm64-cross qemu-user -y
  159. - name: Configure CMake
  160. working-directory: ${{github.workspace}}/Build
  161. run: ./cmake_linux_clang_gcc.sh Distribution ${{env.UBUNTU_GCC_AARCH64_VERSION}} -DCROSS_COMPILE_ARM=ON -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  162. - name: Build
  163. run: cmake --build ${{github.workspace}}/Build/Linux_Distribution -j $(nproc)
  164. - name: Unit Tests
  165. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  166. run: qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./UnitTests
  167. - name: Test ConvexVsMesh
  168. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  169. run: qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./PerformanceTest -q=LinearCast -t=max -s=ConvexVsMesh -validate_hash=${CONVEX_VS_MESH_HASH}
  170. - name: Test Ragdoll
  171. working-directory: ${{github.workspace}}/Build/Linux_Distribution
  172. run: qemu-aarch64 -L /usr/aarch64-linux-gnu/ ./PerformanceTest -q=LinearCast -t=max -s=Ragdoll -validate_hash=${RAGDOLL_HASH}
  173. emscripten:
  174. runs-on: ubuntu-latest
  175. name: Emscripten
  176. steps:
  177. - name: Checkout Code
  178. uses: actions/checkout@v4
  179. - name: Setup emsdk
  180. uses: mymindstorm/setup-emsdk@v14
  181. with:
  182. version: ${{env.EMSCRIPTEN_VERSION}}
  183. - name: Verify emsdk
  184. run: emcc -v
  185. - name: Setup Node.js 18.x
  186. uses: actions/setup-node@v4
  187. with:
  188. node-version: 18.x
  189. - name: Configure CMake
  190. working-directory: ${{github.workspace}}/Build
  191. run: ./cmake_linux_emscripten.sh Distribution -DCROSS_PLATFORM_DETERMINISTIC=ON -DTARGET_VIEWER=OFF -DTARGET_SAMPLES=OFF -DTARGET_HELLO_WORLD=OFF -DTARGET_UNIT_TESTS=ON -DTARGET_PERFORMANCE_TEST=ON
  192. - name: Build
  193. run: cmake --build ${{github.workspace}}/Build/WASM_Distribution -j $(nproc)
  194. - name: Unit Tests
  195. working-directory: ${{github.workspace}}/Build/WASM_Distribution
  196. run: node UnitTests.js
  197. - name: Test ConvexVsMesh
  198. working-directory: ${{github.workspace}}/Build/WASM_Distribution
  199. run: node PerformanceTest.js -q=LinearCast -t=max -s=ConvexVsMesh -validate_hash=${CONVEX_VS_MESH_HASH}
  200. - name: Test Ragdoll
  201. working-directory: ${{github.workspace}}/Build/WASM_Distribution
  202. run: node PerformanceTest.js -q=LinearCast -t=max -s=Ragdoll -validate_hash=${RAGDOLL_HASH}