ae2f_docs
Loading...
Searching...
No Matches
compiler.auto.h
1#undef __ae2f_MACRO_GENERATED
2#define __ae2f_MACRO_GENERATED 1
3#ifndef aclspv_compiler_auto_h
4#define aclspv_compiler_auto_h
5
6#include <ae2f/Macro.h>
7#undef __ae2f_MACRO_GENERATED
8#define __ae2f_MACRO_GENERATED 1
9#undef ON
10#undef OFF
11
12#include <aclspv/obj.h>
13#undef __ae2f_MACRO_GENERATED
14#define __ae2f_MACRO_GENERATED 1
15
16#undef ON
17#undef OFF
18
19#include <clang/CodeGen/CodeGenAction.h>
20#undef __ae2f_MACRO_GENERATED
21#define __ae2f_MACRO_GENERATED 1
22#include <clang/Lex/PreprocessorOptions.h>
23#undef __ae2f_MACRO_GENERATED
24#define __ae2f_MACRO_GENERATED 1
25#include <clang/Frontend/CompilerInvocation.h>
26#undef __ae2f_MACRO_GENERATED
27#define __ae2f_MACRO_GENERATED 1
28#include <clang/Frontend/CompilerInstance.h>
29#undef __ae2f_MACRO_GENERATED
30#define __ae2f_MACRO_GENERATED 1
31
32#include <string>
33#undef __ae2f_MACRO_GENERATED
34#define __ae2f_MACRO_GENERATED 1
35
36#define _aclspv_compile_imp(
37 /** tparam */
38 C_vfs,C_fm,C_diagptr,C_action,
39
40 /** param */
41 /* ,size_t& ae2f_restrict */ t_sz0,
42 /* clang::CompilerInstance& */ t_cc,
43 /* clang::DiagnosticOptions& */ t_diag_opts,
44 /* h_aclspv_obj_t& */ ret,
45 /* std::unique_ptr<llvm::LLVMContext>& */ rc_ctx,
46 /* const structCXUnsavedFile* ae2f_restrict */ rd_unsaved,
47 /* const size_t */ c_unsaved_len,
48 /* constchar* ae2f_restrictconst* ae2f_restrict const */ rd_argv,
49 /* const size_t */ c_argc \
50) \
51{
52 llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem>
53 C_vfs(new llvm::vfs::InMemoryFileSystem());
54
55 llvm::IntrusiveRefCntPtr<clang::FileManager> C_fm(
56 new clang::FileManager(clang::FileSystemOptions(), C_vfs));
57
58 (t_cc).setFileManager((C_fm.get()));
59
60 llvm::IntrusiveRefCntPtr<clang::DiagnosticsEngine> C_diagptr
61 = (t_cc).createDiagnostics(*(C_vfs).get(), t_diag_opts, nullptr, true);
62
63 (t_cc).setDiagnostics(C_diagptr.get());
64
65 clang::CompilerInvocation::CreateFromArgs(
66 (t_cc).getInvocation()
67 , clang::ArrayRef<const char*>((rd_argv), (rd_argv) + (c_argc))
68 , (t_cc).getDiagnostics()
69 );
70
71 (t_cc).getFrontendOpts().Inputs.clear();
72 for((t_sz0) = (c_unsaved_len); (t_sz0)--;) {
73 C_vfs.get()->addFile(
74 std::string((rd_unsaved[t_sz0]).Filename)
75 , 0, (llvm::MemoryBuffer::getMemBuffer(
76 clang::StringRef(
77 (rd_unsaved[t_sz0]).Contents
78 , (rd_unsaved[t_sz0].Length)
79 - !((rd_unsaved)[t_sz0].Contents[(rd_unsaved)[t_sz0].Length - 1])
80 )
81 ))
82 );
83 (t_cc).getFrontendOpts().Inputs.emplace_back(std::string((rd_unsaved)[t_sz0].Filename), clang::Language::OpenCL);
84 }
85
86 (t_cc).createSourceManager(*C_fm.get());
87
88 std::unique_ptr<clang::EmitLLVMAction> C_action(new clang::EmitLLVMAction(rc_ctx.get()));
89 if((t_cc).ExecuteAction(*C_action)) {
90 /** succesful */
91 (ret) = new x_aclspv_obj(
92 std::move(rc_ctx)
93 , std::move(C_action)
94 );
95 } else {
96 assert(!(ae2f_static_cast(const char*, "ExecuteAction has failed")));
97 (ret) = ae2f_NIL;
98 } \
99}
100
101#endif
102
103#undef __ae2f_MACRO_GENERATED
104
105#define __ae2f_MACRO_GENERATED 0