TargetDataSources.cmake raw

   1  # Copyright (c) 2023-present The Bitcoin Core developers
   2  # Distributed under the MIT software license, see the accompanying
   3  # file COPYING or https://opensource.org/license/mit/.
   4  
   5  macro(set_add_custom_command_options)
   6    set(DEPENDS_EXPLICIT_OPT "")
   7    if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.27)
   8      set(DEPENDS_EXPLICIT_OPT DEPENDS_EXPLICIT_ONLY)
   9    endif()
  10    set(CODEGEN_OPT "")
  11    if(POLICY CMP0171)
  12      cmake_policy(GET CMP0171 _cmp0171_status)
  13      if(_cmp0171_status STREQUAL "NEW")
  14        set(CODEGEN_OPT CODEGEN)
  15      endif()
  16      unset(_cmp0171_status)
  17    endif()
  18  endmacro()
  19  
  20  # Specifies JSON data files to be processed into corresponding
  21  # header files for inclusion when building a target.
  22  function(target_json_data_sources target)
  23    set_add_custom_command_options()
  24    foreach(json_file IN LISTS ARGN)
  25      set(header ${CMAKE_CURRENT_BINARY_DIR}/${json_file}.h)
  26      add_custom_command(
  27        OUTPUT ${header}
  28        COMMAND ${CMAKE_COMMAND} -DJSON_SOURCE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/${json_file} -DHEADER_PATH=${header} -P ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromJson.cmake
  29        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${json_file} ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromJson.cmake
  30        VERBATIM
  31        ${CODEGEN_OPT}
  32        ${DEPENDS_EXPLICIT_OPT}
  33      )
  34      target_sources(${target} PRIVATE ${header})
  35    endforeach()
  36  endfunction()
  37  
  38  # Specifies raw binary data files to be processed into corresponding
  39  # header files for inclusion when building a target.
  40  function(target_raw_data_sources target)
  41    cmake_parse_arguments(PARSE_ARGV 1 _ "" "NAMESPACE" "")
  42    set_add_custom_command_options()
  43    foreach(raw_file IN LISTS __UNPARSED_ARGUMENTS)
  44      set(header ${CMAKE_CURRENT_BINARY_DIR}/${raw_file}.h)
  45      add_custom_command(
  46        OUTPUT ${header}
  47        COMMAND ${CMAKE_COMMAND} -DRAW_SOURCE_PATH=${CMAKE_CURRENT_SOURCE_DIR}/${raw_file} -DHEADER_PATH=${header} -DRAW_NAMESPACE=${__NAMESPACE} -P ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromRaw.cmake
  48        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${raw_file} ${PROJECT_SOURCE_DIR}/cmake/script/GenerateHeaderFromRaw.cmake
  49        VERBATIM
  50        ${CODEGEN_OPT}
  51        ${DEPENDS_EXPLICIT_OPT}
  52      )
  53      target_sources(${target} PRIVATE ${header})
  54    endforeach()
  55  endfunction()
  56