TestFramework.cmake 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. if (NOT CROSS_COMPILE_ARM AND (JPH_USE_VK OR JPH_USE_DX12 OR JPH_USE_MTL))
  2. # We have Vulkan/DirectX/Metal so we can compile TestFramework
  3. set(TEST_FRAMEWORK_AVAILABLE TRUE)
  4. # Root
  5. set(TEST_FRAMEWORK_ROOT ${PHYSICS_REPO_ROOT}/TestFramework)
  6. # Source files
  7. set(TEST_FRAMEWORK_SRC_FILES
  8. ${TEST_FRAMEWORK_ROOT}/Application/Application.cpp
  9. ${TEST_FRAMEWORK_ROOT}/Application/Application.h
  10. ${TEST_FRAMEWORK_ROOT}/Application/DebugUI.cpp
  11. ${TEST_FRAMEWORK_ROOT}/Application/DebugUI.h
  12. ${TEST_FRAMEWORK_ROOT}/Application/EntryPoint.h
  13. ${TEST_FRAMEWORK_ROOT}/External/Perlin.cpp
  14. ${TEST_FRAMEWORK_ROOT}/External/Perlin.h
  15. ${TEST_FRAMEWORK_ROOT}/External/stb_truetype.h
  16. ${TEST_FRAMEWORK_ROOT}/Image/BlitSurface.cpp
  17. ${TEST_FRAMEWORK_ROOT}/Image/BlitSurface.h
  18. ${TEST_FRAMEWORK_ROOT}/Image/LoadBMP.cpp
  19. ${TEST_FRAMEWORK_ROOT}/Image/LoadBMP.h
  20. ${TEST_FRAMEWORK_ROOT}/Image/LoadTGA.cpp
  21. ${TEST_FRAMEWORK_ROOT}/Image/LoadTGA.h
  22. ${TEST_FRAMEWORK_ROOT}/Image/Surface.cpp
  23. ${TEST_FRAMEWORK_ROOT}/Image/Surface.h
  24. ${TEST_FRAMEWORK_ROOT}/Image/ZoomImage.cpp
  25. ${TEST_FRAMEWORK_ROOT}/Image/ZoomImage.h
  26. ${TEST_FRAMEWORK_ROOT}/Input/Keyboard.h
  27. ${TEST_FRAMEWORK_ROOT}/Input/Mouse.h
  28. ${TEST_FRAMEWORK_ROOT}/Renderer/CameraState.h
  29. ${TEST_FRAMEWORK_ROOT}/Renderer/DebugRendererImp.cpp
  30. ${TEST_FRAMEWORK_ROOT}/Renderer/DebugRendererImp.h
  31. ${TEST_FRAMEWORK_ROOT}/Renderer/Font.cpp
  32. ${TEST_FRAMEWORK_ROOT}/Renderer/Font.h
  33. ${TEST_FRAMEWORK_ROOT}/Renderer/Frustum.h
  34. ${TEST_FRAMEWORK_ROOT}/Renderer/PipelineState.h
  35. ${TEST_FRAMEWORK_ROOT}/Renderer/PixelShader.h
  36. ${TEST_FRAMEWORK_ROOT}/Renderer/Renderer.cpp
  37. ${TEST_FRAMEWORK_ROOT}/Renderer/Renderer.h
  38. ${TEST_FRAMEWORK_ROOT}/Renderer/RenderInstances.h
  39. ${TEST_FRAMEWORK_ROOT}/Renderer/RenderPrimitive.cpp
  40. ${TEST_FRAMEWORK_ROOT}/Renderer/RenderPrimitive.h
  41. ${TEST_FRAMEWORK_ROOT}/Renderer/Texture.h
  42. ${TEST_FRAMEWORK_ROOT}/Renderer/VertexShader.h
  43. ${TEST_FRAMEWORK_ROOT}/TestFramework.cmake
  44. ${TEST_FRAMEWORK_ROOT}/TestFramework.h
  45. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimation.cpp
  46. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimation.h
  47. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimationSlide.cpp
  48. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimationSlide.h
  49. ${TEST_FRAMEWORK_ROOT}/UI/UIButton.cpp
  50. ${TEST_FRAMEWORK_ROOT}/UI/UIButton.h
  51. ${TEST_FRAMEWORK_ROOT}/UI/UICheckBox.cpp
  52. ${TEST_FRAMEWORK_ROOT}/UI/UICheckBox.h
  53. ${TEST_FRAMEWORK_ROOT}/UI/UIComboBox.cpp
  54. ${TEST_FRAMEWORK_ROOT}/UI/UIComboBox.h
  55. ${TEST_FRAMEWORK_ROOT}/UI/UIElement.cpp
  56. ${TEST_FRAMEWORK_ROOT}/UI/UIElement.h
  57. ${TEST_FRAMEWORK_ROOT}/UI/UIEventListener.h
  58. ${TEST_FRAMEWORK_ROOT}/UI/UIHorizontalStack.cpp
  59. ${TEST_FRAMEWORK_ROOT}/UI/UIHorizontalStack.h
  60. ${TEST_FRAMEWORK_ROOT}/UI/UIImage.cpp
  61. ${TEST_FRAMEWORK_ROOT}/UI/UIImage.h
  62. ${TEST_FRAMEWORK_ROOT}/UI/UIManager.cpp
  63. ${TEST_FRAMEWORK_ROOT}/UI/UIManager.h
  64. ${TEST_FRAMEWORK_ROOT}/UI/UISlider.cpp
  65. ${TEST_FRAMEWORK_ROOT}/UI/UISlider.h
  66. ${TEST_FRAMEWORK_ROOT}/UI/UIStaticText.cpp
  67. ${TEST_FRAMEWORK_ROOT}/UI/UIStaticText.h
  68. ${TEST_FRAMEWORK_ROOT}/UI/UITextButton.cpp
  69. ${TEST_FRAMEWORK_ROOT}/UI/UITextButton.h
  70. ${TEST_FRAMEWORK_ROOT}/UI/UITexturedQuad.h
  71. ${TEST_FRAMEWORK_ROOT}/UI/UIVerticalStack.cpp
  72. ${TEST_FRAMEWORK_ROOT}/UI/UIVerticalStack.h
  73. ${TEST_FRAMEWORK_ROOT}/Utils/CustomMemoryHook.cpp
  74. ${TEST_FRAMEWORK_ROOT}/Utils/CustomMemoryHook.h
  75. ${TEST_FRAMEWORK_ROOT}/Utils/AssetStream.h
  76. ${TEST_FRAMEWORK_ROOT}/Utils/Log.h
  77. ${TEST_FRAMEWORK_ROOT}/Utils/ReadData.cpp
  78. ${TEST_FRAMEWORK_ROOT}/Utils/ReadData.h
  79. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindow.h
  80. )
  81. if (WIN32)
  82. # Windows source files
  83. set(TEST_FRAMEWORK_SRC_FILES
  84. ${TEST_FRAMEWORK_SRC_FILES}
  85. ${TEST_FRAMEWORK_ROOT}/Input/Win/KeyboardWin.cpp
  86. ${TEST_FRAMEWORK_ROOT}/Input/Win/KeyboardWin.h
  87. ${TEST_FRAMEWORK_ROOT}/Input/Win/MouseWin.cpp
  88. ${TEST_FRAMEWORK_ROOT}/Input/Win/MouseWin.h
  89. ${TEST_FRAMEWORK_ROOT}/Utils/AssetStream.cpp
  90. ${TEST_FRAMEWORK_ROOT}/Utils/Log.cpp
  91. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowWin.cpp
  92. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowWin.h
  93. )
  94. # Include the DirectX renderer
  95. if (JPH_USE_DX12)
  96. # DirectX source files
  97. set(TEST_FRAMEWORK_SRC_FILES
  98. ${TEST_FRAMEWORK_SRC_FILES}
  99. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/DescriptorHeapDX12.h
  100. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/FatalErrorIfFailedDX12.cpp
  101. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/FatalErrorIfFailedDX12.h
  102. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/PipelineStateDX12.cpp
  103. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/PipelineStateDX12.h
  104. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/PixelShaderDX12.h
  105. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RendererDX12.cpp
  106. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RendererDX12.h
  107. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderInstancesDX12.cpp
  108. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderInstancesDX12.h
  109. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderPrimitiveDX12.cpp
  110. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderPrimitiveDX12.h
  111. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/TextureDX12.cpp
  112. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/TextureDX12.h
  113. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/VertexShaderDX12.h
  114. )
  115. # HLSL vertex shaders
  116. set(TEST_FRAMEWORK_SRC_FILES_SHADERS
  117. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/VertexConstants.h
  118. )
  119. set(TEST_FRAMEWORK_HLSL_VERTEX_SHADERS
  120. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/FontVertexShader.hlsl
  121. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/LineVertexShader.hlsl
  122. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/TriangleDepthVertexShader.hlsl
  123. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/TriangleVertexShader.hlsl
  124. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/UIVertexShader.hlsl
  125. )
  126. set(TEST_FRAMEWORK_SRC_FILES_SHADERS ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_HLSL_VERTEX_SHADERS})
  127. set_source_files_properties(${TEST_FRAMEWORK_HLSL_VERTEX_SHADERS} PROPERTIES VS_SHADER_FLAGS "/WX /T vs_5_0")
  128. # HLSL pixel shaders
  129. set(TEST_FRAMEWORK_HLSL_PIXEL_SHADERS
  130. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/FontPixelShader.hlsl
  131. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/LinePixelShader.hlsl
  132. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/TriangleDepthPixelShader.hlsl
  133. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/TrianglePixelShader.hlsl
  134. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/UIPixelShader.hlsl
  135. ${PHYSICS_REPO_ROOT}/Assets/Shaders/DX/UIPixelShaderUntextured.hlsl
  136. )
  137. set(TEST_FRAMEWORK_SRC_FILES_SHADERS ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_HLSL_PIXEL_SHADERS})
  138. set_source_files_properties(${TEST_FRAMEWORK_HLSL_PIXEL_SHADERS} PROPERTIES VS_SHADER_FLAGS "/WX /T ps_5_0")
  139. endif()
  140. endif()
  141. if (LINUX)
  142. # Linux source files
  143. set(TEST_FRAMEWORK_SRC_FILES
  144. ${TEST_FRAMEWORK_SRC_FILES}
  145. ${TEST_FRAMEWORK_ROOT}/Input/Linux/KeyboardLinux.cpp
  146. ${TEST_FRAMEWORK_ROOT}/Input/Linux/KeyboardLinux.h
  147. ${TEST_FRAMEWORK_ROOT}/Input/Linux/MouseLinux.cpp
  148. ${TEST_FRAMEWORK_ROOT}/Input/Linux/MouseLinux.h
  149. ${TEST_FRAMEWORK_ROOT}/Utils/AssetStream.cpp
  150. ${TEST_FRAMEWORK_ROOT}/Utils/Log.cpp
  151. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowLinux.cpp
  152. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowLinux.h
  153. )
  154. endif()
  155. if (APPLE)
  156. # macOS source files
  157. set(TEST_FRAMEWORK_SRC_FILES
  158. ${TEST_FRAMEWORK_SRC_FILES}
  159. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/KeyboardMacOS.mm
  160. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/KeyboardMacOS.h
  161. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/MouseMacOS.mm
  162. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/MouseMacOS.h
  163. ${TEST_FRAMEWORK_ROOT}/Utils/AssetStream.mm
  164. ${TEST_FRAMEWORK_ROOT}/Utils/Log.mm
  165. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowMacOS.mm
  166. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowMacOS.h
  167. )
  168. # Include the Metal renderer
  169. if (JPH_USE_MTL)
  170. # Metal source files
  171. set(TEST_FRAMEWORK_SRC_FILES
  172. ${TEST_FRAMEWORK_SRC_FILES}
  173. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/FatalErrorIfFailedMTL.mm
  174. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/FatalErrorIfFailedMTL.h
  175. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/PipelineStateMTL.mm
  176. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/PipelineStateMTL.h
  177. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/PixelShaderMTL.h
  178. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/RendererMTL.mm
  179. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/RendererMTL.h
  180. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/RenderInstancesMTL.mm
  181. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/RenderInstancesMTL.h
  182. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/RenderPrimitiveMTL.mm
  183. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/RenderPrimitiveMTL.h
  184. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/TextureMTL.mm
  185. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/TextureMTL.h
  186. ${TEST_FRAMEWORK_ROOT}/Renderer/MTL/VertexShaderMTL.h
  187. )
  188. # Metal shaders
  189. set(TEST_FRAMEWORK_SRC_FILES_SHADERS
  190. ${PHYSICS_REPO_ROOT}/Assets/Shaders/MTL/VertexConstants.h
  191. )
  192. set(TEST_FRAMEWORK_METAL_SHADERS
  193. ${PHYSICS_REPO_ROOT}/Assets/Shaders/MTL/FontShader.metal
  194. ${PHYSICS_REPO_ROOT}/Assets/Shaders/MTL/LineShader.metal
  195. ${PHYSICS_REPO_ROOT}/Assets/Shaders/MTL/TriangleShader.metal
  196. ${PHYSICS_REPO_ROOT}/Assets/Shaders/MTL/UIShader.metal
  197. )
  198. # Compile Metal shaders
  199. foreach(SHADER ${TEST_FRAMEWORK_METAL_SHADERS})
  200. cmake_path(GET SHADER FILENAME AIR_SHADER)
  201. set(AIR_SHADER "${CMAKE_CURRENT_BINARY_DIR}/${AIR_SHADER}.air")
  202. add_custom_command(OUTPUT ${AIR_SHADER}
  203. COMMAND xcrun -sdk macosx metal -c ${SHADER} -o ${AIR_SHADER}
  204. DEPENDS ${SHADER}
  205. COMMENT "Compiling ${SHADER}")
  206. list(APPEND TEST_FRAMEWORK_MTL_SHADERS ${AIR_SHADER})
  207. endforeach()
  208. # Link Metal shaders
  209. set(TEST_FRAMEWORK_METAL_LIB ${PHYSICS_REPO_ROOT}/Assets/Shaders/MTL/Shaders.metallib)
  210. add_custom_command(OUTPUT ${TEST_FRAMEWORK_METAL_LIB}
  211. COMMAND xcrun -sdk macosx metallib -o ${TEST_FRAMEWORK_METAL_LIB} ${TEST_FRAMEWORK_MTL_SHADERS}
  212. DEPENDS ${TEST_FRAMEWORK_MTL_SHADERS}
  213. COMMENT "Linking shaders")
  214. endif()
  215. endif()
  216. # Include the Vulkan renderer
  217. if (JPH_USE_VK)
  218. # Vulkan source files
  219. set(TEST_FRAMEWORK_SRC_FILES
  220. ${TEST_FRAMEWORK_SRC_FILES}
  221. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/FatalErrorIfFailedVK.cpp
  222. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/FatalErrorIfFailedVK.h
  223. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/PipelineStateVK.cpp
  224. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/PipelineStateVK.h
  225. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/PixelShaderVK.h
  226. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RendererVK.cpp
  227. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RendererVK.h
  228. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderInstancesVK.cpp
  229. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderInstancesVK.h
  230. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderPrimitiveVK.cpp
  231. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderPrimitiveVK.h
  232. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/TextureVK.cpp
  233. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/TextureVK.h
  234. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/VertexShaderVK.h
  235. )
  236. # GLSL headers
  237. set(TEST_FRAMEWORK_SRC_FILES_SHADERS
  238. ${TEST_FRAMEWORK_SRC_FILES_SHADERS}
  239. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/VertexConstants.h
  240. )
  241. set(TEST_FRAMEWORK_GLSL_SHADERS
  242. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/FontVertexShader.vert
  243. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/LineVertexShader.vert
  244. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/TriangleDepthVertexShader.vert
  245. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/TriangleVertexShader.vert
  246. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/UIVertexShader.vert
  247. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/FontPixelShader.frag
  248. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/LinePixelShader.frag
  249. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/TriangleDepthPixelShader.frag
  250. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/TrianglePixelShader.frag
  251. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/UIPixelShader.frag
  252. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VK/UIPixelShaderUntextured.frag
  253. )
  254. # Compile GLSL shaders
  255. foreach(SHADER ${TEST_FRAMEWORK_GLSL_SHADERS})
  256. string(REPLACE ".vert" ".spv" SPV_SHADER ${SHADER})
  257. string(REPLACE ".frag" ".spv" SPV_SHADER ${SPV_SHADER})
  258. add_custom_command(OUTPUT ${SPV_SHADER}
  259. COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER} -o ${SPV_SHADER}
  260. DEPENDS ${SHADER}
  261. COMMENT "Compiling ${SHADER}")
  262. list(APPEND TEST_FRAMEWORK_SPV_SHADERS ${SPV_SHADER})
  263. endforeach()
  264. endif()
  265. # Assets used by the test framework
  266. set(TEST_FRAMEWORK_ASSETS
  267. ${PHYSICS_REPO_ROOT}/Assets/Fonts/Roboto-Regular.ttf
  268. ${PHYSICS_REPO_ROOT}/Assets/UI.tga
  269. ${JOLT_PHYSICS_SPV_SHADERS}
  270. ${JOLT_PHYSICS_METAL_LIB}
  271. ${TEST_FRAMEWORK_SRC_FILES_SHADERS}
  272. ${TEST_FRAMEWORK_HLSL_VERTEX_SHADERS}
  273. ${TEST_FRAMEWORK_HLSL_PIXEL_SHADERS}
  274. ${TEST_FRAMEWORK_SPV_SHADERS}
  275. ${TEST_FRAMEWORK_METAL_LIB}
  276. )
  277. # Group source files
  278. source_group(TREE ${TEST_FRAMEWORK_ROOT} FILES ${TEST_FRAMEWORK_SRC_FILES})
  279. # Group shader files
  280. source_group(TREE ${PHYSICS_REPO_ROOT} FILES ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_GLSL_SHADERS} ${TEST_FRAMEWORK_METAL_SHADERS})
  281. # Group intermediate files
  282. source_group(Intermediate FILES ${TEST_FRAMEWORK_SPV_SHADERS} ${TEST_FRAMEWORK_METAL_LIB})
  283. # Create TestFramework lib
  284. add_library(TestFramework STATIC ${TEST_FRAMEWORK_SRC_FILES} ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_GLSL_SHADERS} ${TEST_FRAMEWORK_SPV_SHADERS} ${TEST_FRAMEWORK_METAL_SHADERS} ${TEST_FRAMEWORK_METAL_LIB})
  285. target_include_directories(TestFramework PUBLIC ${TEST_FRAMEWORK_ROOT})
  286. target_precompile_headers(TestFramework PUBLIC ${TEST_FRAMEWORK_ROOT}/TestFramework.h)
  287. if (WIN32)
  288. # Windows configuration
  289. target_link_libraries(TestFramework LINK_PUBLIC Jolt dinput8.lib shcore.lib dxguid.lib)
  290. endif()
  291. if (LINUX)
  292. # Linux configuration
  293. target_link_libraries(TestFramework LINK_PUBLIC Jolt X11)
  294. endif()
  295. if (APPLE)
  296. # macOS configuration
  297. target_link_libraries(TestFramework LINK_PUBLIC Jolt "-framework Cocoa -framework GameController")
  298. # Make sure that all test framework assets move to the Resources folder in the package
  299. foreach(ASSET_FILE ${TEST_FRAMEWORK_ASSETS})
  300. string(REPLACE ${PHYSICS_REPO_ROOT}/Assets "Resources" ASSET_DST ${ASSET_FILE})
  301. string(REPLACE ${PHYSICS_REPO_ROOT}/Jolt "Resources/Jolt" ASSET_DST ${ASSET_DST})
  302. get_filename_component(ASSET_DST ${ASSET_DST} DIRECTORY)
  303. set_source_files_properties(${ASSET_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION ${ASSET_DST})
  304. endforeach()
  305. # Ignore PCH files for .mm files
  306. foreach(SRC_FILE ${TEST_FRAMEWORK_SRC_FILES})
  307. if (SRC_FILE MATCHES "\.mm")
  308. set_source_files_properties(${SRC_FILE} PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
  309. endif()
  310. endforeach()
  311. endif()
  312. else()
  313. # No graphics framework found
  314. set(TEST_FRAMEWORK_AVAILABLE FALSE)
  315. endif()