Skip to content

Commit 226530d

Browse files
committed
Fix compile errors, embed Nabla builtin resources into static library with correct MSVC runtime and make sure it compiles itself. Correct python scripts and have proper dependency chain. Move get_resource template declaration to nbl/string/StringLiteral.h header. NOTE: I have many nbl::system::DynamicLibraryFunctionPointer errors while compiling Nabla, it seems like they used to be there recently, maybe I need to pull master or something
1 parent 9637092 commit 226530d

File tree

9 files changed

+44
-27
lines changed

9 files changed

+44
-27
lines changed

include/nbl/builtin/common.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414
namespace nbl::builtin
1515
{
1616

17-
// if you attempt to use this without `NBL_EMBED_BUILTIN_RESOURCES_` CMake option, you will get loads of undefined references
18-
template<nbl::core::StringLiteral Path>
19-
const std::pair<const uint8_t*,size_t> get_resource();
20-
2117
// if you attempt to use this without `NBL_EMBED_BUILTIN_RESOURCES_` CMake option, this will always return `{nullptr,0ull}`
2218
std::pair<const uint8_t*,size_t> get_resource_runtime(const std::string&);
2319

include/nbl/core/declarations.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
#include "nbl/core/parallel/unlock_guard.h"
6161
// string
6262
#include "nbl/core/string/stringutil.h"
63-
#include "nbl/core/string/UniqueStringLiteralType.h"
63+
#include "nbl/core/string/StringLiteral.h"
6464
// other useful things
6565
#include "nbl/core/SingleEventHandler.h"
6666
#include "nbl/core/EventDeferredHandler.h"

include/nbl/core/string/StringLiteral.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,12 @@ struct StringLiteral
2222

2323
// for compatibility's sake
2424
#define NBL_CORE_UNIQUE_STRING_LITERAL_TYPE(STRING_LITERAL) nbl::core::StringLiteral(STRING_LITERAL)
25+
26+
namespace nbl::builtin
27+
{
28+
// if you attempt to use this without `NBL_EMBED_BUILTIN_RESOURCES_` CMake option, you will get loads of undefined references
29+
template<nbl::core::StringLiteral Path>
30+
const std::pair<const uint8_t*, size_t> get_resource();
31+
}
32+
33+
#endif // _NBL_CORE_STRING_LITERAL_H_INCLUDED_

include/nbl/system/ISystem.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
#include "nbl/system/ICancellableAsyncQueueDispatcher.h"
1313
#include "nbl/system/IFileArchive.h"
14-
14+
#include "nbl/core/string/StringLiteral.h"
1515

1616
namespace nbl::system
1717
{
@@ -112,14 +112,14 @@ class NBL_API2 ISystem : public core::IReferenceCounted
112112
};
113113

114114
//! Compile time resource ID
115-
template<nbl::core::StringLiteral Path>
115+
template<typename StringLiteralPath>
116116
inline core::smart_refctd_ptr<const IFile> loadBuiltinData() const
117117
{
118118
#ifdef _NBL_EMBED_BUILTIN_RESOURCES_
119-
return impl_loadEmbeddedBuiltinData(Path::value,nbl::builtin::get_resource<Path>());
119+
return impl_loadEmbeddedBuiltinData(StringLiteralPath::value,nbl::builtin::get_resource<StringLiteralPath>());
120120
#else
121121
future_t<core::smart_refctd_ptr<IFile>> future;
122-
createFile(future,Path::value,core::bitflag(IFileBase::ECF_READ)|IFileBase::ECF_MAPPABLE);
122+
createFile(future, StringLiteralPath::value,core::bitflag(IFileBase::ECF_READ)|IFileBase::ECF_MAPPABLE);
123123
return future.get();
124124
#endif
125125
}

src/nbl/CMakeLists.txt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -385,10 +385,6 @@ if(MSVC)
385385
list(APPEND NABLA_SRCS_COMMON "${PROJECT_SOURCE_DIR}/tools/debug/VisualStudio/DynamicArrayVisualizer.natvis")
386386
endif()
387387

388-
if (NBL_EMBED_BUILTIN_RESOURCES)
389-
list(APPEND NABLA_SRCS_COMMON "${NBL_BUILTIN_RESOURCES_SOURCE}")
390-
endif()
391-
392388
set(COMMON_INCLUDE_DIRS
393389
${THIRD_PARTY_SOURCE_DIR}/glm
394390
${THIRD_PARTY_SOURCE_DIR}/renderdoc # for renderdoc api header
@@ -639,7 +635,9 @@ if(NBL_PCH)
639635
endif()
640636

641637
if(NBL_EMBED_BUILTIN_RESOURCES)
642-
add_dependencies(Nabla generateBuiltinResources)
638+
add_dependencies(Nabla nblBuiltinResourceData)
639+
target_link_libraries(Nabla PUBLIC nblBuiltinResourceData)
640+
target_include_directories(Nabla PUBLIC "${NBL_BUILTIN_RESOURCES_HEADER}")
643641
endif()
644642

645643
# extensions

src/nbl/builtin/CMakeLists.txt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -255,18 +255,33 @@ function(NBL_ADD_BUILTIN_RESOURCES)
255255
file(MAKE_DIRECTORY "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin")
256256
file(WRITE "${NBL_RESOURCES_LIST_FILE}" "${RESOURCES_ARGS}")
257257

258-
set(NBL_BUILTIN_RESOURCES_HEADER "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/builtinResources.h" PARENT_SCOPE)
259-
set(NBL_BUILTIN_RESOURCES_SOURCE "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/builtinResourceData.cpp" PARENT_SCOPE)
258+
set(NBL_BUILTIN_RESOURCES_HEADER "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/builtinResources.h")
259+
set(NBL_BUILTIN_RESOURCE_DATA_SOURCE "${NBL_ROOT_PATH_BINARY}/include/nbl/builtin/builtinResourceData.cpp")
260+
261+
set(_NBL_SOURCES_
262+
"${NBL_BUILTIN_RESOURCES_HEADER}"
263+
"${NBL_BUILTIN_RESOURCE_DATA_SOURCE}"
264+
)
260265

261266
add_custom_command(
262-
OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCES_SOURCE}"
267+
OUTPUT "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}"
263268
COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_HEADER_GEN_PY}" "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}"
264-
COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCES_SOURCE}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}"
269+
COMMAND "${PYTHON_EXECUTABLE}" "${NBL_BUILTIN_DATA_GEN_PY}" "${NBL_BUILTIN_RESOURCE_DATA_SOURCE}" "${NBL_ROOT_PATH}/include" "${NBL_RESOURCES_LIST_FILE}"
265270
COMMENT "Generating built-in resources"
266271
DEPENDS ${NBL_DEPENDENCY_FILES}
267272
VERBATIM
268273
)
269274

270-
add_custom_target(generateBuiltinResources DEPENDS "${NBL_BUILTIN_RESOURCES_HEADER}" "${NBL_BUILTIN_RESOURCES_SOURCE}")
275+
add_library(nblBuiltinResourceData STATIC
276+
${_NBL_SOURCES_}
277+
)
278+
279+
target_include_directories(nblBuiltinResourceData PUBLIC "${NBL_ROOT_PATH}/include")
280+
281+
if(NBL_DYNAMIC_MSVC_RUNTIME)
282+
set_property(TARGET nblBuiltinResourceData PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
283+
else()
284+
set_property(TARGET nblBuiltinResourceData PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
285+
endif()
271286
endfunction()
272287

src/nbl/builtin/builtinDataGen.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,15 @@
2929
outp.write("#include <string>\n")
3030
outp.write("#include <unordered_map>\n")
3131
outp.write("#include <utility>\n")
32-
outp.write("#include <nbl/core/string/UniqueStringLiteralType.h>\n")
33-
outp.write("#include <nbl/builtin/common.h>\n")
32+
outp.write("#include <nbl/core/string/StringLiteral.h>\n")
3433
outp.write("using namespace nbl;\n")
3534
outp.write("using namespace nbl::builtin;\n\n")
3635
outp.write("namespace nbl {\n")
3736
outp.write("\tnamespace builtin {\n\n")
3837

3938
# writing binary data of all files in a loop
4039
for x in resourcePaths:
41-
outp.write('\n\t\ttemplate<> const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>()' % x)
40+
outp.write('\n\t\ttemplate<> const std::pair<const uint8_t*, size_t> get_resource<typename NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>()' % x)
4241
outp.write('\n\t\t{')
4342
outp.write('\n\t\t\tstatic const uint8_t data[] = {\n\t\t\t')
4443
try:
@@ -61,7 +60,7 @@
6160
outp.write('\n\t\t\t};')
6261
outp.write('\n\t\t\treturn { data, sizeof(data) };')
6362
outp.write('\n\t\t}')
64-
outp.write('\n\t\ttemplate const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();\n\n\n'%x)
63+
outp.write('\n\t\ttemplate const std::pair<const uint8_t*, size_t> get_resource<typename NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();\n\n\n'%x)
6564

6665

6766
outp.write("\t\tstd::pair<const uint8_t*, size_t> get_resource_runtime(const std::string& filename) {\n")
@@ -76,7 +75,7 @@
7675
outp.write("\t\t\tswitch (resource->second) \n\t\t\t{\n")
7776
counter = 1
7877
for x in resourcePaths:
79-
outp.write("\t\t\t\tcase %d:\n\t\t\t\t\treturn get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE(\"%s\")>();\n" % (counter,x))
78+
outp.write("\t\t\t\tcase %d:\n\t\t\t\t\treturn get_resource<typename NBL_CORE_UNIQUE_STRING_LITERAL_TYPE(\"%s\")>();\n" % (counter,x))
8079
counter+= 1
8180

8281
outp.write("\t\t\t\tdefault:\n")

src/nbl/builtin/builtinHeaderGen.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@
2929
outp.write("#include <cstdint>\n")
3030
outp.write("#include <string>\n")
3131
outp.write("#include <unordered_map>\n")
32-
outp.write("#include <utility>\n#include <nbl/core/string/UniqueStringLiteralType.h>\n#include <nbl/builtin/common.h>\n")
32+
outp.write("#include <utility>\n#include <nbl/core/string/StringLiteral.h>\n")
3333
outp.write("namespace nbl { \n\tnamespace builtin { \n")
3434

3535
#Iterating through input list
3636
for x in resourcePaths:
37-
outp.write('\n\t\textern template const std::pair<const uint8_t*, size_t> get_resource<NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % x)
37+
outp.write('\n\t\textern template const std::pair<const uint8_t*, size_t> get_resource<typename NBL_CORE_UNIQUE_STRING_LITERAL_TYPE("%s")>();' % x)
3838

3939
outp.write("\n\t}\n}")
4040
outp.write("\n#endif")

src/nbl/video/IOpenGL_FunctionTable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef __NBL_I_OPEN_GL_FUNCTION_TABLE_H_INCLUDED__
22
#define __NBL_I_OPEN_GL_FUNCTION_TABLE_H_INCLUDED__
33

4-
#include "nbl/core/string/UniqueStringLiteralType.h"
4+
#include "nbl/core/string/StringLiteral.h"
55

66
#include <atomic>
77

0 commit comments

Comments
 (0)