EmbedAssets.cmake 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. find_program(PYTHON_EXECUTABLE python3 REQUIRED)
  2. function(process_asset asset_file output_file_var generated_dir)
  3. get_filename_component(asset_name "${asset_file}" NAME)
  4. set(output_file "${generated_dir}/assets/${asset_name}.h")
  5. set("${output_file_var}" "${output_file}" PARENT_SCOPE)
  6. add_custom_command(
  7. OUTPUT "${output_file}"
  8. COMMAND ${CMAKE_COMMAND} -E make_directory "${generated_dir}/assets"
  9. COMMAND "${PYTHON_EXECUTABLE}" "${R3D_ROOT_PATH}/scripts/bin2c.py"
  10. --file "${asset_file}" --name "${asset_name}" --mode binary "${output_file}"
  11. DEPENDS "${asset_file}"
  12. COMMENT "Processing asset: ${asset_file}"
  13. VERBATIM
  14. )
  15. endfunction()
  16. function(embed_assets target_name)
  17. set(asset_files ${ARGN})
  18. if(NOT asset_files)
  19. message(FATAL_ERROR "embed_assets: No asset file specified")
  20. endif()
  21. if(NOT DEFINED R3D_GENERATED_INCLUDE_DIR)
  22. message(FATAL_ERROR "embed_assets: R3D_GENERATED_INCLUDE_DIR is not defined")
  23. endif()
  24. set(output_files)
  25. list(LENGTH asset_files num_assets)
  26. message(STATUS "Configuring processing of ${num_assets} asset(s) for target ${target_name}...")
  27. foreach(asset_file ${asset_files})
  28. if(NOT EXISTS "${asset_file}")
  29. message(FATAL_ERROR "embed_assets: Asset file not found: ${asset_file}")
  30. endif()
  31. get_filename_component(asset_name "${asset_file}" NAME)
  32. process_asset("${asset_file}" output_file "${R3D_GENERATED_INCLUDE_DIR}")
  33. list(APPEND output_files "${output_file}")
  34. message(STATUS " - ${asset_file} -> assets/${asset_name}.h")
  35. endforeach()
  36. set(assets_target "${target_name}_assets")
  37. add_custom_target(${assets_target}
  38. DEPENDS ${output_files}
  39. COMMENT "Generating asset headers for ${target_name}"
  40. )
  41. add_dependencies(${target_name} ${assets_target})
  42. message(STATUS "Target ${assets_target} created with ${num_assets} asset(s)")
  43. message(STATUS "Assets will be automatically recompiled if modified")
  44. endfunction()