CMakeLists.txt 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. add_executable(coral_renderer
  2. "main.cpp"
  3. "coral_window.h"
  4. "coral_window.cpp"
  5. "first_app.h"
  6. "first_app.cpp"
  7. "coral_pipeline.h"
  8. "coral_pipeline.cpp"
  9. "coral_device.h"
  10. "coral_device.cpp"
  11. "vk_initializers.h"
  12. "vk_initializers.cpp"
  13. "vk_types.h"
  14. "coral_swapchain.h"
  15. "coral_swapchain.cpp"
  16. "coral_mesh.h"
  17. "coral_mesh.cpp"
  18. "coral_gameobject.h"
  19. "coral_gameobject.cpp"
  20. "coral_renderer.h"
  21. "coral_renderer.cpp"
  22. "render_system.h"
  23. "render_system.cpp"
  24. "coral_camera.h"
  25. "coral_camera.cpp"
  26. "coral_utils.h"
  27. "coral_utils.cpp"
  28. "coral_texture.h"
  29. "coral_texture.cpp"
  30. "coral_buffer.h"
  31. "coral_buffer.cpp"
  32. "coral_frame_info.h"
  33. "coral_descriptors.h"
  34. "coral_descriptors.cpp"
  35. "point_light_system.cpp"
  36. "point_light_system.h"
  37. "coral_cubemap.cpp"
  38. "coral_cubemap.h"
  39. skybox_system.cpp
  40. skybox_system.h
  41. coral_input.cpp
  42. coral_input.h
  43. coral_shadowmap_renderer.cpp
  44. coral_shadowmap_renderer.h
  45. )
  46. if(MSVC)
  47. target_compile_options(coral_renderer PRIVATE /W4 /WX)
  48. else()
  49. target_compile_options(coral_renderer PRIVATE -Wall -Wextra -Wpedantic -Werror)
  50. endif()
  51. ## Shader compilation
  52. # GLSL
  53. find_program(
  54. GLSL_VALIDATOR glslangValidator
  55. HINTS
  56. /usr/bin
  57. /usr/local/bin
  58. $ENV{VULKAN_SDK}/Bin/
  59. $ENV{VULKAN_SDK}/Bin32/
  60. )
  61. # Shader files
  62. file(GLOB_RECURSE GLSL_SOURCE_FILES
  63. "${PROJECT_SOURCE_DIR}/shaders/*.frag"
  64. "${PROJECT_SOURCE_DIR}/shaders/*.vert"
  65. "${PROJECT_SOURCE_DIR}/shaders/*.comp"
  66. )
  67. # iterate each shader
  68. foreach(GLSL ${GLSL_SOURCE_FILES})
  69. message(STATUS "BUILDING SHADER")
  70. get_filename_component(FILE_NAME ${GLSL} NAME)
  71. set(SPIRV "${PROJECT_SOURCE_DIR}/shaders/compiled/${FILE_NAME}.spv")
  72. message(STATUS ${GLSL})
  73. # execute glslang command to compile that specific shader
  74. add_custom_command(
  75. OUTPUT ${SPIRV}
  76. COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_SOURCE_DIR}/shaders/compiled/"
  77. COMMAND ${GLSL_VALIDATOR} -V ${GLSL} -o ${SPIRV}
  78. DEPENDS ${GLSL}
  79. )
  80. list(APPEND SPIRV_BINARY_FILES ${SPIRV})
  81. endforeach(GLSL)
  82. add_custom_target(
  83. Shaders
  84. DEPENDS ${SPIRV_BINARY_FILES}
  85. )
  86. add_dependencies(coral_renderer Shaders)
  87. set(source_dir "${CMAKE_SOURCE_DIR}/shaders/compiled")
  88. set(target_dir "${CMAKE_BINARY_DIR}/assets/shaders")
  89. file(COPY ${source_dir} DESTINATION ${target_dir})
  90. # Define a custom target to copy files
  91. add_custom_target(copy_assets ALL
  92. COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:coral_renderer>/assets/"
  93. # Shaders
  94. COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:coral_renderer>/assets/shaders/"
  95. COMMAND ${CMAKE_COMMAND} -E copy_directory
  96. "${PROJECT_SOURCE_DIR}/shaders/compiled/"
  97. "$<TARGET_FILE_DIR:coral_renderer>/assets/shaders"
  98. # Meshes
  99. COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:coral_renderer>/assets/meshes/"
  100. COMMAND ${CMAKE_COMMAND} -E copy_directory
  101. "${PROJECT_SOURCE_DIR}/assets/meshes"
  102. "$<TARGET_FILE_DIR:coral_renderer>/assets/meshes"
  103. # Textures
  104. COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:coral_renderer>/assets/textures/"
  105. COMMAND ${CMAKE_COMMAND} -E copy_directory
  106. "${PROJECT_SOURCE_DIR}/assets/textures"
  107. "$<TARGET_FILE_DIR:coral_renderer>/assets/textures"
  108. )