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