TestFramework.cmake 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. # Find Vulkan
  2. find_package(Vulkan)
  3. if (NOT CROSS_COMPILE_ARM AND (Vulkan_FOUND OR WIN32))
  4. # We have Vulkan/DirectX so we can compile TestFramework
  5. set(TEST_FRAMEWORK_AVAILABLE TRUE)
  6. # Root
  7. set(TEST_FRAMEWORK_ROOT ${PHYSICS_REPO_ROOT}/TestFramework)
  8. # Source files
  9. set(TEST_FRAMEWORK_SRC_FILES
  10. ${TEST_FRAMEWORK_ROOT}/Application/Application.cpp
  11. ${TEST_FRAMEWORK_ROOT}/Application/Application.h
  12. ${TEST_FRAMEWORK_ROOT}/Application/DebugUI.cpp
  13. ${TEST_FRAMEWORK_ROOT}/Application/DebugUI.h
  14. ${TEST_FRAMEWORK_ROOT}/Application/EntryPoint.h
  15. ${TEST_FRAMEWORK_ROOT}/External/Perlin.cpp
  16. ${TEST_FRAMEWORK_ROOT}/External/Perlin.h
  17. ${TEST_FRAMEWORK_ROOT}/External/stb_truetype.h
  18. ${TEST_FRAMEWORK_ROOT}/Image/BlitSurface.cpp
  19. ${TEST_FRAMEWORK_ROOT}/Image/BlitSurface.h
  20. ${TEST_FRAMEWORK_ROOT}/Image/LoadBMP.cpp
  21. ${TEST_FRAMEWORK_ROOT}/Image/LoadBMP.h
  22. ${TEST_FRAMEWORK_ROOT}/Image/LoadTGA.cpp
  23. ${TEST_FRAMEWORK_ROOT}/Image/LoadTGA.h
  24. ${TEST_FRAMEWORK_ROOT}/Image/Surface.cpp
  25. ${TEST_FRAMEWORK_ROOT}/Image/Surface.h
  26. ${TEST_FRAMEWORK_ROOT}/Image/ZoomImage.cpp
  27. ${TEST_FRAMEWORK_ROOT}/Image/ZoomImage.h
  28. ${TEST_FRAMEWORK_ROOT}/Input/Keyboard.h
  29. ${TEST_FRAMEWORK_ROOT}/Input/Mouse.h
  30. ${TEST_FRAMEWORK_ROOT}/Renderer/DebugRendererImp.cpp
  31. ${TEST_FRAMEWORK_ROOT}/Renderer/DebugRendererImp.h
  32. ${TEST_FRAMEWORK_ROOT}/Renderer/Font.cpp
  33. ${TEST_FRAMEWORK_ROOT}/Renderer/Font.h
  34. ${TEST_FRAMEWORK_ROOT}/Renderer/Frustum.h
  35. ${TEST_FRAMEWORK_ROOT}/Renderer/PipelineState.h
  36. ${TEST_FRAMEWORK_ROOT}/Renderer/PixelShader.h
  37. ${TEST_FRAMEWORK_ROOT}/Renderer/Renderer.cpp
  38. ${TEST_FRAMEWORK_ROOT}/Renderer/Renderer.h
  39. ${TEST_FRAMEWORK_ROOT}/Renderer/RenderInstances.h
  40. ${TEST_FRAMEWORK_ROOT}/Renderer/RenderPrimitive.cpp
  41. ${TEST_FRAMEWORK_ROOT}/Renderer/RenderPrimitive.h
  42. ${TEST_FRAMEWORK_ROOT}/Renderer/Texture.h
  43. ${TEST_FRAMEWORK_ROOT}/Renderer/VertexShader.h
  44. ${TEST_FRAMEWORK_ROOT}/TestFramework.cmake
  45. ${TEST_FRAMEWORK_ROOT}/TestFramework.h
  46. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimation.cpp
  47. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimation.h
  48. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimationSlide.cpp
  49. ${TEST_FRAMEWORK_ROOT}/UI/UIAnimationSlide.h
  50. ${TEST_FRAMEWORK_ROOT}/UI/UIButton.cpp
  51. ${TEST_FRAMEWORK_ROOT}/UI/UIButton.h
  52. ${TEST_FRAMEWORK_ROOT}/UI/UICheckBox.cpp
  53. ${TEST_FRAMEWORK_ROOT}/UI/UICheckBox.h
  54. ${TEST_FRAMEWORK_ROOT}/UI/UIComboBox.cpp
  55. ${TEST_FRAMEWORK_ROOT}/UI/UIComboBox.h
  56. ${TEST_FRAMEWORK_ROOT}/UI/UIElement.cpp
  57. ${TEST_FRAMEWORK_ROOT}/UI/UIElement.h
  58. ${TEST_FRAMEWORK_ROOT}/UI/UIEventListener.h
  59. ${TEST_FRAMEWORK_ROOT}/UI/UIHorizontalStack.cpp
  60. ${TEST_FRAMEWORK_ROOT}/UI/UIHorizontalStack.h
  61. ${TEST_FRAMEWORK_ROOT}/UI/UIImage.cpp
  62. ${TEST_FRAMEWORK_ROOT}/UI/UIImage.h
  63. ${TEST_FRAMEWORK_ROOT}/UI/UIManager.cpp
  64. ${TEST_FRAMEWORK_ROOT}/UI/UIManager.h
  65. ${TEST_FRAMEWORK_ROOT}/UI/UISlider.cpp
  66. ${TEST_FRAMEWORK_ROOT}/UI/UISlider.h
  67. ${TEST_FRAMEWORK_ROOT}/UI/UIStaticText.cpp
  68. ${TEST_FRAMEWORK_ROOT}/UI/UIStaticText.h
  69. ${TEST_FRAMEWORK_ROOT}/UI/UITextButton.cpp
  70. ${TEST_FRAMEWORK_ROOT}/UI/UITextButton.h
  71. ${TEST_FRAMEWORK_ROOT}/UI/UITexturedQuad.h
  72. ${TEST_FRAMEWORK_ROOT}/UI/UIVerticalStack.cpp
  73. ${TEST_FRAMEWORK_ROOT}/UI/UIVerticalStack.h
  74. ${TEST_FRAMEWORK_ROOT}/Utils/CustomMemoryHook.cpp
  75. ${TEST_FRAMEWORK_ROOT}/Utils/CustomMemoryHook.h
  76. ${TEST_FRAMEWORK_ROOT}/Utils/Log.cpp
  77. ${TEST_FRAMEWORK_ROOT}/Utils/Log.h
  78. ${TEST_FRAMEWORK_ROOT}/Utils/ReadData.cpp
  79. ${TEST_FRAMEWORK_ROOT}/Utils/ReadData.h
  80. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindow.h
  81. )
  82. if (WIN32)
  83. # Windows source files
  84. set(TEST_FRAMEWORK_SRC_FILES
  85. ${TEST_FRAMEWORK_SRC_FILES}
  86. ${TEST_FRAMEWORK_ROOT}/Input/Win/KeyboardWin.cpp
  87. ${TEST_FRAMEWORK_ROOT}/Input/Win/KeyboardWin.h
  88. ${TEST_FRAMEWORK_ROOT}/Input/Win/MouseWin.cpp
  89. ${TEST_FRAMEWORK_ROOT}/Input/Win/MouseWin.h
  90. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/ConstantBufferDX12.cpp
  91. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/ConstantBufferDX12.h
  92. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/CommandQueueDX12.h
  93. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/DescriptorHeapDX12.h
  94. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/FatalErrorIfFailedDX12.cpp
  95. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/FatalErrorIfFailedDX12.h
  96. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/PipelineStateDX12.cpp
  97. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/PipelineStateDX12.h
  98. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/PixelShaderDX12.h
  99. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RendererDX12.cpp
  100. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RendererDX12.h
  101. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderInstancesDX12.cpp
  102. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderInstancesDX12.h
  103. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderPrimitiveDX12.cpp
  104. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/RenderPrimitiveDX12.h
  105. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/TextureDX12.cpp
  106. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/TextureDX12.h
  107. ${TEST_FRAMEWORK_ROOT}/Renderer/DX12/VertexShaderDX12.h
  108. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowWin.cpp
  109. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowWin.h
  110. )
  111. # All shaders
  112. set(TEST_FRAMEWORK_SRC_FILES_SHADERS
  113. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VertexConstants.h
  114. )
  115. # HLSL vertex shaders
  116. set(TEST_FRAMEWORK_HLSL_VERTEX_SHADERS
  117. ${PHYSICS_REPO_ROOT}/Assets/Shaders/FontVertexShader.hlsl
  118. ${PHYSICS_REPO_ROOT}/Assets/Shaders/LineVertexShader.hlsl
  119. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TriangleDepthVertexShader.hlsl
  120. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TriangleVertexShader.hlsl
  121. ${PHYSICS_REPO_ROOT}/Assets/Shaders/UIVertexShader.hlsl
  122. )
  123. set(TEST_FRAMEWORK_SRC_FILES_SHADERS ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_HLSL_VERTEX_SHADERS})
  124. set_source_files_properties(${TEST_FRAMEWORK_HLSL_VERTEX_SHADERS} PROPERTIES VS_SHADER_FLAGS "/WX /T vs_5_0")
  125. # HLSL pixel shaders
  126. set(TEST_FRAMEWORK_HLSL_PIXEL_SHADERS
  127. ${PHYSICS_REPO_ROOT}/Assets/Shaders/FontPixelShader.hlsl
  128. ${PHYSICS_REPO_ROOT}/Assets/Shaders/LinePixelShader.hlsl
  129. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TriangleDepthPixelShader.hlsl
  130. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TrianglePixelShader.hlsl
  131. ${PHYSICS_REPO_ROOT}/Assets/Shaders/UIPixelShader.hlsl
  132. ${PHYSICS_REPO_ROOT}/Assets/Shaders/UIPixelShaderUntextured.hlsl
  133. )
  134. set(TEST_FRAMEWORK_SRC_FILES_SHADERS ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_HLSL_PIXEL_SHADERS})
  135. set_source_files_properties(${TEST_FRAMEWORK_HLSL_PIXEL_SHADERS} PROPERTIES VS_SHADER_FLAGS "/WX /T ps_5_0")
  136. endif()
  137. if (LINUX)
  138. # Linux source files
  139. set(TEST_FRAMEWORK_SRC_FILES
  140. ${TEST_FRAMEWORK_SRC_FILES}
  141. ${TEST_FRAMEWORK_ROOT}/Input/Linux/KeyboardLinux.cpp
  142. ${TEST_FRAMEWORK_ROOT}/Input/Linux/KeyboardLinux.h
  143. ${TEST_FRAMEWORK_ROOT}/Input/Linux/MouseLinux.cpp
  144. ${TEST_FRAMEWORK_ROOT}/Input/Linux/MouseLinux.h
  145. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowLinux.cpp
  146. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowLinux.h
  147. )
  148. endif()
  149. if ("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
  150. # macOS source files
  151. set(TEST_FRAMEWORK_SRC_FILES
  152. ${TEST_FRAMEWORK_SRC_FILES}
  153. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/KeyboardMacOS.mm
  154. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/KeyboardMacOS.h
  155. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/MouseMacOS.mm
  156. ${TEST_FRAMEWORK_ROOT}/Input/MacOS/MouseMacOS.h
  157. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowMacOS.mm
  158. ${TEST_FRAMEWORK_ROOT}/Window/ApplicationWindowMacOS.h
  159. )
  160. endif()
  161. # Include the Vulkan library
  162. if (Vulkan_FOUND)
  163. # Vulkan source files
  164. set(TEST_FRAMEWORK_SRC_FILES
  165. ${TEST_FRAMEWORK_SRC_FILES}
  166. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/BufferVK.h
  167. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/ConstantBufferVK.cpp
  168. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/ConstantBufferVK.h
  169. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/FatalErrorIfFailedVK.cpp
  170. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/FatalErrorIfFailedVK.h
  171. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/PipelineStateVK.cpp
  172. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/PipelineStateVK.h
  173. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/PixelShaderVK.h
  174. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RendererVK.cpp
  175. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RendererVK.h
  176. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderInstancesVK.cpp
  177. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderInstancesVK.h
  178. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderPrimitiveVK.cpp
  179. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/RenderPrimitiveVK.h
  180. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/TextureVK.cpp
  181. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/TextureVK.h
  182. ${TEST_FRAMEWORK_ROOT}/Renderer/VK/VertexShaderVK.h
  183. )
  184. # GLSL headers
  185. set(TEST_FRAMEWORK_SRC_FILES_SHADERS
  186. ${TEST_FRAMEWORK_SRC_FILES_SHADERS}
  187. ${PHYSICS_REPO_ROOT}/Assets/Shaders/VertexConstantsVK.h
  188. )
  189. # GLSL shaders
  190. set(TEST_FRAMEWORK_GLSL_SHADERS
  191. ${PHYSICS_REPO_ROOT}/Assets/Shaders/FontVertexShader.vert
  192. ${PHYSICS_REPO_ROOT}/Assets/Shaders/LineVertexShader.vert
  193. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TriangleDepthVertexShader.vert
  194. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TriangleVertexShader.vert
  195. ${PHYSICS_REPO_ROOT}/Assets/Shaders/UIVertexShader.vert
  196. ${PHYSICS_REPO_ROOT}/Assets/Shaders/FontPixelShader.frag
  197. ${PHYSICS_REPO_ROOT}/Assets/Shaders/LinePixelShader.frag
  198. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TriangleDepthPixelShader.frag
  199. ${PHYSICS_REPO_ROOT}/Assets/Shaders/TrianglePixelShader.frag
  200. ${PHYSICS_REPO_ROOT}/Assets/Shaders/UIPixelShader.frag
  201. ${PHYSICS_REPO_ROOT}/Assets/Shaders/UIPixelShaderUntextured.frag
  202. )
  203. # Compile GLSL shaders
  204. foreach(SHADER ${TEST_FRAMEWORK_GLSL_SHADERS})
  205. set(SPV_SHADER ${SHADER}.spv)
  206. add_custom_command(OUTPUT ${SPV_SHADER}
  207. COMMAND ${Vulkan_GLSLC_EXECUTABLE} ${SHADER} -o ${SPV_SHADER}
  208. DEPENDS ${SHADER}
  209. COMMENT "Compiling ${SHADER}")
  210. list(APPEND TEST_FRAMEWORK_SPV_SHADERS ${SPV_SHADER})
  211. endforeach()
  212. endif()
  213. # Group source files
  214. source_group(TREE ${TEST_FRAMEWORK_ROOT} FILES ${TEST_FRAMEWORK_SRC_FILES})
  215. # Group shader files
  216. source_group(TREE ${PHYSICS_REPO_ROOT} FILES ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_GLSL_SHADERS} ${TEST_FRAMEWORK_SPV_SHADERS})
  217. # Create TestFramework lib
  218. add_library(TestFramework STATIC ${TEST_FRAMEWORK_SRC_FILES} ${TEST_FRAMEWORK_SRC_FILES_SHADERS} ${TEST_FRAMEWORK_SPV_SHADERS})
  219. target_include_directories(TestFramework PUBLIC ${TEST_FRAMEWORK_ROOT})
  220. target_precompile_headers(TestFramework PUBLIC ${TEST_FRAMEWORK_ROOT}/TestFramework.h)
  221. if (Vulkan_FOUND)
  222. # Vulkan configuration
  223. target_include_directories(TestFramework PUBLIC ${Vulkan_INCLUDE_DIRS})
  224. target_link_libraries(TestFramework LINK_PUBLIC Jolt ${Vulkan_LIBRARIES})
  225. if (JPH_ENABLE_VULKAN)
  226. target_compile_definitions(TestFramework PRIVATE JPH_ENABLE_VULKAN)
  227. endif()
  228. endif()
  229. if (WIN32)
  230. # Windows configuration
  231. target_link_libraries(TestFramework LINK_PUBLIC Jolt dxguid.lib dinput8.lib dxgi.lib d3d12.lib d3dcompiler.lib shcore.lib)
  232. target_compile_definitions(TestFramework PRIVATE JPH_ENABLE_DIRECTX)
  233. endif()
  234. if (LINUX)
  235. # Linux configuration
  236. target_link_libraries(TestFramework LINK_PUBLIC Jolt X11)
  237. endif()
  238. if ("${CMAKE_SYSTEM_NAME}" MATCHES "Darwin")
  239. # macOS configuration
  240. target_link_libraries(TestFramework LINK_PUBLIC Jolt "-framework Cocoa -framework Metal -framework MetalKit -framework GameController")
  241. # Ignore PCH files for .mm files
  242. foreach(SRC_FILE ${TEST_FRAMEWORK_SRC_FILES})
  243. if (SRC_FILE MATCHES "\.mm")
  244. set_source_files_properties(${SRC_FILE} PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
  245. endif()
  246. endforeach()
  247. endif()
  248. else()
  249. # No graphics framework found
  250. set(TEST_FRAMEWORK_AVAILABLE FALSE)
  251. endif()