1
+ # Assigns builtin resources to a bundle a target library will be created with
2
+ # _BUNDLE_NAME_ is a bundle name, must be a valid CMake variable
3
+ # _LBR_PATH_ is a path to builtin resource
4
+
1
5
macro (LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_ )
2
6
set (_OPTIONAL_ALIAS_ "${ARGV2} " )
3
7
@@ -8,14 +12,20 @@ macro(LIST_BUILTIN_RESOURCE _BUNDLE_NAME_ _LBR_PATH_)
8
12
set (_LBR_${_BUNDLE_NAME_}_ ${_LBR_${_BUNDLE_NAME_}_} PARENT_SCOPE ) # override
9
13
endmacro ()
10
14
11
- function (ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_DIRECTORY_ )
15
+ # Creates a library with builtin resources for given bundle
16
+ # _TARGET_NAME_ is name of a target library that will be created
17
+ # _BUNDLE_NAME_ is a bundle name builtin resources are associated with
18
+ # _BUNDLE_SEARCH_DIRECTORY_ is an absolute search directory path for builtin resorces for given bundle
19
+ # _NAMESPACE_ is a C++ namespace builtin resources will be wrapped into
20
+ # _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ is an absolute path to output directory for builtin resources header files which will be a search directory for generated headers outputed to ${_OUTPUT_HEADER_DIRECTORY_}/${_PATH_PREFIX_} where path prefix is the namespace turned into a path
21
+ # _OUTPUT_SOURCE_DIRECTORY_ is an absolute path to output directory for builtin resources source files
22
+
23
+ function (ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH_DIRECTORY_ _NAMESPACE_ _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ _OUTPUT_SOURCE_DIRECTORY_ )
12
24
if (NOT DEFINED _Python3_EXECUTABLE )
13
25
message (FATAL_ERROR "_Python3_EXECUTABLE must be defined - call find_package(Python3 COMPONENTS Interpreter REQUIRED)" )
14
26
endif ()
15
27
16
- file (MAKE_DIRECTORY "${_OUTPUT_DIRECTORY_} " )
17
-
18
- set (NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /template/CArchive.h.in" )
28
+ set (NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /template/CArchive.h.in" )
19
29
set (NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /builtinHeaderGen.py" )
20
30
set (NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR} /builtinDataGen.py" )
21
31
set (NBL_BS_HEADER_FILENAME "builtinResources.h" )
@@ -27,38 +37,54 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
27
37
string (TOUPPER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_ )
28
38
string (MAKE_C_IDENTIFIER ${_GUARD_SUFFIX_} _GUARD_SUFFIX_ )
29
39
40
+ set (_OUTPUT_HEADER_DIRECTORY_ "${_OUTPUT_INCLUDE_SEARCH_DIRECTORY_} /${_PATH_PREFIX_} " )
41
+
42
+ file (MAKE_DIRECTORY "${_OUTPUT_HEADER_DIRECTORY_} " )
43
+ file (MAKE_DIRECTORY "${_OUTPUT_SOURCE_DIRECTORY_} " )
44
+
30
45
set (_ITR_ 0 )
31
- foreach (X IN LISTS _LBR_${_BUNDLE_NAME_}_ )
46
+ foreach (X IN LISTS _LBR_${_BUNDLE_NAME_}_ ) # iterate over builtin resources bundle list given bundle name
32
47
set (_CURRENT_ITEM_ "${X} " )
33
48
string (FIND "${_CURRENT_ITEM_} " "," _FOUND_ REVERSE )
34
49
35
- string (REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_} " )
36
- string (REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_} " )
50
+ string (REGEX REPLACE ",.*" "" _CURRENT_PATH_ "${_CURRENT_ITEM_} " ) # _LBR_PATH_ path for given bundle
51
+ string (REGEX REPLACE ".*," "" _CURRENT_ALIAS_ "${_CURRENT_ITEM_} " ) # optional alias for given builtin resource
52
+
53
+ set (NBL_BUILTIN_RESOURCE_ABS_PATH "${_BUNDLE_SEARCH_DIRECTORY_} /${_CURRENT_PATH_} " ) # an absolute path to a builtin resource
54
+ list (APPEND NBL_BUILTIN_RESOURCES "${NBL_BUILTIN_RESOURCE_ABS_PATH} " )
37
55
38
- if (EXISTS "${_BUNDLE_SEARCH_DIRECTORY_} /${_CURRENT_PATH_} " )
39
- list (APPEND NBL_DEPENDENCY_FILES "${_BUNDLE_SEARCH_DIRECTORY_} /${_CURRENT_PATH_} " )
40
- file (SIZE "${_BUNDLE_SEARCH_DIRECTORY_} /${_CURRENT_PATH_} " _FILE_SIZE_ )
56
+ if (EXISTS "${NBL_BUILTIN_RESOURCE_ABS_PATH} " )
57
+ list (APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_RESOURCE_ABS_PATH} " )
58
+ file (SIZE "${NBL_BUILTIN_RESOURCE_ABS_PATH} " _FILE_SIZE_ ) # determine size of builtin resource in bytes
59
+
60
+ macro (LIST_RESOURCE_FOR_ARCHIVER _LBR_PATH_ _LBR_FILE_SIZE_ _LBR_ID_ )
61
+ string (APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t {\" ${_LBR_PATH_} \" , ${_LBR_FILE_SIZE_} , 0xdeadbeefu, ${_LBR_ID_} , nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n " ) # initializer list
62
+ endmacro ()
63
+
64
+ LIST_RESOURCE_FOR_ARCHIVER ("${_CURRENT_PATH_} " "${_FILE_SIZE_} " "${_ITR_} " )
41
65
42
- string (APPEND _RESOURCES_INIT_LIST_ "\t\t\t\t\t {\" ${_CURRENT_PATH_} \" , ${_FILE_SIZE_} , 0xdeadbeefu, ${_ITR_} , nbl::system::IFileArchive::E_ALLOCATOR_TYPE::EAT_NULL},\n " ) # initializer list
66
+ if (_CURRENT_ALIAS_ ) # if an alias is present list it with the same ID of the current handled builtin resource
67
+ LIST_RESOURCE_FOR_ARCHIVER ("${_CURRENT_ALIAS_} " "${_FILE_SIZE_} " "${_ITR_} " )
68
+ endif ()
43
69
else ()
44
70
message (FATAL_ERROR "!" ) # TODO: set GENERATED property, therefore we could turn some input into output and list it as builtin resource
45
71
endif ()
46
72
47
73
math (EXPR _ITR_ "${_ITR_} + 1" )
48
74
endforeach ()
49
75
50
- configure_file ("${NBL_TEMPLATE_APK_RESOURCES_ARCHIVE_HEADER } " "${_OUTPUT_DIRECTORY_ } /CArchive.h" )
76
+ configure_file ("${NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER } " "${_OUTPUT_HEADER_DIRECTORY_ } /CArchive.h" )
51
77
52
78
list (APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY} " )
53
79
list (APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY} " )
54
80
55
- set (NBL_RESOURCES_LIST_FILE "${_OUTPUT_DIRECTORY_ } /resources.txt" )
81
+ set (NBL_RESOURCES_LIST_FILE "${_OUTPUT_SOURCE_DIRECTORY_ } /resources.txt" )
56
82
57
83
string (REPLACE ";" "," RESOURCES_ARGS "${${_BUNDLE_NAME_} }" )
58
84
file (WRITE "${NBL_RESOURCES_LIST_FILE} " "${RESOURCES_ARGS} " )
59
85
60
- set (NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_DIRECTORY_ } /${NBL_BS_HEADER_FILENAME} " )
61
- set (NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_DIRECTORY_ } /${NBL_BS_DATA_SOURCE_FILENAME} " )
86
+ set (NBL_BUILTIN_RESOURCES_HEADER "${_OUTPUT_HEADER_DIRECTORY_ } /${NBL_BS_HEADER_FILENAME} " )
87
+ set (NBL_BUILTIN_RESOURCE_DATA_SOURCE "${_OUTPUT_SOURCE_DIRECTORY_ } /${NBL_BS_DATA_SOURCE_FILENAME} " )
62
88
63
89
add_custom_command (
64
90
OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER} " "${NBL_BUILTIN_RESOURCE_DATA_SOURCE} "
@@ -83,9 +109,39 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
83
109
set_property (TARGET ${_TARGET_NAME_} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" )
84
110
endif ()
85
111
86
- list (APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_DIRECTORY_} /CArchive.h" )
112
+ set (NBL_BUILTIN_RESOURCES ${NBL_BUILTIN_RESOURCES} ) # turn builtin resources paths list into variable
113
+ set (NBL_BUILTIN_RESOURCES_HEADERS
114
+ "${NBL_BUILTIN_RESOURCES_HEADER} "
115
+ "${_OUTPUT_HEADER_DIRECTORY_} /CArchive.h"
116
+ )
117
+
118
+ list (APPEND _NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ "${_OUTPUT_HEADER_DIRECTORY_} /CArchive.h" )
87
119
set (_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_ ${_NBL_BUILTIN_RESOURCES_ARCHIVE_APK_SOURCES_} PARENT_SCOPE )
88
120
89
121
list (APPEND _NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_TARGET_NAME_} )
90
122
set (_NBL_BUILTIN_RESOURCES_LIBRARIES_ ${_NBL_BUILTIN_RESOURCES_LIBRARIES_} PARENT_SCOPE ) # override
91
- endfunction ()
123
+
124
+ macro (_ADD_PROPERTY_ _BR_PROPERTY_ _BR_PROXY_VAR_ )
125
+ get_property (_BR_PROPERTY_DEFINED_
126
+ TARGET ${_TARGET_NAME_}
127
+ PROPERTY ${_BR_PROPERTY_}
128
+ DEFINED
129
+ )
130
+
131
+ if (NOT _BR_PROPERTY_DEFINED_ )
132
+ define_property (TARGET PROPERTY ${_BR_PROPERTY_} )
133
+ set_target_properties (${_TARGET_NAME_} PROPERTIES ${_BR_PROPERTY_} "${${_BR_PROXY_VAR_} }" )
134
+ endif ()
135
+
136
+ unset (_BR_PROPERTY_DEFINED_ )
137
+ endmacro ()
138
+
139
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES NBL_BUILTIN_RESOURCES )
140
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES_BUNDLE_NAME _BUNDLE_NAME_ )
141
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES_BUNDLE_SEARCH_DIRECTORY _BUNDLE_SEARCH_DIRECTORY_ )
142
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES_NAMESPACE _NAMESPACE_ )
143
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES_HEADER_DIRECTORY _OUTPUT_HEADER_DIRECTORY_ )
144
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES_SOURCE_DIRECTORY _OUTPUT_SOURCE_DIRECTORY_ )
145
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES_HEADERS NBL_BUILTIN_RESOURCES_HEADERS )
146
+ _ADD_PROPERTY_ (BUILTIN_RESOURCES_INCLUDE_SEARCH_DIRECTORY _OUTPUT_INCLUDE_SEARCH_DIRECTORY_ )
147
+ endfunction ()
0 commit comments