determinism_check.yml 12 KB

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