Skip to content

Commit dffbed2

Browse files
committed
Split archive into header CArchive.h and source CArchive.cpp files, have it compiled with one single builtin resources library. Rename BR_API to NBL_BR_API. Move creation of nblBuiltinResourceData, have Nabla created first to be capable of using it's properties. Target source builtin files with PRIVATE qualifier to Nabla target. Perform tests
1 parent 0fa3cf3 commit dffbed2

File tree

5 files changed

+69
-50
lines changed

5 files changed

+69
-50
lines changed

src/nbl/CMakeLists.txt

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,6 @@ endif()
114114

115115
nbl_get_conf_dir(NABLA_CONF_DIR_DEBUG Debug)
116116
nbl_get_conf_dir(NABLA_CONF_DIR_RELEASE Release)
117-
if(NBL_EMBED_BUILTIN_RESOURCES)
118-
add_subdirectory(builtin)
119-
NBL_ADD_BUILTIN_RESOURCES(nblBuiltinResourceData) # internal, must be added with the macro to properly propagate scope
120-
endif()
121117
nbl_get_conf_dir(NABLA_CONF_DIR_RELWITHDEBINFO RelWithDebInfo)
122118

123119
if (NBL_COMPILE_WITH_CUDA)
@@ -360,25 +356,11 @@ set(COMMON_INCLUDE_DIRS
360356
file(GLOB_RECURSE NABLA_HEADERS_PRIV1 "*.h")
361357
file(GLOB_RECURSE NABLA_HEADERS_PRIV2 "${NBL_ROOT_PATH}/src/nbl/*.h")
362358

363-
#always install builtins (some may be included in cpp regardless if embedded or not)
364-
365-
get_target_property(_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_ nblBuiltinResourceData BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH)
366-
foreach(X IN LISTS NBL_RESOURCES_TO_EMBED)
367-
list(APPEND NABLA_RESOURCES_TO_EMBED_PUBLIC "${NBL_ROOT_PATH}/include/${_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}/${X}")
368-
endforeach()
369-
list(APPEND NABLA_HEADERS_PUBLIC ${NABLA_RESOURCES_TO_EMBED_PUBLIC})
370-
source_group("Resources to embed" FILES ${NABLA_RESOURCES_TO_EMBED_PUBLIC})
371-
set_source_files_properties(${NABLA_RESOURCES_TO_EMBED_PUBLIC}
372-
PROPERTIES HEADER_FILE_ONLY TRUE)
373-
374359
set(NABLA_HEADERS "${NBL_ROOT_PATH}/include/nabla.h" ${NABLA_HEADERS_PUBLIC} ${NABLA_HEADERS_PIRV1} ${NABLA_HEADERS_PRIV2})
375360

376-
get_target_property(_BUILTIN_RESOURCES_HEADER_DIRECTORY_ nblBuiltinResourceData BUILTIN_RESOURCES_HEADER_DIRECTORY)
377-
378361
set(NBL_LIBRARY_CREATION_SOURCES
379362
${NABLA_SRCS_COMMON}
380363
${NABLA_HEADERS}
381-
${_BUILTIN_RESOURCES_HEADER_DIRECTORY_}
382364
$<TARGET_OBJECTS:aesGladman>
383365
$<TARGET_OBJECTS:bzip2>
384366
$<TARGET_OBJECTS:lz4>
@@ -426,20 +408,6 @@ if(NOT NBL_STATIC_BUILD)
426408
set_target_properties(Nabla PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${NBL_ASSEMBLY_DIRECTORY})
427409
endif()
428410

429-
if(NBL_EMBED_BUILTIN_RESOURCES)
430-
add_dependencies(Nabla nblBuiltinResourceData)
431-
432-
if(NBL_STATIC_BUILD)
433-
target_link_libraries(Nabla INTERFACE
434-
nblBuiltinResourceData
435-
)
436-
else()
437-
target_link_libraries(Nabla PRIVATE
438-
nblBuiltinResourceData
439-
)
440-
endif()
441-
endif()
442-
443411
## Set up 3rdparty deps
444412
# Parallel Hashmap
445413
target_include_directories(Nabla PUBLIC ${THIRD_PARTY_SOURCE_DIR}/parallel-hashmap/parallel_hashmap)
@@ -626,6 +594,36 @@ target_compile_definitions(Nabla
626594
INTERFACE _NBL_PCH_IGNORE_PRIVATE_HEADERS
627595
)
628596

597+
if(NBL_EMBED_BUILTIN_RESOURCES)
598+
add_subdirectory(builtin)
599+
NBL_ADD_BUILTIN_RESOURCES(nblBuiltinResourceData) # internal, must be added with the macro to properly propagate scope
600+
add_dependencies(Nabla nblBuiltinResourceData)
601+
602+
if(NBL_STATIC_BUILD)
603+
target_link_libraries(Nabla INTERFACE
604+
nblBuiltinResourceData
605+
)
606+
else()
607+
target_link_libraries(Nabla PRIVATE
608+
nblBuiltinResourceData
609+
)
610+
endif()
611+
612+
# always install builtins (some may be included in cpp regardless if embedded or not)
613+
get_target_property(_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_ nblBuiltinResourceData BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH)
614+
foreach(X IN LISTS NBL_RESOURCES_TO_EMBED)
615+
list(APPEND NABLA_RESOURCES_TO_EMBED_PUBLIC "${NBL_ROOT_PATH}/include/${_BUILTIN_RESOURCES_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}/${X}")
616+
endforeach()
617+
618+
target_sources(Nabla PRIVATE
619+
${NABLA_RESOURCES_TO_EMBED_PUBLIC}
620+
)
621+
622+
list(APPEND NABLA_HEADERS_PUBLIC ${NABLA_RESOURCES_TO_EMBED_PUBLIC})
623+
source_group("Resources to embed" FILES ${NABLA_RESOURCES_TO_EMBED_PUBLIC})
624+
set_source_files_properties(${NABLA_RESOURCES_TO_EMBED_PUBLIC} PROPERTIES HEADER_FILE_ONLY TRUE)
625+
endif()
626+
629627
# generate Nabla definitions to a header
630628
glue_source_definitions(Nabla _NBL_SOURCE_DEFINITIONS_)
631629
set(_NBL_DEFINE_FILE_WRAPPER_ ${CMAKE_CURRENT_BINARY_DIR}/include/define.h)

src/nbl/builtin/builtinHeaderGen.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,22 @@
3737
if isSharedLibrary:
3838
outp.write("#if defined(__NBL_BUILDING_TARGET__) // currently compiling the target, this define is passed through the commandline\n")
3939
outp.write("#if defined(_MSC_VER)\n")
40-
outp.write("#define BR_API __declspec(dllexport)\n")
40+
outp.write("#define NBL_BR_API __declspec(dllexport)\n")
4141
outp.write("#elif defined(__GNUC__)\n")
42-
outp.write('#define BR_API __attribute__ ((visibility ("default")))' + "\n")
42+
outp.write('#define NBL_BR_API __attribute__ ((visibility ("default")))' + "\n")
4343
outp.write("#endif\n")
4444
outp.write("#else\n")
4545
outp.write("#if defined(_MSC_VER)\n")
46-
outp.write("#define BR_API __declspec(dllimport)\n")
46+
outp.write("#define NBL_BR_API __declspec(dllimport)\n")
4747
outp.write("#else\n")
48-
outp.write("#define BR_API\n")
48+
outp.write("#define NBL_BR_API\n")
4949
outp.write("#endif\n")
5050
outp.write("#endif\n\n")
5151

5252
outp.write("namespace " + resourcesNamespace + " { \n")
5353

5454
if isSharedLibrary:
55-
outp.write("\t\tBR_API std::pair<const uint8_t*, size_t> get_resource_runtime(const std::string& filename);\n\n")
55+
outp.write("\t\tNBL_BR_API std::pair<const uint8_t*, size_t> get_resource_runtime(const std::string& filename);\n\n")
5656
else:
5757
outp.write("\t\tstd::pair<const uint8_t*, size_t> get_resource_runtime(const std::string& filename);\n\n")
5858

@@ -65,14 +65,14 @@
6565
x = itemData[0].rstrip()
6666

6767
if isSharedLibrary:
68-
outp.write('\n\t\ttemplate<> BR_API const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % x)
68+
outp.write('\n\t\ttemplate<> NBL_BR_API const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % x)
6969
else:
7070
outp.write('\n\t\ttemplate<> const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % x)
7171

7272
if len(itemData) > 1:
7373
for i in range(1, len(itemData)):
7474
if isSharedLibrary:
75-
outp.write('\n\t\ttemplate<> BR_API const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % itemData[i].rstrip())
75+
outp.write('\n\t\ttemplate<> NBL_BR_API const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % itemData[i].rstrip())
7676
else:
7777
outp.write('\n\t\ttemplate<> const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % itemData[i].rstrip())
7878

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#include "CArchive.h"
2+
#include <memory>
3+
4+
using namespace @_NAMESPACE_@;
5+
6+
static const auto k_builtinArchiveFileList = std::make_shared<const nbl::core::vector<nbl::system::IFileArchive::SListEntry>>(nbl::core::vector<nbl::system::IFileArchive::SListEntry>{
7+
@_RESOURCES_INIT_LIST_@
8+
});
9+
10+
CArchive::CArchive(nbl::system::logger_opt_smart_ptr&& logger)
11+
: nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), *const_cast<nbl::core::vector<nbl::system::IFileArchive::SListEntry>*>(k_builtinArchiveFileList.get()))
12+
{
13+
14+
}
15+

src/nbl/builtin/template/CArchive.h.in

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,17 @@ namespace @_NAMESPACE_@
99
constexpr std::string_view pathPrefix = "@_BUNDLE_ARCHIVE_ABSOLUTE_PATH_@";
1010
constexpr bool hasPathPrefix(std::string_view str) { return str.find(pathPrefix) == 0ull; }
1111

12-
class CArchive final : public nbl::system::CFileArchive
12+
class @_NBL_BR_API_@ CArchive final : public nbl::system::CFileArchive
1313
{
1414
public:
15-
inline CArchive(nbl::system::logger_opt_smart_ptr&& logger)
16-
: nbl::system::CFileArchive(nbl::system::path(pathPrefix.data()),std::move(logger), resources) {}
15+
CArchive(nbl::system::logger_opt_smart_ptr&& logger);
1716

1817
protected:
1918
file_buffer_t getFileBuffer(const nbl::system::IFileArchive::SListEntry* item) override
2019
{
2120
auto found = get_resource_runtime(item->pathRelativeToArchive.string());
2221
return { const_cast<uint8_t*>(found.first), found.second, nullptr };
23-
}
24-
25-
inline static const nbl::core::vector<nbl::system::IFileArchive::SListEntry> resources
26-
{
27-
@_RESOURCES_INIT_LIST_@
28-
};
22+
}
2923
};
3024
}
3125

src/nbl/builtin/utils.cmake

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,15 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
4949
if("${ARGV7}" STREQUAL "SHARED")
5050
set(_LIB_TYPE_ SHARED)
5151
set(_SHARED_ True)
52+
set(NBL_BR_API "NBL_BR_API")
5253
else()
5354
set(_LIB_TYPE_ STATIC)
5455
set(_SHARED_ False)
56+
unset(NBL_BR_API)
5557
endif()
5658

5759
set(NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.h.in")
60+
set(NBL_TEMPLATE_RESOURCES_ARCHIVE_SOURCE "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/template/CArchive.cpp.in")
5861
set(NBL_BUILTIN_HEADER_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinHeaderGen.py")
5962
set(NBL_BUILTIN_DATA_GEN_PY "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/builtinDataGen.py")
6063
set(NBL_BS_HEADER_FILENAME "builtinResources.h")
@@ -112,6 +115,7 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
112115
endforeach()
113116

114117
configure_file("${NBL_TEMPLATE_RESOURCES_ARCHIVE_HEADER}" "${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h")
118+
configure_file("${NBL_TEMPLATE_RESOURCES_ARCHIVE_SOURCE}" "${_OUTPUT_SOURCE_DIRECTORY_}/CArchive.cpp")
115119

116120
list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_HEADER_GEN_PY}")
117121
list(APPEND NBL_DEPENDENCY_FILES "${NBL_BUILTIN_DATA_GEN_PY}")
@@ -130,12 +134,14 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
130134
COMMAND "${_Python3_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${_BUNDLE_SEARCH_DIRECTORY_}/${_BUNDLE_ARCHIVE_ABSOLUTE_PATH_}" "${NBL_RESOURCES_LIST_FILE}" "${_NAMESPACE_}" "${NBL_BS_HEADER_FILENAME}"
131135
COMMENT "Generating built-in resources"
132136
DEPENDS ${NBL_DEPENDENCY_FILES}
133-
VERBATIM
137+
VERBATIM
134138
)
135139

136140
add_library(${_TARGET_NAME_} ${_LIB_TYPE_}
137141
"${NBL_BUILTIN_RESOURCES_HEADER}"
138142
"${NBL_BUILTIN_RESOURCE_DATA_SOURCE}"
143+
"${_OUTPUT_SOURCE_DIRECTORY_}/CArchive.cpp"
144+
"${_OUTPUT_HEADER_DIRECTORY_}/CArchive.h"
139145
)
140146

141147
if(_LIB_TYPE_ STREQUAL SHARED)
@@ -144,8 +150,14 @@ function(ADD_CUSTOM_BUILTIN_RESOURCES _TARGET_NAME_ _BUNDLE_NAME_ _BUNDLE_SEARCH
144150
)
145151
endif()
146152

153+
get_target_property(_NABLA_INCLUDE_DIRECTORIES_ Nabla INCLUDE_DIRECTORIES)
154+
155+
if(NOT DEFINED _NABLA_INCLUDE_DIRECTORIES_) # TODO, validate by populating generator expressions if any and checking whether a path to the BuildConfigOptions.h exists per config
156+
message(ERROR "_NABLA_INCLUDE_DIRECTORIES_ has been not found. You are required to define _NABLA_INCLUDE_DIRECTORIES_ containing at least include search directory path to BuildConfigOptions.h")
157+
endif()
158+
147159
target_include_directories(${_TARGET_NAME_} PUBLIC
148-
"${NBL_ROOT_PATH}/include"
160+
"${_NABLA_INCLUDE_DIRECTORIES_}"
149161
"${_OUTPUT_HEADER_DIRECTORY_}"
150162
)
151163
set_target_properties(${_TARGET_NAME_} PROPERTIES CXX_STANDARD 20)

0 commit comments

Comments
 (0)