CMakeLists.txt 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. file(GLOB_RECURSE prog_fnames *.ankiprog)
  2. ProcessorCount(proc_count)
  3. MATH(EXPR proc_count "${proc_count}-1")
  4. if(ANKI_OVERRIDE_SHADER_COMPILER STREQUAL "")
  5. set(shader_compiler_bin "${CMAKE_BINARY_DIR}/Binaries/ShaderCompiler")
  6. set(shader_compiler_dep "ShaderCompiler")
  7. else()
  8. set(shader_compiler_bin ${ANKI_OVERRIDE_SHADER_COMPILER})
  9. set(shader_compiler_dep "")
  10. endif()
  11. if(ANDROID)
  12. # Copy to the Android assets
  13. set(out_dir "${CMAKE_BINARY_DIR}/../../../../../assets/ShaderBinaries")
  14. else()
  15. set(out_dir "${CMAKE_BINARY_DIR}/Binaries/ShaderBinaries")
  16. endif()
  17. if(ANDROID OR ARM)
  18. message("++ Compiling shaders for mobile")
  19. set(extra_compiler_args "-DANKI_PLATFORM_MOBILE=1")
  20. else()
  21. message("++ Compiling shaders for desktop")
  22. set(extra_compiler_args "-DANKI_PLATFORM_MOBILE=0")
  23. endif()
  24. if(VULKAN)
  25. message("++ Compiling shaders in SPIR-V")
  26. set(extra_compiler_args ${extra_compiler_args} "-spirv")
  27. else()
  28. message("++ Compiling shaders in DXIL")
  29. set(extra_compiler_args ${extra_compiler_args} "-dxil")
  30. endif()
  31. if(DIRECTX)
  32. if(ANKI_D3D_EXPERIMENTAL)
  33. set(extra_compiler_args ${extra_compiler_args} "-sm" "6_8")
  34. else()
  35. set(extra_compiler_args ${extra_compiler_args} "-sm" "6_7")
  36. endif()
  37. endif()
  38. include(FindPythonInterp)
  39. foreach(prog_fname ${prog_fnames})
  40. get_filename_component(filename ${prog_fname} NAME)
  41. set(bin_fname ${CMAKE_CURRENT_BINARY_DIR}/${filename}bin)
  42. get_filename_component(filename2 ${prog_fname} NAME_WE)
  43. set(target_name "${filename2}_ankiprogbin")
  44. # Get deps using a script
  45. execute_process(
  46. COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/../../Tools/Shader/ShaderProgramDependencies.py" "-i" "AnKi/Shaders/${filename}"
  47. WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../.."
  48. OUTPUT_VARIABLE deps)
  49. add_custom_command(
  50. OUTPUT ${bin_fname}
  51. COMMAND ${CMAKE_COMMAND} -E env "ASAN_OPTIONS=suppressions=${CMAKE_CURRENT_SOURCE_DIR}/../../Tools/SanitizerBlacklist.txt" ${shader_compiler_bin} -o ${bin_fname} -j ${proc_count} -I "${CMAKE_CURRENT_SOURCE_DIR}/../.." ${extra_compiler_args} ${prog_fname}
  52. DEPENDS ${shader_compiler_dep} ${prog_fname} ${deps}
  53. COMMENT "Build ${prog_fname}")
  54. add_custom_target(
  55. ${target_name} ALL
  56. DEPENDS ${bin_fname})
  57. add_custom_command(
  58. TARGET ${target_name} POST_BUILD
  59. COMMAND ${CMAKE_COMMAND} -E make_directory ${out_dir}
  60. COMMAND ${CMAKE_COMMAND} -E copy ${bin_fname} ${out_dir})
  61. list(APPEND program_targets ${target_name})
  62. endforeach()
  63. add_custom_target(AnKiShaders ALL DEPENDS ${program_targets})