Skip to content

Commit 4e71c2b

Browse files
Kbz-8SirLynix
andauthored
adding C bindings for FilesystemModuleResolver (#44)
* adding serialization bindings to the CNZSL API * Update Serializer.cpp * Update Serializer.cpp * adding C bindings for FilesystemModuleResolver * fixing naming style --------- Co-authored-by: Jérôme Leclercq <lynix680@gmail.com>
1 parent ac9ac60 commit 4e71c2b

File tree

6 files changed

+174
-0
lines changed

6 files changed

+174
-0
lines changed

include/CNZSL/CNZSL.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
#ifndef CNZSL_CNZSL_H
1010
#define CNZSL_CNZSL_H
1111

12+
#include <CNZSL/FilesystemModuleResolver.h>
1213
#include <CNZSL/GlslWriter.h>
1314
#include <CNZSL/LangWriter.h>
1415
#include <CNZSL/Module.h>
1516
#include <CNZSL/Parser.h>
17+
#include <CNZSL/Serializer.h>
1618
#include <CNZSL/SpirvWriter.h>
1719

1820
#endif /* CNZSL_CNZSL_H */
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
Copyright (C) 2024 kbz_8 ( contact@kbz8.me )
3+
This file is part of the "Nazara Shading Language - C Binding" project
4+
For conditions of distribution and use, see copyright notice in Config.hpp
5+
*/
6+
7+
#pragma once
8+
9+
#ifndef CNZSL_FILESYSTEM_MODULE_RESOLVER_H
10+
#define CNZSL_FILESYSTEM_MODULE_RESOLVER_H
11+
12+
#include <CNZSL/Config.h>
13+
#include <CNZSL/Module.h>
14+
15+
#include <stddef.h>
16+
17+
#ifdef __cplusplus
18+
extern "C"
19+
{
20+
#endif
21+
22+
typedef struct nzslFilesystemModuleResolver nzslFilesystemModuleResolver;
23+
24+
CNZSL_API nzslFilesystemModuleResolver* nzslFilesystemModuleResolverCreate(void);
25+
CNZSL_API void nzslFilesystemModuleResolverDestroy(nzslFilesystemModuleResolver* resolverPtr);
26+
CNZSL_API const char* nzslFilesystemModuleResolverGetLastError(const nzslFilesystemModuleResolver* resolverPtr);
27+
28+
CNZSL_API void nzslFilesystemModuleResolverRegisterModule(nzslFilesystemModuleResolver* resolverPtr, const nzslModule* module);
29+
CNZSL_API void nzslFilesystemModuleResolverRegisterModuleFromFile(nzslFilesystemModuleResolver* resolverPtr, const char* sourcePath, size_t sourcePathLen);
30+
CNZSL_API void nzslFilesystemModuleResolverRegisterModuleFromSource(nzslFilesystemModuleResolver* resolverPtr, const char* source, size_t sourceLen);
31+
CNZSL_API void nzslFilesystemModuleResolverRegisterModuleDirectory(nzslFilesystemModuleResolver* resolverPtr, const char* sourcePath, size_t sourcePathLen);
32+
33+
#ifdef __cplusplus
34+
}
35+
#endif
36+
37+
#endif

include/CNZSL/WriterStates.h

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

1212
#include <CNZSL/Config.h>
1313
#include <CNZSL/DebugLevel.h>
14+
#include <CNZSL/FilesystemModuleResolver.h>
1415
#include <stdint.h>
1516

1617
#ifdef __cplusplus
@@ -31,6 +32,8 @@ CNZSL_API void nzslWriterStatesEnableOptimization(nzslWriterStates* statesPtr, n
3132
CNZSL_API void nzslWriterStatesEnableSanitization(nzslWriterStates* statesPtr, nzslBool enable);
3233
CNZSL_API void nzslWriterStatesSetDebugLevel(nzslWriterStates* statesPtr, nzslDebugLevel debugLevel);
3334

35+
CNZSL_API void nzslWriterStatesSetModuleResolver_Filesystem(nzslWriterStates* statesPtr, const nzslFilesystemModuleResolver* resolverPtr);
36+
3437
CNZSL_API void nzslWriterStatesSetOption_bool(nzslWriterStates* statesPtr, nzslOptionHash optionHash, nzslBool value);
3538
CNZSL_API void nzslWriterStatesSetOption_f32(nzslWriterStates* statesPtr, nzslOptionHash optionHash, nzslFloat32 value);
3639
CNZSL_API void nzslWriterStatesSetOption_i32(nzslWriterStates* statesPtr, nzslOptionHash optionHash, int32_t value);
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright (C) 2024 kbz_8 ( contact@kbz8.me )
2+
// This file is part of the "Nazara Shading Language - C Binding" project
3+
// For conditions of distribution and use, see copyright notice in Config.hpp
4+
5+
#include <CNZSL/FilesystemModuleResolver.h>
6+
#include <CNZSL/Structs/FilesystemModuleResolver.hpp>
7+
#include <CNZSL/Structs/Module.hpp>
8+
#include <fmt/format.h>
9+
#include <string_view>
10+
#include <filesystem>
11+
#include <memory>
12+
#include <cassert>
13+
14+
extern "C"
15+
{
16+
CNZSL_API nzslFilesystemModuleResolver* nzslFilesystemModuleResolverCreate(void)
17+
{
18+
nzslFilesystemModuleResolver* resolver = new nzslFilesystemModuleResolver;
19+
resolver->resolver = std::make_shared<nzsl::FilesystemModuleResolver>();
20+
return resolver;
21+
}
22+
23+
CNZSL_API void nzslFilesystemModuleResolverDestroy(nzslFilesystemModuleResolver* resolverPtr)
24+
{
25+
delete resolverPtr;
26+
}
27+
28+
CNZSL_API void nzslFilesystemModuleResolverRegisterModule(nzslFilesystemModuleResolver* resolverPtr, const nzslModule* module)
29+
{
30+
assert(resolverPtr);
31+
32+
try
33+
{
34+
resolverPtr->resolver->RegisterModule(module->module);
35+
}
36+
catch(const std::exception& e)
37+
{
38+
resolverPtr->lastError = fmt::format("nzslFilesystemModuleResolverRegisterModule failed: {}", e.what());
39+
}
40+
catch(...)
41+
{
42+
resolverPtr->lastError = "nzslFilesystemModuleResolverRegisterModule failed with unknown error";
43+
}
44+
}
45+
46+
CNZSL_API void nzslFilesystemModuleResolverRegisterModuleFromFile(nzslFilesystemModuleResolver* resolverPtr, const char* sourcePath, size_t sourcePathLen)
47+
{
48+
assert(resolverPtr);
49+
50+
try
51+
{
52+
resolverPtr->resolver->RegisterModule(std::filesystem::path{ sourcePath, sourcePath + sourcePathLen });
53+
}
54+
catch(const std::exception& e)
55+
{
56+
resolverPtr->lastError = fmt::format("nzslFilesystemModuleResolverRegisterModuleFromFile failed: {}", e.what());
57+
}
58+
catch(...)
59+
{
60+
resolverPtr->lastError = "nzslFilesystemModuleResolverRegisterModuleFromFile failed with unknown error";
61+
}
62+
}
63+
64+
CNZSL_API void nzslFilesystemModuleResolverRegisterModuleFromSource(nzslFilesystemModuleResolver* resolverPtr, const char* source, size_t sourceLen)
65+
{
66+
assert(resolverPtr);
67+
68+
try
69+
{
70+
resolverPtr->resolver->RegisterModule(std::string_view{ source, sourceLen });
71+
}
72+
catch(const std::exception& e)
73+
{
74+
resolverPtr->lastError = fmt::format("nzslFilesystemModuleResolverRegisterModuleFromSource failed: {}", e.what());
75+
}
76+
catch(...)
77+
{
78+
resolverPtr->lastError = "nzslFilesystemModuleResolverRegisterModuleFromSource failed with unknown error";
79+
}
80+
}
81+
82+
CNZSL_API void nzslFilesystemModuleResolverRegisterModuleDirectory(nzslFilesystemModuleResolver* resolverPtr, const char* sourcePath, size_t sourcePathLen)
83+
{
84+
assert(resolverPtr);
85+
86+
try
87+
{
88+
resolverPtr->resolver->RegisterModuleDirectory(std::filesystem::path{ sourcePath, sourcePath + sourcePathLen });
89+
}
90+
catch(const std::exception& e)
91+
{
92+
resolverPtr->lastError = fmt::format("nzslFilesystemModuleResolverRegisterModuleDirectory failed: {}", e.what());
93+
}
94+
catch(...)
95+
{
96+
resolverPtr->lastError = "nzslFilesystemModuleResolverRegisterModuleDirectory failed with unknown error";
97+
}
98+
}
99+
100+
CNZSL_API const char* nzslFilesystemModuleResolverGetLastError(const nzslFilesystemModuleResolver* resolverPtr)
101+
{
102+
assert(resolverPtr);
103+
return resolverPtr->lastError.c_str();
104+
}
105+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (C) 2024 kbz_8 ( contact@kbz8.me )
2+
// This file is part of the "Nazara Shading Language - C Binding" project
3+
// For conditions of distribution and use, see copyright notice in Config.hpp
4+
5+
#pragma once
6+
7+
#ifndef CNZSL_STRUCTS_FILESYSTEM_MODULE_RESOLVER_HPP
8+
#define CNZSL_STRUCTS_FILESYSTEM_MODULE_RESOLVER_HPP
9+
10+
#include <NZSL/FilesystemModuleResolver.hpp>
11+
#include <string>
12+
#include <memory>
13+
14+
struct nzslFilesystemModuleResolver
15+
{
16+
std::shared_ptr<nzsl::FilesystemModuleResolver> resolver;
17+
std::string lastError;
18+
};
19+
20+
#endif

src/CNZSL/WriterStates.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
// For conditions of distribution and use, see copyright notice in Config.hpp
44

55
#include <CNZSL/WriterStates.h>
6+
#include <CNZSL/FilesystemModuleResolver.h>
67
#include <CNZSL/Structs/WriterStates.hpp>
8+
#include <CNZSL/Structs/FilesystemModuleResolver.hpp>
79
#include <NZSL/Ast/Option.hpp>
810
#include <array>
911

@@ -46,6 +48,11 @@ extern "C"
4648
statesPtr->debugLevel = s_debugLevels[debugLevel];
4749
}
4850

51+
CNZSL_API void nzslWriterStatesSetModuleResolver_Filesystem(nzslWriterStates* statesPtr, const nzslFilesystemModuleResolver* resolverPtr)
52+
{
53+
statesPtr->shaderModuleResolver = resolverPtr->resolver;
54+
}
55+
4956
CNZSL_API void nzslWriterStatesSetOption_bool(nzslWriterStates* statesPtr, nzslOptionHash optionHash, nzslBool value)
5057
{
5158
statesPtr->optionValues[optionHash] = (value != 0);

0 commit comments

Comments
 (0)